Your journey, in full

v1.39 named the path. v1.40 keeps the receipts. Every milestone you unlock and every achievement you earn now lives on a permanent, browsable feed on the Stats tab — in order, forever.

Journey — the feed

Open Stats. There's a new Journey segment sitting between Overview and Activities, and it's the default landing spot now.

Each entry is one moment worth remembering:

  • Milestone unlocked — the rung bump with the movement name spelled out ("Pseudo Planche Push-Up" — not "push rung 5"). Tap for the detail sheet.
  • Achievement unlocked — the trophies you already collected on the Achievements tab, threaded chronologically so you can see how your run of wins actually clustered.

Entries group by month with headers, so you can scroll back and see the arc — "here's the week I finally hit Advanced Tuck Front Lever, and here's the achievement chain that came with it."

Empty state is honest: if you're brand new, we tell you your first milestone lands here after your next workout, rather than showing a phantom-populated feed.

"Also recognized" — cascade transparency

Some rung bumps trigger other rung bumps. Hit Straddle Planche and your push family floors bump because you can't hold that position without the underlying pressing strength. Previously that cascade happened silently.

Now the primary milestone card carries an "Also recognized" sub-list — the family bumps that came along for the ride, indented under the parent. Teaches you why skill work builds foundation strength without a lecture. And it's honest about what actually happened server-side.

Stats tab, restructured

  • Overview — your dashboard. Athlete Profile, heatmap, PRs, imbalance card, weekly recap.
  • Journey — this release's marquee. Chronological milestone + achievement feed. The default.
  • Activities — what used to be called Runs. Renamed to match how the rest of the fitness world talks (Strava, Fitbit — everyone calls them Activities). Same functionality: filterable list of every session you've completed.

If you have zero completed workouts on your account, we quietly land you on Overview instead — Journey with an empty state feels worse than Overview with a "get started" nudge.

Challenges finally leave Home

Ended challenges have been sitting stubbornly on Home for weeks, taking up space with a finished leaderboard nobody was going to check again. Two moves:

  • Home — only active challenges now. When one ends, it disappears from Home immediately.
  • Activities — a new section at the top of the list shows every ended challenge you participated in, newest first. Tap for the leaderboard.

The detail leaderboard also got a tweak worth mentioning: it shows the top 10 by default, but if you finished outside the top 10, your row is appended at the bottom with your actual rank and a teal highlight — so you always see where you landed without scrolling a wall of names.

Under the hood

For the curious: this shipped with a new database table (RungBumpLog) that persists every rung bump forever with metadata about source, movement, and cascade parent. Backfilled from your existing rung state so you don't land on an empty Journey. Cursor-paginated infinite scroll on the client, so scrolling back a year of history stays snappy.

The Journey endpoint merges two data sources (rung bumps + achievement unlocks) into one chronological stream. Same iOS SheetPresenter architecture that keeps celebration moments from stacking now also keeps the feed clean.

Coming soon

  • Share cards from Journey — the milestone-share and achievement-share flow will get parity from the new feed. Placeholder for now.
  • Journey filters — filter by skill, family, or event type. Not on the critical path today; will land if it's the top ask.
  • Athlete Profile v2 — the read-only tier view has been stable for months. Time to make it tell a story, not just show numbers.

Available in v1.40.0 on TestFlight now. Rolling out to the App Store this week. Feedback welcome at support@zenmotion.app.