SteadySignal

An on-device continuous glucose monitor (CGM) companion for iPhone, designed around passive Bluetooth and clear, honest data.

External TestFlight betaSince July 2026; previews use simulated data

A silver iPhone showing the simulated SteadySignal dashboard, glucose history, and reading age.
External beta, simulated data
My role
Design & engineering
Stack
Swift 6SwiftUICoreBluetoothLocal storage
Status
External TestFlight beta

What I built

SteadySignal is a local companion to the official CGM app. Its receiver passively listens to the sensor’s Bluetooth readings while the official app keeps managing the sensor; it never pairs with the sensor or writes to it. The architecture keeps reading state, freshness, and storage explicit and testable, and the app has no network path at all.

Engineering decisions

Freshness without new events

Freshness is recomputed at age boundaries even when no new reading arrives. An old value cannot remain visually current simply because updates stopped. An injected clock makes those transitions reproducible in tests.

Receiver abstraction

A vendor-neutral ReadingReceiver feeds events into the view-model and storage path. Separating reception from presentation lets simulated data exercise the same interface and state transitions without requiring a live sensor.

Protected local storage

Readings stay on the device. Local atomic file replacement preserves iOS file protection and backup exclusion, and every write re-applies and verifies both on the replaced file, not only when the first file is created.

Privacy rules enforced in CI

Ten policy gates run on every code change. They fail the build if the app gains a network path, pairs with or writes to the sensor, shows a forecast or treatment advice, saves a reading without file protection, or adds an animation that ignores Reduce Motion.

Architecture

How a reading reaches the screen without leaving the phone.

  1. ReceiverPassive CoreBluetooth
  2. Reading stateInjected clock
  3. Local storeProtected atomic writes
  4. DashboardExplicit age & freshness

The tradeoff

SteadySignal complements the official app, receiver, and alerts. It does not provide dosing or treatment advice and is not a replacement for those systems. That boundary informs both the data flow and the language in the interface, and the CI gates keep it from eroding.

More engineering work