Web app
Common Expense Tracker
Split shared monthly costs between any number of people and see who owes whom, with no account.

What it does
- Who owes whom, settled. Add each month's shared costs and it works out the transfers that square everyone up.
- Share one tracker live. Two people can edit the same tracker from different devices. A change on a phone shows up on the other laptop in well under a second.
- The server can't read your data. Every record is encrypted in the browser with a 256-bit key, wrapped by a key derived from your password (PBKDF2-SHA256, 600,000 iterations). The server never sees either.
- Hand someone one file. The whole app builds into a single 202 KB HTML file. Save it anywhere and double-click it, no install.
- Money that adds up. Amounts are stored as whole cents, never floats. Splitting 10,00 three ways gives 3,34 / 3,33 / 3,33, and "42,50" and "240.924,00" both parse correctly.
- Your data, portable. Export any set of months as JSON or CSV.
- Tested hard. 125 unit tests, a two-client protocol smoke test, and a UI test that drives two headless Chrome profiles as two devices.
How it was built
I built it on 30 August 2026 from a written PRD with numbered acceptance scenarios, in one long day: the local-only version first, then export and the single-file build, then end-to-end encrypted sharing. It went live on its own domain on 26 September.
Decisions that mattered
- The server never sees your data. Records are encrypted in the browser before they leave it, with a key wrapped by your password, so the sharing server stores only ciphertext.
- Money in whole cents. No floats anywhere. Splitting 10,00 three ways gives 3,34 / 3,33 / 3,33.
- One file you can hand to someone. The build inlines everything into one HTML file that works from a double-click, with no install.
- Invite-only sharing. Creating a shared tracker needs an invite code, and each one is capped at 2 MB, so a stranger can't fill the server.
How it's tested
125 unit tests, a protocol smoke test with two clients, and a UI check that drives two headless Chrome profiles as two devices editing the same tracker.
Where it stands
Live at expenses.thebarbellengineer.com.
Made with
- Vanilla JS
- Web Crypto
- Cloudflare Workers
- Durable Objects
- WebSockets
Latest changes
Full changelog-
Open source, and it can sit inside another page
The source is on GitHub under the MIT license.
-
Live at expenses.thebarbellengineer.com
The page and the sharing server run together on one Cloudflare Worker on their own domain, so shared trackers work without any setup.
-
Share one tracker live, end-to-end encrypted
Share a tracker with a link and a password. Two people can edit it from different devices, and each change reaches the other one over a WebSocket in well under a second.