Inspiration

Millions of people worry about a parent or relative who lives alone. A camera feels invasive, and a phone call every morning feels like surveillance. We wanted a gentler option that watches for the absence of an ordinary morning, not for activity.

What it does

Quiet Morning learns the usual rhythm of a home from Ring door and motion metadata only, never video. If a morning goes unexpectedly quiet it tells the right person first, then the next. Every alert comes with a reason and a confidence score: "Usually first activity around 07:32 on Sundays; today nothing by 08:10."

The signal engine keeps per-weekday baselines from eight weeks of history, can account for sunrise, and respects away mode, snoozes and "expect them late today" notes. It separates a quiet morning from a sensor problem: a device that went silent or is low on battery produces a device notice for the owner, not an emergency chain.

The escalation chain is designed for real families: an optional gentle hello to the person, then caregiver 1, caregiver 2, and finally emergency contacts who need no account, with a configurable wait between steps. Messages go by email, Telegram (with one-tap All OK / Need help buttons) or Web Push. Quiet hours hold back non-urgent pings. When one caregiver confirms, the others are told so nobody double-calls, and every attempt is logged on a History page.

Privacy is enforced in code: event payloads pass an allowlist before storage, media fields and URLs are dropped, owners set retention and can export or delete everything. This is not an emergency service, and silence is ambiguous.

How we built it

Django with Celery. Ring events arrive at a webhook that verifies Ring's documented signature (X-Signature: sha256=<HMAC-SHA256 of the raw body>), parses Ring's meta/data envelope (motion_detected, button_press, device_online, device_offline and more, matched on meta.account_id), deduplicates on Ring's event id and stores only metadata. Ring sends no battery webhook, so battery and online state come from polling GET /v1/devices/{id}/status. Rules, not a model, decide when to alert. On AWS the same path can run as a Lambda function URL, SQS, EventBridge Scheduler and RDS Postgres, with optional Amazon Bedrock wording and an advisory agent that can never suppress or delay an escalation.

Where the Ring technology is called in code

  • watch/ringapi.py: signature verification, Ring envelope parsing, the Partner API status client (api.amazonvision.com) and OAuth token refresh.
  • watch/webhook.py: the receiver; watch/tasks.py poll_ring_status: battery and online polling.
  • watch/simulator.py: a Ring event simulator. A web page sends webhooks signed like Ring's to the app's real /webhooks/ring/ endpoint, with a simulated clock and a phone view of the Telegram messages. Run RING_SIMULATOR=1 python manage.py runserver, open /simulator/.

Challenges

Absence-based alerts have to avoid false alarms: separating "quiet morning" from "sensor down", respecting quiet hours, and making sure confirming once stops the chain. Ring's documentation shows no battery webhook and no signed timestamp, which shaped the polling and replay-window design.

Built during the submission window

The first commit is from 2026-09-25 and the project was built for this hackathon: the signal engine, escalation and notifications, accounts and roles, Telegram/email/Web Push channels, the installable PWA, privacy controls, demo scenarios, the optional AWS layer, and 180 automated tests. On 2026-10-18 the Ring webhook was rewritten to Ring's documented format and the signed-event simulator and status poller were added.

What's next

Run against a live Ring integration and pilot with real families.

Built With

Share this project:

Updates

Submission history