June 1st, 2026
Clubs are here — you can now train with the people you actually ride and run with. Create or join a club to share an activity feed (who joined, badges earned, completed workouts), compare on leaderboards built around effort you control — weekly TSS, consistency, and 4-week fitness growth, not raw watts — and post shared events that each member can add to their own calendar, where the coach folds them into their individual plan. Privacy is strict: you choose what you share per club, and your recovery and wellness data is never shared with clubmates. Joining is free on every tier; creating a club is part of Pro (up to 10 members) or unlimited on Max, which also gets a weekly AI digest summarizing how the group trained. More in the Introducing Clubs post.
Trail running and brick workouts both became first-class this stretch. Trail Run is now a distinct sport across TrainNow, the workout picker, the library mapper, and the race editor — with GAP-aware race pacing, separate trail/road critical-speed and pace zones, elevation-aware post-workout analysis, and five new trail workouts (Long Climb, Downhill Repeats, Power-Hike Intervals, Technical Trail Intervals, Ultra Time-on-Feet) that get picked preferentially when you have a trail goal. Bricks moved beyond on-demand: mark a day as Brick and the weekly planner now schedules a bike-to-run pair, switching to a race-simulation pattern in your Peak and Pre-Race Taper weeks, and downgrading to a single easy ride when readiness is poor. The full story is in Trail Running and Brick Workouts.
Your coach also got more personal. Pro and Max athletes can flip on a new Recovery Profile card (Settings → Beta) that fits your own recovery curves per stimulus — tempo, threshold, VO2max, anaerobic, long endurance — and the planner now uses those curves to space hard days further apart when your data says you recover slowly. Max athletes can benchmark their curves against a peer cohort. On top of that, the daily workout pick and the explanation in your email now draw on the notes the coach has accumulated about you (ranked by relevance to today's situation), and the coach quietly writes new notes after each session — so Settings → Coach Memories fills in over time. Hard cycling sessions now also open with a short pre-activation primer at the day's main-set intensity, and there's a new Billat 15/15 VO2max workout in the catalog.
A lot of plan-quality and reliability work shipped too. When your goal event is automatic and the current one passes, your plan now rebuilds toward the next goal on its own instead of leaving the weeks empty. The Sunday refresh no longer collapses a week to a single session when the plan changes shape, and a few unavailable days (an appointment, a weekend away) no longer flip the whole week into an empty "Holiday" shape and wipe your pushed sessions. The race-event form now pre-fills planned load from sport and target time, and distance/load caps were raised so ultra-distance brevets up to Paris-Brest-Paris fit with their real numbers. Plus a batch of fixes: library workouts keep their real power and zone targets on upload, threshold sessions honor the Z4 ceiling across every template, the Workout Structure chart renders correctly for runs and swims, Training Milestones unlock again (and backfill retroactively), the activity heatmap stops showing trained days as rest for returning accounts, running pace no longer reads "3:60 /km", and the daily email greeting and week overview match when and what they should.
Also new on the blog: the May 2026 update recapping the month, and two athlete spotlights — @falsesummit at Pikes Peak and @jos-stapel-beukers' rebound.
Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!
May 27th, 2026
Trail running is now a distinct sport across the platform. Workouts, the library mapper, TrainNow, the workout picker, and training schedules all recognise TrailRun, and the in-app race editor accepts it as a goal event.
Pacing is elevation-aware: Critical Speed and pace zones are separated for trail and road via GAP normalisation, race plans use GAP-aware targets, and post-workout analysis carries elevation and terrain context. Trail race events are auto-detected, weekly plans support vertical-meter targets, and coaching memory now differentiates trail and road stimuli.
Walks and hikes count as training input. They contribute to weekly TSS, register as active recovery, and can be set as goal events for charity walks and multi-day hikes.
The native iOS and Android app is now available, replacing the Catalyst build with a faster, lower-overhead experience. The athlete switcher is accessible on mobile, and a Brick chip surfaces in the training schedule.
Brick is now a per-day sport toggle in the weekly plan, with automatic downgrade to a single sport when readiness is poor.
Per-stimulus half-life feeds the weekly plan as a hard-day spacing constraint, and Max-tier athletes can benchmark their recovery curves against a peer cohort.
May 27th, 2026
Brick sessions are now a first-class training stimulus. Schedule bike→run bricks directly from TrainNow, and let the daily cron and weekly planner build them into your block with race-simulation patterns when appropriate.
Bricks appear as a per-day sport toggle in the weekly plan, surface as a dedicated chip in the iOS training schedule, and automatically downgrade to a single sport when readiness is poor.
Trail Run is now a distinct sport across TrainNow, the workout picker, library mapper, race editor, and training schedule. Critical Speed and pace zones are split between trail and road (or GAP-normalised), race pace plans are GAP-aware, and post-workout analysis carries elevation and terrain context. Trail race goals are detected automatically, coaching memory separates trail and road stimuli, and weekly plans support vertical-meter targets and trail-specific structure.
Walks and hikes count as legitimate training input — contributing to active recovery and weekly TSS, and supported as goal events for charity walks and multi-day hikes.
Per-stimulus half-life now feeds into the weekly plan as a hard-day spacing constraint. Max-tier athletes can benchmark their recovery curves against a peer cohort.
May 26th, 2026
Trail Run is now a first-class sport across the platform. Training schedules, the workout picker, TrainNow, and the library mapper all recognize TrailRun distinctly from road running, and the in-app race editor accepts it as a goal event sport.
Race pace plans are GAP-aware, with separate Critical Speed and pace zones for trail versus road. Weekly plans support vertical-meter targets and trail-specific structure, post-workout analysis carries elevation and terrain context, and coaching memory differentiates trail and road stimuli. Trail race goal events are detected automatically.
The native mobile app is now available, with the athlete switcher restored on smaller screens and a Brick chip in the iOS training schedule.
Brick is now a per-day sport toggle in the weekly plan, with matching UI in the iOS training schedule.
Per-stimulus half-life now feeds the weekly plan as a hard-day spacing constraint. Max-tier users can benchmark their recovery curves against a peer cohort.
May 23rd, 2026
IntervalCoach is now a native Mac app on the Mac App Store — same features as iPhone and iPad, reshaped for the desktop with sidebar nav, a native Settings window (⌘,), ⌘1-⌘5 to jump between sections, and multi-window support so you can keep the calendar open next to the dashboard. Requires macOS 14 Sonoma or later.
The dashboard got a substantial redesign. The "Plan Goal" card now shows your projected fitness and form on race day right at the top, alongside a countdown ring, the race date (with multi-day support for stage races), and your current training phase. A new "This Week — Load" card splits your weekly TSS into Done / Remaining / Forecast / Target with a two-row progress bar. Your Health card grew a 14-day readiness ribbon — a green/amber/red pill for each of the last 14 days, with a count summary like "8 ready · 6 caution". The whole page was reshuffled so today's plan and the new weekly-load tracker sit in the top band, the upcoming-7-days calendar gets full horizontal width, and the wellness side panel trimmed from five stacked cards to two. Analytics also got a Day / Week / Month resolution selector next to the time range so you can pull TSS, HRV, HRV stability, and resting heart rate into whatever granularity you want.
Coach+ got smarter about memory and stickier about getting things done. New notes you give Coach+ now carry context tags — sport, intensity bucket, days of the week, indoor vs outdoor, optional expiry — so "no intensity on weekends" only kicks in when planning Sat/Sun and "knee twinges on hill repeats" only surfaces when scheduling threshold-or-harder running. Settings → Coach Memories now shows each note's tags and how many times you've confirmed it. On the execution side, when you ask Coach+ to adjust today's workout or apply a recovery week, the change now actually lands instead of looping through five turns of "I'm applying it now" prose — approval-gated tools are explicitly framed as queued for approval, and any tool failure (rate limits, validation errors) surfaces verbatim instead of being papered over. Three new proactive nudges (Pro/Max) also shipped: a "goal at risk" mid-week check, a "tomorrow asks a lot from you" evening prep, and a "tomorrow you move into a new phase" heads-up — each opens Coach+ pre-filled with the matching question.
A long list of plan-quality fixes shipped this week. Taper, Recovery, and Deload weeks no longer get systematically over-budgeted — a safety valve was skipping the per-day "scale down to the weekly target" step for low-TSS weeks, so a 130-TSS taper was routinely being planned at 226 TSS. FTP tests are now actually being scheduled into the plan again for athletes without Whoop. Cycling threshold workouts no longer prescribe 3x20min at Z4 (the ceiling is now 40-45 minutes total Z4 per session). Running VO2max sessions now use a true 1:1 work-to-recovery ratio with easy-jog recovery. The CTL projection no longer flatlines during weeks loaded with race events. Recovery weeks no longer pile up four 33-TSS rides on weekdays. And a 1-day SICK marker no longer triggers three weeks of scaled-down training — the post-illness ramp now scales with how long you were actually sick.
Two new blog posts: "What to Train For When You're Not Racing" — a guide to the nine non-race goal templates and how to pick between them — and "Spotlight: @joao-brito, the Marathon He Already Ran".
Plus smaller fixes: sleep duration no longer reads "7h 60m" when it rounds up; Coach Mode athlete picker now works on mobile; C-races trigger the same evening-before fuel-and-sleep push you get for a hard workout tomorrow; "Pre-Holiday Push" no longer appears on the vacation weeks themselves; the Daily Outlook drops contradictory rest verdicts when a real workout is scheduled and unchanged; missed-workout push nudges finally actually fire; and the Intervals.icu workout library picker now also includes workouts from libraries shared with you (HNP etc.).
Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!
May 20th, 2026
Coach memory scales beyond the 20-entry ceiling. Responses draw from relevance-scoped recall with decay and embeddings, improving continuity across longer coaching threads.
Memory prioritizes recent, high-signal details and sheds stale notes over time, reducing contradictions and repeated follow-ups.
Add Walk and Hike across iOS editor, TrainNow, and activity display. Create walking/hiking goals with time‑on‑feet periodization. Plans can prescribe walks for recovery/availability, and recovery protocol may suggest Walk. App copy now reflects 6 sports.
May 16th, 2026
Walking and Hiking are now first-class sports across IntervalCoach. You can set the Camino de Santiago, Vierdaagse Nijmegen, Kennedy Mars, a multi-day Alpine trek, or any walk/hike on your Intervals.icu calendar as an A/B goal and a new GOAL_HIKE phase model takes over (12-week Build → 4-week Peak with the longest walks and back-to-back days → 2-week Taper). Detection covers pilgrimage and charity-walk patterns in all 12 languages. There's also a "Long Walk / Multi-day Hike" non-race template for athletes without a specific event. Walk and Hike are toggleable in Settings → Training Schedule alongside cycling/running/swimming/strength, and on the days you've enabled them the planner schedules time-on-feet sessions with a Z1-Z2 HR recommendation. You can also generate one on demand via TrainNow. And — important — walks and hikes finally count toward your weekly load: Apple Health and Strava strip the HR streams before pushing to Intervals.icu, so a 90-min walk used to show as 0 TSS; IntervalCoach now applies a conservative duration-based floor (15 TSS/h walks, 25 TSS/h hikes) so the dashboard, calendar, and weekly-plan budgeting all see the work.
A related new behavior: when daily readiness flags suppressed HRV or the "low motivation + high stress" combination, IntervalCoach can now swap today's ride or run for a walk instead of just dialing back intensity — provided Walk is in your training schedule for that day. Race days and goal-event days are never swapped. If Walk isn't in your schedule, the recommendation stays advisory and the existing intensity scaling / cooldown extension keep working as before.
Agent Log is out of beta and on for every athlete — free, trial, Pro, and Max (read the launch post). It's a timeline of every coaching decision behind your training: today's readiness call, why this workout got picked, what changed when fresh wellness data arrived mid-morning, every adaptation you approved or skipped, and everything Coach+ did on your behalf. History now reaches back 60 days (up from 14), pre-planned future workouts are grouped under the day the decision was made (not the day they'll happen), and each entry now shows the actual scoring rationale — recency rotation, focus area, training phase, weak-zone boosts — plus the top alternatives that lost. The iOS Agent Log also stopped showing raw translation keys.
Full in-app race management. A unified "+ Add" picker now sits inline on each day in the training-plan week table and as a hover "+" on every future day in the calendar; from there you can create a workout or a race, and any race event can be edited (name, date, start time, A/B/C priority, sport, indoor/outdoor, distance, target time, load) or deleted — the same fields Intervals.icu's own edit dialog exposes, with changes writing back to the same event. Multi-day goal events (stage races, weekend tours) now show every stage on the training-plan day grid instead of just the first. And the race-week taper bug got fixed: the planner was producing roughly twice the appropriate workout volume around your race because a "physiological minimum" step was bumping each session back up to the endurance baseline right after the taper allocator scaled it down. Race-week and pre-race-taper sessions are now tagged recovery and the floor shortens duration instead of raising TSS — so a 60-min easy ride with 15 TSS of budget becomes a 20-min easy ride rather than a forced 45 TSS session.
Your Intervals.icu workout library is now part of my inventory (Pro/Max). For athletes who've curated workouts in Intervals.icu — coach-built sessions, purchased packs like High North Performance, your own favourites — those workouts now appear in the TrainNow Library tab and are treated as peer candidates whenever the daily cron, rolling updates, or weekly plan picks a workout for you. When a library workout matches the slot within ±10% I upload your version verbatim; outside that, the AI scales warmup, cooldown, and inter-interval recovery without touching the work intervals so the hard part of your authored workout stays exactly what you wrote. Each library workout is matched to its closest catalog twin to inherit phase fit, so periodization still works. No setup needed.
Brick workouts are now an option on JustTrain alongside Ride / Run / Swim / Strength — pick "Transition" (sweet-spot bike → short Z2 run) or "Long endurance" (Z2 ride → Z2 run), choose durations, and the coach generates both halves and uploads them as back-to-back calendar events. Coach+ got more capable too: cadence requests like "70-80 rpm hill simulation" or "low-cadence sweet spot at 60-65 rpm" now actually reach the Intervals.icu workout instead of being silently dropped, the red retry pill no longer appears on answers that streamed in completely, and Coach+ can now move club rides, training crits, and unstructured rides on the calendar — not just structured workouts.
Workout intelligence: VO2max running intervals now use proper E-pace jog recovery (per Daniels' Running Formula) instead of low-Z2 endurance pace, so HR has room to recover between reps. Cycling threshold reps are now phase-gated — Base caps at 10-min reps, Build at 15-min, Peak/Race/Taper unlocks the classic 3×20. Workout variety improved noticeably: the rotation system was quietly broken and most athletes were cycling through the same handful of templates out of the 130+ catalog; rotation now works as intended.
Reliability: dashboard, daily-workout generation, and Sunday-evening weekly summaries are back to firing on schedule after a queue slowdown that had been delaying them. The dashboard's Week TSS ring no longer falls to 0% when the Sunday weekly-plan cron runs late. Calendar mutations (drag-drop, edit, delete) now appear instantly — no more full-page spinner — with a silent background reconcile. Apple Health workouts already present on Intervals.icu via Strava/Garmin/etc. no longer show as "Failed" in the iOS sync log. The iOS keychain bug forcing you to reconnect to Intervals.icu after every app update is fixed. Daily Outlook and the calendar workout finally agree when you're returning from a sick or injured stretch. The Health card no longer shows a duplicate "AI load advice: reduce" line on top of the wellness signals that produced it. You can delete a planned workout straight from the calendar. And the "Improve FTP" goal now actually saves — the wizard was carrying over a slider duration that exceeded FTP Improvement's 12-week max, silently sending an invalid value to the server.
Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!
May 13th, 2026
Your Intervals.icu workout library now extends the internal catalog across TrainNow, daily, rolling, and weekly plans. Library workouts appear as a dedicated group in the TrainNow picker and flow through the generation pipeline with catalog fallback.
AI rewrites library workouts to fit the target slot duration, and library candidates participate in workout selection alongside catalog options. Gated by tier and feature flag during rollout.
The iOS app now matches the web workout picker with the full catalog browser and library access. Localization expands to 12 languages, and a new Analytics tab and Training Milestones bring the mobile experience closer to web.
A day-by-day race-week protocol (D-7 to D-0) is now available. Race events can be edited in-app — planned TSS, distance, and priority — with changes written back to Intervals.icu.
Reduced AI spend through batched email pipeline calls, weekly plan optimization, and a trial user model. Goal-event sport detection now uses AI goal analysis as the source of truth, and generation has migrated to AI SDK v6.
May 9th, 2026
This week earned its name as a packed one — 39 changes across 6 ship days, three new blog posts, and the iOS 1.10 release. The big strokes: Coach Mode launched, Training Score went GA, race-week / taper accuracy got a serious overhaul, and the Coach+ approval flow was tightened end-to-end across web, iOS, and email. Highlights below.
Coach Mode is live. Invite a human coach onto IntervalCoach — they see your dashboard, can edit your weekly plan, and chat with you in Coach+ alongside the AI. Coaches use IntervalCoach free; you pay for Max as the athlete and the coach pays nothing on top. See Settings → Coach to send an invite, or read the launch post: Bringing your coach onto IntervalCoach.
Training Score is out of beta and on by default for every Pro, Max, and trial athlete. A single 0-100 number on the dashboard with four sub-scores under the hood — Fitness Base (your eFTP and CTL), Progressive Overload (whether weekly TSS is actually building toward your goal), Consistency (how closely you've hit recent plan targets), and Load Management (Foster monotony / strain). A weekly history chart on Analytics lets you watch a build block lift Progressive Overload while Load Management compresses, then flips through a recovery week. Each post-workout email shows your Training Score change for the week, and Coach+ understands the components — ask "why is my Load Management low?" and it has the actual sub-score values plus standard advice. Read more in Training Score: One Number That Actually Tells You Something.
iOS 1.10 is a major release. Coach+ chat got a top-to-bottom overhaul: tapping Approve on a delete-workout, generate-workout, schedule-race, or adjust-intensity proposal actually executes the action (we squashed a stack of bugs that left approvals stuck or silently failing). A blinking cursor and animated thinking dots show when the coach is composing, fetching, or waiting; a Stop button aborts long answers; failed streams show a tap-to-retry banner; long-press a message for Copy / Share; tool cards render live as the coach calls them. The daily briefing was rebuilt as the deeper read of your daily outlook — readiness signals, training context, and recommended action all in one place — and its "Discuss with Coach+" button opens the coach with the right context. Push notifications were reorganized: title now leads with duration and phase ("75 min · Build") which survives the iOS truncation, critical signals take the title slot when they fire, and all daily briefings group together in Notification Center. Plus accessibility labels everywhere and a Dynamic Type cap so the largest text sizes don't break dense data layouts.
Race-week and taper accuracy got a major workout. The protocol now runs as a single deterministic day-by-day flow that A and B races share — A engages at D-7 (last key session → moderate endurance → easy recovery × 2 → rest × 2 → openers → race day), B engages at D-4 with the same D-4 to D-0 prescriptions. It actually engages on dashboard, daily briefing, and Coach+ for races more than one day out (previously only D-1 fired). Race Week and Taper TSS targets are hard-capped at maintenance load (CTL × 7) — closes a bug where Race Week could come out higher than maintenance for athletes already at goal CTL. B races get a 1-week mini-taper instead of the full 14-21 day A-race taper that was bleeding into them. HRV dips and bad sleep during race-week taper are now framed as expected ("taper tantrums") on the dashboard rather than triggering alarm-style copy the day before the race.
Preview-before-applying flow was tightened end-to-end. When the morning cron stages a workout swap and you have Preview turned on, every surface now agrees it's a proposal awaiting your approval — not a done deal. The daily briefing flips to an orange hourglass "Workout proposed" header instead of a misleading "Workout adapted ✓" badge; the daily email swaps "⚡ Workout Adapted" for "⏳ Workout Proposed"; the dashboard's Today's Plan card gains a "Voorstel" pill so the decision sitting below doesn't get missed. The pending-adaptation card itself now shows the proposed workout next to the original with name, TSS, and duration so you can compare before approving. Approve / Keep original buttons were rebalanced (Approve primary, Keep original a quieter ghost). The "Why" bullets now match the dashboard Health card and email — no more reassuring "Training load balanced" lines mixed in with the actual triggers.
New: choose how your daily email is timed. Settings → Notifications gains an "After HRV and sleep sync" option — the email is held until today's wellness has arrived from your wearable, with an 11am-local fallback so it always goes out by mid-morning. Whoop users effectively had this behavior already; the setting makes it explicit. The fixed-time option is still there for predictable delivery.
Plan and workout intelligence. Run and swim workouts now prescribe pace percentages aligned with Intervals.icu's default Coggan zones (a "Long Run · Aerobic" no longer comes out at 8:27/km when proper endurance is closer to 6:30). Weekly intensity sessions no longer get scheduled on your longest day of the week. Peak / Build / Taper plans no longer overshoot their TSS target by 10-22%. Post-illness recovery ramps over three weeks instead of jumping back to a full Build week. Zone-progression diagnosis is now respected on Peak / Taper / Race Week — an athlete weak in VO2max no longer gets a threshold-heavy Peak. The eFTP value on Settings → Training and the dashboard now matches the eFTP shown on the chart and on Intervals.icu directly. On the blog: Spotlight: @vonpiter, Three Days from UŁAN 600 — a quiet read on what the calmest week in three months looks like before 500 km of Polish gravel.
Reliability and performance: dashboard, calendar, and analytics pages load noticeably faster (transient page data moved to Vercel's Runtime Cache; slowest 1% of reads dropped from ~750ms to ~5ms). Coach+ chat questions that fail mid-tool-call no longer count against your monthly chat budget. Onboarding now forces an explicit sport choice instead of pre-selecting Ride. Apple Health workout sync accepts "Other" and equestrian workout types. The retry banner in Coach+ clears when you switch conversations after an error.
Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!
May 2nd, 2026
IntervalCoach 1.7 for iPhone & iPad shipped to the App Store. A major release that brings the full webapp experience to iOS: Apple Health workout sync (per-sport opt-in) so your training flows automatically into Intervals.icu, send-to-Apple-Watch for any planned workout, a native Analytics screen with fitness trend, eFTP history with the projection plume, power profile radar, critical speed, wellness, training-load distribution, and Max peer benchmarks (tap any chart to read the exact value at a date), a Calendar with month-grid view and sport-colored dots that lets you move/delete workouts in-app instead of bouncing to Intervals.icu, AI-generated race pace plans on A/B/C events, an agent Decisions log so you can see what your coach decided and why, Coach+ chat polish with richer signal cards and a tool-approval flow for plan changes, public profile sharing, full localization to 12 languages, and a top-to-bottom Settings rewrite. Plus countless polish, accessibility fixes, and faster startup.
Your FTP test preference now actually drives the test you get. Picking "20-minute test" in Settings used to still produce a ramp-shaped workout — only the description changed. The planner now reads your preference correctly and the 20-minute test is emitted as a Zwift FreeRide step so your trainer drops out of ERG for the 20-min effort. Without that, ERG would have held you at the prescribed wattage and the test could never have discovered an improvement.
Coach+ got a lot more honest and reliable this week. Tool actions that need approval no longer count against your monthly chat budget and now go through even if you're at your cap. Coach+ also pushes back on workout requests that conflict with your adaptation status — if today is rest, capped at Z2, or running a TSS multiplier below 1.0, it now names the active signal driving that constraint and proposes an alternative within the cap before generating anything (you can still override). It can no longer promise an interval session in text but quietly generate an endurance ride (the workoutType argument now must match what was promised, with mappings for terms like "blokken" → sweet_spot/threshold, "drempel" → threshold, "duurrit" → endurance). Cross-day swaps now run as a single atomic call so asking to move Friday's workout to Thursday doesn't leave both on the calendar. The chat agent also no longer goes silent after running tools — every reply is guaranteed to contain text explaining what's about to happen.
Dashboard, daily outlook, and calendar now stay in sync. Several fixes shipped this week to stop the three surfaces from contradicting each other: Daily Outlook no longer fabricates dramatic "reduced to 50% TSS, max Z3" copy when the system actually left the workout unchanged; turning off "Daily Adaptation" no longer also stops your workouts from being pushed to Intervals.icu; a short commute or warm-up ride no longer wipes the day's scheduled session from the dashboard (sport, duration, AND TSS now have to roughly match for a planned workout to be marked done); athletes without a connected wearable now see an honest "unknown" recovery state instead of a falsely confident "looks good"; and the "Synced X ago" timestamp finally reflects the most recent fitness/wellness refresh instead of getting stuck at yesterday's narrative cache.
Training plan accuracy fixes. Race week now includes an opener intensity session for athletes who train 2-3x/week even when the race itself lands on a training day. Peak week TSS targets for high-fitness athletes with limited training hours no longer come out unreachable (the availability cap now activates by default whenever planned weekly hours are known). Multi-session training days no longer silently lose their endurance session when the planner trims for spacing — days with a dedicated strength slot are now treated as still-training days for the spacing calculation. The Phase Roadmap no longer shows a one-week Base island sandwiched between two Build segments. Multi-day holiday events stop leaking into the following week. Workout rotation now enforces real variety for 2-3x/week athletes — the recency penalty now also counts the number of training sessions between repeats, translating to roughly 15 weeks of distinct workouts before any one returns.
Workout rendering fixes. HR-based workouts crossing two zones (e.g. Z1-Z2 easy run) were silently collapsing to just the upper zone — the writer now emits the combined "Z1-Z2 HR" form so Intervals.icu honours both ends. Run workout charts no longer collapse to a flat 50% bar when pace targets carry decimals (Tinman, McMillan, Pfitzinger), and the Y-axis label correctly shows "Threshold" for runs, "CSS" for swims, "FTP" for cycling. Swim workouts no longer say "Rest 25-50mtr 65% pace" between hard intervals — recovery is now rendered as time-based wall rest. AI-generated workout titles can no longer contradict the planned workout type (a VO2max session is titled VO2max, in every locale).
Reliability and recovery-signal fixes. Stretching, yoga, e-bike commutes, and weight-training sessions no longer count as "consecutive training days" in the readiness engine. The subscription card now shows the correct expiry date when Stripe has a fixed cancellation date set. The HealthKit sync no longer logs spurious zero-value rejections for fields Apple uses 0 as a "no measurement" sentinel for. Daily Outlook and Today's Plan stay consistent in the first day or two of a new weekly plan (the freshness carve-out is gone now that signals do their own debouncing), and when signals shift to "skip" after the morning cron ran, the outlook now writes honest copy acknowledging the workout is still on the calendar instead of asserting a deletion that didn't happen.
On the blog: What Kristen Faulkner's AI Experiment Means for the Rest of Us — the Olympic road race champion has been coding 10+ hours a day building an AI training model on her own biometric history, and won three Pan-American golds off the back of it. A note on what that signals for the rest of us — and why most athletes shouldn't have to write the code themselves.
Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!