Tab Splitter
How this was built
Scan a restaurant or bar receipt, assign who had what, and get everyone’s exact share, tax, tip, and fees included.
The problem
I used to split restaurant bills in a Google Sheet, doing the math by hand every time. Splitting evenly never sat right with me either. If someone had a $10 beer during a big group hangout, they shouldn’t owe a tenth of a $400 tab. With AI doing the coding, I could finally build the tool I actually wanted, one that gets everyone’s share right, not just close enough.
What it does
Scan the receipt and AI turns it into an itemized, interactive list. Add everyone’s names, then mark who had what on their own, what was shared between specific people, and what should just be split evenly. Tab Splitter does the math, including tax, tip, and fees, split proportionally based on what each person actually ordered. Then you get a link to share with the group, so everyone can see exactly how the bill broke down.
A quick example
A night out with friends where tabs vary a lot, someone’s on beer, someone’s on steak and cocktails. Splitting it down the middle isn’t fair to whoever kept their order light.
Features
- Scan a receipt and have every line item read for you, or type them in by hand for free without signing in.
- AI reads the receipt, starting on a fast, cheap model. A pricier, sharper one takes a second pass only when the first read doesn’t match the printed total.
- Assign by item or by guest, whichever is quicker. Give an item to one person, split it between a few, or share it across the table.
- Anything still unassigned at the end can be split evenly across everyone.
- Tax, tip, and service charges are divided in proportion to what each person actually ordered, not evenly.
- Handles comped and discounted items, keeping the original price visible alongside the adjusted one.
- Save a split 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 splits in the shared tools schema, behind row-level security. |
| Claude (Anthropic) | Reads a photographed receipt into line items. Runs in a Deno edge function, never in the browser. |
| Deno edge function | Holds the API key server side so a receipt scan can never be triggered without a signed-in session. |
| Plain CSS | No framework. Design tokens are CSS custom properties. |