Inspiration

The weeks right after hospital discharge are the most dangerous part of recovery. A large share of 30-day readmissions trace back to medication confusion, missed follow-ups, and warning signs nobody caught in time. The patients most at risk, elderly, recovering, low-literacy, are exactly the ones who struggle with portals and typing. They can talk. So we built something they can talk to.

What it does

Rapid Recovery is a voice agent for discharged patients. It recognizes the patient and loads their own discharge plan, answers recovery questions grounded in that plan plus trusted public guidance, explains medication schedules and cautions (deferring uncertain interactions to a pharmacist flag), and books follow-up appointments inside the window the plan requires. Patients report symptoms by voice: routine ones are logged as check-ins, while a deterministic red-flag guardrail catches dangerous combinations, tells the patient to seek emergency care immediately, and escalates to the care team. A nurse dashboard shows every check-in and escalation live, keeping a human in control.

How we built it

Gemini 3 does the reasoning on Google's Agent Development Kit (Agent Builder), running as a single FastAPI service on Cloud Run. Voice is the Gemini Live API with native audio, bridged browser to FastAPI to the ADK live session over WebSockets. MongoDB Atlas is both the system of record and the RAG brain: patients, care plans, medications, appointments, check-ins, and escalations live beside a public-guidance corpus indexed with Atlas Vector Search (Voyage embeddings), and the agent reaches all of it through one integration, the official MongoDB MCP server. The React frontend is on Vercel. All patient data is synthetic (Synthea plus authored discharge narratives); the guidance corpus is public-domain federal material from AHRQ, CDC, and NIH.

Challenges we ran into

Bridging real-time bidirectional audio from the browser into ADK live sessions on Cloud Run, and keeping an LLM honest in a healthcare setting. We solved the second with strict grounding rules plus a deterministic guardrail the model cannot override: red flags are matched in code, so the same symptom always triggers the same emergency response.

Accomplishments that we're proud of

The escalation moment: a patient says "chest pain and shortness of breath" out loud, and seconds later it appears flagged on the nurse dashboard. Read, reason, write, escalate, all through one MCP integration, with a human in the loop at the end.

What we learned

ADK's run_live and LiveRequestQueue pattern, MCP as a single integration surface, and how much pipeline disappears when vector search lives in the same database as the operational data.

What's next for Untitled

Telephony so patients can call a regular phone number, multilingual voice, FHIR integration with real EHRs, and proactive check-in outreach.

Built With

Share this project:

Updates