Inspiration
Every year, roughly 15% of US patients are readmitted within 30 days of discharge, and preventable readmissions are a ~$15B/year problem for hospitals under CMS penalties. The cruel part is how small the beginnings are: a fever that shows up on day 2, a missed anticoagulant dose, an incision the patient wasn't sure was normal. The follow-up call that would catch it is the first thing that falls through the cracks when one nurse is responsible for thirty discharged patients.
We asked a simple question: what if every discharged patient got a real phone call at 24 hours, 72 hours, and day 7 — not a robocall, not an SMS survey, but a natural conversation that listens, notices red flags, and loops in a nurse before things get worse? CALL-E made that question answerable in a hackathon.
What it does
Post-Discharge Check (PDC) is a care-coordination web app for hospital care teams:
- Enroll — a coordinator picks a discharged patient (post-MI, hip/knee replacement, post-op, COPD) and enrolls them in a check-in campaign with a cadence (24h / 72h / 7-day) and goals written in plain English ("check pain, confirm apixaban adherence, ask about the incision").
- CALL-E calls — the platform plans the call, dials the patient, and holds a warm, unhurried conversation covering pain, medications, wound symptoms, and the follow-up appointment.
- Red flags surface in real time — while the transcript streams in, PDC highlights fever, chest pain, shortness of breath, wound drainage, or missed blood thinners, each with a confidence score and the exact quote that triggered it.
- Escalation with context — a flagged patient lands in the nurse triage inbox with priority, a summary, and the transcript — not just "call this person back."
- Structured results — every call ends with a typed outcome: pain score, medication adherence, wound status, appointment confirmation, sentiment, risk score before/after, and a recommended action, ready for EHR export or a webhook.
How we built it
The app is React 19 + TypeScript + Vite, with Tailwind and shadcn/ui, Framer Motion and GSAP on the landing page, Three.js in the hero, and recharts on the dashboard.
The core is src/lib/calle.ts — a typed adapter around the CALL-E API with five methods: planCall, startCall, streamCall, getStructuredResult, endCall. The interface deliberately mirrors the official @call-e/calle SDK, so swapping the adapter for new CalleClient(...) is a one-line change.
In live mode (when VITE_CALLE_API_KEY is set), the adapter does real work at runtime:
POST /v1/callswith the agent task, the recipient phone, anIdempotency-Key, and arecipient_result_schema— a JSON Schema telling CALL-E exactly what to extract from the conversation:pain_score(0–10 integer),meds_taken,wound_status,red_flags,follow_up_appointment,callback_requested, and free-formnotes.- Polls
GET /v1/calls/{id}every 5 seconds and diffsattempts[].transcript_turnsandstructured_resultso the Live Call Console fills in as the call runs;GET /v1/calls/{id}/eventssupplies the developer-facing adaptation log. - Maps the terminal response onto our
StructuredResult, folding incompletion_confidenceand the platform'sevidencearray so nurses see why the agent concluded what it did.
Because we can't spend call credits on every demo run, the same adapter has a demo mode: a scripted simulation engine (src/lib/simulation.ts) replays a realistic call — transcript timing, red-flag events, agent adaptations, live field extraction — through the identical interface. The active mode is always visible in the UI, and Settings runs a real connection test that logs the actual HTTP exchange line by line.
Challenges we ran into
- Streaming without a stream. CALL-E aggregates the conversation server-side, so there's no websocket to subscribe to. We built a polling + diffing layer that tracks seen transcript turns, extracted fields, and flags separately so the console updates incrementally instead of flickering.
- Health-checking an API with no ping route. A GET on a nonexistent call id returns 404 when the key is valid and 401 when it isn't — our connection test interprets that (and says so in the log) instead of treating 404 as failure.
- Schema design is the product. Our first extraction schema was too free-form; nurses don't act on paragraphs. Iterating to a strict schema (enums for adherence and wound status, a bounded pain score, a red-flag array) is what turned transcripts into something a care team can triage.
- No cancel endpoint. Stopping a live call means stop polling and fetch final state, with a best-effort PATCH in case a cancel route lands.
Accomplishments that we're proud of
- The full lifecycle — enroll → plan → dial → live transcript → red flag → escalate → structured outcome — is visible end to end in the app, and the CALL-E integration is real code running at runtime, not screenshots of code.
- The adapter is honest: the same interface in both modes, the UI always shows which mode is active, and the connection test logs real requests and responses.
- Clinical realism: red-flag rules (fever ≥ 38°C, chest pain, wound drainage, missed anticoagulants), P1/P2/P3 escalation priorities with SLA countdowns, and a triage inbox designed around how a nurse actually works a queue.
What we learned
- The schema is the unlock. Voice AI demos are easy; the hard, valuable part is defining the
result_schemathat turns a conversation into a record a hospital system will accept. CALL-E's server-side structured extraction is exactly the right primitive for this. - Confidence and evidence matter more in healthcare than anywhere else. Every flag carries a confidence score and a quote, because a nurse will only act on an escalation they can verify in one click.
- Design the boring path. The escalate-to-nurse flow, the SLA timer, and the routine "no action needed" outcome matter as much as the flashy live console — most calls should end boring, and the product has to make those calls cheap.
What's next for Post-Discharge Check (PDC)
- FHIR/EHR write-back so structured results land in the patient chart, not just a dashboard.
- Multilingual calls and SMS fallback for patients who don't answer or prefer another language.
- Closed-loop callbacks — the nurse's callback outcome feeds the next call's brief, so the agent gets smarter per patient.
- A real pilot on one cohort. Heart failure is the natural first target: high readmission rate, and a 30-day outcome everyone already measures.
Built With
- call-e
- framer-motion
- gsap
- json-schema
- radix-ui
- react
- react-router
- recharts
- rest-api
- shadcn/ui
- tailwind-css
- three.js
- typescript
- vite
Log in or sign up for Devpost to join the conversation.