Push when you can. Back off when you should.
v1.7.3 introduced adaptive training — deload cycles every 4th week, softer targets when you'd been away for a while. That was the framework. v1.7.5 fills in what was still missing: signals from you, not just the calendar. When you're crushing it. When you're at the ragged edge. When your Focus skill deserves its own periodization. When the app already knows more about you than the diagnostic asked.
This is the biggest single release since Skill Focus Splits landed in v1.7.0. Six independent mechanics that stack into a coherent "the app has a coach's brain about periodization" story.
Skill Focus Splits get real mesocycles
If you've set a Focus (a skill you're chasing — muscle-up, planche, front lever, etc.), your training is now structured into 4-week blocks anchored on when you set that Focus.
Each block has a shape:
- Week 1 · Intro — Kick off the block calmly. Hit prescribed reps with a rep or two in the tank. Volume matters more than intensity this week.
- Week 2 · Build — The progression sweet spot. Chase clean reps at the top of the range — this is where the bumps come from.
- Week 3 · Peak — Push hard. Test the harder variant if a set felt easy. Your best shot at graduating a movement this cycle.
- Week 4 · Skill deload — Ease off by 20% so your tendons and CNS catch up. Skill work leans on connective tissue; that tissue takes longer to adapt than muscle. Normal targets resume next week.
A small pill on Home tells you which week you're in ("Week 2 · Build"). Same visual language as the deload pill — teal accent, planned rather than reactive.
Weeks 1-3 don't scale your numbers; they're informational so you know how to approach the session mentally. Week 4 actually softens targets by 20%.
The mesocycle is anchored per-user, per-focus. Everyone sets their Focus on a different day, so everyone lands on different phases at different times. There's no arbitrary "everyone deloads on the same calendar week" moment — your block starts when you commit to your skill.
Why this exists. Skill work is fundamentally different from strength work. A muscle-up doesn't get built by grinding the same rep target every session — it gets built by peaking, backing off, coming back stronger. Every serious calisthenics coach programs some version of "3 weeks push, 1 week back off." Nobody should have to program that themselves.
The app-wide deload cycle (v1.7.3) still runs, but only when you don't have a Focus set. Once you commit to a Focus, the mesocycle takes over — it's tuned specifically for skill work.
Tell the app how a set felt
After each non-weighted main exercise in the workout summary, there's now a small three-emoji strip: 🙂 😤 🥵.
- 🙂 Easy — you had reps in the bank.
- 😤 Hard but good — the progression sweet spot.
- 🥵 Max effort — you barely finished the last set.
Optional. Skip it and nothing changes. But if you tap 🥵 on an exercise you cleaned, the app will not bump the target next session — it'll freeze at the current number so you get another crack at it before the ladder asks for more.
Why this exists. The auto-bump logic used to be binary: cleaned the target → +1 next time. But there's a difference between "cleaned it with a rep in reserve" and "cleaned it with the last rep going up in slow motion." The first should bump. The second is the fast path to overreaching if you keep bumping. The RPE chip lets you say which happened.
Only value 3 (🥵) freezes the bump. 🙂 and 😤 fall through to normal progression. And no matter what RPE you tapped, missing the target still freezes — the RPE gate only affects the bump path, not the miss path.
Weighted exercises don't get the chips. Weighted work progresses on kg, not reps; a separate axis with its own logic.
The 20-rep ceiling
If you're hitting 20 clean push-ups every session, "add a rep" stops being a strength adaptation and becomes an endurance test. Same story with a 90-second plank. At some point the movement changes character.
v1.7.5 introduces numeric caps on the auto-bump:
- 20 reps for rep-based exercises
- 90 seconds for hold-based exercises
When your target hits either cap and you clean the session, the app freezes the target and — if there's a natural next variant — surfaces a graduation suggestion in the workout summary: "Regular Push-Ups → Diamond Push-Ups."
Graduation suggestions have existed since v1.6.6, but they only fired on a handful of exercises with hand-authored thresholds. The catalog now has 293 movements linked to their next variant — push, pull, squat, dip, plank, hang families all covered. The suggestion sheet shows the graduation with your recorded achievement ("You hit 20 reps") and a tap deep-links to the harder movement's program.
Movements without a next variant just freeze silently. Better than +1'ing forever into meaningless territory.
Calibration nudge reads your training volume
The "time for a strength test" nudge on Home used to trigger every 30 days regardless of how much you'd actually trained. Which meant a user who did 3 sessions in that month got the same nudge as a user who did 25.
New logic: the nudge fires when EITHER threshold is crossed —
- 90 days since last calibration, OR
- 30 sessions since last calibration.
Whichever comes first. High-volume trainees see "You've completed 30 sessions since your last calibration" (concrete evidence of work done, motivates the re-test). Occasional trainees see "It's been 3 months" (calendar framing, more meaningful when sessions are sparse). Both signal the same thing: your baseline is stale, and knowing your true current strength is worth 10 minutes of testing.
The nudge copy auto-picks whichever framing crossed first, so it always reads as the honest version of your situation.
Onboarding remembers what you've already proved
If you're a returning user going through onboarding (or the Recalibrate button in Profile), the diagnostic — "how many push-ups can you do?" — is coarse by design. "MANY" covers 8 to 30. That's a huge range on the Foundations ladder.
v1.7.5 adds a jump-ahead pass. After the diagnostic maps your answers to starting rungs, the backend checks your UserMax history — actual reps you've logged in past calibrations or session PRs — and promotes any rung the diagnostic underplaced.
Concretely: if you've logged 6 floor push-ups at some point, the diagnostic's "FEW" answer would have placed you at the Knee Push-up rung. Jump-ahead notices the floor push-up data and moves you straight to the Floor Push-up rung. Zero regression to a variant you've already outgrown.
Six movements feed the jump-ahead: push-ups, pull-ups, active hang, bodyweight squats, bodyweight rows, and L-sit. Missing signals do nothing — the diagnostic answer holds.
Never demotes. If your self-reported diagnostic is honest but your UserMax history shows a bad day, we trust the higher of the two. UserMax is the ceiling; diagnostic is what you can reliably do today.
Small under-the-hood
Deload weeks now actually freeze the bump. A latent bug from v1.7.3: during a deload week, targets got served scaled by ×0.8, and hitting the scaled target still ran through the miss-path (because 8 done vs 10 stored didn't count as clean). That reset the clean-streak counter — annoying for users on longer graduation-suggestion timelines. Now bumps skip entirely during any scaling week (deload, ease-back, mesocycle deload). Streaks stand still, no accidental resets.
Test coverage. The adaptive v2 layer added ~35 new backend test cases across three files: bumpTargets.test.ts covers all the freeze branches (RPE gate, high-target cap, effective cap logic), trainingModifier.test.ts covers the 4 mesocycle weeks + ease-back precedence, and rungResolver.test.ts covers all the jump-ahead promotion rules. Regression floor for the periodization system.
What's next
The rung model has proven itself on Foundations. The natural next step is Wedge D — migrating skill and strength programs to the same rung model so the level-picker can retire entirely. That's a bigger arc than a single release, but the design work is on the table.
Also in flight: bonus rounds during circuit phases (the "+ Add set" affordance from v1.7.3 only works in main/accessory today), and Skill Focus Splits gaining rotation-awareness on the Home NextWorkoutCard so it points at Day X of Y instead of falling back to strength split rotation.
If any of this doesn't feel right — the mesocycle labels, when the RPE freeze fires, whether 20 reps is too low a ceiling for your movement — feedback goes to support@zenmotion.app or Instagram. Adaptive systems are best tuned in the wild.
Train well.