Inspiration
By federal law (IRS §501(r)), every nonprofit hospital in the US must publish a financial assistance policy and forgive or discount bills for patients who qualify. States add programs of their own, like Massachusetts' Health Safety Net. The money is there. Dollar For estimates at least $14 billion a year in charity care goes unclaimed, and KFF Health News found 45% of nonprofit hospitals billing patients who should qualify.
The people most likely to qualify are the least likely to apply. Picture Rosa: 74, living on $1,900 a month from Social Security, holding an $1,850 ER bill. She would have to find the right PDF, read an income table written in percentages of the poverty line, fill out a form, and mail it before day 240. Her daughter Ana lives in another state. Kindred Waive is what we wanted Ana to be able to text her.
What it does
For the person with the bill (a phone browser, no app, no typing). Take a photo of the bill. Waive reads the hospital, the amount and the date, and reads them back in large print for a yes or no. Two big-button questions follow: how many people live at home, and whether you get MassHealth or SNAP. Then a photo of the Social Security letter instead of typing an income. The answer is one sentence, like "Good news. You likely do not have to pay this bill," with a Read this to me button.
For the caregiver. A review page shows what was read, the result, and the exact quote from the hospital's own policy that the result rests on. It shows the dates that matter: no collections before day 120, and the application window closing at day 240. One tap on Approve builds the packet: a cover letter citing the policy section, the application data, a document checklist, mailing or fax instructions, and calendar reminders. Waive never files anything itself. A person approves and sends. One tap deletes the case.
The atlas behind it. One cited, versioned procedure sheet per nonprofit hospital: who qualifies, the discount tiers, which programs count as automatic eligibility, which documents to send and where. Every field carries a verbatim quote from a dated source document. A field without a quote that verifies is never published.
| Atlas, live today | |
|---|---|
| Nonprofit hospitals in the registry (CMS, all 50 states + DC) | 2,703 |
| Published procedure sheets | 609 |
| Held for review rather than guessed | 347 |
| States with published sheets | CA, FL, IL, MA, NJ, NY, OH, PA, TX |
How we built it
One Python service: FastAPI with server-rendered pages, CSS sized for older eyes and thumbs (20px text, 56px buttons, one action per screen), an in-process scheduler, and a Typer CLI for the same pipelines. SQLite locally, PostgreSQL in production.
Nebius Token Factory is the only model API, called through the OpenAI SDK. Four models, four roles:
- NVIDIA Nemotron 3 Super turns a hospital's policy documents into a procedure-sheet draft, with one exact quote per field.
- NVIDIA Nemotron 3 Nano extracts the critical fields a second time as a cross-check.
- NVIDIA Nemotron 3.5 Lightning breaks ties when Super and Nano disagree.
- MiniCPM-V 4.5 reads the photos. It is not an NVIDIA model; Token Factory has no NVIDIA vision model today, and we say so.
Tavily does all the web work. Search finds each hospital's official site and rejects directory sites. Search with include_domains, plus Map as a fallback, finds the policy, application and billing pages. Extract pulls HTML and PDF text. On a schedule, Extract re-hashes stored documents so only changed policies get re-structured.
Everything that must be right is deterministic. The models propose; code decides:
- Quote verification: the quote must be a normalised substring of the source, and the value must appear inside the quote.
- The 2026 HHS poverty guidelines, the eligibility tiers, and the 120 and 240 day deadlines.
- Matching a bill to a hospital: fuzzy name match plus phone number, policy URL and city.
The eligibility check itself is plain arithmetic:
$$\text{income as \% of poverty line} = \frac{\text{monthly income} \times 12}{\text{HHS guideline for household size}} \times 100$$
Rosa's $1,900 a month comes to about 143%. Her hospital's policy says free care up to 250%, so she likely owes nothing, and the review page shows that exact sentence.
Privacy and spend are built in. Photos stay in memory. Personal fields are AES-GCM encrypted. Access is by signed, revocable links. Token Factory runs with zero data retention. Every Tavily and Token Factory call goes through a governor with hard caps and writes a ledger line. So far the whole atlas build, including every debugging re-run, cost $31.32 of Token Factory and 8,862 Tavily credits.
Built solo with Claude Code: a design spec, a plan per phase, tests first. The test suite never opens a network socket.
Challenges we ran into
- Reasoning models and JSON. Nemotron 3 Super's thinking mode used up the output budget before any JSON appeared. Turning thinking off, using JSON mode, and writing the schema into the prompt fixed it.
- Cross-checks that hurt. Nano sometimes "disagreed" using a three-character quote that could never verify, which held good sheets back. The fix: a disagreement only counts when the cross-check's own quote verifies. Four Boston-area hospitals published the day we added that rule.
- Policies that hide. Search indexes miss hospital PDFs. Map found pages the index missed, and following the Markdown links in Extract's output reached "Financial Assistance Policy (PDF)" files on asset hosts.
- Wrong hospitals. Discovery sometimes matched a same-named hospital in another state. A place check now holds any sheet whose documents never name the hospital's state and town.
- Policies the schema cannot hold. Some hospitals define eligibility only through a state program, or publish discount tables as ranges. Those sheets stay held, visibly, instead of being guessed.
What we learned
- Let the model propose and the verifier decide. Exact-quote checks turn "the model said 300%" into "the document says 250%, and here is the sentence."
- A cheap cross-check only helps when it has to prove its answer the same way the primary model does.
- Budgets are a feature. Hard caps are what let an unattended scheduler exist at all.
- Seniors do not need a smaller app. They need fewer decisions per screen.
What's next
- Process real bills with a partner organisation.
- Scout the remaining states, at about 5 Tavily credits per hospital.
- Route complex cases to human advocates such as Dollar For.
- Connect the atlas to the rest of Kindred AI: Tender links each county and hospital page straight into a Waive case.
Kindred Waive gives estimates based on each hospital's published policy. It is not legal or financial advice, it never submits anything on anyone's behalf, and the hospital makes the final decision.
Built With
- apscheduler
- claude
- docker
- fastapi
- jinja
- minicpm-v
- nebius-ai-cloud
- nebius-token-factory
- nemotron-3-nano
- nemotron-3-super
- nemotron-3.5-lightning
- nvidia-nemotron
- openai-sdk
- postgresql
- pydantic
- pytest
- python
- reportlab
- sqlalchemy
- sqlite
- tavily
Log in or sign up for Devpost to join the conversation.