EsteBot
Sign inYour 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
EsteBot 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 EsteBot's own tested code, and the AI only explains it; one implementation per metric.
Designed and built by Stephen Sper.
Looking back · Mon 19 Apr 2021
How should you train today?
No signal has a record of mattering for you yet, so the plan stands.
Training loadcontextno data
Effort (RPE)contextno data
not enough sessions with RPE yet
Sleepcontextno data
HRV & resting HRcontextno data
How you feelcontextno data
nothing in your notes for today or yesterday
Nutritioncontextno data
under 2 complete days logged in the last 4
Weight-loss pacecontextno data
not enough weigh-ins for a 4-week comparison
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.
Recovery
HRV – · resting HR – · slept – h
Recovery
Overnight HRV (ms)
No data yet.
Resting heart rate (bpm)
No data yet.
Sleep (hours asleep)
No data yet.
Load ratio (7-day vs 28-day)
No data yet.
Spinal load by day type, from your own sessions:
(0–3).i
Training calendar
February 2021
March 2021
April 2021
i
Hover a day for its sessions; click to open the page as of that day.
Body weight
– lb
Body weight
| Last 7 days vs the 7 before | not enough weigh-ins to compare (0 and 0) | ||
| Last 4 weeks vs the 4 before | not enough weigh-ins to compare (0 and 0) | ||
i
The goal date is a straight line at today's pace. Loss usually slows, so it's the pace you're on, not a promise.
The headline is the 14-day average, since one morning swings ±1.5 lb on water. The 4-week fit is a line through the last 4 weeks of weigh-ins. The two rows compare averages instead: the last 7 days against the 7 before, and the last 4 weeks against the 4 before, so they land near the fit but not on it. The weight prediction fits its own line since the cut started.
Planned pace: losing 0.5–1.0% of body weight a week (estebot.toml). A single week moves 2–3 lb on water and glycogen alone, so the 4-week line is the one to act on.
Goal: 165 lb
No weigh-ins in the last 14 days, so there is no trend to forecast from.
No data yet.
Strength
Best estimated 1RM, last 8 weeks
Strength
No weigh-ins in the last 14 days, so there is no body weight to compare against.
Nutrition
Nutrition
Running low means under 90% of the reference intake, from food and supplements; near an upper limit means 50% of it or more. kcal a day over 0 complete days of the last 14. The readiness card's nutrition line uses the last 4 days, so its number differs. Logged = Apple's burn (active + resting) minus Cronometer intake.
Measured = what the 4-week weight trend implies (lb/week × 3,500 ÷ 7).
For reference, 1.2–1.6 g per kg (0.54–0.73 g/lb) is the range usually cited for keeping muscle while losing weight. Reference: US Dietary Reference Intakes and upper limits, men 31–50.
Food counts only complete days where at least 80% of the day's calories came from foods that report the nutrient.
Supplements: Vitamin D3, Fish oil, every day, from supplements.toml.
Not enough food data to judge: Vitamin A, Vitamin C, Vitamin D, Vitamin E, Vitamin K, B1 (Thiamine), B2 (Riboflavin), B3 (Niacin), B5 (Pantothenic Acid), B6 (Pyridoxine), B12 (Cobalamin), Folate, Calcium, Copper, Iron, Magnesium, Manganese, Phosphorus, Potassium, Selenium, Zinc, Fiber.
Estimated from food logs and labels, not a blood test.i
Running low · last 28 days
No gaps on the days with enough data.
Predictions
3 open
Predictions
| Prediction | Resolves | So far | Target | Data logged |
|---|---|---|---|---|
| P-001 The cut keeps the planned pace, 0.5 to 1% of body weight a week, until it ends
line fitted since 1 May 2026 (0 weigh-ins)
|
Tue 29 Dec 2080 days |
no data yet | -1.9 to -0.9 lb/week | on track
weigh-ins: 0 of 181; longest gap 0 (max 7) |
| P-002 Squat, bench, deadlift and press stay within 5% of their pre-cut best
interim: 2025-11-28 to 2021-04-19 vs 2025-10-31 to 2025-11-27;
|
Tue 29 Dec 2080 days |
no data yet | not below -5.0 % | – |
| P-003 HRV ends the cut more than one SD above where it started
not enough HRV data
|
Tue 29 Dec 2080 days |
no data yet | on track
nights with HRV: 0 of 317 |
i
Interim progress only. Each prediction resolves in ledger.md by its criterion as written, including the judgement calls a number can't make.
Is the call working?
0 of 0 areas vote · 0 sessions graded
Is the call working?
Each session is graded on the share of its targets met, against the sessions within 45 days of it. Points are the difference between days an area was flagged and days it was clear.
| Area | Flagged / clear days | Flagged vs clear | Status |
|---|---|---|---|
| Reason to go hard: check-in | 0 / 0 | – | not enough data yet |
| Reason to go hard: last session | 0 / 0 | – | not enough data yet |
Targets met after each call
| Call | Recorded calls | Under today's rules, all history |
|---|---|---|
| Go hard | 74% (14) | – |
| Go as planned | 57% (32) | – |
| Take it easy | 44% (9) | – |
i
The call is graded against what happened after it. Recorded calls are the calls as they were made each morning; they are the real test, and they start empty. The made-up athlete has no mornings, so theirs are backfilled: each day's call made from only the data before it. Under today's rules replays every past session through the current votes; it was fitted on the same sessions, so it flatters the rule. If go-hard and take-it-easy days don't end up apart, the call isn't earning its place.
Training load
Last 7 days at – your 4-week norm
Training load
Exercise minutes
Hard sets
Tonnage, thousand lb
i
Exercise minutes are Apple's, from all activity. Hard sets are sets at RPE 7 or more, or every working set where no RPE was logged. Tonnage is logged weight × reps; pull-ups add sets, not pounds.
Load ratio is exercise minutes a day over the last 7 days divided by the same over the last 4 weeks, through yesterday. 1.0 is a normal week. Over 1.3 is a sharp jump and over 1.5 is where injury risk climbs; under 0.8 is a light week, flagged because a big session straight after one is the classic way to get hurt.