Thriftledger: bank accounts, budgets and spending reports for a household

Thriftledger: bank accounts, budgets and spending reports for a household

00 Markdown

Bank accounts, CSV import that skips duplicates, rules that categorize, monthly budgets and spending reports.

Run it yourself

Get the finished app on your own machine, ready to change however you like.

VS Code Command Palette⇧⌘P
thriftledger -scaffold=elementscode/demo-thriftledger

Press 'Enter' to confirm your input or 'Escape' to cancel

Press ⇧⌘P in VS Code and choose Elements: New App. Then paste this line and press Enter.

New to Elements? Install Elements first.

The code

How it's built

Thriftledger needed a ledger that stays current in every open tab, a CSV importer that knows what it has already seen, rules that sort spending, and budgets that move as transactions arrive. Each of those is a part of Elements, so the agent spent its 24 minutes on the money itself.

What Elements gave the app

  • A live ledger. Accounts, categories, rules, budgets, imports and transactions are LiveTables, each opened for the signed-in household. A trigger carries every transaction write to the open pages, so the dashboard's budgets move the moment an import lands in another tab.
  • CSV import as a function call. The import page previews the file in the browser, then sends it to an @rpc that parses the rows on the server and inserts them in one transaction. Each row carries a fingerprint, so a re-import skips what is already there, and the column mapping is saved for that bank's next export.
  • Rules that categorize. Every imported row takes the longest matching rule, and one rpc runs the rules over everything still uncategorized in a single SQL update. Edits go through the transactions LiveTable, which checks that a split's parts add up to the whole.
  • Reports from the data. The reports page draws its spending charts as SVG from the ledger's own rows.
  • Data from SQL files. Two migrations define the ledger and seed one household with three accounts, categories, rules, budgets and six months of activity ending today.

What the project server gave the agent

The project server runs alongside the agent and answers as soon as a file is saved: it type-checks the templates, TypeScript and SQL, applies migrations and reruns the tests, so every question came back right away and the agent kept building.

What shipped

The app type-checks with zero errors and all 28 tests pass. Every page works on desktop and phone, and live updates arrive across tabs, such as a budget that moves when an import lands.

Comments· 0

Join the community

Get a weekly digest of new posts.

Sign up