Workout App — Design Spec
Design Spec · Mobile App

Workout App

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.

Date2026-07-27
PlatformMobile (phone-first)
StatusValidated via visual review, pending build plan
Onboarding Workout Log Calendar Progress Coach Workouts
01

Navigation

Five items on the bottom bar. Coach sits in the center as a raised button — the app's most novel feature gets the most physical emphasis, rather than being one tab among equals.

Calendar
History of completed workouts + planned future sessions. §04
Workouts
Template library, grouped by program. §07
Coach
AI chat with access to training data. §06
Progress
Weight/measurements + PR highlight feed. §05
Profile
Account/settings — not designed in this pass.
02

Onboarding

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.

Note — "Ascend" is a placeholder name used only in these mockups; naming the app is unresolved (see §09).
03

Workout Log

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.

Color rule — per set, vs. your last time on that exact set

ResultMeaning
GreenBetter across the board — same or more weight, same or more reps.
RedWorse across the board — same or less weight, same or fewer reps.
YellowTrade-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 & drop sets

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.

Cross-template exercise identity

"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.

04

Calendar

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

05

Progress

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.

06

Coach

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.

07

Workouts

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.

08

Data model implications

Not a schema — the entities this design assumes, so an implementation plan can start from something concrete.

Program

Named grouping of templates. e.g. "PPL Program"

Template

Ordered exercise-slots. Each slot: exercise ref, target sets/reps/warmup, optional superset-group id.

Session

One instantiation of a template on a date. Has an iteration number. Completed or planned.

Set

Belongs to (session, slot). Weight (or L/R), reps, rest, RPE, computed color, optional drop-set children.

Exercise
A shared entity per user, referenced by any number of template slots across any number of templates. All history against it — regardless of which template logged it — is one series. Powers the "↑ also in Push B" tags and cross-template progress.
Weigh-in / measurement entry
A (date, metric, value) tuple. metric ∈ {weight, waist, arms, chest, …}
PR
Derived, not stored — a set is a PR if it's the best-ever for its exercise by some formula (see §09). Detected at log time; surfaces on the set badge and the Progress timeline.
09

Open questions

Raised during design, deliberately deferred rather than decided against — worth resolving before or during implementation planning.

  1. App name — mockups use a placeholder ("Ascend"); not chosen.
  2. PR formula — how a heavier low-rep set compares to a lighter high-rep set needs a concrete definition (likely an estimated-1RM style formula).
  3. Coach's authority over templates — the mocked conversation has Coach announce a plan ("I'll cut working sets to ~60%…"). Whether that auto-applies or needs explicit confirmation is unresolved.
  4. Profile tab — only exists as a nav slot; its content was never designed.