IntervalCoach - AI workouts that adapt daily to your recovery and goals

Sorry me again,

Can you will add PayPal in the payment method?

Thanks

Hey @Imperius!

Thanks for the detailed feedback - let me go through these:

Gym/strength training
Good news: if you add gym sessions in Intervals.icu, IntervalCoach already sees them on your calendar and factors them into scheduling (won’t pile hard cycling on top of gym days). What I don’t do yet is generate gym workouts - but that’s on my list.

Periodic weekly plan
This kind of exists already! In Settings > Training you can set which days you train and for how long. But I hear you on wanting a more explicit pattern - that could be cleaner.

Minimum ride duration
This one you can fix right now! Go to Settings > Training and you’ll see per-day duration settings. Set your preferred days to 90-120 minutes and the workouts will match. The default is 60-90 min which explains the shorter workouts you’re seeing.

Pyramidal training model
Currently I have linear, undulating, block, and polarized - but not pyramidal. Good suggestion, I’ll add it. You can find the current options in Settings > Periodization.

Target FTP = Current FTP
The “target FTP” comes from your manual FTP setting in Intervals.icu, while “current” is your estimated eFTP from the power model. If they’re the same, it means you haven’t set a separate goal FTP. If you want to work toward a higher number, set your manual FTP in Intervals.icu to your target (e.g., 300W) and the dashboard will show your progress toward it.

Looking forward to more feedback as you use it!

2 Likes

@dabsy Thanks for the detailed report with screenshots - that makes it much easier to debug.

You’re right, this is a timezone bug. The dashboard is using server time (UTC) instead of your local timezone to determine what “today” is. So if you’re ahead of UTC (like in Australia or Asia), the dashboard thinks it’s still the previous day.

I’ve identified the issue - the daily workout emails already handle this correctly, but the dashboard doesn’t use your timezone. I’ll fix it so the dashboard uses your local timezone consistently.


@GigiVag The recovery status comes from the wellness data in your Intervals.icu account. This includes:

  • HRV (heart rate variability)
  • Resting heart rate
  • Sleep duration
  • Any subjective ratings you log (fatigue, soreness, mood, etc.)

If you’ve connected Whoop in Settings > Integrations, it also pulls your Whoop recovery score for an extra data point.

The “yellow” you’re seeing means your recovery signals are moderate - not fully fresh (green) but not depleted (red) either. That’s why the app is suggesting lower-intensity options like Endurance or Recovery instead of harder workouts.

If you’re not seeing accurate recovery data, make sure you’re logging wellness in Intervals.icu (or syncing from a device like Garmin, Whoop, or Oura).

Re Paypal: Good suggestion! I use Stripe for payments, which actually supports PayPal - I just need to enable it in my Stripe settings. I’ll look into turning that on.

3 Likes
  • minimum ride duration:
    Screenshots from my settings and a workout planned for this week:


    image
    I clicked “reset training calendar” but the workout durations are still only around 1h long

  • target FTP:
    What is the timeframe the AI uses to reach the set FTP? If I want to have a +10% FTP increase until my A-race in July, will the AI plan the taper accordingly?

Thanks again for the active replying and updating, appreciate it :slight_smile:

Workout duration: You’re right - currently the availability slider sets the maximum duration, not the preferred/target duration. So 2h means “up to 2h” rather than “aim for 2h”. This is definitely something I want to improve - the system should better respect your indicated time when you’ve blocked out 2 hours for training.

I’ve created a feature request for this. In the meantime, you could try setting a slightly higher max (e.g., 2.5h) which might push the workouts closer to 2h, but that’s admittedly a workaround and might not fix it. I will get this prioritized!

Target FTP & taper: The weekly plan adapts based on your current phase and upcoming events. If you have your A-race marked on the calendar, the AI will automatically adjust training intensity in the final weeks leading up to it (taper). However, it doesn’t currently work backwards from a specific FTP target - it focuses on progressive overload based on your current fitness rather than a specific % gain goal.

For a July A-race with a +10% FTP target, I’d recommend:

  1. Make sure the race is marked as an A-event in Intervals.icu
  2. The system will plan appropriate build phases and taper automatically
  3. Track your progress via the analytics page to see if you’re on track

First off - I’ve been a bit overwhelmed (in the best way) by all the excited and positive feedback on the app. It really means a lot! I’m capturing all the ideas and questions that are coming in and doing my best to follow up with everyone who posts or emails me.

Been heads-down fixing bugs and closing gaps. Here’s what’s improved over the last few days:

