Square Up
How this was built
Log everyone’s expenses from a trip or event, then get a clear plan for who pays whom.
The problem
After a group trip or a night out where everyone paid for something different, figuring out who owed who was always a headache. I’d end up in a group chat doing the math for twenty minutes, and it never quite added up. I wanted something that could take a pile of random expenses and tell me, in seconds, exactly who needs to pay who.
What it does
Add everyone involved, including households, so a couple or a family can count as one unit. Enter what everyone spent, plus any money borrowed between people to cover an expense. For each expense, you can leave out any household or person who shouldn’t be charged for it. Square Up breaks it all down from there. Households get one combined bill instead of splitting it person by person. Then you pick one banker, who sees exactly who to collect from and who to pay back.
A quick example
A backyard BBQ where a couple people cover everything, food, alcohol, an emergency beer run, whatever comes up, and everyone else just wants to pay their fair share afterward.
Features
- Group people into households so a couple or a family settles as one unit.
- Leave any person or household out of an individual expense when it shouldn't apply to them.
- Record money lent directly between two people, separately from shared costs.
- Reduces everyone owing everyone into the fewest payments that settle the whole group, down to the last cent.
- Pick who acts as banker, so every payment routes through one person instead of a web of transfers.
- Save a settlement and get a link the whole group can open, plus a printable breakdown.
What it's built with
| What I used | What it does here |
|---|---|
| Next.js | The whole app, App Router, rendered and deployed on Vercel. |
| Supabase Postgres | Stores saved settlements and the public share links. |
| Custom settlement algorithm | Reduces everyone owing everyone down to the fewest payments, and splits the odd cent by largest remainder so the totals still add up. |
| No AI at all | This one is pure arithmetic. It never calls a model. |
| Plain CSS | No framework. Design tokens are CSS custom properties. |