A strength split that knows what's next
Shipped the rest-timer update a few days ago. I've been training the strength split daily since the rebuild, and a few things became obvious that no amount of staring at the catalog would have caught.
The biggest one: I kept opening the app, looking at five separate "strength" programs, and trying to remember which one I trained last so I could pick the next one. That's a job the app should do.
A rotating split, on autopilot
The five strength days — Upper, Legs, Push & Skill, Conditioning, Pull & Skill — are a routine, not five independent programs. ZenMotion now treats them that way.
A new card on Home shows your next-in-cycle workout. Cycle position carries forward across days off — if you finished Upper on Tuesday, the card shows Legs next, whether you train Wednesday, Thursday, or next Monday. It doesn't care what weekday it is. It cares what you trained last.
The cycle is anchored to training events, not the calendar. You train, the cycle advances. You rest, nothing changes. You skip a week, the cycle is waiting where you left it. Robust to skipped days, and a 3-day-a-week trainer who rotates through 5 workouts naturally hits every workout on every day of the week over time. Mondays don't become permanently associated with leg day. The schedule precesses.
Side programs (Front Lever Mastery, Planche, whatever else you're working on) don't push the cycle. They live on a separate track. So you can mix a fun skill session into your week without your strength split forgetting where you are.
Beginner regressions for the skill days
Day 1 (Upper) and Day 2 (Legs) are pure weighted strength. A beginner benches 40 kg, an advanced lifter benches 100 kg — same movement, same prescription, the weight tracking handles the rest.
Day 4, 5, and 6 are different. They include Tuck Planche, Advanced Tuck Front Lever, Pistol Squats, Archer Pull-Ups — moves a beginner can't do regardless of effort. So those three days now have beginner versions:
- Push & Skill (Beginner) — Wall Plank Hold instead of Wall Handstand Hold, Pseudo Planche Push-Ups instead of Tuck Planche, Knee and Incline Push-Ups instead of Diamonds.
- Conditioning (Beginner) — Bulgarian Split Squats instead of Pistol Squats, Assisted Pull-Ups instead of Archers and Head Bangers, a steady 10-minute Run instead of 6×120s Sprint intervals.
- Pull & Skill (Beginner) — Australian Rows + Assisted Pull-Ups + Negative Pull-Ups in place of Strict Pull-Ups and Wide Grip Pull-Ups. Tuck Back Lever Hold introduces the lever family without diving into Advanced Tuck Front Lever on day one.
Your experience-level setting picks which version surfaces on Home automatically. Beginners get the beginner cycle, everyone else gets the intermediate baseline. No tier-switching menus.
When you outgrow the beginner content, the manual switch lives in Profile. An auto-prompt for graduation is on the future list, but I don't want to nag.
Top performance banner
A small card on Home celebrates your biggest exercise PR from the last 30 days. "Bench Press +2.4% — 102.5 → 105 kg, 2 days ago." Bodyweight exercises show reps gained instead.
It uses the same volume-based math that drives the trend arrows in History — sum of (reps × weight) per set, compared to your best previous attempt of the same exercise. So progress through reps OR weight both register. Ten reps at 16 kg beats eight reps at 16 kg, even though the top weight didn't change.
Hidden when there's nothing recent to celebrate. Appears the day you set a new PR.
Streaks that respect rest
The streak used to break the moment you missed a calendar day. If you train Monday/Wednesday/Friday, Tuesday's rest would zero your streak — which is wrong. Rest is part of the program.
Now the streak respects your weekly cadence. Train 3 days a week? You get up to a 3-day gap before the streak breaks. Train every day? You still get up to 2 days of grace. The streak measures "are you following your routine", not "did you open the app every calendar day."
No buttons to tap. No rest-day claims. The math just respects how training actually works.
Smaller fixes
- "Crushed: 26" instead of "Crushed: 2000". The History detail was showing the volume score (reps × kg, summed across sets) instead of the actual rep count. A 2000-rep bench press is nonsense; 26 reps next to Goal: 24 reads instantly.
- Stale-data prune. The strength days picked up duplicate exercises after the recent rebuild — same "Bench Press" entry would appear twice in the workout view. Cleaned the catalog while preserving every past training set.
- Partial workouts count toward your streak. Train a day, log some sets, tap Finish without hitting every target — that still counts. The strict "every set hit its target" version stays internal, used only for level-completion math.
The pattern this update locked in: stop making the user remember things the app already knows. Last workout? App knows. Where in the rotation? App knows. Whether you should rest today? Your cadence implies it.
Email me if anything feels off — support@zenmotion.app. Every message reaches the person who wrote the code.
— Jacob