← Back to updates

Your skill mission.

Every release since v1.7.4 has been sharpening the mechanics of a single session — mesocycles, RPE, bonus rounds, adaptive targets. Small polish inside the workout. This release zooms out. Pick a destination in onboarding. See the whole path to it. Get pointed at the right next step every time you open the app.

Pick a skill in onboarding

Right after the tier + diagnostic questions, onboarding now asks the honest one: "Which skill brought you here?" Eleven options — Planche, Muscle-Up, Handstand, Front Lever, Back Lever, Press to Handstand, Elbow Planche, Human Flag, Hefesto, One-Arm Pull-Up, V-Sit / Manna. Plus "Show me the fundamentals" as a first-class card at the top for anyone who isn't ready to commit to a destination yet.

Whatever you pick becomes the app's memory of what you're actually training toward. It isn't a filter or a preference. It's the anchor every recommendation from here on out orients itself against.

Why this exists. ZenMotion has always been a calisthenics app that quietly assumes you have a goal — planche, muscle-up, human flag — but it never asked you which one. The result: two users at the same tier got the same recommendations. Now the beginner who picked Planche and the beginner who picked Muscle-Up see different Homes, tuned toward their own destination.

A personal skill roadmap

Every skill you can pick now has an authored roadmap — a rung-by-rung ladder from wherever you are today to the terminal skill. Open your Skill Focus family (Programs → Skills → the skill you picked) and scroll past the day list: your roadmap timeline is there.

Achieved rungs show in green with a checkmark. Your current rung is highlighted with a target-band pill showing what it takes to advance ("10 / 15 reps" for Regular Push-Ups, "20s / 30s" for Wall Handstand). Upcoming rungs stay dim — a preview of the road ahead but not the road itself.

Why this exists. Progression paths that live only in your head fall apart under fatigue. Seeing the ladder — knowing you're two rungs away from Pseudo Planche, four rungs away from Straddle — turns "am I making progress?" from an existential question into a concrete one.

Eleven ladders shipped this release, one per skill. Push family runs 7 rungs deep, pull family 7, squat 6, hinge 4, core 5. Skill-specific ladders (planche, front lever, etc.) add another 8-10 rungs on top of the general strength base.

Home actually recommends the right thing now

The biggest fix this release: Home is finally skill-aware in its recommendations.

Before v1.8: a Tier 2 user who picked Planche, crushed the strength calibration, and opened Home would sometimes see... Core Circuit at Level 1. Or Wall Push-Ups. The recommendation engine only read the coarse experienceLevel from onboarding and never consulted the picked skill OR the calibration data.

Now Home resolves a focus mission based on two inputs:

  1. What skill you picked
  2. Whether your current strength meets the Focus Split's prerequisites

If you meet the prereqs → Home recommends the next day of your skill's Focus Split, with an eyebrow reading "Your Planche mission" and the usual "Day 3 of 5" rotation indicator.

If you're not there yet → Home recommends an on-ramp strength split that builds toward the picked skill. Upper Body Strength if you're chasing a pushing skill (planche, elbow planche, handstand, press). Pull Up Mastery for pulls (front lever, back lever, muscle-up, hefesto). Core & Strength for V-Sit. The eyebrow reads "Building toward Planche" so it's clear this session is the on-ramp, not the destination — and your UserFocus keeps biasing accessory work toward the skill inside those strength sessions, so you're not doing wall push-ups when you should be doing pseudo-planche variants.

Why this exists. The whole point of picking a skill in onboarding is that the app helps you get there. Recommending wall push-ups to someone who deadlifts double-bodyweight because they self-reported "beginner" in onboarding is broken. Recommending Planche Focus Day 1 to someone who can't hold a plank is broken the other way. The prereq-aware focus mission threads that needle.

Next rung hint on Home

Under the primary "Start workout" card, when you have a skill picked, there's a new compact line: "Next rung · Regular Push-Ups" (or whichever rung you're building toward next).

