August 1st, 2026
Week three of my summer holiday, so like the two before it this was fixes, improvements and polish rather than a big new feature. Mostly it was about making what is already there behave the way you would expect. A few things were added, but only to fill gaps that were plainly missing.
A race is no longer scored like a training session that failed to follow a plan. The post-race analysis judges pacing by phase, your effort signature (intensity, time above threshold, late-race heart-rate drift) and what the race says about your form, and when a pace plan was generated beforehand it closes the loop: planned versus executed. An activity carrying Intervals.icu's "Race" tag counts as a race even without a calendar event, and if your notes mention the result ("P4", a podium emoji, "won") the analysis opens by acknowledging it — winning a crit no longer reads back as "solid endurance ride". Your A, B and C races are also off-limits to the background plan sync now: it can never move, shorten or remove one, and it stops dropping workouts onto a race day.
With a running goal event, step 2 now offers a threshold pace target — current, suggested and max realistic — derived from your own Critical Speed history, and that pace shows up on your dashboard instead of your season best. The ceiling is measured rather than estimated: for each candidate target we trial-run your actual plan, with its taper, recovery weeks and available hours, and the slider stops at the highest target whose own plan truly reaches it. The goal card now shows the peak your plan builds to next to the race-day number, so a correct taper stops looking like a failing plan. On the bike, "Max Realistic" FTP scales with how much of your week actually goes to cycling, and progressive overload no longer compares your runs against your rides.
Several ways of asking for a test did not produce one. Test requests — LTHR, FTP, ramp, running time trial, CSS — now always resolve to the matching protocol and keep their real name on your calendar, instead of an ordinary tempo session presented as the test. The LTHR test is the real field protocol, and completing it writes your measured LTHR straight into your Intervals.icu heart-rate settings so your zones recalibrate. The ramp test is a real ramp again, climbing a minute at a time rather than dividing itself across whatever time you had free — long steps made you stop early, so the FTP it produced came out low. The test you asked for in Settings now actually appears in your plan, never lands on a day your instructions reserve as easy, and if you test in Zwift or MyWhoosh the day is reserved with your instructions and nothing else.
Related, and worth a look: your workouts can land at the wrong watts without anything looking broken. Targets are a percentage of the FTP stored on your Intervals.icu profile, so if that value has drifted from the one your coaching is built on, every session is off by the same ratio — one athlete was sent out to do VO2max intervals at 360W with a real FTP around 250W. Settings → Training now shows both values side by side whenever they differ by more than 10%.
A day you pin no longer disappears from your week. If you asked for "Sunday is always the long run" and you train fewer sessions than you have days, the planner dropped the shortest day first — exactly the recovery run you pinned. Pinned days are now kept. A day you describe as easy stays easy too, instead of surviving in your week but filling up with threshold intervals. Refusing a session by name ("no TT-style efforts") now sticks, and instructions you saved months ago are re-read whenever the planner learns a new rule.
All languages were gone through and corrected: labels you see daily; Readiness, Sleep, Recovery, Health plus a few shorter texts per language had shipped with English sitting inside the translation file, so nothing flagged them as missing. Health signals get their day counts back ("HRV suppressed for 3 days" lost the number in fourteen languages). Swedish and Norwegian were added on top, bringing the total to 17.
Google Health was landing incomplete data. Steps and VO2max now actually reach Intervals.icu, workouts arrive with the sport your watch recorded, deleting an imported workout sticks, and step counts no longer double when your watch and phone both count them. Settings tells you when your connection is missing the activity permission. On Android you can now skip the middleman entirely: turn on Health Connect in Settings and IntervalCoach reads HRV, resting heart rate, sleep, blood oxygen, VO2 max and body composition straight from your phone.
A connected AI assistant (Max) now asks before it changes anything, adding a workout, moving a session, updating your settings and shows you what it is about to apply. Your morning briefing reads your real overnight values instead of a copy fetched moments too early, which could recommend intensity while the app correctly said to take it easy. Readiness wording states what was measured ("7.1h of sleep vs your recent 7.6h average") rather than passing judgement, and a commute can no longer tick off your planned workout.
Calendar day columns share the row equally instead of one busy day pushing the weekend off the page, "+N more" expands the day, and the monthly view fills out complete weeks. Micro-intervals show their real duration instead of "0min", zone-target steps chart at their real height, an easy run's warm-up no longer builds past the run itself, and a 45-minute run is no longer called a long run. If you use miles, the calendar and goal wizard use them too. You can rename a completed activity from its detail view, Analytics remembers your time range and averaging, and the "Rider Profile" card is now the Athlete Profile — runners train here too.
Two posts: the monthly recap, July Update: Readiness Rebuilt, a Race Catalog, and Fitbit Support, and an athlete spotlight, Pius, an Hour on the Trainer and 300 km of Gravel.
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!