✨Inspiration💡
In almost every apartment society in India, the gate runs on one person: the security guard. A delivery rider arrives, the guard calls the flat on the intercom, and the resident says "send him up" or "no". The visit goes into a paper register that nobody reads. It works until it doesn't. The resident is at work and misses the call. Five delivery apps arrive in the same hour. A guard lets someone in without asking because he is tired of waiting. A visitor name is scribbled so badly that nobody can read it a week later.
We wanted to replace the shouted intercom call with a clear approve-or-deny decision that goes to the resident's phone, and to leave behind a log that anyone can search.
What it does🧩
• A visitor presses the doorbell at the gate, and a Ring button-press event reaches our server as a signed webhook. • The server finds which flat the visit is for and sends the resident a notification with a snapshot of the visitor. • The resident taps Approve, Deny or Leave at gate. • The guard's screen shows the decision in plain words, such as "Flat 402: delivery approved". • Residents can set pre-approvals ("cook, 8 to 9am daily" or "Amazon delivery today"). Expected visits are approved automatically, and anything unexpected still goes to the resident. • Every event and decision is stored in a searchable visitor log, with daily and weekly summaries for the society committee.
We are clear about what it does not do: Ring does not provide an access-control API, so Society Gate Helper records and communicates the decision. It does not unlock a gate or barrier.
How we will build it🎯
• A webhook server receives Ring events. It verifies the HMAC-SHA256 signature, replies with HTTP 200 inside Ring's 5-second limit, and deduplicates on request_id. • A small database stores flats, residents, pre-approval rules, visits and decisions. • A resident web app (mobile first) shows the notification and the three decision buttons. • A guard dashboard shows live decisions in large, plain text, designed for a phone or a cheap tablet at the gate. • Visitor snapshots come from the Ring media API. • A Ring event simulator that sends signed webhooks in Ring's real payload format, so the whole flow can be demonstrated and tested without a physical device. • AWS Bedrock classifies the visitor type from the snapshot and the delivery context.
Challenges we faced🧗
📌 No access-control API. We first imagined the app opening the gate. Ring does not offer that, so we reframed the product around approval, communication and logging, which is where the daily friction is anyway. 📌 Testing without a physical setup. Real device testing needs a Ring doorbell or camera, and the documented requirements are a US-located device with a Ring Protection plan. We built a signed-webhook simulator so the flow could be developed and shown anywhere. 📌 Strict webhook rules. The endpoint must answer within 5 seconds and handle duplicate deliveries, so we acknowledge first and process afterwards. 📌 Designing for the guard, not only the resident. A decision that nobody at the gate can read is useless, so the guard view is deliberately large and simple.
What we learned✍️
✅ How Ring's webhook, HMAC-signing and OAuth account-linking model works. ✅ That the useful version of "smart access" is often the decision and the record, not the lock. ✅ Designing for two very different users at the same moment (a resident on a phone, a guard at a gate).
What's next🔜
➤ Visitor pre-registration with a QR code for guests. ➤ Regional language support (Hindi, Tamil, Marathi and others) for notifications. ➤ A committee view with trends, such as peak delivery hours and repeat unknown visitors. ➤ Support for multiple gates and multiple societies.
Built With
- css
- deduplication
- event-history
- express-[or-next.js]
- hmac-sha256-webhook-signature-verification
- html
- image-snapshots)
- javascript
- node.js
- oauth
- react
- request-id
- ring-appstore-api-(button-press-and-motion-webhooks
- ring-event-simulator
- sqlite
- typescript
Log in or sign up for Devpost to join the conversation.