Demo
A workout built around recovery
One invented profile, a three-week log made for the demo, and a plan for day 22. Code works out which muscles have recovered, which exercises today’s equipment allows, how many sets fit the time and every load. The model only picks from code’s list and explains its picks, and code checks what it sends back.
This is a simulation. No AI model runs on this page: the model’s reply is scripted and makes mistakes on purpose, and the profile, the log and every number are invented. The recovery windows and loads are demo settings, not training advice. Nothing you do leaves your browser or is kept, and reloading the page starts again.
Recovery on day 22 at 07:00
Wren’s log, days 1 to 21: 12 sessions and 2 outside workouts logged by hand. Goal: build muscle. A muscle counts as recovered once the hours since it was last loaded reach its window.
Chest: Recovered, 100%
Last loaded 85 hours ago; needs 72.
Back: Recovering, 51%
Last loaded 37 hours ago; needs 72.
Shoulders: Recovered, 100%
Last loaded 85 hours ago; needs 48.
Biceps: Nearly there, 77%
Last loaded 37 hours ago; needs 48.
Triceps: Recovered, 100%
Last loaded 85 hours ago; needs 48.
Quads: Recovering, 29%
Last loaded 21 hours ago; needs 72.
Hamstrings: Recovered, 100%
Last loaded 133 hours ago; needs 72.
Glutes: Recovering, 35%
Last loaded 21 hours ago; needs 60.
Calves: Recovering, 58%
Last loaded 21 hours ago; needs 36.
Core: Recovered, 100%
Last loaded 85 hours ago; needs 24.
The three-week log
- Day 1, legs day: Barbell back squat, 3 sets of 12, 10, 10 at 50 kg (comfortable); Dumbbell stiff-leg deadlift, 3 sets of 8, 9, 6 at 16 kg (partial); Barbell hip thrust, 3 sets of 9, 9, 8 at 40 kg (hard); Standing calf raise, 3 sets of 9, 10, 8 (hard); Plank, 3 sets of 12, 10, 11 (comfortable)
- Day 3, push day: Dumbbell bench press, 3 sets of 10, 12, 11 at 14 kg (comfortable); Dumbbell shoulder press, 3 sets of 8, 9, 6 at 10 kg (partial); Overhead triceps extension, 3 sets of 10, 10, 6 at 10 kg (partial)
- Day 5, pull day: Pull-up, 3 sets of 12, 10, 10 (comfortable); One-arm dumbbell row, 3 sets of 10, 11, 11 at 16 kg (comfortable); Dumbbell curl, 3 sets of 8, 9, 7 at 8 kg (hard)
- Day 6, legs day: Goblet squat, 3 sets of 11, 10, 11 at 16 kg (comfortable); Band leg curl, 3 sets of 10, 11, 11 (comfortable); Glute bridge, 3 sets of 8, 8, 6 (partial); Dumbbell calf raise, 3 sets of 10, 10, 9 at 12 kg (comfortable); Dead bug, 3 sets of 12, 11, 11 (comfortable)
- Day 8, push day: Barbell bench press, 3 sets of 12, 10, 10 at 40 kg (comfortable); Lateral raise, 3 sets of 11, 10, 10 at 6 kg (comfortable); Cable press-down, 3 sets of 8, 9, 6 at 15 kg (partial); Push-up, 3 sets of 10, 10, 9 (hard)
- Day 10, pull day: Seated cable row, 3 sets of 9, 10, 6 at 35 kg (partial); Chin-up, 3 sets of 10, 10, 11 (comfortable); Band curl, 3 sets of 11, 11, 11 (comfortable)
- Day 11, legs day: Barbell back squat, 3 sets of 8, 8, 6 at 52.5 kg (partial); Dumbbell stiff-leg deadlift, 3 sets of 10, 9, 6 at 14 kg (partial); Barbell hip thrust, 3 sets of 10, 12, 10 at 40 kg (comfortable); Standing calf raise, 3 sets of 10, 12, 10 (comfortable); Plank, 3 sets of 12, 12, 9 (comfortable)
- Day 12, outside workout: Hill walk, 50 minutes, logged by hand (quads, glutes and calves)
- Day 13, push day: Dumbbell bench press, 3 sets of 11, 12, 10 at 16 kg (comfortable); Dumbbell shoulder press, 3 sets of 8, 8, 8 at 8 kg (hard); Overhead triceps extension, 3 sets of 10, 11, 11 at 8 kg (comfortable)
- Day 15, pull day: Pull-up, 3 sets of 8, 9, 7 (hard); One-arm dumbbell row, 3 sets of 12, 12, 10 at 18 kg (comfortable); Dumbbell curl, 3 sets of 10, 10, 8 at 8 kg (hard)
- Day 16, legs day: Goblet squat, 3 sets of 10, 10, 11 at 18 kg (comfortable); Band leg curl, 3 sets of 12, 12, 9 (comfortable); Glute bridge, 3 sets of 8, 8, 8 (hard); Dumbbell calf raise, 3 sets of 8, 9, 6 at 14 kg (partial); Dead bug, 3 sets of 11, 12, 9 (comfortable)
- Day 18, push day: Barbell bench press, 3 sets of 10, 8, 8 at 42.5 kg (hard); Lateral raise, 3 sets of 9, 10, 8 at 8 kg (hard); Cable press-down, 3 sets of 11, 12, 11 at 12.5 kg (comfortable); Push-up, 3 sets of 9, 10, 6 (partial)
- Day 20, pull day: Seated cable row, 3 sets of 10, 10, 9 at 30 kg (hard); Chin-up, 3 sets of 8, 10, 8 (hard); Band curl, 3 sets of 9, 8, 9 (hard)
- Day 21, outside workout: Hill walk, 50 minutes, logged by hand (quads, glutes and calves)
Today’s choices
Today’s plan
Scripted model
Whatever is recovered: 17 sets in 5 exercises, 44:00 of 45:00.
Your choices changed. Build the plan again to see them here.
Dumbbell bench press
Chest
Worked out by code
4 sets of 8 to 12 reps, 90 seconds rest. Load: 18 kg each hand.
Felt comfortable at 16 kg on day 13: up one 2 kg step.
Chosen and explained by the model
Felt comfortable last time, so it is ready to progress.
Dumbbell shoulder press
Shoulders
Worked out by code
4 sets of 8 to 12 reps, 90 seconds rest. Load: 8 kg each hand.
Felt hard at 8 kg on day 13: the same load.
Chosen and explained by the model
Felt hard last time, so it stays in to build on.
Bench dip
Triceps
Worked out by code
3 sets of 8 to 12 reps, 90 seconds rest. Load: Body weight.
Not in the log yet: start at the bottom of the range.
Chosen and explained by the model
Not in the last three weeks of the log, so it brings some variety.
Band leg curl
Hamstrings
Worked out by code
3 sets of 8 to 12 reps, 90 seconds rest. Load: Medium band.
Felt comfortable on day 16 at 12 reps: the top of the range, so 12 again, then a firmer band.
Chosen and explained by the model
Felt comfortable last time, so it is ready to progress.
Hanging knee raise
Core
Worked out by code
3 sets of 8 to 12 reps, 90 seconds rest. Load: Body weight.
Not in the log yet: start at the bottom of the range.
Filled in by code
The model left this slot empty, so code took the next candidate. No reason from the model.
Session logged
Every set is logged at the planned load: 10 reps, and 9 on each exercise’s last set. Recovery now counts from the end of this session.
The file, read back in this page
How the plan was made
1Focus code
- Recovered today: chest, shoulders, triceps, hamstrings and core.
2Candidates code
For each focus muscle, the exercises today’s equipment allows, least recently done first. Up to 3 go to the model.
Chest
- Dumbbell bench press: last done on day 13, felt comfortable.
- Push-up: last done on day 18, stopped partway.
- Left out: Barbell bench press, needs a barbell and rack.
- Left out: Cable fly, needs a cable machine.
Shoulders
- Dumbbell shoulder press: last done on day 13, felt hard.
- Lateral raise: last done on day 18, felt hard.
- Left out: Barbell overhead press, needs a barbell and rack.
Triceps
- Bench dip: not in the log.
- Overhead triceps extension: last done on day 13, felt comfortable.
- Left out: Cable press-down, needs a cable machine.
Hamstrings
- Band leg curl: last done on day 16, felt comfortable.
- Left out: Dumbbell stiff-leg deadlift, also works back and glutes, still recovering.
Core
- Hanging knee raise: not in the log.
- Plank: last done on day 11, felt comfortable.
- Dead bug: last done on day 16, felt comfortable.
- Left out: Cable chop, needs a cable machine.
3Sets that fit the time code
- 45 minutes is 2700 seconds. A 5 minute warm-up takes 300, leaving 2400.
- One set: 10 reps at 3 seconds each plus 90 seconds rest, 120 seconds. Each exercise adds a 60 second change-over.
- 17 sets in 5 exercises: 17 x 120 + 5 x 60 = 2340 seconds of 2400.
- At most 6 sets for a muscle in one session, 3 for one still recovering, and 4 for one exercise.
4Choosing and explaining model, checked by code
- Main model: Replied. Here it is the scripted stand-in, not a real model.
What code sends the model
{
"goal": "build muscle",
"prescription": {
"reps": "8 to 12",
"rest_seconds": 90
},
"slots": [
{
"muscle": "chest",
"exercises": 1
},
{
"muscle": "shoulders",
"exercises": 1
},
{
"muscle": "triceps",
"exercises": 1
},
{
"muscle": "hamstrings",
"exercises": 1
},
{
"muscle": "core",
"exercises": 1
}
],
"candidates": [
{
"muscle": "chest",
"options": [
{
"id": "db-bench",
"name": "Dumbbell bench press",
"last_time": "comfortable"
},
{
"id": "push-up",
"name": "Push-up",
"last_time": "partial"
}
]
},
{
"muscle": "shoulders",
"options": [
{
"id": "db-press",
"name": "Dumbbell shoulder press",
"last_time": "hard"
},
{
"id": "lateral-raise",
"name": "Lateral raise",
"last_time": "hard"
}
]
},
{
"muscle": "triceps",
"options": [
{
"id": "bench-dip",
"name": "Bench dip",
"last_time": "new"
},
{
"id": "db-extension",
"name": "Overhead triceps extension",
"last_time": "comfortable"
}
]
},
{
"muscle": "hamstrings",
"options": [
{
"id": "band-leg-curl",
"name": "Band leg curl",
"last_time": "comfortable"
}
]
},
{
"muscle": "core",
"options": [
{
"id": "knee-raise",
"name": "Hanging knee raise",
"last_time": "new"
},
{
"id": "plank",
"name": "Plank",
"last_time": "comfortable"
},
{
"id": "dead-bug",
"name": "Dead bug",
"last_time": "comfortable"
}
]
}
],
"reply_format": "JSON: picks, a list of { exercise, muscle, why }. Nothing else."
}What the scripted model sends back
{
"picks": [
{
"exercise": "db-bench",
"muscle": "chest",
"why": "Felt comfortable last time, so it is ready to progress.",
"sets": 5
},
{
"exercise": "db-press",
"muscle": "shoulders",
"why": "Felt hard last time, so it stays in to build on."
},
{
"exercise": "bench-dip",
"muscle": "triceps",
"why": "Not in the last three weeks of the log, so it brings some variety."
},
{
"exercise": "band-leg-curl",
"muscle": "hamstrings",
"why": "Felt comfortable last time, so it is ready to progress."
},
{
"exercise": "back-squat",
"muscle": "quads",
"why": "A strong choice to round out the session."
}
]
}Code’s check of the reply
- Passed: The reply is JSON with a picks list of 5 items.
- Fixed: Removed "sets" from the pick of Dumbbell bench press: the reply may not carry it, because set counts come from code.
- Passed: Kept for chest: Dumbbell bench press.
- Passed: Kept for shoulders: Dumbbell shoulder press.
- Passed: Kept for triceps: Bench dip.
- Passed: Kept for hamstrings: Band leg curl.
- Dropped: Barbell back squat: not on today's candidate list (quads: not a focus muscle today).
- Fixed: The model left a core slot empty, so code used Hanging knee raise, the next candidate.
5Loads code
From the last time each exercise was logged: comfortable goes up one step, hard stays, stopped partway comes down about a tenth. Each load and its reason is on the plan.
What the demo shows
- Recovery from the log. Each muscle’s hours since it was last loaded, by a session or by an outside workout logged by hand, against a recovery window of its own.
- A focus picked by code. Whatever is recovered, the next classic split day, or muscles you choose. Whatever is recovered also leaves out an exercise that works a muscle still recovering on the side; on a split day or your own choice, a muscle still recovering is held to fewer sets.
- Sets that fit the time. Code adds sets a muscle at a time while they fit the budget, counting sets rather than exercises, so a short list of candidates still fills the time.
- The model chooses and explains; code owns the arithmetic. The model only sees the candidates and only returns picks and reasons. Code removes a set count it tried to add, drops a pick that is not on the list and fills the slot it left empty.
- A plan even when every model is down. The providers are tried in order, and an offline planner in code builds the session when none replies.
- A real file format. The logged session becomes a sample activity file in the FIT layout (file id, sets, lap, session and activity), written byte by byte with its checks and read back in the page. It has not been opened in a fitness app.