Jayden Lim

case study — 2026 · hackathon · web dev · machine learning

OneCall

A spoken symptom becomes a specialist appointment request — in one phone call

Aug 2026 ·Team of 2 github ↗
OneCall
OneCall

OneCall

A voice hotline that turns "something's wrong and I don't know who to call" into a specialist appointment request — inside one phone call.

Built in 24 hours at the YC × Medplum Agentic Healthcare Hackathon (Y Combinator office, San Francisco).

⚠️ A care-navigation tool, not a medical device. It routes; it does not diagnose.

The problem

Patients get handed homework they can't do. "See a specialist" means figuring out which specialty, finding one nearby who takes your insurance, confirming that's actually true, and getting on their calendar. Only ~35% of specialist referral scheduling attempts end in a completed appointment; a Senate secret-shopper study found a third of in-network phone numbers were dead or wrong. Existing voice AI answers one clinic's phone — which assumes you already know where to call. OneCall is the call that starts one step earlier.

What it does

A caller describes a symptom out loud. Within a single conversation the agent:

  1. Screens for emergencies with a deterministic red-flag check — before any model reasoning runs.
  2. Selects a specialty from a retrieved referral-criteria corpus, and reads the matching criteria back to the caller.
  3. Runs a real 270/271 benefits transaction and reports precisely what it did and did not verify.
  4. Finds real nearby clinics from the CMS NPPES registry, enriched with public-web research in the background.
  5. Writes an appointment request to Medplum as FHIR R4 — and calls it proposed, never booked.

Design decisions worth defending

  • Emergency screening never touches the LLM. Nine deterministic regex patterns over the transcript cover MI, stroke, respiratory, hemorrhage, and suicidal-ideation presentations, re-run on every new symptom. The one judgment where a hallucination is catastrophic is the one judgment that shouldn't be probabilistic. A triggered flag still writes a FHIR Encounter — even the abort path leaves an audit trail.
  • The eligibility check refuses to overclaim. The 270/271 wire traffic is real, but against a synthetic fixture — so the response object carries callerCoverageVerified: false and providerParticipation: "unknown-not-verified" explicitly, and the agent is forbidden from saying "your copay" or "you're covered."
  • Providers are real; availability is honestly labeled. Identity comes from live CMS NPPES lookups, Haversine-filtered by ZIP. Slot availability isn't public data for anyone, so the API says status: "not-public" instead of inventing slots that look convincing on stage.
  • No invented medical codes. Every clinical concept is a display-only CodeableConcept rather than a hallucinated SNOMED/LOINC/ICD-10 code. An unfilled code is an honest gap; a wrong one is a silent data-integrity bug.
  • Tool latency never blocks the conversation. Deep provider research returns immediately with registry data plus a status: "running" marker and streams enrichment in later. A workflow-state object rides on every tool result, which kills the classic voice-agent failure of re-asking for a ZIP it already has.

Every external dependency has a defined degradation path — Moss down falls back to a local retriever, Stedi unconfigured returns a typed 503 and the flow continues. Nothing in the demo path is a single point of failure.

Tech Stack

Next.js 16 · TypeScript · Tailwind · Deepgram Voice Agent (nova-3 STT · aura-2 TTS · function calling) · Medplum (FHIR R4) · Stedi 270/271 · Moss retrieval · CMS NPPES

Team

Jayden Lim · Tanay

← back to the index