Case · Web app · TypeScript
budget-split: shared expense tracker
A web app for a group's shared expenses without sign-up: a room behind a secret link, four ways to split, and a "who pays whom" settlement in at most n-1 transfers. A side project.
- TypeScript
- Vite
- Cloudflare Workers
- D1
- WebGL
- vitest
- fast-check
- axe
- GitHub Actions
01 · How it looks
Screenshots


02 · About
What it is and why
budget-split ("Split evenly") is a web app for tracking a group's shared expenses without sign-up. A room is created behind a 128-bit secret link, with separate view and edit links. A side project.
The back end runs on Cloudflare Workers with a D1 database, the front end is vanilla TypeScript with Vite, and the interface has kit-blob WebGL elements.
Limitations
No accounts: lose the link and you lose the right to edit.
Data in D1 is stored in plain text.
Offline edits and deletions are not queued.
What is inside
- Split an expense equally, by shares, by amounts or by percentages
- Multiple currencies with a manual rate
- "Who pays whom": at most n-1 transfers; the algorithm is greedy, so the count is not always the minimum
- Optimistic locking: of 4 simultaneous edits to one expense exactly one wins
- 60 tests (vitest in workerd, fast-check property tests), green CI, npm audit 0, axe 0 violations
- Deployed on Cloudflare Workers with D1
03 · How to run
Run it locally
git clone <repository on request> budget-split
cd budget-split
npm install
npm run dev04 · Code
The repository is private
The source is in a private repository. Message me on Telegram and I will open access.
Request the code