Health Tracker
An installable PWA for workouts and cardio: routines with a guided runner and per-set timers, GPS-tracked walks and runs, bodyweight and streaks. FastAPI behind React.
- 2
- rewrites to get the architecture right
- 100%
- of API calls network-only by design
- 1
- install, phone and laptop
- FastAPI
- SQLAlchemy
- Alembic
- SQLite
- React
- TypeScript
- React Query
- PWA
The problem
Every fitness app I tried wanted a subscription, an account and my data. I train with a routine, and I wanted the phone to walk me through it set by set without any of that.
My role
Sole author — backend, frontend, PWA, deployment.
What I built
- 01
A guided workout runner: routines, per-set timers, an exercise library, bodyweight logging and streaks, built for one thumb in a gym.
- 02
Cardio recorded from GPS and the accelerometer for walks, jogs and runs.
- 03
Installable PWA with a service worker that precaches the shell only — the API is deliberately never cached, because stale health data is wrong data and a cached 401 would lock me out until I cleared site data.
- 04
Started offline-first on IndexedDB, found it wasn't worth the complexity for a connected phone, and rewrote it as a clean client/server split.
Outcome
It's what I actually use at the gym, and the one place my workout history lives.
Shipping it twice taught me more about offline-first trade-offs than any article did.