Inspiration

A camera can show an arrival while leaving the important question unanswered: did the handoff happen, who owns the next step, and what happens if plans change? For a household expecting a caregiver or a small business waiting on a delivery, an alert is only the beginning. Accord turns that moment into a commitment with an owner, a deadline, and an explicit completion step.

Imagine a family coordinating a 10 a.m. check-in: the visitor is late and the camera is unavailable. Accord keeps the promised visit, proposed new time, and completion separate so people can agree on what happens next.

What it does

Accord is an independent Ring companion for coordinating doorstep handoffs:

  • Promise engine: track ownership, deadlines, observations, coordinator notices, and explicit completion receipts. An overdue notice can be acknowledged without completing the promise.
  • Visitor handoffs: share a scoped, one-use page where a visitor can propose a new time or explicitly attest to completion. Accepting a time proposal keeps the promise open. A receipt records a person's self-attestation; it does not independently verify identity or physical completion.
  • Saved-promise rehearsal: explore expected arrivals, camera outages, alternate handoffs, and overdue scenarios using a saved promise's deadline and instructions without changing the promise.
  • Three automation modes: advice-only recommends human review; bounded assistance requests confirmation; extended opt-in can prepare a visitor link after a human-observed arrival. None completes a promise from motion alone.

Ring video supports human review. Accord does not identify visitors, unlock doors, or send email or text messages.

How we built it

Accord uses JavaScript, Node.js, HTML, CSS, WebRTC, and Ring's device discovery and WHEP APIs. The backend keeps Ring credentials and private session-management URLs off the frontend. Receive-only video plays inside the app.

Unresolved stream cleanup is saved in a private journal. The video dialog and coordinator inbox provide a retry control, and pending records survive restart when the same data directory is retained. A record is resolved only after accepted provider deletion or an already-absent response is saved successfully.

The coordinator runs on loopback with local persistence. An optional visitor gateway exposes scoped visitor pages separately; remote sharing requires an independently configured HTTPS endpoint. Signed callback processing and human-reviewed event-history import are implemented. Automation uses explicit rules, with no language model at runtime. AI coding assistance supported development and testing.

Challenges

The central design challenge was separating camera activity, human observation, and completed handoffs. Unknown camera evidence must remain unresolved, and accepting a revised deadline must not imply completion.

Provider integration also required careful handling of short-lived tokens, WebRTC session lifetime, and cleanup failures. The official Playground enabled video development without a working physical doorbell, but its simulated video did not provide usable event history in our checks.

Accomplishments

Official Ring Playground video has played inside Accord without exposing its bearer token or private management URL to the browser. The handoff workflow supports negotiation, explicit one-use attestation, overdue notices, and saved-promise rehearsal across three modes.

The repository includes automated local tests for mode policies, visitor-link scope and reuse, negotiation, signed callback processing, persistence, durable cleanup recovery, and outcome calculations. Provider-dependent tests use fixtures; they do not establish live callback delivery or real-world outcomes.

What we learned

An arrival, an observation, and a completed handoff are different facts. Modeling them separately gives people clearer choices when plans change. Rehearsing those choices before a real handoff makes the workflow easier to understand.

What's next

Validate genuine signed callbacks, event-history delivery, physical-phone access, and participant outcomes. Develop authenticated household and business membership, hosted persistence, retention controls, and operational monitoring before offering a hosted service.

The current prototype runs as one local process. Demonstrations use staged handoff data and Ring Playground sample footage; they do not establish a real visitor's identity or physical completion.

Footage credit

Ring Playground Motion sample: “Birds on Feeders” by Michael Black, clipped by Ring. Original: https://vimeo.com/18707005. License: Creative Commons Attribution 4.0, https://creativecommons.org/licenses/by/4.0/. The demonstration includes excerpts of this sample with attribution. Handoff data is staged.

Developer friction log

  1. Simulation and event-history coverage. Generate a Playground token, run the Motion simulation, discover and map the device, then request Event History. We expected reviewable simulated events but received no usable events in the tested workflow. This blocked the history-based demonstration; we used WHEP video with explicit human observation instead. Priority: important. Suggested improvement: document which simulations populate video, history, and callbacks, with a reproducible end-to-end example.

  2. WHEP lifecycle diagnostics. Create a stream, play video, then request backend deletion. Some development requests returned HTTP 403 with limited diagnostic detail; successful requests returned HTTP 200. The cause of the rejected requests was not isolated. Accord retains unresolved sessions and exposes cleanup retry. Priority: important. Suggested improvement: actionable error codes and examples covering authentication headers and session lifetime.

  3. Local token refresh. Replace the server-side OAuth token and retry a provider operation. Accord currently requires a restart to load the replacement. Priority: moderate. Suggested improvement: clearer provider expiry/refresh examples and a smoother local configuration workflow in Accord. The restart requirement belongs to Accord, not the provider.

Built With

Share this project:

Updates

Submission history