Inspiration

Adult children and caregivers of older or solo-living relatives want to know the person is okay, without watching cameras or calling every hour. Cameras inside the home feel like surveillance to the person being watched. We wanted a signal built from rhythm, not video.

What it does

Quiet Hours turns Ring device events into a daily rhythm for a home: movement in the kitchen, bathroom and bedroom, and the front door. It learns each home's usual gaps between movements and raises one calm alert only when the rhythm breaks.

  • Home silence: no movement for longer than the greater of 3 hours or three times the home's usual daytime gap. Night-time stillness is never judged.
  • Morning checks: the front door is usually used before 12:00, and the kitchen before 10:00. An alert fires only when at least 4 of the last 7 days show that pattern.

The caregiver view shows the house state, each alert in plain words, the rules behind it, and whether the Ring feed is working. It never shows video or audio.

How we built it

  • Webhook intake: Ring's signed webhooks are verified with HMAC-SHA256 over the raw body, using X-Signature and a constant-time comparison. Duplicate event IDs are ignored.
  • Rules: a pure analysis module takes the events and the current time, and returns the status and alerts. Times are converted to the home's time zone (IST).
  • Storage: SQLite from the Python standard library, with 14-day retention.
  • Access: a caregiver bearer token, required in production. The app refuses to start without the webhook secret and a token of at least 16 characters.
  • Operations: JSON logs with status codes and counts only, per-client rate limits returning 429, and /healthz and /readyz endpoints.
  • Interface: one static HTML page with a canvas floor plan, a rules panel, and accessible contrast and motion settings, checked at 360px and desktop widths.
  • Ring client: token exchange, refresh and device listing against Ring's Partner API. Device listing and the event-history path were checked in Ring's Developer Playground. ## Challenges we ran into
  • Ring's documentation disagreed on webhook authentication. We followed the notifications reference and logged the difference.
  • Ring documents no contact-sensor event type, so we dropped the planned medicine-box check and replaced it with a kitchen morning check that uses only motion events.
  • Event-history timestamps are epoch milliseconds, while webhooks use ISO 8601. We handle both.
  • We couldn't test a real webhook from a Ring device, because the developer account has no physical device yet. The demo data is simulated. ## Accomplishments that we're proud of
  • Signed webhook intake that refuses unsigned requests with 401, verified against the live public endpoint.
  • A rules engine that is pure, time-independent and covered by tests, with 66 unit tests passing on a fresh clone of the public repository.
  • A feed-health report, so a broken Ring connection is never mistaken for a quiet home.
  • A product that says what it cannot see, and never shows video or audio. ## What we learned A caregiving signal can be useful without video, if it is built around a home's own rhythm and is honest about its limits. Designing for silence was harder than designing for alerts: a quiet home and a broken feed look the same, so the status reports feed health separately. ## What's next for Quiet Hours
  • Ring account linking, so a real household can connect its own devices.
  • A real webhook test from a Ring device, to confirm the payloads end to end.
  • Room setup in production, through the linked devices.
  • Persistent storage on the hosting platform, so history survives redeploys.
  • A caregiver notification channel, so alerts reach the family without opening the page.

Built With

Share this project:

Updates

Submission history