Changelog

Shipped fast, tested on real runs.

v1.4.0 (build 13)

Karvonen HR Zones, Route Heatmap, GPS Pre-Lock

New Improved Fix
  • Heart rate zones that match your actual heart — Zones now use the Karvonen method (HR reserve from resting to max) instead of a flat percentage of max. If you know your real max HR from a hill-repeat test, plug it in from Profile → Heart Rate and every zone recalibrates around it. Fixes the classic "every easy run is overreaching" problem for runners whose HR climbs fast.
  • Route heatmap by step compliance — The map on each workout now colors the route by how closely you hit each step's plan — green where you nailed it, red where you drifted far off. A thin legend below the map decodes the bands at a glance.
  • GPS lock before you tap Start — Opening a workout on the Watch now starts the GPS warming up. A compact lock-status pill sits above the Start button so you can see when the polyline will be clean. No more waiting for a fix after pressing Start.
  • Voice falls back to the Watch when no headphones are connected — Announcements used to silently fail through the pocket-muffled iPhone speaker. The Watch and iPhone now hand off correctly, so voice plays reliably through whichever device actually has audio output.
  • Smarter overreaching detection — Training load no longer shouts "overreaching" at runners still building base mileage. A single 50-minute easy run won't flag you at risk when your chronic load is still low.
  • Plan adaptations don't compound anymore — Repeated daily adaptations no longer stack on each other, leaving you with a 3-minute warmup that should have been 10. Already-corrupted plans are repaired automatically the next time you open the app.
  • Watch stats page fits the screen — Stats and dynamics rows were being clipped on 45mm / 49mm Watches. Tightened fonts and spacing so every metric fits without scrolling.
  • Tap a KDNCE link, land in the app — https://kdnce.app/quickstart now opens the iPhone app directly into a Dashboard hand-off pointing at your Watch — useful for install-and-start flows.
v1.3.0 (build 12)

GPS Routes, Strava Upload, Miles, Reinstall-Proof Profile

New Improved Fix
  • GPS route on every outdoor run — Your Watch records the full polyline of where you ran. Tap any past workout to see the route drawn on a map alongside your splits, HR trace, and per-step compliance. The route also appears in the Apple Health workout detail.
  • Strava upload with full fidelity — Completed workouts upload as TCX with the GPS route, per-second heart rate, cadence, and elevation. KDNCE shows up as the source app on your Strava feed.
  • Miles or kilometres — Full imperial/metric support across the app. Auto-detects from your locale on first launch and flips any time from Settings.
  • Profile survives a reinstall — Your athlete profile (VO₂ max, resting HR, weekly volume, plan goal) now backs up to the iCloud Keychain. Delete the app, reinstall it, and your data is right where you left it.
  • Stamina that scales with your fitness — The live stamina bar now drains on a continuous scale off your VO₂ max and weekly volume instead of jumping between four tiers. Fitter runners drain less for the same effort; beginners get realistic feedback.
  • Plan re-adapts each morning — If a tough day downgraded today's Tempo to an Easy Run and you wake up fresh, the planner restores the original workout instead of leaving yesterday's downgrade in place.
  • Plan view shows what you actually ran — Finish an Easy Run on a day the plan called for Tempo and the slot shows "Ran: Easy Run" instead of silently swallowing the deviation.
  • Workout history loads instantly — Cold launch shows your recent runs right away from a local cache while HealthKit refreshes in the background.
  • Rest days no longer count as missed — Week progress on the plan view now reflects actual training days only.
  • Strava sign-in: "invalid redirect" fix — OAuth now bounces through kdnce.app, resolving the redirect error some accounts hit on connect.
v1.2.0 (build 11)

Onboarding, Per-Step Compliance, Live Coaching Feedback

