Personal R&D

Finances

A personal ledger and budgeting app with a Postgres-first architecture: one PostgREST instance, a static frontend, nothing else.

1/4Dashboard with account groups, net worth and asset-breakdown history

After five years as a heavy user of commercial finance apps that kept changing their own structure, I wrote down the requirements I actually had and built the tool myself. It runs on the smallest server I own and doubles as a playground for how thin a backend can get.

At a glance

  • PostgreSQL is the backend: PostgREST exposes the schema, auth is a Postgres RPC with hashed tokens and role-based permissions
  • The React/Vite frontend is static and deploys anywhere (Vercel, Cloudflare, a free-tier VM)
  • Multi-account ledger, running balances, asset-breakdown history, and yearly budgets with monthly execution tracking
  • An MCP server exposes the ledger to AI tooling for classification and analysis

Why I built it

Every finance app I used eventually redesigned its data model out from under me: categories merged, budgets became something else, exports stopped matching. I did not want features; I wanted to log transactions the same way for a decade. Having used these tools daily for years, the requirements were unusually clear, so building was cheaper than adapting again.

Architecture

The design goal was deployability. A single PostgREST process in front of PostgreSQL is the entire backend: tables, views and functions define the API, database roles enforce permissions, and login is a stored procedure that validates a hashed token and mints a JWT. There is no application server to patch or scale. The frontend is a React, Vite, TypeScript and Tailwind app that builds to static files, so it can live on Vercel or Cloudflare while the database sits on a small Oracle free-tier instance. Docker Compose brings the whole thing up locally with no configuration.

Functionally it covers accounts organised by type, a ledger with per-day running totals and export, an asset-breakdown history chart, and budgets planned yearly and executed monthly with minimum, maximum and remaining per category. The MCP server lets an assistant read balances and post transactions directly.

More projects

All projects