Inspiration

Smart doorbells capture our most critical home security moments, but getting raw footage out of proprietary ecosystems into independent storage has always been surprisingly difficult. Like many smart home tinkerers, we initially tried connecting motion triggers to cloud drives through simple no-code automation platforms like IFTTT. We quickly hit two walls:

  1. Missing Media URLs: Event triggers notify you when motion begins, but they never expose direct, downloadable video links due to authentication restrictions.
  2. Processing Delays: A video recording isn't actually finalized and rendered on cloud servers the exact second motion triggers. Standard automations fire instantly and fail because the file isn't ready.

We wanted true data ownership over our footage without relying exclusively on manual app exports or locked-down subscriptions. This inspired us to build RingArchive—a robust bridge that bridges the gap between motion alerts, server-side processing delays, and persistent personal cloud storage.

What it does

RingArchive is an automated, private-by-default archiver for Ring doorbell footage.

  • Polls the official Ring API: Every 15 minutes a Lambda calls the Ring Developer Platform API (api.amazonvision.com) to list devices and new motion/ring events.
  • Delayed, safe fetching: Only finalized recordings are downloaded, so clips aren't grabbed before Ring has finished processing them.
  • Private AWS archive: Each clip is stored in my own S3 bucket (Block Public Access, encryption, versioning, Glacier lifecycle for older clips).
  • No duplicates: DynamoDB tracks every event, so re-runs skip anything already archived.
  • Dashboard and export: A Flask dashboard shows counters, one list of events and archived clips, a built-in video player, bulk select, and export to disk, Dropbox or Google Drive.

How we built it

Built with Kiro using its spec-driven workflow (requirements, design, tasks), with the Ring App Store knowledge MCP wired in for API docs, and Codex helping produce the demo. Python 3 for the Ring client, archiver and Flask UI; AWS SAM deploys a scheduled Lambda, S3 and DynamoDB in eu-west-2, with optional Amazon Bedrock clip summaries. Tested end to end against the Ring Developer Playground motion simulator, with unit tests for the dedupe logic.

Challenges we ran into

  • Ring Playground access tokens last about 30 minutes and can't be paired with a refresh token, so the app runs in access-token mode and keeps secrets out of git via .env.
  • Making re-runs idempotent with DynamoDB conditional writes.
  • Windows + WSL tooling friction while setting up the AWS tooling and Kiro.

Accomplishments that we're proud of

A simulated Ring motion event travels from the official Ring API into a private, encrypted S3 bucket automatically, is skipped cleanly on the next run, and can be played and exported from the dashboard, all built inside the hackathon window.

What we learned

How Ring's event and media API fits together, how much faster Kiro's spec-driven flow makes a small serverless build, and how to keep a personal data pipeline private by default.

What's next for RingArchive

OAuth with refresh tokens for long-term unattended use, real-time webhooks instead of polling, automatic sync to Google Drive/Dropbox, multi-home and multi-camera support, smarter retention, AI-summary search, and alerts.

Built With

Share this project:

Updates

Submission history