Workout coach
loading…trainer phone view
Next-session prescription loading…
The exercises of a past session run through this client's history and the progression rules (every set done → smallest jump; missed reps → repeat; three stalls → −10 %; bodyweight → +1 rep). Programmes rotate, so pick which session it follows. Open in session log puts it in the grid to adjust and save.
| exercise | last time | prescription | why |
|---|
Assessment
Deterministic rules computed in Rust from the log and the client's feedback; every item cites its arXiv source.
Next-session prescriptions
Loads from the weight-dependent 1RM formula (arXiv:2603.17495), adjusted for readiness / DOMS.
Body weight & projection
Weigh-ins from the sheet + logged; trend = linear fit over 120 d; projections integrate the Chow–Hall model arXiv:0802.3234
Intake log
Look up a food (Open Food Facts; USDA FoodData Central when
USDA_API_KEY is set), enter grams, log it. Daily totals are compared with the expenditure estimate and the protein target; the 7-day mean gives the logged energy balance next to the one inferred from the scale.per 100 g:
| date | meal | food | g | kcal | protein |
|---|
Diet targets
Progress photos
Sent by the client through the check-in link. Kept only in the encrypted record; never part of the AI context; deleted with the client.
Estimated 1RM
e1RM = w·(1 + (r−1)0.85/(−2.55 + 4.58·ln w)) — arXiv:2603.17495. Sets ≤ 12 reps; not always to failure → lower bound.
Trainer's PB table over time
Running maxima of the PB box at the top of each session block.
Muscle strength by group
Working max (best e1RM of the last 12 weeks) of every lift loading a group, as a body-weight multiple on the common beginner to elite standards ladder (a coaching convention, not from the papers; e1RM is arXiv:2603.17495). The body on the left paints the same: blue untrained, red advanced; switch it to 12-week progress in its controls.
| group | level | strongest lift | x BW | vs competitors | 12-wk trend | lifts counted |
|---|
Versus competitive powerlifters (OpenPowerlifting)
Lift catalogue
| lift | pattern | sessions | best e1RM | on | latest e1RM | 12-wk trend | last |
|---|
This week vs the plan
Working sets per muscle group this week (Mon–today) against the target on the profile, with the last-4-week average for context. For most people 8–12 quality sets per group per week is plenty; consistency beats volume.
Weekly volume load
Σ reps × kg per week (bodyweight moves counted at 0.5 × body mass — an assumption).
Acute:chronic workload ratio (EWMA 7 / 28 d, last 26 weeks)
EWMA λ = 2/(N+1) — 1706.04336; uncoupled chronic window & 0.8–1.3 band — 1907.05326
Fitness – fatigue (Banister impulse-response, last 52 weeks)
P(n) = P₀ + Σ w(i)[k₁e^{−(n−i)/τ₁} − k₂e^{−(n−i)/τ₂}] — 2505.20859
Movement-pattern balance (last 8 weeks, sets)
Set counts by pattern from the log.
Recovery by muscle group
Residual fatigue = sets over 28 days decayed with a 2.5-day time constant (the DOMS window), capped, raised to the latest DOMS rating. The body on the left shows it: blue fresh, red fatigued, grey nothing logged in 28 days.
| group | state | fatigue | sets 7 d | sets 28 d | last trained | DOMS |
|---|
Sessions
| date | # | src | status | programme / notes | sets | reps | load kg | exercises |
|---|
Week
Your bookings across all clients. Click a free slot to book; click a booking to move it, mark it done, cancel it (client or your reasons) or note a no-show. Package sessions are counted by the policy below; a client cancelling inside the late window counts as a session when that policy is on.
Coming up
Next two weeks, with what each session costs the client's package.
Sessions & packages
For the selected client: single sessions, pay-as-you-go, or a block of 6 / 12 / any number. A block is used up by done sessions, no-shows and late cancellations (policy). The client list warns when one session is left.
| bought | type | used | left | expires | note |
|---|
Working hours & policy
Slots are offered inside these hours. Late-cancel window and whether a late cancellation or a no-show uses a package session.
Log a session new
Same columns as the trainer's spreadsheet. Start typing an exercise: the client's own exercises come first (with what they did last time), then the library. Picking one fills sets, reps and weight from the last performance plus the progression rule (shown in italics until you edit them). Notation as in the sheet: sets
3, reps 5/8-10/3X5+/10SEC, weight 70, 80, 95K/15S (dumbbell pair)/BW. A row with an empty exercise adds sets to the row above.
Spreadsheet keys
Enter down · Shift+Enter up · Tab next cell · ←↑→↓ move (left/right at the edge of the text) · Shift+click / Shift+arrows / drag select a range · Ctrl+C Ctrl+X Ctrl+V copy, cut, paste ranges (works with Excel) · Delete clear range · Ctrl+D fill down · Ctrl+Z / Ctrl+Y undo, redo · Esc cancel the edit · Alt+↑/↓ move row · right-click a row for insert / duplicate / delete · click a row number to select the row. Drafts are kept in this browser until saved.| Exercise | Info | Warm up | Sets | Reps | Weight | Rest | Comments | Complete |
|---|
00:00
What this session hits type exercises above
Live from the grid: sets per muscle group via the exercise library; the body on the left paints it (blue nothing, red most sets, secondary muscles faint). Use it to spot gaps before you save.
Coach's suggestions rules + AI
Per exercise, from the client's own history: every set completed → smallest jump (+2.5 kg upper body, +5 kg squat/hinge, +1 kg per dumbbell); missed reps → repeat; three stalls → −10 % deload (arXiv:2511.17610); bodyweight → +1 rep; timed → +5 s. Loads are shown as % of the weight-dependent e1RM (arXiv:2603.17495). The AI coach then reviews the whole draft — it needs the OpenRouter key and the client's AI-coaching consent (Settings), and sees a pseudonymised context.
Type exercises in the grid to get suggestions.
Programme block none
A few named sessions rotated in order (e.g. A / B, or push / pull / legs) with a lighter week every few weeks. The next-session card on the Overview follows the rotation; each template is filled with the client's last loads and the progression rules (leave weight blank to use history). Build one from past sessions or edit the rows here.
Balance of the plan
Sets per muscle group in the grid vs the last 28 days of training.
Logged sessions
Stored in the client's encrypted record; merged with the spreadsheet for every metric.
| date | # | programme | notes | rows | RPE |
|---|
Client check-in new
Record what the client reports (in person, by message, or from a check-in link): morning wellness items as in arXiv:2005.09024 (5 = best) and DOMS per muscle (click the body: 0→5, 5 = worst) as in 2608.06290. To let the client fill it in themselves, create a check-in link below.
DOMS, click muscles on the body to rate soreness
Each click adds one level (0 to 5, 5 = worst); a sixth click clears it. Saved with the feedback entry.
Readiness today
Combines wellness, sleep, DOMS and the load model into one call (cf. the Athlete Readiness Score in 2608.21530).
Wellness history
Mean of the 1–5 items, as % (5 = 100 %).
Feedback entries
| date | session | source | sleep h | wellness | DOMS | pain | notes |
|---|
Pain & injury log
What hurts, since when, and what to keep away from. Active entries put a warning on any planned exercise that loads the site or matches an avoid keyword (in the planner, the next-session card and the phone view). Ordinary clients rarely need rest — they need a substitute; note it in the description. Mark resolved when it is gone.
| since | site | what / substitute | avoid | status |
|---|
Browse the library
Pick a muscle group on the body or in the filters, or type a name. Hover a card to see its muscles on the body; pin keeps it there.
Coach (OpenRouter)
What the coach sees: a pseudonymised metrics JSON — no name, no phone — with the body-weight trend and diet targets, training load and readiness, lift e1RMs, recent sessions, feedback summaries and logged intake, plus the rule-based insights. Requires the client's AI-coaching consent (Settings → Profile). Answers are rendered sanitised.
Profile
Facts that are not in the spreadsheet. Body-fat % is estimated from BMI (Deurenberg) when empty.
This client's data
Export a copy, bring history in from another app, or erase everything. Kept in one encrypted file; nothing leaves the server without you.
Import history
Strong or Hevy CSV exports become logged sessions; an Apple Health body-mass export or a
date,weight file becomes weigh-ins. Days already on file are kept.Right to erasure
Removes this client's spreadsheet, log, weigh-ins, feedback, intake, photos, injuries, programme and profile, then compacts the file. Export first if the client wants a copy.
Your account
Signed in as . Change your password here; sessions on other devices stay signed in until they expire.
Papers, textbooks and data sources
Every model cites its arXiv paper (downloaded to
papers/); open textbooks are linked for the physiology; datasets and licences are listed for attribution.| arXiv | title | used for |
|---|
- The Physiology of Exercise (Rosie Lanphere, open textbook): bioenergetics, metabolism, cardiovascular and endocrine responses.
- Biomechanics of Human Movement (Hamm, open textbook): kinematics, kinetics, work and power, mechanisms of injury.
- Basic Foundation of Nutrition for Sports Performance (Byerley, LibreTexts): digestion, energy, macronutrients, hydration.
- OpenPowerlifting (CC BY-SA 4.0): competitor percentiles on the Strength tab.
- Open Food Facts (ODbL) and USDA FoodData Central (public domain): food lookup.
Getting started
AI coach (OpenRouter)
One key for the whole studio, kept in the encrypted store and only ever sent to OpenRouter. Trainers see whether the coach is on, never the key. An
OPENROUTER_API_KEY environment variable seeds it.Store:
…Accounts
You are admin, the deployment account. Onboard trainers with a welcome link: they choose their own password, nothing travels by message. Trainers see only their own clients; viewers are read-only (a physio, or a client looking at their own record).
Admin password
Set at deployment from
WC_ADMIN_PASSWORD, or generated and written next to the database. Change it here; the file is removed once you do.Data, retention and backups
Everything lives in one encrypted SQLCipher database (
, key from ). Retention deletes feedback, intake, weigh-ins and logged sessions older than N days for every client.Backups
Writes an encrypted copy of the database (verified by reading it back) into the backup folder. With a passphrase the key is sealed next to it, so the folder alone restores anywhere:
workout-coach --restore file.db file.key.enc. Copy the folder to a cloud drive yourself; nothing is uploaded.Access log (last 100)
| when | who | action | client | detail |
|---|