Skip to content
02 / 02§ Case study

Pocket Ledger

A budgeting PWA with per-category monthly limits, 18-currency support, and a command palette — installable, themed, and fast enough to log an expense before you put your phone away.

Year

2025

Role

Design & build

Stack

Next.js · TypeScript · Prisma · Auth.js · Recharts · shadcn/ui

Fig. 01Pocket Ledger interface

Pocket Ledger interface

01 — Problem

Expense trackers die from friction. If logging a coffee takes six taps and two dropdowns, you stop logging coffees, and a ledger with gaps is worse than no ledger at all. Everything here was built against one constraint: entry has to be quicker than the excuse not to do it.

02 — Build

Keyboard-first, then touch-first

A Cmd+K command palette jumps to any route or starts a new entry without touching the mouse. On mobile that same surface becomes a sheet. The PWA installs to the home screen so it opens like an app instead of a tab.

Budgets you can read at a glance

Per-category monthly limits render as live progress bars with explicit under and over states. Colour is doing secondary work — the label and the number carry the meaning, so it still reads correctly in greyscale or with a colour-vision deficiency.

Multi-currency that respects local convention

18 currencies, each formatted the way its own region actually writes money — lakh grouping for INR and PKR, comma-decimals for EUR, RUB, and BRL — rather than bolting a different symbol onto one Western format. Sixteen preset categories cover entry without turning it into a taxonomy exercise.

Analytics, and an exit door

Recharts covers monthly trends and category breakdowns; one-click CSV export means the data is never hostage to the app. Auth.js handles Google and GitHub sign-in, with Prisma over Postgres underneath.

Fig. 02Pocket Ledger — additional view

Pocket Ledger — additional view

03 — Decisions & tradeoffs

Per-locale formatting over one Western default
An Indian user reading ₹37,276.07 grouped in thousands knows immediately the app was not built for them. Regional grouping is a small amount of work that decides whether the numbers feel native.
CSV export from day one
A ledger people cannot get their data out of is a ledger they will not commit to. The exit door is what makes the app worth entering.
PWA over a React Native build
One codebase, instant updates, no store review. Gives up native widgets and background sync — neither of which this app needs.

Command palette

Jump to a section, open a case study, or change the theme