Inspiration
Older people who live alone often depend on scheduled visits from nurses, carers and cleaners. In practice the front door runs on a key-safe code that everyone knows, or on a frail person getting up to answer it. Families usually learn that a nurse never came only after the fact. Ring already watches the front door; we wanted it to look after the person behind it.
What it does
CareKey turns Ring events into care:
- Safe entry for scheduled visitors. The family books a visit and gets a one-time code. At the door the visitor rings and enters the code. The door unlocks only if the code matches an unused visit, the time is inside that visit's window, and Ring has seen someone at the door in the last 5 minutes. Five wrong codes pause check-in. The AI never decides to open the door.
- Noticing what didn't happen. A nurse 15 minutes late, a missed visit, no front-door activity by 11:00, a parcel left outside for an hour, a visitor who hasn't checked out.
- Keeping strangers out. Someone lingering without ringing triggers a large, spoken alert for the parent ("Someone is at the door but hasn't rung the bell. The door stays locked.") and a heads-up to the family.
- Plain answers. The parent can ask "Is my parcel still outside?" or "Who was at the door?" by button or voice.
Three screens: a large-text, spoken, remote-friendly home screen for the parent; a family timeline with alerts and booking; a visitor check-in page. CareKey describes what is happening, never who someone is: no face recognition, no footage stored.
How we built it
- Ring Partner API (
api.amazonvision.com): device discovery, Event History polling (ding,motion,on_demand), HMAC-verified webhooks (button_press,motion_detectedwithsub_type), and image snapshots for scene recognition. - Ring Playground: the Playground's simulated live-view scenes arrive as
on_demandevents with real footage but no detection type. CareKey downloads a frame 5 seconds into the event and asks a vision model (Gemma via Ollama; Amazon Bedrock also supported) what is at the door. A parcel becomes a package event, a person a motion event, an empty porch nothing. - Python + FastAPI backend; care rules and access policy are deterministic and unit-tested; screens update live over Server-Sent Events; no build step for the web front end.
- 53 automated tests, including the Ring client against recorded Playground responses.
Challenges we ran into
- The Playground simulates live views, not doorbell or motion events, so we built scene recognition on top of Ring snapshots instead of relying on detection types.
- Snapshot downloads answer
303to a separate download host (and416when nothing was recorded), which isn't in the reference. Following the redirect without forwarding our token took some digging. - Our Amazon Bedrock account couldn't run models (daily token limits on the first call), so we made the vision step pluggable and used Ollama.
- Small vision models describe scenes in free text ("no parcels, people, or vehicles are visible"), so categorising had to handle negated lists correctly.
Accomplishments that we're proud of
- A safety model judges can read in four lines: code + time window + Ring presence + attempt limit, with the AI only observing and reporting.
- Real Ring footage from the Playground recognised correctly end to end: package scenes became parcel alerts, an empty porch stayed quiet.
What we learned
Webhooks and Event History use different names for the same event (button_press vs ding), live views carry footage but no detection type, and the most useful caretaking signals are often absences: the visit that didn't happen, the door that didn't open.
What's next for CareKey
- A Fire TV (Vega) build of the home screen.
- Ring Chime announcements for expected visitors, and Ring contact sensors for "door opened" signals.
- A smart-lock integration (the lock is simulated today; Ring's API doesn't control locks).
- Care-agency accounts: visit schedules imported from the agency, missed-visit reports.
- Publishing on the Ring Appstore.
Built With
- fastapi
- gemma
- html
- javascript
- ollama
- python
- ring-partner-api
- ring-playground
- server-sent-events
- sqlite
Log in or sign up for Devpost to join the conversation.