Overview
A household ledger that gets its data from the artefacts you already have — bank statement exports and photographed receipts — rather than from typing every transaction in. Statements are parsed by a registry of per-bank strategies; receipts go through OCR. The interesting constraint is that neither is trusted: automation only ever writes a transaction as DRAFT, and only a human action in the UI promotes one to ACTIVE. A parser that misreads a column cannot quietly corrupt the ledger. Imports carry a hash so re-importing the same statement is idempotent rather than duplicating months of history. It is a pnpm monorepo — a Next.js web app, an Expo mobile app and Python serverless functions — with every domain type defined once in a shared package that all three consume.