Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

466 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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages