Inspiration

My grandmother lives alone, and my family worries about the same few things: did she get up this morning, did she fall, and did she hear the doorbell? Emergency pendants are supposed to help, but many older people forget to wear them or don’t want to. And if someone has trouble hearing, a normal doorbell chime does nothing.

Then I realized many homes already have a Ring doorbell or camera. I wanted to see whether that hardware could quietly look out for someone, with nothing new to wear and no video recording of their day. That became RingCare.

What it does

RingCare is a caregiver dashboard built on the Ring Partner API (Amazon Vision API).

Morning check-in: You set a window, such as 6:00 to 10:00 AM. If the resident walks past the hallway camera or opens the front door in that window, they’re marked “Checked In.” If 10:00 passes with no activity, the caregiver gets an inactivity alert. Movement at 1 AM doesn’t count as a morning check-in, but it still shows on the daily timeline. Accessibility alerts: When the doorbell rings or a person is detected, the dashboard shows a large flashing banner, reads the alert aloud, and plays a chime. There is a text size control (A, A+, A++) and a high-contrast mode for people who need them. Visitor log: Each doorbell or human-motion event saves a small snapshot. The caregiver can mark the visitor as Known or Unknown and add a note. Messages on the chime: The caregiver can send a short spoken message through the Ring speaker, such as “Time for your morning medication.” Device health and quiet hours: It shows battery level, Wi-Fi and online status, and mutes non-human motion alerts overnight so nobody is woken up.

How we built it

The backend is Python and Flask with SQLite. Ring sends webhooks to our server, and we check the X-Signature header (HMAC-SHA256) before trusting anything. Duplicate events are dropped using the request ID, and the work runs in a background queue so we can answer Ring within its 5-second limit.

A scheduler (APScheduler) runs the daily check-in and refreshes the OAuth tokens. When something happens, the dashboard updates immediately through Server-Sent Events, which turned out to be simpler than WebSockets for this. Voice alerts use the browser’s Web Speech API.

Because most people don’t have a Ring device handy, I also built a demo mode. It has a simulator panel and a clock override, so you can jump to 4:30 AM, 8:15 AM, or 10:30 AM and watch each check-in state without waiting.

Challenges

Late-night movement counted as a check-in. My first version marked the day as checked in on any motion. When I tested a 1:07 AM event, it said the resident was safe and active for the morning. Now only events inside the morning window count.

Offline cameras and broken images. When a device was offline, snapshots failed and the page showed broken image icons. Events from offline devices now get a warning badge, and every image has a built-in fallback.

Simulated time caused ID collisions. With the clock frozen for demos, my generated IDs repeated and SQLite rejected them. I fixed it by adding a random suffix to each ID.

What I’m proud of It works as a full flow: webhook, stored event, live dashboard alert, and a caregiver reply. Accessibility was part of the design from the beginning, not added at the end. It stores only event data and low-resolution snapshots, with no continuous video, and there is a “Purge My Data” button. I wrote 21 unit tests covering signature checks, token refresh, and the check-in logic. What I learned

Building on a partner API means thinking about duplicate messages, signature checks, and slow responses from day one. I also learned that designing for deaf and hard-of-hearing users made the whole dashboard clearer for everyone.

What’s next Learn each person’s usual wake-up time and flag slow changes in their routine. Send an SMS or phone call if an inactivity alert isn’t acknowledged within 15 minutes. Follow movement across several cameras, so a caregiver knows if someone heads for the door late at night.

What I changed, and what to check before you submit

Removed unverified statistics. The original said “over 80% of seniors don’t wear pendants” and “1 in 3 adults 65 to 74 have disabling hearing loss.” I can’t confirm those numbers. If you want them back, find a source and name it. Removed overclaims. “100% automated test coverage” and “WCAG AAA compliance” are strong claims that are hard to prove. I replaced them with the 21 tests, which is checkable. Only claim WCAG if you tested it. Deleted the math formulas. Devpost often doesn’t render LaTeX, so they would show as raw symbols. Check the personal opening. I wrote “my grandmother” as an example. Change it to your real motivation, or use a neutral line like “Many families worry about…” if it doesn’t apply. Be honest about demo mode. Judges check that Ring is used in the code. If you tested with real Ring staging credentials, say so. If everything runs on simulated events, keep the demo-mode wording as it is.

Built With

  • accessibility-(a11y)
  • amazon-vision-api
  • apscheduler
  • assistive-technology
  • cloud
  • css3
  • flask
  • hmac-sha256
  • html5
  • iot
  • javascript
  • oauth-2.0
  • pillow
  • pytest
  • python
  • responsive-design
  • rest-api
  • ring-partner-api
  • server-sent-events-(sse)
  • smart-home
  • sqlite
  • wcag-aaa
  • web-audio-api
  • web-speech-api
  • webhooks
Share this project:

Updates

Submission history