A personal training tracker that replaces a Notion table with an auto-graded workout log, and adds an AI coach with direct access to your training history — for form checks, progress questions, and knowing when to back off before you ask.
A step-by-step wizard, one question per screen, rather than a single form — chosen deliberately even though the field list is short, since it reads as guided rather than like paperwork. Scope is intentionally minimal: basic profile only. Every field is skippable.
The core screen — a direct replacement for the user's Notion table. Every value is a plain, directly-editable input (steppers were prototyped and rejected). Empty sets show last session's numbers as ghost placeholders, so the target is always visible without leaving the screen.
| Result | Meaning |
|---|---|
| Green | Better across the board — same or more weight, same or more reps. |
| Red | Worse across the board — same or less weight, same or fewer reps. |
| Yellow | Trade-off — most often weight up, reps down. Not strictly better or worse, but a real stimulus increase. |
Rest time is colored independently of weight/reps using the same green/red logic, and displays as m:ss once past 60 seconds.
Supersets group two exercises so rest is tracked only after the full round, not between them. Drop sets stay nested under their parent set — same exercise, an immediate weight drop, no independent rest.
"Dips" links to the same underlying exercise history wherever it's used — the ↑ also in Pull B tag is that connection surfacing inline. See §08.
History and planning in one view — the calendar doubles as a schedule, not just a log. Month grid, not an agenda list: color per split type, dashed border for planned sessions, solid for completed ones.
Blue = Pull · Orange = Push · Green = Legs · Dashed = planned
Two things live together here: a weight/measurements tracker up top, and a chronological highlight feed below — PR moments and regular trend entries mixed into one timeline rather than split apart.
Proactive check-ins (deload flags, "how are you feeling") arrive as ordinary chat messages waiting in the thread — not a push notification, not a separate card. It should feel like a coach texting you, not an app nagging you.
Templates are built manually — no AI-suggested starter templates — and grouped under a named program. Adding an exercise always searches the same shared database, which is what makes cross-template progress possible.
Not a schema — the entities this design assumes, so an implementation plan can start from something concrete.
Named grouping of templates. e.g. "PPL Program"
Ordered exercise-slots. Each slot: exercise ref, target sets/reps/warmup, optional superset-group id.
One instantiation of a template on a date. Has an iteration number. Completed or planned.
Belongs to (session, slot). Weight (or L/R), reps, rest, RPE, computed color, optional drop-set children.
Raised during design, deliberately deferred rather than decided against — worth resolving before or during implementation planning.