RA
All projects

Personal project · 2026

Ledger

Live

Personal finance tracker built around one currency reality: spend happens in bolívares, savings target USD. Auto-capture kills the data-entry friction that killed every spreadsheet before it; a chat-first MCP interface makes "log this" as fast as typing a message.

The problem

A prior finance system - a shared spreadsheet - died the way every manual-entry system dies: friction plus neglect. No aggregator covers Venezuelan bank accounts, so BNC card spend either gets typed in by hand or goes untracked. The two real jobs were narrower than "track every dollar": don't blow through the BNC card limit, and route income toward USD savings, watched monthly rather than by lifetime total.

What I built

Every transaction, card spend, bank transfer, or income, gets captured automatically the moment it happens, in whatever currency it lands in - nothing to type, nothing to remember to log. The same system talks back through chat, so checking a number or logging a one-off expense is as fast as sending a message. A live cockpit keeps the whole picture at a glance: the float, the monthly spend, the savings rate.

Key decisions
01
One engine, two front doors
The web cockpit and the MCP server both call the same API - nothing writes to the database except the shared core package. Bringing a new interface online, chat, cron, or UI, never means re-implementing the money math.
02
Idempotency over manual reconciliation
Every captured transaction is keyed to a stable ID from wherever it came from. A retry or a re-run skips the conflict instead of double-booking. The system trusts automation because double-counting is structurally impossible, not just unlikely.
03
Managed monthly, not by lifetime total
The cockpit's central number is the USD-if-paid-today float against the card limit, recomputed at the latest FX rate. A lifetime running balance invites neglect; a monthly number against a hard limit is the one that actually gets checked.
Outcome

Live and in daily use. The MCP server connects directly to Claude.ai over OAuth - no headers, no manual tokens - so transactions get logged and queried by chat. A daily digest emails anything left unreconciled; the cockpit shows the USD-if-paid-today float, the monthly spend, and the savings rate at a glance.

Stack
MCPNext.jsSupabaseHonoTypeScript
View live

Want to go deeper on Ledger?