📖 About the Project

Inspiration

We’ve all been there: a group dinner ends, the receipt lands on the table, and suddenly no one wants to do math. Splitting bills fairly (with tax, tip, and shared items) is tedious, and sending individual Venmo requests takes forever. We wanted a tool that bridges the gap between receipts and peer-to-peer payments — turning “who still owes?” into a one-tap experience.

What We Learned

We dove into how OCR and deterministic parsing can be combined with LLMs to interpret messy receipts. We learned how to build platform-specific deep links for Venmo (iOS vs. Android), and how to design around user trust — leaning on familiar flows like Venmo links and QR codes instead of sketchy automation. We also got a crash course in reconciling floating-point math with fairness rounding: making sure everyone pays their fair share down to the cent.

How We Built It

  1. Receipt parsing: We used Google Gemini to intelligently extract text from images of receipts. Gemini is able to detect items, subtotal, tax, tip, and total, taking into account variations in formatting.
  2. Fair splitting: Each person’s tax and tip are calculated proportionally. Rounding remainders are adjusted automatically.
  3. Payments: For each payer, we generate:
    • QR codes and prefilled text messages These open the Venmo app with the amount and note already filled in.
  4. UI: A React + Tailwind PWA with a clean, mobile-first design that tracks who has paid in real time.

Challenges

  • Cross-platform deep links: iOS and Android behave differently; we had to add fallbacks so links work everywhere.
  • Parsing receipts reliably: OCR outputs are messy; deterministic rules alone weren’t enough, but full LLM parsing was too costly — so we built a hybrid.
  • Trust & UX: People trust Venmo, not random apps asking for bank access. We had to design around user trust by keeping Venmo in the loop rather than bypassing it.

Built With

Share this project:

Updates