Bedside is a privacy-first voice handoff built for the people home hospice runs on - volunteers and family. Speak a note, and Bedside turns it into a clear, organized handoff and alerts the nurse the moment something needs attention.

Inspiration

In home hospice, continuity is the care - what medication was given, how breathing changed, what finally settled someone. Today it's passed between shifts in a handwritten notebook at the bedside. It gets lost, it's illegible at 3am, and when something's wrong, paper can't raise its hand.

And the people carrying that binder are federally required volunteers: under 42 CFR 418.78, volunteers must provide 5%+ of hospice care hours. It's the only Medicare benefit that legally depends on unpaid, non-clinical people at the bedside - yet every AI care tool is built for paid nurses or paid aides. We built for the people nobody builds for.

What it does

Bedside replaces the binder with a mobile web app. The core loop:

Get in, in three taps - Scan the household QR code, pick your profile, enter a PIN. No app store, no account (it works for an 80-year-old volunteer).

AI-assisted shift logging - Fill it in with a few taps, or just hit the mic and talk. Agent 1 turns a rambling voice note into a clean, structured entry (summary, meds given, mood, what helped) and flags urgency red / yellow / green with a reason. On a red flag it fires a function call to alert the on-call nurse on its own - the volunteer never has to judge "is this an emergency?"

Grounded care-plan Q&A - Ask anything. Agent 2 answers only from that household's own care plan and shows its source ("how we know this"), and refuses - pointing to the nurse - when the answer isn't there. No hallucinations, no clinical advice.

Effortless handoff to anyone new - "Since your last visit" AI catch-up, the full Care Plan PDF with a "last updated" timestamp, and a "Get to know" profile of patient routines, preferences, and story, so a first-time sitter walks in informed.

Security built in - Role-based access shows family and nurses full medical detail while volunteers see only comfort and care info, plus an auto-logout timer, per-volunteer access levels, and one-time guest codes - all designed to HIPAA's minimum-necessary standard.

How we built it

Frontend React, Vite, Tailwind. Mobile only. We used figma to build out our interface designs. Our reasoning is that the volunteer is sitting at a bedside in someone's house with a phone, not a laptop, so we didn't build for desktop. No accounts. A QR code identifies the household and a short PIN identifies the role. We did this to make it easier for families to focus more time on their loved ones. Same five tabs for everyone (Timeline, Log, Ask, Info, Settings), but the content changes by role. A volunteer asking "what medications is she on?" gets sent to the nurse. The nurse gets the actual list. That's enforced in the UI and in the agent's system prompt. Voice capture uses the browser's Web Speech API, so dictation happens on-device.

Backend Supabase Postgres for households, shifts, and log entries. We store the full AI response as JSONB so we don't have to migrate the schema every time an agent returns a new field. Supabase Edge Functions sit between the browser and DigitalOcean and hold the agent keys server-side, so no credential reaches the client. Each function parses the agent response defensively: strip markdown fences, pull out the JSON, fall back to a safe default instead of crashing the UI.

The agents (DigitalOcean Gradient AI)

  1. Handoff Summarizer: A volunteer talks into their phone at the end of a shift. The agent returns structured JSON: summary, medications mentioned, mood, which comfort measures were tried and whether they worked, and an urgency flag with a reason and a confidence level. On a red flag it calls notify_on_call_nurse via function calling. The agent decides to escalate. Nobody picks the urgency level from a dropdown.

  2. Care-Plan Q&A: A Gradient knowledge base with the household's care plan, queried by a RAG agent. It answers from the notes, says it doesn't know when the answer isn't there, and sends clinical questions to the nurse.

  3. Pattern Analyst: Reads the last fifteen shift logs and finds things no single entry contains. It found that morphine is working less with each dose, that sundowning has moved from 5:30pm to 4pm over the week, that two flags were raised and never followed up on, and that the patient's son has been up every night with no respite. We didn't tell it to look for caregiver strain.

All three run on GLM 5.2. No real patient data. Everything is synthetic.

Challenges we faced

Every DigitalOcean inference call returned 403. Credits applied, card on file, key authenticating fine, and every model on every endpoint refused. We spent hours proving it wasn't our code. The 401 turning into a 403 was the clue: the key was valid, the account was gated. Playground, curl, serverless, Agent Platform, all blocked. So, we swapped to GLM 5.2 and it worked immediately.

The agent wouldn't use its tool. Our summarizer prompt said "valid JSON only, no text before or after," which was quietly suppressing the function call. It was following instructions too literally. Digital Ocean's docs had the answer: describe tools in a Capabilities section instead of bolting them on at the end, and make the tool call an explicit exception to the format rule. It fired on the next run.

Our frontend and our knowledge base described two different patients. Different names, different comfort items, different family. Both worked fine on their own and contradicted each other on screen. We picked one source of truth and re-indexed the knowledge base. This is something we should have done way before building out the code so it took more time from us building.

Accomplishments that we're proud of

What makes it work: a live, end-to-end magic moment - messy voice note → structured handoff → red flag → the agent deciding on its own to escalate, in one motion.

What makes it different: voice-to-handoff already ships (the nearest neighbor, Sagebeam, does QR + voice + urgency). Our defensible edges: (1) hospice + unpaid volunteers, a structurally unoccupied user; (2) AI-inferred urgency vs. a human picking it; (3) care-plan-grounded RAG that refuses - nobody in the space has it.

What makes it secure & realistic: we designed to HIPAA principles from the start. Access is least-privilege by role (HIPAA's minimum-necessary standard) - a volunteer never sees clinical detail. API keys live server-side in Supabase Edge Functions, never in the browser. Auth is QR + per-role PIN - no accounts, no stored passwords. And every agent prompt hard-codes the volunteer's legal lane: never give medical advice, never invent facts. (Data is synthetic only because this is a hackathon prototype - it's not our security model.) The Privacy & Security screen maps what's real today vs. what production still needs (BAAs, encryption, MFA, audit logs).

Built With

  • deno
  • digitalocean
  • digitalocean-gradient-ai
  • figma
  • function-calling
  • javascript
  • openai-sdk
  • rag
  • react
  • supabase
  • supabase-edge-functions
  • tailwindcss
  • vite
  • web-speech-api
Share this project:

Updates