Coach that reads the room. And a picker that respects your order.
Big one. Planche Coach precision took three rounds of tuning against real-athlete facit videos and comes out with thresholds that finally read like a real coach. The Custom Program editor learned to remember the order you dragged your exercises into. And the whole exercise picker stops silently hiding things from you.
Planche Coach — three rounds of facit-tuning
The v1.14 Coach launch shipped planche thresholds that were educated guesses. This release replaces those guesses with data.
Over the past two weeks we captured debug dumps from six clean planche holds — two straddle clips, one full-planche hold, two tuck-planche holds (including one from Andriy Strong, an athlete known for pristine form), plus a deliberately-collapsed "bad protraction" reference clip. Every number that Coach grades against now traces back to an actual measured hold rather than an author's assumption.
Concrete threshold changes:
- Arm lockout: 175° ±8° across all variants (was 170° ±15°). Real straight-arm planche holds cluster at 174-177° — 5° tighter than the old assumption.
- Torso lean: 85° ±8° for straddle, one-leg, full — AND now tuck + advanced tuck. Original assumption that "tuck is easier so torso stays upright" was wrong. Tuck is easier because the mass sits closer to the shoulder (shorter lever arm), not because the body doesn't horizontalize. Both athletes we tested held clean tucks with torso at 90°.
- Shoulder protraction: 45° ±15° for straight-body variants (was 55° ±20°). Tuck-family gets a variant override at 65° because tuck geometry naturally reads higher — the deep knee-tuck lifts the hip above shoulder level, which biases the angle calculation. Without the override, well-protracted tuck planches were scoring as "retracted".
- Hip angle: straddle 165° (was 145° — the old target was calibrated against a single bad clip). Full 175°. Tuck 45°.
- Knee angle: tuck 75° (was 40° — 40° assumed a maximally-compact beginner tuck; real athletes need space between chest and thigh, so knees open toward 75-80°).
Also new — over-extension detection. Hips can be too extended (arching the low back). The "Hips X° folded" cue now correctly says "over-extended" when your reading passes above the target instead of confusingly reading "folded" in the wrong direction.
Coach reads the video better
Three quiet fixes to the analysis pipeline itself:
Stable-hold detection actually works now. The previous velocity threshold was set below Vision's own per-frame keypoint jitter, so real static holds registered as "moving" and Coach fell back to averaging the entire clip — including any transitions into and out of the hold. Now a clean 2s hold registers as a stable window, and the aggregate reflects the hold itself.
Two-signal quality gate. The old warning banner triggered on any planche clip because planche naturally scores lower Vision confidence than handstand (the model was trained on upright bodies). Now the banner needs BOTH low mean confidence AND a joint with low individual confidence before flagging — false positives dropped to near zero.
First and last 100ms trimmed. Motion blur on frame zero and partial-pose at the tail routinely produced joint outliers that skewed the aggregate. Defensive trim now cuts those without touching anything else.
Custom programs remember your order
You could drag-and-drop exercises to reorder them in the Create Program editor — and after Save, the order silently reset to whatever the database happened to return. The database didn't have anywhere to store position.
Fixed at the database layer: a new order column on custom program exercises, backfilled from the physical row order for programs created before this release. Reorder, tap Save, close the app, come back — the order sticks.
Exercise picker stops hiding things
The exercise picker had three difficulty chips — Beginner, Intermediate, Advanced — and defaulted to Beginner. Search for "Deadlift" (level 3, Intermediate) as a new user, and you got zero results with no explanation for why.
Added an All chip as the new default. If you want to narrow to a difficulty band, you still can. But by default, when you're building a custom program, you see the full catalog.
Coach — how to film
New illustrated setup guide on the Coach analysis screen showing a bird's-eye view of camera position, distance, and side-profile framing. Also good-vs-bad framing thumbnails — profile view (green checkmark) next to front view (orange warning). Camera angle is the single largest noise source in Coach analysis. This is v0 of a longer "compare to a pro" arc — future releases will layer pro reference videos on top of the guide.
First workout, guided
Firebase Analytics on the last few weeks showed a -65% drop between "first workout started" and "first workout completed" — most new users tapped Start, then dropped off before finishing. Bad. Two changes address it directly.
Contextual tips at the three moments that matter. Uses Apple's TipKit, so tips are native iOS popovers pinned to the exact UI element they describe:
- On Home's Start button — "Around 10 minutes. Tap here to start — we'll guide you through it."
- On the first set's checkmark circle — "Tap the row when you finish — we'll count it and start the rest timer."
- On the Finish button in the workout summary — "Tap Finish and you're done. See you tomorrow."
Tips silence permanently after your first completed session — they're for your first workout, not every workout. Returning users never see them.
Cleaner welcome. New users used to land on Home with three parallel starter suggestions (Strength Calibration, a strength split, a skill program). That framing implicitly promised personalization the app couldn't deliver yet — pick "Upper Body Strength" as an advanced athlete without calibration data, and you'd get Wall Push-Ups as your accessory. The wrong signal on session one.
Now the empty-state Home has a single clear step: Strength Calibration. Same rich card design as regular Home recommendations. Once you calibrate, the app has real data to personalize on, and Home reshapes into its adaptive form on the next open.
Calibration polish alongside: no accidental commit at 0 when you tap the checkmark without doing the test (you now have to type your result first), and no rest timer between the 5 max-effort tests (they're one-shot, nothing to rest for).
What else
- Cue direction now respects
trendDirection. Metrics like shoulder protraction are "lower-is-better" — a reading below target should count as a win, not fire an "over" warning. Fixed. - 24 new unit tests covering the variantHint resolver, drag-reorder semantics, All-difficulty edge cases, and direction-aware cues.
What's next
v1.17 will bring the Coach text feedback layer to life. Apple shipped a new on-device Foundation Models generation at WWDC26 (AFM 3 Core Advanced — 20B sparse), and it's the first Apple model plausibly capable of producing coaching-quality narrative from your analysis data. If pilot testing goes well, sessions will end with a real coach-voice review — "Your straddle held well through the first half; second half your shoulders dropped 8° — try shorter reps with explicit protraction focus" — instead of just numbers on a page.
Bug reports and feature ideas: support@zenmotion.app.
Train well.