Case study · Backend systems · 2026

Ledgerly

A private ledger that turns raw bank text into structured transaction records.

Next.jsHonoPostgreSQLPrismaBetter Auth
Ledgerly sign-in page describing private transaction extraction and tenant isolation

01 / Problem

What needed to be true.

Bank exports and pasted transaction messages are inconsistent, but financial records need repeatable parsing and strict ownership boundaries.

02 / Decisions

The system, not just the screen.

01

Determinism before AI

A rule-based parser handles raw text and CSV inputs so the same transaction produces the same structured record.

02

Isolation at more than one layer

Application scoping is reinforced with PostgreSQL row-level security, reducing reliance on a single user filter.

03

Send less to the model

Optional insights work from aggregate summaries rather than raw transaction rows, keeping the AI boundary narrow and explicit.

03 / Flow

From input to useful output.

  • Raw text / CSV
  • Deterministic parser
  • Validated record
  • Tenant-scoped Postgres
  • Rules & analytics
  • Aggregate insights

04 / Reflection

What I carry forward.

Ledgerly sharpened a principle I now reuse: deterministic systems should own the facts, while AI should operate on a deliberately limited surface.

Back to selected work