Developer (Solo) · 2026
Open SourceAmazon Developer Hackathon 2026Source-availableJirani
A privacy-first caregiving agent for older adults who live alone: it learns a daily rhythm from Ring sensors, never the camera, asks her first when a day breaks pattern, then a neighbour, then family with the evidence, and reports slow drift in plain words.






Problem
Sixty-three million Americans are family caregivers, and Amazon's caregiving subscription, Alexa Together, ended in 2025. What's left is calling every day, which feels like checking up, or a camera, which feels like spying, and timer alerts can't tell a lie-in or a weekend away from an emergency.
Approach
Statistics decide and the LLM only explains. A pure TypeScript rhythm engine learns robust baselines per Ring signal and detects deviations and slow drift; remembered context ("I'm at my sister's this weekend") suppresses false alarms; an escalation ladder asks her first by voice and on her Fire TV, then the neighbour, then family with the evidence, and only with her prior consent offers a look at the front door.
Tech highlights
An MCP server (spec 2025-11-25, stateless Streamable HTTP) with 10 tools filtered per speaker; a Strands agent on Amazon Bedrock running Amazon Nova that reaches Jirani only through MCP; six Lambda functions behind Function URLs and EventBridge Scheduler, one DynamoDB table with Streams, SES and Secrets Manager, all in AWS CDK; HMAC-verified Ring webhook v1.1 parsing; a Next.js dashboard with a voice client on Vercel behind Clerk; a React Native check-in card running on the Vega Virtual Device; 113 automated tests in CI.
Results
Submitted to the Amazon Developer Hackathon with a 2:30 demo. On 40 simulated households the drift test caught a three-week rise in night-time trips in 31 and falsely flagged 0 steady routines, and 1,024 signed events in Ring's documented v1.1 payload were accepted on AWS with 0 rejected. The event simulator built for it, ring-routine-sim, is published on npm.
Challenges
The Ring Developer Playground has no sensors and records no events, so every event-driven feature needed realistic data; the first webhook parser followed an older payload shape and was rewritten against Ring's documented examples; and an every-minute evaluator could race a replay and leave a stale alert open, so alerts now close themselves when late events show activity.
Written about this build
More like this


