Inspiration
Opening a medical bill can feel instantly overwhelming — packed with confusing codes and terrifying totals. We believe that healthcare should be about healing, not financial panic. Yet the reality is staggering: the AMA estimates that 80% of hospital bills contain errors, fueling a crisis where 100 million Americans owe over $200 billion in medical debt — now the #1 cause of bankruptcy in the U.S. We built BillChill so no one has to navigate this system alone. Our web application instantly scans bills for likely overcharges, compares hospital prices for certain services, tells the user their eligibility for medical discounts, and generates ready-to-send dispute letters - so that patients can get the fair price they deserve. We focused on turning opaque billing into concrete, patient‑friendly actions.
What it does
BillChill is a two-part tool that helps patients save money on medical bills:
- Find a Hospital: Search nearby hospitals for price estimates by condition, combining web results with geo distance and quality filters.
- Dispute a Bill: Upload a bill PDF, analyze potential overcharges, estimate charity-care/discount eligibility, and generate a draft dispute letter.
How we built it
Frontend: Next.js + React + TypeScript + Tailwind in a single Dispute page (drag‑and‑drop upload, progress states, reset). API: A lightweight Python backend endpoint at /api/dispute/analyze that returns: ai_result (human‑readable summary) ai_structured (JSON with state_abbr, total_eligible_discount_percent, discount_explanation, overcharges[]) dispute_letter (plain text) UX details: Copy buttons for findings/letter, formatted currency, table layout, whitespace‑preserving letter rendering
Challenges we ran into
We faced challenges getting consistent JSON from model output. We mitigated this by validating, extracting JSON blobs, and always returning a legacy string alongside structured fields. To address CORS and local dev ergonomics, we standardized on a single Flask server to reduce friction.
Accomplishments that we're proud of
- End‑to‑end flow from PDF upload to a polished, ready‑to‑edit dispute letter.
- Clear, actionable overcharge table with reasons and amounts.
- Fast, friendly drag‑and‑drop experience with minimal friction.
What we learned
It's important to make the AI output resilient. Returning both a human-readable summary and a strict JSON payload dramatically improves UX. Small backend utilities pay off: helpers like extract_json, verify_url, and geo helpers made data quality much better. We iterated by aligning UI components with actual backend fields (e.g., ai_structured.state_abbr, overcharges array) and keeping endpoints simple.
What's next for BillChill
- Implement a feature that makes the bill easy to understand for the user.
- Implement a feature that allows for translation for users in which English is not their first language.
- Secure account connections to fetch EOBs and statements automatically.
- Better policy/rules ingestion with citations and thresholds per state/provider.
- Observability for parsing errors and outcomes to keep improving accuracy.
Built With
- flask
- nextjs
- node.js
- openai
- openrouter
- python
- tailwind
- typescript

Log in or sign up for Devpost to join the conversation.