$ open work/bill-splitter

Bill Splitter

liveRole: PM + builderStack: Next.js, TypeScript, Tailwind CSS, Gemini APILive site
Scan the receipt

1 ยท Scan the receipt

Problem

Splitting a grocery receipt or a restaurant bill between several people is slow, manual work: going line by line, working out who had what, then adding tax and tip. It falls hardest on students and people who live together and don't have a shared account, because they split bills like this again and again.

Users and jobs to be done

  • Housemates after a grocery run: split one receipt fairly without a shared account.
  • Students after a meal out: everyone pays exactly their share, tax and tip included.
  • Whoever paid: send each person their total straight from their phone.

Decision log

DecisionWhy
Fix the money maths before touching the designThe first version rounded each person's share on its own, so three people added up to $50.32 on a $50.31 bill, and switching tax on without marking items could make the tax vanish. I added tests for the maths first.
Spare pennies go to the first person in the listShares always add up to the exact bill. Simple and predictable.
Mocked two options per screen, then picked one eachItems became a receipt-style list, Assign kept item cards with tappable faces, and Summary became big totals that expand.
Share through the phone's share menuPeople send results in chat apps; it falls back to copying text where there's no share menu.
Switched receipt reading from Groq to Gemini, fastest model firstGroq's model was retired and its replacement misread long receipts. Gemini models are tried in order within free limits.
"Check sale prices" reminder after a scanThe fast models can read the original price on discounted lines.

Results

  • Live at billsplitter.yashchanne.com
  • Passed a full new-user run-through in light and dark mode
  • About 1,040 free receipt scans a day across the Gemini models
  • 450+ bills split

What I'd do next

Bring the Scan screen up to the new design, then test a person-first Assign screen against the item-first one to see which is faster.