independently built / 2026
finzo
Local-first personal finance, powered by the AI subscription you already have.
context
Every personal finance app wants your bank login and your statements on their server. I wanted the dashboard without the trade. The AI subscription I already pay for can read a PDF statement perfectly well — so the app never needs a backend of its own.
what i built
Upload a PDF or CSV statement and Finzo shells out to the local `claude` or `codex` CLI in headless mode with a strict JSON extraction prompt. The response is Zod-validated and written to SQLite atomically, so bad model output can never corrupt the store. Duplicate files are rejected and overlapping statements deduplicate transaction-by-transaction.
The dashboard: balance with sparkline, month-over-month spend and income, category donut against budgets, cash-flow and daily-spend charts, detected recurring charges projected onto a bills calendar, and a grade against the classic money rules (50/30/20, rent under 30%, 3–6 month cushion, 100 − age in equity).
A review deck for transactions the engine was unsure about — every choice becomes a merchant rule and back-fills past transactions. Plus an Indian CAS importer that matches each mutual fund to its AMFI scheme code and reprices units from the free daily NAV feed.
engineering choices
Engines are pluggable behind one interface: claude, codex, and a fixture engine that makes zero network calls. The fixture engine means the whole flow — and the test suite — runs without an AI subscription.
Privacy is a countable property, not a promise. There are exactly three outbound paths in the codebase: the AI CLI you chose, the public AMFI NAV mirror (scheme names only), and Google Fonts at build time. No analytics, no telemetry, no auth.
outcome
Open sourced under MIT. Unit tests cover the schema, store, summary math, and rules — none of them need an AI to run.