Cortana
A control panel for the lights, sensors and camera in my home that runs on a small computer in the house instead of on manufacturers' servers.
The problem
Smart-home devices usually come with one app per brand, and each app routes your home’s data through the manufacturer’s cloud. If their servers go down or the company changes its terms, your lights and sensors stop working or start sharing more than you agreed to.
I wanted the opposite: one place to see and control everything, running on hardware I own, that keeps working when the internet doesn’t. I also wanted to understand, hands-on, what it takes to integrate systems that were never designed to work together.
What it does
One dashboard for every device
Sensors, lights, plugs and cameras from different brands on one rearrangeable dashboard, with live updates.
Automations
Rules triggered by a schedule, a device change or sunrise and sunset, with conditions such as thresholds and time windows.
Sensor history
Temperature and humidity stored locally and charted over time.
Local camera view
The camera stream is pulled over the home network and converted for the browser on the server. No video goes to a vendor cloud.
Private remote access
Reachable from my phone anywhere through Tailscale, a private network. Nothing is exposed to the public internet.
Screens
All screenshots use made-up demo data.






Architecture
In words
Zigbee sensors talk to a USB radio on the mini PC. Zigbee2MQTT translates their messages and publishes them on a local MQTT broker.
The backend has one adapter per device family. Each speaks the device's local protocol and turns it into the same internal shape, so the dashboard and automations stay the same whatever the brand.
State and history go into SQLite on the same machine. Live changes reach the browser over WebSockets.
Everything runs in Docker on one mini PC. The only way in from outside is my private Tailscale network.
How I built it
I started from a principle, not a feature list. The home should keep working without the internet, and no company should hold the data about what happens inside it.
I designed the architecture, including a common adapter pattern so each device brand plugs in the same way, and wrote the requirements per integration. The code was written with Claude Code. I reviewed it and debugged it on real hardware.
Running it taught me what operating a system means compared with building one. Silent failures, a Wi-Fi roaming problem and device quirks took more time than the features did.
Tech stack
- Frontend
- Backend
- Devices
- Infrastructure