Smarter Recovery & Adaptation

  • Recovery metrics (HRV, resting HR, sleep) now compare against your personal 30-day baseline instead of hardcoded thresholds. If you consistently sleep 6 hours and your body shows good recovery, the app treats that as normal for you.
  • Weekly plan workouts now adapt to your daily readiness - threshold becomes endurance when you need recovery, maintaining progression while respecting your body.
  • Adaptation reasons are more specific - you’ll see exactly why workouts change, with details like “Threshold → endurance due to moderate fatigue (TSB -7) and good recovery (82%)”.
  • New adaptation section in daily emails clearly shows when and why workouts were adjusted from your weekly plan.

Post-Workout Analysis

  • Workouts are now compared against similar past workouts - see power trends, HR efficiency changes, and progression insights.
  • New workout comparison section in post-workout emails shows how you performed vs. the same workout type from weeks ago.
  • Activity detail dialog displays workout-to-workout comparison with trend indicators for power and heart rate.
  • HR:Power coupling analysis detects cardiovascular efficiency improvements or signs of fatigue accumulation.

Training Settings

  • Training availability now sets your target workout duration - if you set 2 hours, workouts will aim for 2 hours (except during recovery/taper weeks).

Bug Fixes & Polish

  • Fixed Training Stimulus card showing zeros for high-intensity interval workouts and races.
  • Fixed Analytics showing false “No VO2max work” warnings for users with interval workouts.
  • Workout names are now consistent between TrainNow and daily emails.
  • Multiple workouts on the same day (warmup, race, cooldown) are properly detected and factored into adaptation decisions.

UI Improvements

  • Native-style bottom tab navigation for mobile (Dashboard, Train, Calendar, Analytics, More).
  • Theme toggle to switch between light mode, dark mode, and system preference.

Keep the feedback coming!

4 Likes

Maybe I am confusing something but on the dashboard the AI coach tells me I am well recovered and should do a threshold session for today:

But then in the training tab it tells me to do a recovery run?

Also one more question. I was experimenting with Claude MCP Integration and therefore already have a lot of workouts planned. Should I delete all of them so that intervalcoach has a blank sheet to create new workouts for me?

Looks very promising and way easier/cheaper than my own Claude Integration.

Thanks and BR,
Marc

I think I understand this, but I would like to check:

If you have your A-race marked on the calendar, the AI will automatically adjust training intensity in the final weeks leading up to it (taper). However, it doesn’t currently work backwards from a specific FTP target - it focuses on progressive overload based on your current fitness rather than a specific % gain goal.

The length of the goal race and my target time are irrelevant? The goal CTL is determined based on where I am currently and where the “IntervalCoach” calculates it can take me?

If that’s right, it seems a very rational way to approach a goal CTL. But doesn’t that approach ignore that some components (e.g. speed) are more important for some race lengths than for others?

It’s really a nice looking app that is easy to use, displays relevant information clearly, and appears to do what is so difficult for me to do: weight a bunch of factors and adjust.

Thanks!

Having a play with this today & I get a call tack error when creating a sprint workout

1 Like

@Mark_Hughes Great questions - you’ve clearly been thinking about this carefully.

What IS used:
The race name and description are analyzed to determine target CTL. The AI looks at event type (criterium, gran fondo, marathon, etc.) and estimated duration. Shorter events have lower CTL targets (e.g., 50-70 for a crit) while longer events need higher aerobic base (70-90 for a gran fondo).

Where you’re right:
The workout TYPE selection (speed vs endurance emphasis) doesn’t currently vary based on race duration. A criterium rider and a gran fondo rider both in “Peak” phase would get similar workout suggestions - the system prioritizes race-specific intensity in Peak phase generally, but doesn’t tailor it to short/explosive vs long/steady demands.

That’s actually a meaningful gap. The periodization model handles when to do different types of training (Base → Build → Peak → Taper), but not the specificity of training for different event demands. I’ve added this to my list - it would make the coaching more personalized.

Thanks for the thoughtful feedback (and the kind words about the app)!

@sandeater Thanks for the screenshot - that’s really helpful.

Good news: I actually just fixed this bug earlier today. There was an issue where checking workout spacing could get stuck in an infinite loop when all alternatives were blocked.

Could you try a hard refresh (Ctrl/Cmd + Shift + R) or clear your browser cache? That should pick up the fix.

If you still see the error after refreshing, let me know and I’ll dig deeper.

2 Likes

Hi, congratulations again on what you’re building — it’s fantastic.

Do you think it would be possible to consider giving the AI feedback about mood and mental stress?

I believe it could be very interesting.

Gigi

1 Like

Works great, although the spent workout it suggested for me made me grit my teeth!

2 Likes

Great suggestion about mood and mental stress. Interestingly, I already sync that data from Intervals.icu (if you log it there), but right now it’s not being actively used to influence workout recommendations. Your message made me realize that’s a missed opportunity.

