EsteCoach

Sign in

Your fitness coach who's seen every set you've lifted.

It reads your training, sleep, food and weight, and tells you how hard to go and what to lift. Every number comes from its own algorithms, never an AI guess.

A live demo on a made-up athlete, rebuilt every day.

Reviewing this as a portfolio piece? How it was built

EsteCoach turns a lifter's workouts, sleep, food and weight into one call a day: built for one athlete, shown here on a made-up one.

Three rules: no personal data in the code repo; every number comes from EsteCoach's own tested code, and the AI only explains it; one implementation per metric.

Designed and built by Stephen Sper.

Process, decisions and what broke along the way: HISTORY.md

Looking back · Tue 11 Aug 2026

How should you train today?

40
Take it easy

Held back by sleep.

Training loadcontextwatch

last 7 days averaged 24 exercise min a day vs 32 over the last 4 weeks (0.77×): a light week, build back up rather than going all out; 4 rest days in the last 7, with a mix of longer and shorter sessions (monotony 0.9)

Effort (RPE)contextgood

sessions felt RPE 7.7 over the last 7 days vs 8.5 in the 4 weeks before

Sleepvotesstrain

4.6 h last night; 6.2 h a night over the last 3 nights vs 6.9 h over the 30 before

HRV & resting HRcontextgood

HRV 48 over the last 7 days vs 45 over the 30 before; resting HR 59 vs 60, same windows

How you feelcontextno data

nothing in your notes for today or yesterday

Nutritioncontextgood

eating 2,242 kcal a day over 2 complete days of the last 4 vs ~2,652 to maintain (4-week trend); protein 139 g a day over the same days vs 144 g target

Weight-loss pacecontextgood

losing 0.32% of body weight a week (last 4 weeks vs the 4 before): not fast enough to cost recovery (above 1% a week); this checks too fast, not too slow

i

Only areas with a record vote: an area votes once your sessions on its flagged days have gone worse than on its clear days (see Is the call working?). The rest are shown as context. Take it easy with one voting area in strain or two to watch, rest with two in strain. Going hard needs a reason that has itself gone with better sessions, never just nothing flagged. A safety rule (a health note, or coming back from a near-idle stretch) makes it a take-it-easy day whatever the record says. The score sits inside the call's band (rest 0–24, take it easy 25–49, as planned 50–74, go hard 75–100), higher the more areas are clear.

Today's session

Push B · Barbell Military Press
i

Next in your push → pull → legs rotation after legs on Sat 8 Aug. Exercises from your last Push B (Wed 29 Jul); each target comes from the last time you did that exercise.

Each target comes from the last normal session of that exercise; deload days never set one. Main lifts: an estimated max from that session's sets and their RPEs, 5 lb more, and the reps that would land at RPE 8–9.5. A missed target holds the weight. Accessories: add a rep up to 12 (15 for calves, laterals, shrugs, face pulls, leg extensions, flyes), then add load and drop to the bottom of the range. Bodyweight: beat the last total reps by 1–2. No RPE logged: repeat it. A take-it-easy day is 80% of last time's sets and weight; a flagged back makes it 60%, every lift still in.

Take it easy: every lift at 80% of last time's sets and weight. Stop each set by RPE 8.
ExerciseTodayWhyLast time
Barbell Military Press 95 × 5, 95 × 5
deload
20% off last time (120 × 5, 120 × 5, 120 × 4); stop each set by RPE 8 120 × 5, 120 × 5, 120 × 4 · Wed 29 Jul
Dumbbell Bench Press 60 × 7, 60 × 7
deload
20% off last time (75 × 7, 75 × 7, 75 × 6); stop each set by RPE 8 75 × 7, 75 × 7, 75 × 6 · Wed 29 Jul
Cable Overhead Tricep Extension 55 × 6, 55 × 5
deload
20% off last time (70 × 6, 70 × 5, 70 × 5); stop each set by RPE 8 70 × 6, 70 × 5, 70 × 5 · Wed 29 Jul
Dumbbell Lateral Raise 25 × 14, 25 × 14
deload
20% off last time (30 × 14, 30 × 14, 30 × 14); stop each set by RPE 8 30 × 14, 30 × 14, 30 × 14 · Tue 4 Aug