Receipts

A web app my roommates and I use to split groceries, dinners and everything else we buy for each other. Whoever pays adds the receipt, everyone checks off what they had, and the app works out who owes who, down to the cent.

The Receipts page: a calendar of September with each day's receipts and totals

Check off what you had

Splitting a grocery run evenly never felt fair, since not everyone eats the same things. In Receipts, each person goes through the receipt and checks off the items they're sharing. Things like paper towels are marked to always split with everyone.

Once everyone has checked in, the app splits each item between the people who had it. Tax and tip are spread out in proportion to what each person bought, and leftover cents are handed out so the totals always add up exactly.

Home: a receipt to check off and a balance summary
What needs doing
A Trader Joe's receipt with items to check off
Claiming items
Who owes what on a Costco receipt, with an itemized breakdown
Who owes what

Adding receipts

Receipts can be typed in by hand or scanned from a photo, which uses Gemini to read the store, items, prices, tax and tip. For restaurants, items can be grouped into meals so each person grabs their whole order at once.

Every receipt keeps a history of who added, changed or checked off what, so nothing gets changed without people knowing.

Editing a Costco receipt
Entering a receipt
A restaurant receipt grouped into one meal per person
Meals at a restaurant
Receipts listed by day, with who still needs to check in
Waiting on someone

Stats

Because every item is tracked, there's a lot to look at: spending per month, by category and by store, the most bought items, and how much each person has paid compared to what they've actually used.

Stats page with spending per month and a fair share chart

Paying each other back

The Balances page shows who owes who across every receipt. When someone pays a person back, they mark it as sent, and it shows up in both people's payment history. Debts between two people in opposite directions cancel out, so you only ever pay the difference. Search covers every item ever bought, which is handy for settling "wait, who bought the olive oil?"

Balances: who you owe, who owes you, and payment history
Balances
Paid versus consumed for each person
Paid vs. consumed
Searching every item for chicken
Search

How it's built

React

The whole front end, a single-page app with React Router.

Vite

Builds the app, which is hosted on GitHub Pages.

Tailwind CSS

All of the styling, including the mobile layout.

Supabase

Postgres database and Google and email sign-in.

Recharts

All of the charts on the stats page.

Gemini

Reads photos of receipts into items and prices.