A tracker built around progression, not logging
This foundation demonstrates deterministic double progression, plate math, and readiness modulation. Later deload and plateau workflows will use the same rule-first boundary: generated text may explain validated output but may not invent training numbers.
Double progression
Add a rep. Then add the load.
These two cards were computed by the actual engine when this page was built. Every target ships with its reason — auditable, always.
You topped out the range
102.5 kg × 5 @ RIR 2
“+2.5 kg because you hit 3x8 @ RIR 2 at 100 kg. Reps reset to 5.”
— engine output, doubleProgression(), docs/06 §2
You're mid-grind
102.5 kg × 6 @ RIR 2
“Same load (102.5 kg), aim 6 reps — weakest set was 5 last time.”
— engine output, doubleProgression(), docs/06 §2
Readiness · “Mana”
Bad sleep shouldn't wreck your program
A 30-second morning check-in (sensors phase in later) modulates the day. Always overridable, never punitive — the bands below are live engine output.
Good morning
82as planned
Readiness looks good. Train as planned.
Rough night
55reduce load
Readiness is mixed. Use the lighter working weights or keep the original plan.
Loads × 0.925
The wheels are off
28pump or rest
Readiness is low. Choose a light pump session, continue as planned, or rest today.
Loads × 0.8
Arithmancy
Plate math you never have to do again
Target 142.5 kg on a 20 kg bar, from a standard home-gym inventory — solved by the engine, warm-up ramp included.
Per side
Achieved: 142.5 kg — exact
Warm-up ramp (40/60/80%)
- Set 157.5 kg × 5
- Set 285 kg × 3
- Set 3115 kg × 2
- Working sets142.5 kg
And when it works
When progress is detected
The celebration component is implemented. Plateau detection and its ordered interventions remain roadmap work and are not represented as active in this foundation branch.
Celebration ≤ 2.5s, skippable, reduced-motion safe. The numbers underneath are never part of the joke.