← all projects

SP-009 ~/for-the-vibes Shipped apps Superseded

SplitBill

The Flask prototype that became Bill2Go: photograph a restaurant bill, an OpenAI vision model parses it into typed line items and taxes, assign items to people, and everyone's fair share computes itself.

// The first version of the idea: a Flask app that read a bill with a vision model and worked out each share. Bill2Go is what it grew into.

Role
Solo
Dates
Feb 2025

The brief

Upload a bill photo or PDF. The app asks a vision model for strict JSON: items with name, price and quantity, the tax lines, and the total, validated through Pydantic with defensive defaults for anything the model fumbles. Add the people at the table, tap to assign items, and the app divides each item across its assignees and shares tax proportionally. Logged-in users persist bills to Firestore and share a link or QR code.

What the code shows

The repo preserves both generations of the parsing idea, which is the interesting part:

  • Generation one. EasyOCR reads text off the image, then GPT-4 turns that text into structured JSON. Works, but inherits every OCR failure.
  • Generation two. The image goes straight to a vision model (gpt-4o-mini) with a schema-enforcing prompt, and the OCR stage disappears entirely. This is the insight Bill2Go was built on.

Around the parser: a typed Pydantic domain model, Firebase auth with an authorization decorator on every protected route, hardened session cookies, bill CRUD, share links with QR codes, and a Docker setup.

Why it’s on this site

Because shipped products have ancestors. SplitBill is where the receipt-to-JSON idea was proven on nights and weekends before Bill2Go productized it for real users. Reading the two repos side by side shows the whole arc: prototype, insight, rewrite, ship.