Web app

Common Expense Tracker

Split shared monthly costs between any number of people and see who owes whom, with no account.

Common Expense Tracker screenshot

What it does

  1. Who owes whom, settled. Add each month's shared costs and it works out the transfers that square everyone up.
  2. 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.
  3. 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.
  4. Hand someone one file. The whole app builds into a single 202 KB HTML file. Save it anywhere and double-click it, no install.
  5. 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.
  6. Your data, portable. Export any set of months as JSON or CSV.
  7. 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
  1. Open source, and it can sit inside another page

    The source is on GitHub under the MIT license.

  2. 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.

  3. 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.