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.
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.



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.



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.
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?"



The whole front end, a single-page app with React Router.
Builds the app, which is hosted on GitHub Pages.
All of the styling, including the mobile layout.
Postgres database and Google and email sign-in.
All of the charts on the stats page.
Reads photos of receipts into items and prices.