Project Active

PaulOS Fitness

A private, self-hosted workout tracker built for one-handed use mid-set, specified and designed end to end.

Type
Project
Status
Active
Started
2026-09-22
Themes
product-design, mobile-interaction, personal-software

Why it exists

The useful moment is standing beside the equipment with a phone, ready to begin. I wanted a fitness system that made starting and finishing a workout straightforward and made the results easy to find later. It began as a connected Notion workflow and became a private web app on my own site.

Approach

Data model. Exercise, Template, Program, Session. There are four session kinds (workout, run, mobility, activity) and a five-phase workout: check-in, warm-up, workout, cooldown, check-out. Programs are reusable queues with baseline, training and retest blocks, and retesting starts only when I press "Begin retests."

Decisions made before data existed. I switched from combined-reps logging to per-side logging for one-sided exercises before any sessions were recorded, so there was nothing to migrate. Points are computed from recorded data and never stored as counters, so they can't drift. Goals are standalone and can be an exercise, a template count or a program count.

Stack. Cloudflare Workers and D1 behind the site's existing Google login, with prefixed tables and routes scoped under one path. Before any destructive database operation I run a proof script that ends in a foreign-key integrity check. I also found and fixed a cross-tab storage loop that generated about 116,000 API requests in one morning, and confirmed it caused no billing.

Its own visual identity. A "concrete room with Weider-era gym colour": grey, square structure, with brass, cobalt, teal and oxblood used sparingly as meaning-carrying dots and lines. Azeret Mono carries data and chrome, and Switzer carries exercise names and big moments like the rest countdown. Day and Night themes follow the phone setting. A rework moved 13 navigation destinations into 6 grouped tiles and put the rest timer between sets instead of in the dock.

Process. I write findings into SPEC, LAYOUT, STYLE and AGENTS files and a coding agent implements from them. I review on a real phone, one screen at a time.

What I learned

Speed of logging beats everything else. My own critique is that the app still mostly takes data rather than giving feedback: the next work is one-tap pre-filled sets, progression charts and a "beat last time" target, and designing the moments that matter (set done, personal record, workout finished) by eye rather than by token specification. Native iPhone features and running tracking are explored, not built.

Tools

PaulOS Fitness

A private workout tracker built for one-handed use mid-set.

Active