Targets that follow you.
The calibration release gave the app a baseline. This one closes the loop: when you clear a workout cleanly, the next session's prescription bumps. You see it on the row. The math behind the trend stops lying. And supersets finally feel like supersets.
Three big threads landed: auto-progression that shows up in the UI, block-aware supersets and circuits with prescribed rest, and a trend score that follows how training actually feels. Plus a long polish pass on the active-workout flow.
Auto-progression you can actually see
Quietly, since the calibration release, the backend has been remembering when you crush a workout. Hit every set's target cleanly, and the prescribed reps for that exercise nudge up by one for next session. Hit them again, it nudges again. Miss, and the target freezes where it is.
In v1.6.2 that work surfaces. When the app loads your workout, any exercise where you've earned a higher target now shows the bumped goal — and a small line at the top of the set list:
↗ Bumped 8 → 9 reps since last session
Same colour language as everything else affirmative (caliLightblue, low opacity, gone the moment you start logging). No popup. No "tap to acknowledge". Just a quiet "here's what's different today".
Two progression tracks, not one. Bodyweight exercises bump on reps — the app is gradually pushing your pull-ups from 8 to 10 to 12. Weighted exercises bump on kg via the prefilled-weight path that's been there since the weighted-lifts release — bench press goes from 80 to 82.5 to 85 when you clear all working sets. Stacking both on the same exercise would produce ~15 % volume jumps in a single session, so each exercise auto-progresses on the one axis that makes sense for it.
Supersets vs circuits — properly, now
ZenMotion has had circuit-grouped exercises for a while: warm-ups stacked together, accessory abs running as one block. But the rest behaviour was always generic — you finished a round, you got the same rest timer everywhere. There was no distinction between "chain three movements back to back, then rest two minutes" (a superset) and "do five movements with 25 seconds between each, then rest one minute" (a circuit).
The schema now knows the difference. Every grouped block carries two values: rest between exercises within a round, and rest between rounds. The active-workout view reads them and fires the timer at the right moments:
- Superset → no rest between exercises, prescribed pause between rounds
- Circuit → fixed rest banner pops up after every exercise log, then the round-rest at the end
Same applies to the visible naming. The big header above your set rows now says "Superset" or "Circuit · 25s rest" instead of the generic "Main work" / "Accessories" phase name. Two main-work supersets back to back used to both label as "Main work" — now each block carries its own identity.
In the program preview before you start, the exercise list is grouped the same way. You see "Warm-up · 4 exercises", "Superset · 2 exercises", "Circuit · 5 exercises · 25s rest" stacked top to bottom, matching how the workout will actually play.
A handful of blocks in the catalog got tagged this release: the Push-Up Hold superset on Push & Skill, the 7-exercise main superset on Pull & Skill, the abs circuits on Upper Body Strength and Pull & Skill (25 s between exercises, 60 s between rounds), and supersets like Day 5's "Toes to Bar / Leg Raises / Knee Raises Side" (0 s, 60 s).
A new circuit ending: Push & Skill abs
Push & Skill — both the regular and the beginner version — gets an ending block this release: a 5-exercise abs circuit drawing on Lying Leg Raises, Leg Cross, One Leg Raises, Leg Raises Kicks, and a 45-second Plank. Three rounds, 25 seconds between exercises, one minute between rounds. The beginner version uses scaled-down rep targets and a 30-second plank.
Trend math that follows real progress
The trend percentage on the workout summary and in History got rewritten this release. The old formula was sum of (reps × weight) — classic strength-app volume load. It rewarded pyramid sessions (low-weight warm-ups padding the score) over honest top-weight work, and it was deaf to "more reps on the bottom sets" type progress.
New formula for weighted exercises: sum of estimated 1 RM per set, using the Epley equation kg × (1 + reps ÷ 30). Every rep on every set contributes:
- 8/8/4 @ 90 kg → 114 + 114 + 102 = 330
- 8/8/6 @ 90 kg → 114 + 114 + 108 = 336 (+1.8 %)
- 8/8/8 @ 90 kg → 114 + 114 + 114 = 342 (+1.8 %)
Closing in on a working-set scheme now shows up as a steady walk forward, one or two percent at a time, instead of staying flat until you nail the last set.
The same formula runs on the post-workout summary, so the "Progression" gains you see right when you finish a workout match the trend percentages you see later in History.
Bodyweight exercises are unchanged — score = sum of reps. Same as it's always been.
"vs best: X kg" also changed. It used to point at the top weight from whichever previous session scored highest. Now it shows your historical heaviest weight on that exercise, full stop. If you've ever lifted 70 kg on cable rows, "vs best" reads 70 kg even if a 60 kg session had higher overall volume.
The info sheets on both the History list and the per-exercise detail view explain the math up front — three bullets each, the actual formulas, no hand-waving.
Active-workout polish
The active-workout flow tightened in a bunch of small ways this release.
Phase-aware Next button. When tapping "Next exercise" would actually carry you into a new phase (warm-up → main work, main work → accessories), the button label tells you that instead of staying generic. "Start main work" appears at the warm-up → main boundary. Same tap action, clearer signpost.
No more blank screen after warm-up. The transition from the warm-up circuit view to the main-work pager had a perceptible blank frame in the middle of the cross-fade. The fade is skipped on phase crossings now — the dispatcher swap is itself the visual change, and the new screen lands cleanly.
Auto-scroll to the next set. After you log a set, the view slides the next unlogged row to the top. Both in the straight-set TabView (main work, accessory) and in the circuit phase view. You don't tap a set at the bottom and lose track of how many rows are still below the fold.
Skip Warmup is one tap. The "Skip warm-up?" confirmation alert is gone. The Skip button in the warm-up header now calls advance-to-next-phase directly. You already have a same-result "Next exercise" button at the bottom anyway; the popup added friction without adding safety.
Next from inside a circuit jumps the whole block. Tapping "Next exercise" while you're in the middle of a 7-exercise superset used to iterate through each row of the superset one by one. Since the circuit view already shows every exercise at once, that did nothing visible. Now it leaves the block and lands on the next one, matching what the toolbar chevron does.
Smaller fixes
- Weight prefill requires top-weight reps. Pyramiding up — 60/85/90 with reps [10, 8, 8] — used to satisfy "hit all targets" because every set hit ≥ 8 reps. The app then suggested 92.5 kg next time, even though you only did one set at 90 kg. The rule now requires
target_setsclean sets at your top working weight, matching the standard linear-progression mental model. - Summary and History agree. The percent gains you see on the workout summary right when you finish are computed with the same formula as the trend percentages in History. No more "summary said +12 %, History says -3 %" mismatches.
- Better "vs best" weight. As above — heaviest you've ever lifted, not whichever session scored highest. Matches what a lifter actually wants to know.
- Bumped-target hint scoped to bodyweight. If the catalog default for an exercise was 8 reps and you've earned a bump to 9, the "↗ Bumped 8 → 9 reps since last session" line appears above the rows. Weighted exercises don't get this line — their progression is on the weight axis.
This release ties a few threads together. Calibration was the input. The Strength Profile was the memory. Soft prerequisites and graduation hints shaped the prescription. Auto-progression — the actual prescription nudging up as you train — is the loop closing. The app now responds to what you did last time, not just what you said you could do during a test.
Block-aware supersets and circuits, and the trend math change, are about honesty: the app should tell you the truth about how a session compares to your past, in a way that matches what your body felt. Pyramid-padded volume scores and "all main blocks are 'main work'" labels were both small lies. Less of those now.
Email me if anything feels off — support@zenmotion.app. Every message still reaches the person who wrote the code.
— Jacob