-
Guided step-by-step provisioning: connect the ESP32, send Wi-Fi credentials, set a password for the Home Hub, and pair.
-
The main screen. Live stream fills the top (offline here), Start/Stop camera controls sit below, and the clip archive loads beneath.
-
App generates a one-time password for guests or parcels.
-
Set daily arm/disarm times and push them to the ESP32 automatically.
-
Motion triggers a full-screen alert. Was it you? Tap yes to dismiss, no to escalate.
-
You said it wasn't you. Alarm is active — one tap calls 911.
-
Phone dialer opens pre-filled with 911. Just tap Call.
Inspiration
Home security shouldn't cost $30 a month just to keep your own footage. Ring and Nest work great — until you stop paying and your recordings disappear. We wanted to build something where you own everything: the hardware, the footage, the data. No subscription. No middleman. That was the starting point.
What it does
SentriHome turns a Raspberry Pi and a cheap camera into a real security system. When motion is detected, it records a clip, saves it to the cloud, and pushes an instant alert to your phone — in under a second. The app shows a full-screen "Was it you?" prompt. Say yes and a cooldown kicks in. Say no and you're one tap from calling 911. You also get a live camera stream and a browsable archive of every recorded clip, all from an Android app you build yourself.
How we built it
Four moving parts that all had to talk to each other: a Raspberry Pi running the camera and motion detection, an ESP32 handling local Wi-Fi setup, a Node.js backend on the cloud storing clips in S3 and routing alerts, and an Android app in Jetpack Compose tying it all together. Alerts are delivered over Server-Sent Events so they arrive instantly instead of waiting on a poll. The app connects once and listens — the moment the Pi sees motion, your phone knows.
Challenges we ran into
Integration was the hardest part. Every layer worked fine in isolation and broke the moment it had to talk to the next one. OAuth deep links that Chrome silently dropped. SSE streams that ngrok killed after 30 seconds of silence. Memory leaks from HLS segments accumulating in S3 with no cleanup. Merge conflicts from two branches that had diverged so far they barely recognised each other. There were a few nights where we genuinely considered scrapping the whole thing and starting over. We didn't.
Accomplishments that we're proud of
Honestly? That it works. Not in a demo-only, happy-path kind of way — it actually works. You trigger motion on the Pi, your phone lights up with an alert in under a second, you tap a button, and the system responds. Watching that full loop complete for the first time — hardware to cloud to phone — was the moment that made all of it worth it.
What we learned
SSE is criminally underused for real-time mobile alerts. WebSockets get all the attention but for one-way push, SSE is simpler, needs no library, and works through any proxy. We also learned that edge provisioning — getting a phone to configure a device it's never met before over a temporary Wi-Fi hotspot — is deceptively hard and deserves way more respect than it gets.
What's next for NAIS_SentriHome
Door and window sensors feeding into the same alert pipeline. An AI layer that can tell the difference between a person and a cat before it wakes you up at 3am. And a smart curtain opener — so the system can physically block visibility into the home the moment an alert fires. The hardware foundation is already there. The rest is software.
Built With
- c++
- javascript
- kotlin
- node.js
Log in or sign up for Devpost to join the conversation.