Inspiration
Almost everyone has stared at a bill they couldn't read and understand The problem isn't that people don't care it's that questioning a bill requires knowing what "normal" looks like. Most people can't tell whether a charge is standard or absurd, so they assume the institution is right and pay. A billing error only matters if someone catches it.
What it does
You upload a photo or PDF of a confusing bill — medical, insurance EOB, utility, phone, or loan statement and it will Extracts every line item, Flag what's worth questioning, Gives you a verdict and Hands you a script,
How we built it
React + Vite frontend, Express backend, and Gemini reading the PDF or photo natively with a forced JSON response schema — no OCR library, no database, nothing written to disk. The server recomputes the arithmetic in JavaScript rather than trusting the model's addition.
Challenges we ran into
The model I built on was retired mid-build, and the newest replacement took 80 seconds and kept hitting free-tier overload
Accomplishments that we're proud of
The math is verified server-side rather than asserted by the model, and the app degrades honestly — an unreadable bill reports "inconclusive" instead of a confident false mismatch. Every failure mode, from a retired model to a wrong file type, produces a readable sentence instead of a stack trace.
What we learned
Let the model do perception and check its work in code extraction is what it's good at, arithmetic is what it's bad at. Benchmarking beat assuming: the newest model was 10x slower than a smaller one that produced the same answer.
What's next for Explain My Bill
Real medical bills and EOBs at volume, since everything tested so far is synthetic, plus cross-checking an EOB against the matching bill. After that, generated dispute letters and comparison against hospitals' published price lists.
Built With
- express.js
- gemini-api
- javascript
- node.js
- react
- rest-api
- vite
Log in or sign up for Devpost to join the conversation.