New Improved Fix
  • New-user onboarding — First launch now walks you through name, age, fitness level, weekly volume, longest recent run, run days, and optional race goal before generating your first plan. No more landing on a generic profile.
  • Per-step compliance scoring — Every workout step (warm up, intervals, recovery, cool down) is now scored 0–100 on how closely you hit the planned pace, heart rate zone, and duration. See an overall plan adherence score for the whole workout, plus a per-step breakdown showing planned vs actual side by side.
  • Live compliance indicator on Watch — A colored pill in the workout step card updates every second: green if you're nailing the target, blue if slightly off, yellow drifting, red way off. Glance and correct mid-step instead of finding out at the end.
  • Step transition flash — When a step ends on the Watch, a 2.5-second badge flashes the final compliance score with a label ("Nailed it" / "Solid" / "Off target" / "Way off").
  • Start on Watch from iPhone — Open any planned workout in the iPhone app and tap "Start on Watch". The Watch queues the workout and starts the countdown the next time you raise your wrist.
  • Voice announcements actually work now — Rebuilt the audio routing. Announcements now reliably play through your AirPods whether they're connected to the Watch or the iPhone, properly ducking your podcast and resuming it at full volume.
  • Watch workout screens redesigned — Stats and Controls pages restyled with bigger 28pt numbers and color-coded cells (DISTANCE, PACE, HEART RATE, CALORIES, POWER) for at-a-glance readability mid-run.
  • Stamina bar that means something — Recalibrated the live stamina drain rate. A 45-minute easy run now actually drops the stamina bar to near empty, so when it's drained you know you're done for the day.
  • Energy score recalibrated — Sleep recharges and workout drains rebalanced. After a hard tempo session late in the day your energy score actually reflects "I'm spent" instead of staying in the 50s.
  • Haptic feedback on iPhone — Plan creation, plan adaptation, onboarding, refresh, and Start on Watch all give haptic confirmation. Was Watch-only before.
  • Settings gear on Dashboard — Tap the gear icon top-left to jump straight to settings. Was buried in Profile → Settings before.
  • Smarter pull-to-refresh — Rate-limited to once per 2 minutes so rapid pulls don't hammer HealthKit.
  • Account deletion fully revokes Apple ID credential — Account deletion now invalidates your Sign in with Apple credential server-side, fully complying with App Store guideline 5.1.1(v).
  • Strava sign-up fix — Token exchange now uses the correct content type. The "bad request — invalid" error on Strava connect is gone.
  • Strava OAuth hardened — Random state parameter validates the auth callback round-trip, defending against CSRF and authorization code injection.
  • Tighter Keychain — Auth tokens no longer sync via iCloud Keychain and require device unlock to access.
v1.1.0 (build 10)

Monthly Distance Bezel, Ultra Complications

New Improved
  • Monthly distance bezel gauge — New corner complication for Apple Watch Ultra shows your monthly km vs target with a color gradient: blue (under) → green (on track) → red (over).
  • Monthly progress bezel text — Inline complication displays "45/86 km · on track" around the Modular Ultra bezel edge.
  • Modular Ultra compatibility — Split widget definitions so corner and inline complications appear correctly in all Ultra face slots.
v1.1.0 (build 9)

App Store Compliance and Bug Fixes

New Fix
  • Terms of Use — Added Terms of Use page and functional links in the subscription paywall, as required by App Store guidelines.
  • Voice coach routes to headphones — Spoken announcements now play through connected Bluetooth headphones instead of the Watch speaker.
  • Strava connect fixed — OAuth flow now uses the correct web authorization URL.
  • Smarter overreaching warnings — Morning report and daily suggestion no longer warn about high training load when your readiness score is excellent.
v1.1.0 (build 8)

Voice Coach, Auto-Pause, Strava Sync, Custom Workouts

New Improved Fix
  • Voice announcements — Hear your split pace, average pace, heart rate zone, and elapsed time spoken aloud every kilometre. Toggle on/off from the Watch workout controls.
  • Smart auto-pause — Workouts pause automatically when you stop (traffic lights, water stations) and resume when you start moving. No more inflated pace stats.
  • Strava sync — Connect your Strava account and upload runs with one tap. Splits, heart rate, and workout type carry over automatically.
  • Custom workout builder — Design your own interval sessions on iPhone with warm-up, work, recovery, and cooldown steps. Set pace targets and durations, then run them from your Watch.
  • Smarter plan sync — Catch-up runs on rest days now credit the nearest uncompleted workout instead of the rest day. Past rest days auto-complete instead of showing as missed.
  • Missed workout nudges — When you've skipped multiple runs and your body is ready, the daily suggestion encourages you to get back on track with an easy comeback run.
  • Plan setup asks your level — New plan creation now asks for your longest recent run and weekly volume so training and injury risk thresholds start from your actual fitness, not zero.
  • Tolerance floor fix — Running tolerance no longer flags high injury risk for experienced runners with sparse HealthKit history.
  • Account deletion — You can now delete your account and all data from Profile, as required by App Store guidelines.
v1.1.0 (build 7)

Smarter Training, Redesigned Paywall, Live Workout Improvements

