-
-
A fall detected: a 45-second check-in starts with a chime at home. Answer by saying "I'm okay" or getting up, or Rooted reaches further out.
-
"I'm okay" from the floor: Whisper heard it, but Rooted keeps watching for 2 minutes and sends the family a gentle note.
-
A quiet day: pose, stove and call-for-help detectors running in the browser on demo footage. Video and audio stay on the device.
-
Rooted: a Ring camera that notices a fall, checks in first, then lets the family know. Built on the Ring Partner API.
Inspiration
You can't transplant an old tree. An oak that has spent decades sending roots into one patch of ground struggles when it's moved, even with the best care. People are much the same: their neighbours, their routines and their own front door are part of what keeps them well.
I'm 42, I live in a house with a garden I love, and I already know I want to stay there as long as I can. Most people feel the same: 77% of US adults over 50 want to stay in their own homes as they age (AARP, 2021), and strong social ties are linked to 50% greater odds of survival (Holt-Lunstad, 2010). What usually forces the move is fear of the fall nobody sees. About 1 in 4 adults over 65 falls each year (CDC), and the panic pendant stays on the nightstand.
So instead of moving the person to the care, Rooted brings the care to its roots, using the Ring camera many homes already have.
What it does
Rooted turns a Ring camera into a quiet guardian. It watches for four things, its Roots:
- A fall. MediaPipe Pose reads every frame. A fall is the hips dropping a third of the person's own standing height within 1.5 seconds from upright, then lying flat at floor level and still for 4 seconds. Lying down slowly counts as resting, so a nap on the sofa doesn't trigger it.
- A call for help. Whisper, running on the device, listens to the camera's audio for "Help!", "I fell" or "I can't get up".
- A stove left on (scripted in the demo for now).
- A quiet camera: a missed heartbeat moves alerts onto a cellular backup (simulated).
When something is wrong, a 45-second check-in starts, with a chime at home. If nobody answers, Rooted reaches further out in three steps: at home, then family, then emergency services.
The person on the floor can't reach a screen, so they answer the room. Whisper hears "I'm okay". If they're still on the floor, Rooted doesn't stand down, because people say they're fine when they aren't: it waits two minutes, sends the family a gentle note, and carries on if they stay down. When pose detection sees them back on their feet, the alert stands down by itself and the family gets a short "back up" note.
At the family step, Claude on Amazon Bedrock writes a message and a paramedic brief from the incident record alone, and Amazon SES emails it. Every moment is kept in Growth rings, the family's timeline.
How I built it
- Started from Amazon's Ring API Hello World starter (Next.js 15, TypeScript). Its
init/process/cleanupvideo-processor interface made it easy to add detectors, and the same pipeline runs on a video file, which is how I tested without hardware. - Ring Partner API (AVA v1): device discovery and live video over WebRTC (WHEP) straight into the browser, tested on the Ring Playground's sample camera. Webhooks and OAuth refresh are written to the docs but untested.
- On-device AI: MediaPipe Pose Landmarker for falls, and Whisper tiny via transformers.js in a Web Worker for speech. No video or audio leaves the home.
- AWS: Amazon Bedrock (Claude Opus 4.5, switchable with one setting) writes the family message and paramedic brief with structured output and a template fallback. Amazon SES sends the email; Amazon SNS sends the text. A least-privilege IAM user can only do those things.
- Testing: a Playwright harness plays clips in real time through the real detector, on the public UR Fall Detection Dataset and on living-room clips I generated with Gemini Omni Flash.
What's real and what's simulated
Every alert in the video is a real detection. The "Try a moment" buttons play generated clips through the same detectors.
- Real and tested: pose fall detection, the "I'm okay" and call-for-help listener, the check-in and escalation, the Bedrock-written brief and the SES email, Ring discovery and live view on the Ring Playground.
- Built, not yet tested: Ring webhooks and OAuth refresh, the SNS text message.
- Simulated: the stove, sensors, the chime, the cellular backup and 911. 911 will always stay simulated.
On 6 generated living-room clips the fall detector caught 3 of 3 falls and raised 0 alerts in 3 everyday moments. On the UR Fall dataset it caught 5 to 6 of 8 falls with 0 false alarms in 9 everyday clips (measured before the last two rule changes). Falls straight toward the camera are a known miss. A small sample, not a clinical validation.
Where it runs, and its limits
The detectors run in the dashboard's browser tab, so in a real home Rooted runs on an always-on device in the house (an old laptop, a tablet or a small PC) with the dashboard open; the video shows it on a daughter's laptop. Video goes from the camera to that device and no further. The family doesn't need anything open: the alert reaches them by email, and by text once SMS is set up, and they can open the dashboard from anywhere to look in or hold the alert after they've checked.
- If that device sleeps, loses Wi-Fi or closes the tab, Rooted stops watching. The heartbeat that should catch this is simulated.
- Ring live views end after 30 seconds (battery) or 60 seconds (wired), so the dashboard reconnects in a loop and can miss what happens in a gap.
- The chimes play on the device running the dashboard; a chime through the home's Ring Chime is simulated.
- There's no phone app or push notification yet. Email is the tested channel.
Challenges I ran into
- No Ring hardware. The getting-started guide lists a Ring device as a requirement, so I built most of Rooted against video files before I found the Playground's streaming camera. Once I did, discovery and live video worked on the first try.
- A woodpecker. The Playground's sample stream is a bird feeder, and the pose model briefly read a woodpecker as a person on the floor. No alert fired, but now a sudden drop only counts if someone was upright just before it.
- Streams end after 30 to 60 seconds, so a care app has to reconnect in a loop. Later live views on the same token returned
201 Createdwith no frames, so Rooted now waits 15 seconds, ends the session and says so instead of showing a black "live" view. - Audio is receive-only, so the gentlest step, a voice asking "Are you okay?" through the camera, isn't possible yet. Rooted uses a chime instead.
- Whisper in the browser: WebGPU hung on my Mac, so it runs on WASM, and each 3-second window takes a few seconds to transcribe.
- A high corner camera makes a seated person's legs look long, so bent knees under an upright back now count as sitting.
Accomplishments that I'm proud of
- A fall detector that measures against the person's own height, so it works near or far from the camera, with accuracy numbers that include the misses.
- The person on the floor can answer by voice or by standing up, without touching anything.
- Everything private by design: detection runs in the browser, and only a written incident record reaches Bedrock.
- An honest three-column README of what's real, what's built and what's simulated.
What I learned
Care tech is mostly about the false alarms and the edge cases: the nap on the sofa, the person who says "I'm fine" from the floor, the bird that looks like a body. And I learned how far on-device AI has come: pose estimation and speech recognition both run in a browser tab.
What's next for Rooted
- A run on a physical Ring camera in a real home.
- Ring Alarm contact and motion sensors and the smoke/CO listener via webhooks, for daily rhythms.
- Vision on the stove zone.
- Ring Chime playback for the at-home step, and talk-back if the API adds it.
- A small always-on Rooted hub that runs the same detectors without a browser window, and push notifications to the family.
- Longer streams for approved care use cases, which would close the gaps between sessions.
The code is MIT licensed at github.com/tanDivina/rooted, so another Ring developer can start a care app from here.
Built With
- amazon-bedrock
- amazon-ses
- amazon-sns
- aws-iam
- claude
- elevenlabs
- ffmpeg
- mediapipe
- next.js
- playwright
- react
- ring-api
- server-sent-events
- tailwindcss
- transformers.js
- typescript
- vercel
- webrtc
- whep
- whisper
Log in or sign up for Devpost to join the conversation.