Timo Remy - Software developer

← Back to index#001

Product film
Period view of three simulated months, 67% time in range, GMI 7.0%, average 154 mg/dL and 39% variability, each scored against the clinical goals.
Time in ranges, scored against the clinical goals
Day view of 25 September, a short low at night and another after lunch, and a breakfast spike to 291 mg/dL lasting almost four hours.
Any day, hour by hour
Ambulatory glucose profile over 24 hours, a median curve with the 25 to 75 and 5 to 95 percentile bands.
The typical day, as an AGP profile
Calendar of daily time in range over three months with low episodes flagged, next to 117 episodes and a histogram of when they start.
Every day at a glance, every low explained
Heatmap of median glucose by weekday and hour, with time in range for each weekday.
Weekly patterns, hour by hour

Dexcom Archive

Intent

A self-running archive of continuous glucose monitoring data, with clinical-grade reports computed offline in the browser.

Why

Vendor platforms decide how long data is kept and where reports run. I wanted years of data in open formats, and reports that run anywhere, without a server.

Three repositories form one product, joined by a single contract: the SQLite schema.

  • Collector (Python, GitHub Actions). A daily job pulls every record from the Dexcom API v3. Each run re-reads the last two days, so a missed run heals itself. Writes are idempotent, the rotating OAuth token is stored encrypted (AES-256-GCM), and a failure or stale data opens an issue on its own.
  • Archive (SQLite). One file per year, append-only, with a schema that only grows. SQLite, DuckDB or Datasette read it as is.
  • Dashboard (Next.js, DuckDB-WASM). The archive becomes Parquet and SQL runs in a browser worker: time in range, AGP percentiles, a daily calendar, episodes, a weekday by hour heatmap. Charts are hand-written SVG, and every metric is checked against a Python reference implementation.

Extensible by construction: a new data source is one endpoint and one table on the collector side. The dashboard reads the schema, never the collector, and tests lock the contract on both sides.

Health data stays private: the repositories are private and the dashboard only listens on localhost. The film and the screens on this page show six months of simulated type 1 data, generated for the demo.