Strongr
A gym log for routines, sets, high-intensity techniques, history, and imported training data.
SvelteKit, Drizzle, PGlite

What it is
A personal workout log built for the gym: large controls, a rest timer, and a screen that stays awake during a session. You keep routines, log sets, and look back at history, personal records, and body measurements.
The live app is at https://strongr.duckdns.org. Sign-in is Google, limited to approved addresses. A /preview route shows the same screens with sample data, so anyone can click through.
What it does
- Routines hold the plan: exercise order, target sets, rep range, and machine setup.
- Sessions log sets and high-intensity techniques such as drop sets, rest-pause, and negatives.
- Personal records are computed from history, so they never drift out of sync.
- Body measurements sit beside training, including body-fat percentage.
- Years of history can be imported from Strong and Body Measurement Tracker.

Tech
| Piece | Role |
|---|---|
| Svelte 5, SvelteKit | UI, routes, and server actions |
| TypeScript | Workout state, imports, records |
| Drizzle ORM, PGlite | Schema, migrations, and an embedded Postgres on disk |
| Chart.js | Measurement and history charts |
| vite-plugin-pwa | Installable app with a service worker |
| Caddy | HTTPS in front of Node on an Oracle Cloud VM |
Challenges
- A workout is a stream of small writes. Each change is one operation, queued in order on the client and run in a transaction on the server.
- Records come from history. Bests are queried from completed sets instead of stored twice.
- Two exports, neither matching the schema. Importers map names, durations, and units onto the app's own data.