Demo — synthetic 52-week history generated from a real lifter's current numbers (bench 140, squat 180, deadlift 220). Read-only.
Backtest
4.4 kg on the main lifts (n=164) · 3.4% relative error · 527 exercise-weeks scored, all exercises pooled · 8 Dec 2025 – 28 Sep 2026
Linear (simple)
chosen2.95 kg
MAE · n=527 · 80% coverage 69%
Holt (richer)
3.00 kg
MAE · n=527 · 80% coverage 74%
Persistence baseline (repeat last week's best): 3.10 kg MAE, coverage 66% — the chosen model is 4.6% better. An advanced lifter changes slowly, so “same as last week” is already a strong guess.
| Exercise | Linear | Holt | Repeat | 80% cov. |
|---|---|---|---|---|
Barbell Row at 8 reps · n=41 | 2.72 | 2.77 | 2.56 | 71% |
Bench Press at 5 reps · n=41 | 3.64 | 3.48 | 3.56 | 71% |
Dumbbell Curl at 8 reps · n=41 | 0.66 | 0.66 | 0.68 | 71% |
Lateral Raise at 8 reps · n=41 | 0.49 | 0.54 | 0.52 | 78% |
Overhead Press at 5 reps · n=41 | 3.38 | 3.33 | 3.67 | 61% |
Deadlift at 5 reps · n=41 | 5.52 | 6.06 | 5.87 | 63% |
Leg Press at 8 reps · n=41 | 8.25 | 7.74 | 8.77 | 73% |
Squat at 5 reps · n=41 | 5.21 | 5.59 | 5.89 | 68% |
Incline Dumbbell Press at 8 reps · n=39 | 1.20 | 1.35 | 1.25 | 67% |
Triceps Pushdown at 8 reps · n=39 | 0.96 | 0.97 | 0.89 | 67% |
Weighted Pull-up at 8 reps · n=39 | 0.92 | 1.08 | 0.97 | 72% |
Leg Curl at 8 reps · n=41 | 1.43 | 1.41 | 1.50 | 66% |
Romanian Deadlift at 8 reps · n=41 | 3.74 | 3.75 | 3.82 | 63% |
MAE in kg of working weight; the lower of linear and Holt is in bold. “Repeat” is the persistence baseline. n (weeks scored) and 80% coverage are for the chosen model. An honest 80% interval should cover about 80% of the weeks.
Barbell Row
working weight at 8 reps · MAE 2.72 kg · coverage 71%
How this is measured
Synthetic data. The demo history is generated from a real lifter's current numbers (bench 140, squat 180, deadlift 220 kg), not logged sessions — see data/README.md in the repo.
Rolling origin. For every week from the 9th week with data on, each model is fitted only on the weeks before it and predicts that week. The model never sees the week it is scored on, or anything after it. The current week is still in progress, so it is neither fitted nor scored.
What is predicted. The “working weight” scored here is the rep max at the exercise's target reps: next week's best set as an e1RM (Epley), converted back to a weight at the target reps, unrounded, so MAE is not flattered by 2.5 kg rounding. The plan then works 2 reps under it (~RPE 8).
Missing weeks are skipped. A week without sessions is missing data, not a zero; it is neither predicted nor scored.
Baselines. “Repeat last week” (persistence) is the bar any model has to clear. Between the two models, the richer one (Holt) is used only if it beats linear on overall MAE; ties keep linear.
Deload-week filter (tuned on this backtest). Weeks more than 7% under the median of the previous 3 weeks are treated as deload/sick weeks: left out of the fit but still scored. This rule was chosen while looking at this same backtest. Without it the MAE is 3.55 kg (linear) vs 3.25 kg (Holt), so Holt's linear trend would win.
Coverage 69% is below the nominal 80%. Leaving deload weeks out of the fit shrinks the residual spread, so the intervals get narrower while those weeks are still scored and fall outside them. Without the filter coverage is 84%, at a higher MAE (3.55 kg).