
IOU
Group-trip expenses and rounds, settled without the spreadsheet.
- Year
- 2025
- Role
- Design and engineering
- Stack
- TypeScript · Expo · Express · Supabase
The problem
Splitting costs on a group trip is a solved problem that keeps being solved badly. Most tools handle the arithmetic and ignore the social part: nobody wants to be the person chasing four friends for £11.
The approach
A shared ledger for trips and rounds, with the settlement maths done continuously rather than at the end.
- Full stack across mobile and backend — Expo client, Express API, Supabase.
- Rounds modelled as first-class objects, not just another expense category.
What was hard
Offline and concurrent edits. Two people adding expenses on bad signal in the same pub is the normal case, not the edge case.
What I'd change
Rounds as a first-class object is the decision I am least sure about. It models the social reality well and it doubles the surface area of everything that touches the ledger — settlement, permissions, the edit paths. If I rebuilt it I would start with expenses that can be grouped and see whether rounds ever needed to be their own thing, rather than assuming they did.
The offline story is the part that would keep me up. Two people adding expenses on bad signal in the same pub is the normal case, and last-write-wins is only adequate because the amounts are small enough that nobody audits. That is a reason it has not bitten, not a reason it is correct.
The stated problem was social rather than arithmetic, and I did not really solve the social half. The app makes the maths continuous and unambiguous, which removes the argument about how much — but somebody still has to be the one who asks. Making settlement feel like something the group does, rather than something one person chases, is the actual product problem and it is still open.