Skip to content

kirahowe/finances

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

383 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Finance Aggregator

A personal finance management application for aggregating transactions from multiple financial institutions, with automated categorization and spending analysis.

Features

  • 🏦 Multi-Institution Support - Connect accounts via Plaid (12,000+ institutions), plus CSV import, manual entry, and lunchflow
  • πŸ“Š Transaction Management - View, filter, sort, split, and categorize transactions
  • πŸ” Transfer Tracking - Match transfers between accounts and hide them from spending
  • 🏷️ Smart Categorization - Manual and automated transaction categorization
  • πŸ“ˆ Spending Analysis - Track spending by category and time period
  • πŸ” Secure - Encrypted secrets, user-scoped data isolation

Quick Start

See DEVELOPMENT.md for complete setup instructions.

Prerequisites

# Install required tools
brew install borkdude/brew/babashka   # Task runner + secrets management
brew install age                       # Encryption
brew install node                      # Frontend deps (npm: islands + e2e)
brew install borkdude/brew/clj-kondo   # Clojure linting (bb lint)

# Install Jabba (Java version manager)
curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash
jabba install zulu@25.0.3
jabba use zulu@25.0.3

First-Time Setup

# 1. Install frontend dependencies (islands/ + e2e/)
bb install

# 2. Configure secrets (interactive)
bb secrets keygen
bb secrets new
# Add your Plaid credentials in the editor

# 3. Start the app (server-authoritative: single backend, no separate web server)
bb dev

Access the application at http://localhost:8080.

Architecture

Backend (Clojure)

Modern functional architecture using:

  • Integrant - Component lifecycle management
  • Datalevin - Embedded Datalog database
  • Plaid API - Financial data aggregation
  • HTTP-Kit - High-performance HTTP server

See Backend README for details.

Frontend (server-authoritative)

The backend renders the UI directly β€” there is no separate frontend app:

  • hiccup2 SSR - HTML rendered on the JVM
  • Datastar - reactivity + SSE-patched fragments over the wire
  • TS islands - small esbuild-bundled widgets (Zag) for pointer/latency-heavy interactions, served from the backend
  • Playwright - real-Chromium browser checks in e2e/

See islands/README.md and e2e/README.md.

Project Structure

finance-aggregator/
β”œβ”€β”€ backend/                  # Clojure backend (SSR + Datastar, serves frontend assets)
β”‚   β”œβ”€β”€ src/                  # Source code
β”‚   β”œβ”€β”€ test/                 # Tests
β”‚   β”œβ”€β”€ env/                  # Per-environment config + dev/e2e source
β”‚   β”œβ”€β”€ resources/            # Config, secrets, public assets (CSS + built JS)
β”‚   └── README.md             # Backend documentation
β”œβ”€β”€ islands/                  # Vanilla TS islands (Zag widgets), esbuild β†’ backend assets
β”œβ”€β”€ e2e/                      # Playwright browser checks (TypeScript)
β”œβ”€β”€ doc/                      # Architecture documentation
β”‚   β”œβ”€β”€ adr/                  # Architecture Decision Records
β”‚   └── plans/                # Design notes and feature backlog
β”œβ”€β”€ scripts/                  # Development scripts (bb secrets)
β”œβ”€β”€ bb.edn                    # Babashka dev tasks (dev/build/test/lint/e2e/secrets)
β”œβ”€β”€ DEVELOPMENT.md            # Development setup guide
└── README.md                 # This file

Documentation

Getting Started

Architecture Decision Records

Implementation Guides

Development Workflow

Running the Application

# Start the app (builds + watches islands, runs the backend dev server)
bb dev

# Or drive the backend from a REPL:
bb build                      # build frontend assets first
cd backend
jabba use zulu@25.0.3
clojure -M:repl -m nrepl.cmdline
# Then: (go)

Running Tests

bb test            # backend (kaocha) + islands (vitest)
bb lint            # clj-kondo + tsc typechecks
bb e2e             # Playwright browser checks against a seeded server

Run bb tasks to list all available dev tasks.

REPL Development (Backend)

cd backend
jabba use zulu@25.0.3
clojure -M:repl -m nrepl.cmdline

Then in your REPL:

(dev)      ; Load dev environment
(go)       ; Start the system
(reset)    ; Reload and restart after code changes
(halt)     ; Stop the system

See REPL Quick Reference for more commands.

Current Status

βœ… Completed

  • Server-authoritative UI (hiccup2 SSR + Datastar + TS islands) β€” replaced the former React/Remix frontend (removed 2026-06)
  • Backend infrastructure with Integrant
  • Category management system, including a parent/child hierarchy
  • Transaction table β€” filtering, sorting, pagination, transaction splits, and resizable/hideable columns (view state persisted in the URL)
  • Transfer tracking β€” auto-matching, manual match, and a hide-transfers toggle
  • Secrets management with age encryption
  • REPL-driven development workflow
  • Plaid integration - client, encrypted credentials, data transformation, and sync orchestration & persistence (multi-item)
  • Additional providers via a provider seam (CSV import, manual entry, lunchflow)

πŸ“‹ Planned

  • Reconciliation + account sync hardening (production push)
  • User authentication and multi-user support
  • Automated transaction categorization
  • Spending analytics dashboard
  • Budget tracking

Technology Stack

Backend:

  • Clojure 1.12
  • Integrant (system management)
  • Datalevin (database)
  • HTTP-Kit (web server)
  • Reitit (routing)
  • Plaid Java SDK (financial data)

Frontend (server-authoritative):

  • hiccup2 (JVM-side HTML rendering)
  • Datastar (reactivity + SSE)
  • TypeScript + esbuild + Zag (islands)
  • Playwright (e2e browser checks)

Infrastructure:

  • Babashka (dev tasks + scripting)
  • age (encryption)
  • Jabba (Java version management)
  • npm (frontend deps: islands + e2e)

Contributing

This is a personal project, but the architecture and patterns may be useful for reference.

License

Private project

About

An aggregator to track my transactions across many institutions

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages