Steady — structured training plans + AI ride reviews, built by an intervals.icu user

I’ve been following the AI coaching projects in this forum and it’s great to see so many people working on this. I’ve been building one too and wanted to share it here.

What Steady does:

  • Connects to Strava, pulls your ride history, estimates where you are physiologically (FTP, LT1, durability, VO2 ceiling)
  • You set a goal: a granfondo, a multi-day tour, a segment PB, “raise my FTP,” whatever fits
  • It runs a gap analysis (what does the goal demand vs. where are you now?) and builds a periodized plan targeting your limiters
  • Reviews at every level: a coaching review after every ride, a weekly summary of how training is going, and a block review at the end of each training block that decides what to adjust next based on how you responded
  • After a ride, that looks like this:

“Power held all the way through, but HR drifted 13% in the second half. Classic aerobic decoupling. Your base is the current limiter, not your threshold. This ride did its job. Recovery tomorrow, then intervals Thursday.”

How it’s built:

The training decisions (periodization, block structure, session selection, progression) live in code. The AI writes ride reviews, explains workouts in plain language, and answers questions about your plan. I started with ChatGPT doing everything and gradually moved the training logic into code as I learned where I needed more control. Still evolving.

Where intervals.icu fits:

I use intervals.icu daily, premium subscriber. Steady doesn’t replace it. Right now Steady pulls from Strava, but I’d love to explore tighter integration with intervals.icu down the line if there’s interest and if David is open to it. If anyone uses both, I’d be curious how they feel together.

About me: Cyclist, former CTO, building Steady full-time with my wife. We launched last week. It’s early and there are rough edges. Would really appreciate honest feedback on what works and what doesn’t.

14 days free, no card required. €9.99/month founding price. trainsteady.com

Happy to answer anything about how it works. And if you’ve tried other coaching tools (AI or not), I’d love to hear what you liked and what was missing.

— Paulo

Giving it a test, but can only pull 30 days of data?

1 Like

First off, thank you Patrick for giving it a shot!

Currently it pulls from Strava all ride and virtual ride activities in the past 42 days: the typical sweet spot (no pun intended) window that balances recency and potential staleness. This can definitely be argued about and I see no reason not to extend it to 90 days for example. What was your expectation on that?

Keen to hear any other feedback as you try it out. Thank you!

Wanted to add some context on why I built this, since the original post was mostly about what it does.

I’ve been self-coaching with Intervals.icu for a few years. Went deep into training science — polarized training, periodization, how to read power and HR data properly. Eventually, like many others here, I built a custom GPT that could look at my Intervals.icu data and help me understand my rides and figure out what to do next. It worked well enough that I started coaching 3 other riders I met in forums. They were looking for the same thing I was. Same setup: pulling their Intervals.icu accounts into the GPT, giving them ride feedback, adjusting their training week by week.

That’s when I hit the wall. The GPT would hallucinate numbers, lose context between sessions, and couldn’t reliably structure a plan. I was spending more time fixing its mistakes than coaching. The pieces that worked — the ride analysis, the plain-language explanations — were great. But I sensed everything structural (periodization, progression, block design) needed to be deterministic, not probabilistic.

I wanted one thing that could do the full loop: assess where someone is, figure out what’s limiting them, build a plan around that, and then actually review their rides and adjust. That’s what Steady tries to be.

On the training logic side — I started with ChatGPT doing everything. It was fun but unreliable. Over time I moved all the structural decisions (periodization, block design, session selection, progression rules) into code, where I can test and audit them. The AI handles what it’s good at: explaining what happened in a ride, writing your weekly summary, answering questions about your plan in plain language. No LLM math.

Here’s some screenshots of the current version:




Lots of room for improvement, and I’m looking forward to implementing a deeper integration with intervals.icu. Obviously, the better the data, the better the coaching can be.

One thing I should’ve been clearer about in my first post: what the free trial actually includes.

It’s not a limited demo. For 14 days, you get the full thing:

  • Fitness assessment — Steady estimates your FTP, LT1, durability, VO2 ceiling from your ride history (last 90 days off Strava)
  • Gap analysis — what your goal demands vs. where you are, and what your specific limiters are
  • A full first 4-week training block built around those limiters
  • AI coaching review after every ride you do
  • Weekly summary and reflection as input to crafting the next 4-week block
  • Chat with your coach — ask it anything about your plan or your rides, available 24/7

If anyone wants to kick the tires, I’d genuinely appreciate it, especially the “this is broken” and “this doesn’t make sense” kind of feedback. That’s the stuff that helps most right now.

And a genuine question for this community: for those of you who self-coach with Intervals.icu: What’s the part of the process you find most tedious or uncertain? For me it was always “did that ride actually do what it was supposed to?” Curious if others feel the same or if it’s something else entirely.

I’m very active developing this towards the vision I have for it, and working on it full time. I’ll post here every now and then with some insights, as I know this community loves the details judging by the incredible engagement with other projects here.

Thank you!

1 Like

you’re gonna need a lot of tempo/sweet spot to tackle all the climbs for Serra da Estrela!

1 Like

Wanted to share a bit more on what I believe is a key differentiator for how Steady works.

Most training apps work forwards: pick a template, raise your FTP. But a mountain granfondo and a Zwift category upgrade need almost completely different fitness. Same rider, same FTP, completely different gaps.

As a coaching app, Steady works backwards from the goal. It figures out what fitness you need, measures where you are, and the biggest gaps get the most training time. Here’s a couple of examples:

Mountain granfondo, 140km, 3,500m climbing:

Targets come from the actual course terrain (gradient distribution, expected duration, objective). This rider’s FTP is fine at 3.1 W/kg, but their longest ride is 3 hours and decoupling is already at 8%. Durability is the gap. So the plan puts most quality time into long rides and aerobic base instead of more threshold intervals, particularly if it’s still in base phase.

Zwift C to B upgrade:

For Zwift we track 6 dimensions, not just FTP. Threshold, VO2 ceiling (1-min power), surge (30s), sprint (15s), aerobic floor, and (crucially) repeatability. That last one is measured from actual race power streams, not a 5/20 ratio. It’s how much your watts drop across repeated hard efforts in a single race.

How far you are from the category boundary changes what the plan focuses on. If the FTP gap is over 15%, threshold work dominates. If you’re close to the line, sprint and surge power take over because you have the engine, you just can’t deploy it in race situations yet. Here’s what such an assessment at onboarding time may look like:

The training plan is then designed around closing these specific gaps. Every 4 weeks, the whole thing recalculates based on how you actually responded, producing a new training block that is designed to meet you where you (now) are. When one gap closes, the next block shifts to whatever’s now the biggest limiter.

Same rider could be ready for one goal and completely underprepared for the other. Obsessing about FTP often means training the wrong thing, and not even realizing it.

Free trial covers the full assessment, so you can see for yourself on your own data (requires Strava and power data). You get a scorecard with current vs target for each dimension and what the plan will focus on. If the logic (or the actual scorecard, if you sign up) seems wrong for your situation, I’d love to hear why. Still early days for Steady but very excited about the potential for helping many more amateur riders like me get quality coaching. :slight_smile:

Haha, yes the plan is already aware! Serra da Estrela is in the goal profile and durability is flagged as the primary gap.

BUT… I live in Berlin and going to Portugal with the bike and everything in June might be tricky due to the war situation, fuel prices, etc. So I’m probably going to change my own personal goal to something I can achieve without going far…

Question to Zwift racers:

When you’re close to a category boundary, is the actual limiter your FTP or is it fading across repeated hard efforts in the same race? Asking because Steady tracks this separately (repeatability, measured from actual race files) and it changes what the plan focuses on.

Curious whether this matches what others actually experience (I personally do).