Field Type Scale Description
stress number 1-5 User-logged mental stress
mood number 1-5 User-logged mood
fatigue number 1-5 User-logged fatigue
soreness number 1-5 User-logged muscle soreness

I’ve added this to my list - the idea would be to factor mood/stress into the readiness assessment so the AI can suggest lighter workouts when you’re mentally drained, or adjust the messaging tone accordingly.

3 Likes

Hi, it works quite nicely now. For the 4 sessions planned this week, they are in the range 1h50m - 2h20m (all 4 days I set 2h as the target).

A general question regarding the workouts - how is the AI building the workouts? Does it select from a pool of options (e.g. 3x15m Z4, 40/20s) and then modifies them to fit the set duration, stress, etc.?

1 Like

Hi,

It looks like the model is contradicting itself on the dashboard page.
On top of the page, the AI coach is suggesting me to do a Tempo workout (even though I’ve had a bit of a rough weekend with lack of sleep, low HRV and elevated HR).

On the other hand though, a bit lower, I get a “Rest Day Recommended” (which I tend to agree more with):

It would be nice to see consistent suggestions throughout the app, as it’s becoming a bit confusing now :slight_smile:

Anyway, it’s nice to see you put so much effort in this, so keep up the good work!

1 Like

The process is two-step:

  1. Workout type selection - First, a workout type is selected from a catalog of ~25 types (Sweet Spot, Threshold, VO2max, Tempo, etc.) based on:
    • Your training phase
    • Recovery status
    • Recent workout history
    • Stimulus spacing rules
    • Fatigue level
  2. AI workout generation - Once the type is selected, the AI generates the actual intervals. It receives:
    • The workout type (e.g., “Sweet Spot” defines zone 88-94% FTP)
    • Your duration range (around your 2h target)
    • Your FTP/power profile
    • Wellness and recovery data
    • Historical effectiveness

So to answer your question: the AI doesn’t pick from a pre-made pool of “3x15m Z4” workouts. Instead, it creates the specific structure each time based on the workout type’s characteristics and your personal data. That’s why you see some variation in the actual intervals and why the duration isn’t exactly 2h - the AI is balancing the workout structure with your target stress/duration.

I just pushed a fix for this earlier today! The AI Coach and Today’s Plan widgets were using different logic, which caused the contradiction you saw.

Do a hard refresh and they should be in sync now.

1 Like

Great work!

Funny enough, I just spent the weekend vibe coding a very similar app to this, decided to see if anything existed in the market before getting too invested, and found this gem already in production. :laughing: :man_facepalming:

I have subscribed with a paid subscription and look forward to seeing where you take it.

Best,
Michael

3 Likes

I have a question regarding athletes with very limited time: Can the AI adapt to a schedule of, say, 3 sessions per week for 1–1.5 hours each?

Specifically, I’m curious if the algorithm recognizes the low volume and compensates by increasing the intensity (e.g., more Sweet Spot or HIIT) to ensure a sufficient training stimulus? For time-crunched athletes, a traditional high-volume/low-intensity approach often doesn’t provide enough ‘bang for the buck.’

Hi,

Just a stupid question:
Why doesn’t my goal match goal progress?


What did I do wrong?

Thanks

PS: Do you have any news on the introduction of PayPal? My trial is expiring and I’d like to upgrade to PRO.
Have a nice day.

Gigi

I have another question regarding setting the FTP manually for an A-event. In a previous post you said that I should set the target FTP I want to have for my A-race in the intervals settings and that the AI will plan accordingly, in order to reach it.
However, by doing this, it also kinda messes up the intervals calendar and fitness progression, e.g. for a very similar workout, the reported load is now lower and the fitness progression is now slowed down, because the load is lower. Further, the power zones are now shifted, making it look like a 3x 10min Z3 rider was a constant Z2 or even Z1.
Is there a setting in intervals I am not seeing, to use eFTP or something else, or is it maybe better to set the target FTP inside the intervalcoach itself and use eFTP == manual FTP inside intervals?

Another question is regarding FTP testing - in the changelog I saw that the AI will plan FTP tests every 4-6 weeks. First, I think the testing frequency is bit too high, especially if a person has been cycling for a few years - I don’t think the potential 2W increase is worth retesting every 4 weeks. If the AI sees that the athlete is a newbie, then maybe 6 weeks is fine. Second, I always use the FTP test inside mywhoosh. Of course an FTP test must always use the same protocol to be useful. Does the AI know which protocol I follow, and will it suggest doing specifically the one protocol I always do, or does it just suggest doing a 20min all-out effort?

Thanks :slightly_smiling_face: