← Back to home

A rest timer that doesn't get in the way

Shipped the previous update just over a week ago — strength programs went live, weight tracking landed, and I started training the Day 1 split myself in the gym. A few things became immediately obvious that no amount of simulator testing would have caught. This update fixes them.

Rest timer between sets

You finish a set of bench press. You're catching your breath. You'd like to know when 90 seconds is up. ZenMotion now tells you, with a compact banner that counts down at the bottom of your workout view.

The first version of this was a full-screen modal — black backdrop, big timer, "Skip rest" button. It looked great in dev. In the gym it was actively annoying: I wanted to see what was next, glance at my form notes, edit a rep count I'd typed wrong. The modal blocked all of it.

The shipped version is a sticky banner above the bottom buttons. Stays out of the way. The workout list scrolls behind it. You can still tap any set row to edit. Two actions on the banner itself: +30 s if you need longer, or × to skip ahead.

Durations scale with your rep target — 90 seconds for hypertrophy work (8–15 reps), 2 minutes for strength ranges (5–8 reps), 3 minutes for heavy compound sets at the low end. Hold-type exercises (planche, levers) get 2 minutes by default. Matches what most strength training literature suggests.

Tap-to-complete warmups

Warmup exercises — scapular pulls × 8, dead hang × 20 s, etc. — used to open a sheet to "log" the reps you did. For a fixed warmup that you do exactly as prescribed, that's pure friction: three taps to record "yes, I did the 8".

Now you tap the warmup card once and it logs at target. Long-press if you actually did fewer reps and want to record the truth.

It's a small change but it changes the feel of starting a workout. Tap-tap-tap through your warmup in twenty seconds and you're at the main work.

A smarter history view

A few changes here, all from the same observation: the History view was showing me numbers I didn't ask for and hiding ones I cared about.

"vs best: 102.5 kg" instead of "vs best: 2460". The previous build's trend was computed on training volume — a fine internal number, but 2460 reads as gibberish. The new label shows the actual top weight from your best previous run. You see at a glance whether you're lifting more than last time.

Skipped exercises collapse to a line. If you trained 5 of the 19 exercises in a strength split, the detail view used to render all 19 cards (most with zeros). Now you see your 5 trained exercises as full cards plus a single muted line at the bottom: "Skipped: Bench Press, Leg Press, …". Clean focus on what you actually did.

Calmer "partial" badges. Trained an exercise but didn't hit every target rep? You used to get an orange warning triangle that read like an error. Replaced with a calm outlined checkmark — "you trained, just didn't 100% it" without alarm.

Smaller fixes

  • Tap a logged set's checkmark to uncheck. Edit reps and re-tap to re-commit.
  • A Done button on the keyboard for the rep / kg fields.
  • The rest timer doesn't fire on the very last set of the very last exercise — you're about to tap Finish, no rest needed.
  • A few backend fixes around how completion is calculated when you skip the warmup.

The pattern of this update: ship a feature, train with it for a week, find what's annoying, fix it. Hopefully none of this hits you the same way it hit me. Email me if something does — support@zenmotion.app. Every message gets read by the person who wrote the code.

— Jacob