// back to projects
Project · Personal finance, engineeredLIVE

Ledgr

Ledgr is a personal finance app I built and run on my own. It takes the spreadsheet you already keep and turns it into a dashboard: budgets, investments, trips and savings goals in one place.

  • React
  • TypeScript
  • Vite
  • Mantine
  • TanStack Query
  • Zustand

Why it exists

Money apps usually want you to start over. New account, empty history, and the tracker you kept for a year sits in a folder doing nothing. That history is the useful part: it's where your real spending lives. So the import came first, before any of the pretty screens. Give Ledgr the .xlsx you already have and you get a year of transactions back — read, formatted and sorted into categories, in about eight seconds.

How it’s built

01

The import is the front door

One upload, twelve sheets, 1,284 rows. Ledgr reads them, cleans up the mess every hand-kept sheet has, and puts each transaction in a category. You watch the rows land as it goes.

02

Features own their code

Transactions, budgets, goals, categories, dashboard, reports, settings, auth: each one is a folder with its own components, hooks, API client, types and a single index.ts that says what the rest of the app may use. Nothing reaches into another feature's internals. When a feature needs to go, the folder goes with it.

03

Server state and UI state are different things

TanStack Query holds anything that comes from the API, and creating a transaction invalidates budgets and the dashboard along with it, so the numbers agree. Zustand keeps the small local stuff, like transaction filters, and remembers them between visits. Mantine covers the components, so my time went into how things behave.

04

Shaped around how people actually get paid

Your month can start on the 25th. Currency, date format, categories, icons and colours are yours to set. Budgets turn amber at 80% and tell you the moment you go over — the alert is the point, not the chart.

What it does

  • Spreadsheet import: 1,284 rows across 12 sheets, parsed and categorised
  • Budget caps with live progress, and an alert the moment you overspend
  • Multi-currency, custom paydays, your own categories
  • Feature-based React architecture, Google sign-in, encrypted accounts

Where it stands

  • Live at ledgr.knzau.dev, with Google sign-in and encrypted accounts.
  • Budgets, investments, trips and savings goals are separate features in one codebase.
  • A year of spreadsheet history comes across in seconds. Nobody retypes anything.