New Improved Fix
  • Context-driven plan adaptation — Recovery runs are now triggered by concrete signals: poor sleep, heavy recent effort, or low readiness — not just a high training load ratio. No more all-recovery weeks when your body is ready to train.
  • ACR dampening for base building — When your chronic training load is low (building your base or returning from a break), the acute:chronic ratio is dampened to prevent false overreaching alerts from a single hard workout.
  • Fartlek workouts redesigned — Speed play sessions now generate proper alternating surge/jog intervals (90s fast, 120s easy) instead of a single block at tempo pace.
  • Pedometer pace bridge — Pace display now shows within seconds of starting a run using pedometer data, instead of waiting 30 seconds for GPS lock.
  • Per-km splits with cadence — Every kilometre is automatically tracked as a split with average heart rate, pace, cadence, and stride length. See your splits and cadence chart in the post-run analysis.
  • Redesigned paywall — Replaced the feature comparison table with focused benefit highlights. Products show loading and error states with retry instead of a dead button.
  • Cleaner free experience — Free users see a complete, functional dashboard. Pro features are simply absent rather than shown as locked cards. A single upgrade banner sits at the bottom.
  • Yearly discount display — Fixed the savings calculation that was showing 0% off for yearly subscriptions.
  • RPE labels corrected — Post-workout effort buttons now match the Borg scale: Easy (3), Moderate (5), Hard (7), Max (9). Default starts at Easy instead of mid-scale.
  • Watch sync reliability — Plan and profile are re-sent every time the Watch reconnects, so the Watch always has current data even after app restarts.
  • Sleep resilience — Energy score infers rest from iPhone sleep data and nighttime step patterns when Watch sleep data is missing.
  • Watch complications — Weekly workout count, today's workout preview, and weekly distance progress gauge for your watch face.
  • Bug fixes — Fixed stuck recovery loops from prior adaptation, energy calorie double-counting, HR chart mixing passive samples, stamina drain rate, and missing daily suggestion.
v1.1.0 (build 6)

Plan Details, Activity Summary, and Chart Fixes

New Improved
  • Workout detail view — Tap any workout in your training plan to see the full breakdown: step structure, target paces, HR zones, duration, and notes.
  • 30-day activity summary — The Activity tab now shows a rolling 30-day summary with trend arrows comparing to the previous 30 days. See at a glance if your runs, distance, pace, and calories are improving or declining.
  • Energy timeline fix — The 24-hour energy chart now spreads events across the day (sleep at night, HRV at wake-up, workouts at their actual time) instead of stacking everything at the current time.
v1.1.0 (build 5)

Live Watch Activity, Reliable Sync, and Smarter Training

New Improved Fix
  • Live activity on iPhone — Start a workout on your Watch and see it live on your iPhone: heart rate, pace, distance, cadence, and step progress update in real time.
  • Reliable device sync — Completely rebuilt device sync with deduplication, throttling, and a periodic heartbeat. Green dot on both devices confirms they're connected.
  • Faster pace display — Pace reacts within seconds using a rolling window with smoothing, instead of slowly averaging over the entire workout.
  • Redesigned Watch workout — 3-page layout: visual (pace gauge + heart rate + stamina), stats (all metrics including calories), and controls (next step, end workout).
  • Redo missed workouts — Tap any missed workout in your weekly plan on the Watch to reschedule and start it immediately.
  • Calories tracking — Calories burned now shows during workouts on Watch, in completed workout summaries, activity history, and workout details on iPhone.
  • Smarter readiness score — Sleep quality now factors into your daily readiness, with an improved formula that matches what you see in the Health app.
  • 24-hour energy timeline — Energy detail view shows a full-day chart of your energy level from midnight to now, with markers for sleep, rest, and activity.
  • Redesigned VO₂ Max — Cleaner layout on iPhone with full-width trend chart. Watch now shows classification, trend, range bar, and personalized fitness advice.
  • Better training math — Banister fatigue model tuned for recreational runners. Short test walks no longer inflate your fatigue or training load.
  • Plan adaptation fix — Plans no longer shrink warmup and cooldown times on repeated opens. Minimum 2-minute floor on all timed steps.
  • Pull-to-refresh — Drag down on the iPhone dashboard to sync with HealthKit and update your plan status instantly.
  • Cancelled workouts — Discarding a workout no longer saves it to HealthKit or marks your plan day as completed.
  • Performance improvements — Throttled workout metrics processing, optimized view rendering, and reduced unnecessary recomputation across both apps.
v1.0.0

Initial Release

New
  • Adaptive training plans — Generates a periodized plan based on your fitness level, VO2 max, and goal race. Adapts daily based on readiness.
  • Real-time pace coaching — Haptic feedback on Apple Watch when you drift out of your target pace zone.
  • VDOT race predictions — Predict your 5K, 10K, half marathon, and marathon times from your VO2 max.
  • Energy score — Daily energy estimate from sleep, HRV, resting HR, and activity level.
  • Training load + tolerance — Track acute/chronic load ratio and injury risk.
  • Morning report — Daily briefing with readiness, today's workout, and key metrics.
  • Banister fitness/fatigue model — Long-term fitness and form tracking.
  • VO2 Max trends — Track your aerobic fitness over time with weekly change rate.
  • Running dynamics — Live cadence, stride length, vertical oscillation, and ground contact time.
  • Running power — Estimated watts with intensity factor.
  • Workout quality scoring — Post-workout analysis of how well you hit your targets.
  • Recovery advisor — Estimated recovery time based on workout load and current fitness.
  • Shoe tracking — Track mileage per shoe with retirement alerts.
  • Taper planning — Auto-generated taper for goal races.
  • iPhone + Apple Watch — Native apps for both, synced via Watch Connectivity.