It's a satellite — not a competing CTA, just a small acknowledgment that today's session is a step in a longer arc. It cross-references your skill roadmap: whichever rung the roadmap shows as your current one, that's what surfaces on Home.

Tap the roadmap in your Focus Split view any time to see the whole ladder.

Programs cards, redesigned

The Programs-tab list rows used to be a distinct visual language — gradient CardView backgrounds with a leading thumbnail icon. That fought with the Stats → Runs card language which is flat, has an accent stripe on the leading edge, and uses a monospace signal strip. Same information density, two different presentations.

v1.8.0 unifies them. Every row in Programs now uses the same flat-with-3pt-accent-stripe base as Stats → Runs. Title + category pill on the top row, subtitle in mono caption below, signal strip at the bottom with clock icon + duration, checklist icon + level progress, trend arrow, and a right-anchored chevron.

Category colors show through the accent stripe: bright teal for Calibration, soft teal for Skill / Focus, neutral white for Strength / Foundation. Custom programs get their own hue.

Same treatment on the Skill Focus family day rows — the 5-day rotation cards inside "Handstand Focus" now match the same language, with "Day 3" pills replacing the old bulky day-number discs.

Why this exists. Browsing Programs and reviewing Runs are the same shape of task — scanning a list of "which one is this?" cards to make a choice. When the visual language differs, your brain has to relearn the affordances every time it switches tabs. One language, both surfaces, faster comprehension.

Achievement celebration fix

The post-workout achievement unlock sheet had a subtle but real bug: content sat centered inside its fraction-height detent instead of anchored to the top, leaving an empty ~80pt band above "ACHIEVEMENT UNLOCKED". Depending on the sheet height it read as broken, or at best cramped.

Fixed by forcing top-alignment with an explicit frame + spacer, and moving the background gradient to presentationBackground so the sheet's rounded surface is the achievement card, not a wrapper around it. The celebration now opens directly under the sheet handle, no floating banner.

Under the hood

Home refreshes after workout dismissal. Before: complete a workout, watch the achievement sheet, dismiss it, land back on Home showing stale data (no new recommended workout, no updated stats). You had to tab away and back for Home to refresh. Now HomeView observes the workout-sheet-dismiss signal and re-fetches /api/home + refreshes PlanManager automatically.

Archer achievement false-unlock fixed. First Archer Pull-Up and First Archer Push-Up used to trigger from base calibration reps because their userMaxKeys bridge accepted plain pull_up / push_up maxes as satisfying the threshold. They now require actual logged sessions of archer variants. Retroactively self-heals: the next workout you complete revokes any wrongfully-held archer unlock from your account.

Achievement evaluator self-heals on every complete. More broadly: any UserAchievement row that no longer meets its catalog criteria gets cleaned up on your next workout complete, not just on run-delete. Catches future tightening of achievement rules without leaving stale rows sticking.

What's next

The strategic direction I sketched in the roadmap docs — one destination, one path, adaptive route — has four horizons. This release is Horizon 1: prereq-aware recommendation grafted onto the existing catalog. It works, and it fixes the "wall push-ups for a planche user" problem today.

Horizon 2 is bigger: migrating skill + strength programs onto the same rung schema Foundations already uses (Wedge D in the backlog). Once that lands, experienceLevel and activeSplitKey can retire — the app's tier of you is inferred from your actual rung distribution across movement families, not from a one-shot onboarding self-report.

Horizon 3 wires the skill roadmap directly into the recommendation engine, so what you see on the roadmap is literally what the engine schedules. And Horizon 4 goes further — composing sessions from building blocks (rung N+1 for your skill's main pattern + 1-2 accessories for your weak families + phase-appropriate warmup) instead of picking pre-authored programs. That's where the app becomes something that no longer needs a Programs tab at all for most users.

Long arc. But this release is where the road starts turning toward it.

Bug reports and feature ideas: support@zenmotion.app.

Train well.