Anomaly mode
Default mode. When the device detects a suspicious event, it uploads a 10-second window in chunks. The server reassembles the segment, stores it, and triggers alerts for review.
Bachelor thesis at HEIG-VD / REDS: design and implementation of a secure backend and web UI for an IoT ambulatory ECG cardiac monitor.
Open demo at tb.urs-behrmann.chCardiovascular disease is the leading cause of death worldwide, and many arrhythmias are intermittent — a short hospital ECG can miss them. At the start of this bachelor thesis, the REDS institute already had an IoT device that acquires multi-lead ECG and flags suspicious events, but no complete chain to receive, store, and present that data securely to clinicians.
Heartbeats fills that gap: a Geruest/C++ server, PostgreSQL storage, and a secured website for cardiologists and technicians. The end-to-end demo was validated locally and on a public deployment at tb.urs-behrmann.ch.
The device talks to the server over HTTPS with token authentication. Two complementary acquisition modes cover both rare events and live review.
Default mode. When the device detects a suspicious event, it uploads a 10-second window in chunks. The server reassembles the segment, stores it, and triggers alerts for review.
A cardiologist starts live monitoring from the website. The device streams one second at a time; the 12-lead graph extends as samples arrive over WebSocket.
Browse patients and their ECG history on a chronological timeline.
Clinical-style multi-lead graph built for the web — view anomaly segments and live streams.
Invite a technician by email with a segment-scoped link and collect feedback.
Access control for cardiologists and technicians, with personal-data minimization (pseudonyms).
The server and static site run in one Geruest process: REST APIs for device upload and clinician actions, plus WebSocket push for continuous monitoring.
PostgreSQL stores patients, segments, and review metadata. The frontend is HTML, JavaScript, and Tailwind CSS with a custom 12-lead visualizer.
Deployment uses Docker Compose and Traefik for HTTPS. French and English UI are supported. The demo device (ESP32-C6) reads samples from microSD for end-to-end validation.