Sentinel
Live dashboard for a tamper-evident enclosure. An ESP32-C6 watches three sensors, zeroizes its key on breach, and pushes the event over WiFi so it is visible remotely.

A hardware lab project with a software half. The device is an ESP32-C6 inside a protected enclosure, watching a reed switch, an LDR and a capacitive touch sensor. On breach it zeroizes a cryptographic key in flash, fires local alerts, and POSTs the event to this dashboard so the breach is visible from anywhere on the network, not only on the device.

The whole system. Three sensors feed the ESP32-C6; on tamper it wipes the key from NVS, lights the red LED, sounds the buzzer, updates the OLED, and pushes the event over WiFi.
How it works
The device sends tamper and heartbeat events to a small Flask backend that stores them in SQLite and serves them over a JSON API. The frontend polls that API every four seconds and renders live status: secure or breached, last seen, battery, sensors armed, uptime. No page reloads, no hardcoded data.
- Device-facing
POSTs require a shared secret in anX-Device-Secretheader. Reads are open on the LAN. - One
eventstable. Heartbeats update last-seen and battery but are kept out of the event log. DEV_MODE=1exposes a simulate endpoint, so the UI can be driven through a real breach and re-arm without the physical device on the desk.

Breached. Every sensor shows tripped, the key-zeroized badge is up, the event log records the tamper with a timestamp, and the re-arm button is the only way back.
Flask serves the static index.html from the same origin as the API, so there is no CORS to configure. One process, no build step.