four30.co Book a conversation
All projects

App

Alice

Plain-language help with medical bills and insurance denials for working families in Bridgeport, Connecticut, with cited next steps and drafted letters.

Type
App
Year
2026
Event
Hack for Humanity: Bridgeport, Oct 16, 2026
Our role
Agent, backend and app build
Stack
Claude, Convex, React, TypeScript, Firecrawl, AgentMail, OpenAI TTS
Alice: Plain-language help with medical bills and insurance denials for working families in Bridgeport, Connecticut, with cited next steps and drafted letters.

Alice is built for working families who earn too much for most aid and still struggle with health costs, starting in Bridgeport, Connecticut. It turns a medical bill, an insurance denial or a prior approval into plain-language next steps and a drafted letter. A Claude agent does the reading and the drafting, and code lets it cite only the rules and offices stored in Alice's own database.

Where it started

Alice began as Owed, a team build at Hack for Humanity: Bridgeport in the Where Help Doesn't Reach challenge. The team aimed it at ALICE households. ALICE is the United Way's name for families who are Asset Limited, Income Constrained, Employed. They work, earn above the poverty line and still can't cover the basic cost of living. United For ALICE counts two in three Bridgeport households as ALICE or in poverty. By the time the team pitched, the app carried the ALICE name.

At the event, Tony built the agent and the backend behind it, and brought the team's prototype into the app as the Alice interface. Evan Wies built a medical price finder that maps and ranks Connecticut prices from HealthscoreCT data.

What it does

A person can type, talk, or upload a bill or denial letter, even a phone photo. Alice reads the document and explains it in plain language.

The getalice.co example at step two of three: a fictional description of a denied MRI, an optional sample file and a Dictate instead button.
The public example on getalice.co. The case is fictional, and the demo runs only in the browser.

Then it lays out what to do: the rule that applies with its source, the office to contact, the deadline, and the sentence to say. It drafts the paperwork too: appeal letters, financial-assistance requests and handoffs to Connecticut's Office of the Healthcare Advocate. No draft goes out until the person taps confirm, and then only to approved addresses.

The example's results: a short summary and three numbered next steps for the fictional denied MRI.
Next steps for the same fictional denial, from the scripted public example.

Inside the signed-in app, each case has its own page. The screens below come from a case started with the app's sample denial letter, so the patient, the plan and the denial are all made up.

A case page in the Alice app on a desktop: the plain-language answer for an MRI denial, the person's own words, a What this means box, and a case timeline at step three of five, Letter ready.
The case page inside the app. The denial and every detail in it are made up.
Step two of the same case: the phone number and hours for Connecticut's Office of the Healthcare Advocate, the sentence to say with Copy and Listen buttons, and a list of what to bring.
The office to contact and the sentence to say, for the same made-up case.
The letters section: a drafted note to the Office of the Healthcare Advocate, marked Not sent yet, with Preview, Edit and Copy tabs and a Use this letter button.
A letter Alice drafted for the made-up case. The name, plan and member ID are made up, taken from the sample letter.
The same case on a phone: a demo ribbon, a Call Alice button, a five-step progress bar at step three and the plain-language answer, with a tab bar at the bottom.
The made-up case on a phone, where a tab bar puts Ask in the middle.

How it works

Convex runs the backend: the database, functions, file storage, sign-in, and hosting for the React app. The case agent, Claude Sonnet by default, answers in strict JSON. Code checks every rule and office key it returns against the database, drops the unknown ones and builds citations from the rows. An answer with no rule left becomes a referral to 211.

convex/agentCore.ts
out.ruleKeys = Array.from(new Set(out.ruleKeys)).filter((k) => {
  if (ruleByKey.has(k)) return true;
  dropped.push(`rule:${k}`);
  return false;
});
out.doorKeys = Array.from(new Set(out.doorKeys)).filter((k) => {
  if (doorByKey.has(k)) return true;
  dropped.push(`door:${k}`);
  return false;
});
if (out.kind === "answer" && out.ruleKeys.length === 0) {
  out.kind = "no_match";
  out.reason = out.reason || "The agent could not point at a rule in our data.";
}

A second agent, Claude Opus by default, runs the research desk. It works from a library of 79 sources on prior approvals and denials and uses Firecrawl to search the web and read pages. Each page is saved before the model reads it, and a finding stays only when its quote matches the saved page word for word. Code refuses any search or page address that carries a name, member ID or other identifier it finds in the case.

For voice, the browser turns speech into text, and OpenAI's gpt-4o-mini-tts speaks Alice's lines, each cached after its first use.

Where it stands

Tony kept building after the hackathon, with Claude Code. A redesign added two voice modes, Talk to Alice and an in-app Call Alice. Then came the getalice.co landing page with its scripted example, and a sign-in for the app.

Alice is in private beta. Its site, getalice.co, takes beta requests, and the app sits behind a password sign-in with no sign-up. Beta logins are made by hand, and the app runs on demo data only, with a ribbon on every screen asking for made-up information.