[Project Share] PlanWatts: I built an AI assistant to build Intervals workouts

v0.22.0 — Dashboard, Themes & Multi-sport Performance Curve

April 28, 2026

Skills mode is now opt-in

Open Settings → Labs and flip the switch to give your coach slash commands and a focused single-agent runtime — direct and consistent.

  • Slash commands: /plan:create, /workout:create, /activity:analyze, …
  • Classic graph mode stays the default.

A new at-a-glance Dashboard

A single page summarising everything that matters today.

  • Greeting reflects how fresh you are (TSB).
  • Current FTP / CSS / run threshold / RHR / weight — metrics you don’t track stay hidden.
  • 90-day PMC chart with CTL / ATL / TSB lines.
  • Next workout, current-week planned-vs-actual TSS.
  • Multi-sport Performance curve (see below).
  • Shortcuts to Calendar, Plan, Coach, Sync, last activity.

One dashboard, three sports

The Performance curve adapts to what you train.

  • Cyclists — real mean-max power curve (1 s sprint → 90 min), straight from your streams.
  • Runners — pace curve (best mean pace per duration, min/km), inverted axis so faster sits higher.
  • Swimmers — best pace per 100 m at each common distance bucket.
  • Triathletes — sport switcher; auto-selects whichever sport you train most.

Three themes, one click away

Changes the full neutral palette and heading font (not just the accent). Light/dark still follows your system preference.

  • Clinical — sky-blue + DM Sans. Minimal, data-first.
  • Velodrome — electric lime on carbon neutrals, Space Grotesk. High-contrast, sporty.
  • Editorial — warm cream, ochre, Fraunces serif. For reading your training like a story.

Your AI coach now draws charts

Ask the coach to visualize anything; it plots it in the chat. Combines activities + plan + streams into the right chart type (line, bar, area, pie/donut, scatter) without leaving the conversation.

Prompts that work:

  • “Show me my weekly TSS for the last 6 weeks”
  • “What does my power curve look like this quarter?”
  • “How much time did I spend in each zone on my last long ride?”
  • “Am I keeping up with the plan these last 4 weeks?”

Requires Skill mode (see below). Classic graph mode doesn’t have the charting tools yet.

Also fixed

  • Activity analysis disputes now actually re-run. Telling the coach “the analysis is wrong, it was Z2–Z3” used to return the same cached result; it now re-runs.
  • Custom zones honored in activity analysis. Athletes with non-Coggan zones (e.g. Kuepper) and range-target workouts no longer get misread as “pure Z2”.
  • Friendlier tool labels in the chat thinking strip. Raw names like aggregate_activities are replaced with localized descriptions in all six languages.
1 Like

WOW

v0.23.2 — Wahoo: sync your ELEMNT (beta)

May 29, 2026

Send your workouts straight to the ELEMNT

Connect Wahoo from Settings → Integrations (turn on Wahoo under Preferences → Experimental features first), and the workouts PlanWatts plans for you start landing on your bike computer with the correct power targets — ready to ride. Rides you record on the ELEMNT, or upload manually to the Wahoo app, flow back into PlanWatts and merge with your Strava and Intervals copies into a single activity tagged with all three providers.

Delete a session, lose it everywhere

When you delete a workout that’s synced to several platforms, the confirmation now names every platform you’re removing it from, and the delete actually reaches each one. Before, Wahoo copies were quietly left behind in your account when you cleaned up from PlanWatts. Fixed.

Hello,

I was wondering whether you are planning to integrate a fitness or strength-training exercise database in the future.

I currently do strength training 2–3 times per week alongside my cycling, running, and swimming training. When I ask the AI for strength-related exercises, it sometimes indicates that fitness training is outside its current scope. That made me curious whether this is something you plan to expand on in future updates.

In my opinion, strength, mobility, and core work are essential parts of a well-rounded endurance training program. Exercises such as squats, lunges, deadlifts, core stability work, and mobility routines all contribute to better performance, injury prevention, and ultimately more power on the bike. Because of that, it feels like a natural addition to a comprehensive training platform.

That said, I wanted to compliment you on what you’ve built so far. I’ve spent some time reading through the forum, development updates, and roadmap discussions, and it’s clear how much dedication and effort goes into the platform. The continuous improvements and engagement with the community are impressive to see.

Thank you for all the hard work. The platform has been genuinely helpful, and I’m excited to see where it goes next.

1 Like

Hi Anton,

First off, thank you so much for the incredibly kind words! As a solo developer building this platform, reading feedback like yours is a massive boost of motivation. It really makes all the hard work worthwhile.

You are absolutely right about strength, mobility, and core work. They are fundamental for any endurance athlete to prevent injuries and optimize power transfer on the bike or the run.

I definitely want to integrate a strength training component into the AI. The challenge I’m currently working through behind the scenes is how to track and prescribe it meaningfully. While endurance sports have clear, continuous metrics (like Watts or Pace), strength training relies on different variables, and I want to make sure the AI plans it in a way that genuinely complements your cycling and running fatigue, rather than just spitting out a generic list of exercises.

It’s high on my priority list to figure this out and build it right. Thank you again for your insight and for being such an awesome part of the community. Stay tuned for future updates!

1 Like

v0.24.1 — Wahoo is out of beta

July 4, 2026

No more toggle needed

Wahoo sync — connecting your ELEMNT, receiving workouts with the right power targets, and merging recorded rides back into your activity feed — is now available to everyone. Just connect it from Settings → Integrations; the old Experimental features toggle is gone.

Hi everyone,

Some of you know PlanWatts as the workout builder that sits on top of your Intervals data. This update is for the coaches among you, because the biggest gap in the coach side just closed.

Until now, PlanWatts gave a coach a roster dashboard, group plans and per-athlete calendars, but reading the squad was still your job: staring at the table, working out who is tired and who is slacking. As of this week, the AI does the reading:

  • One click gives you a plain-language summary of your squad’s week, with flags per athlete: ramping too fast, under-recovering, missing sessions, or simply no data connected yet. Every flag comes with the numbers behind it (TSB, compliance %, weekly load vs target). The AI phrases and prioritizes; the physiology comes from the same pipeline as the dashboard, so it does not invent anything.
  • The chat knows your team. “How was the team’s week?”, “Who’s not following the plan?”, “Who is ready for more load?”, “How is [rider] doing?” all answer from real data.
  • Ask it to adjust a rider’s load and it drafts the workout for your approval. Nothing reaches an athlete’s calendar until you say so, in the chat or from the dashboard. It suggests, you decide.
  • A weekly email digest brings the summary to your inbox, with an optional copy to each athlete containing only their own week (for junior squads, that email works addressed to a parent too).
  • And on the other side: your athletes’ own AI now knows you are their coach. If they ask it what to do today, it answers with your session instead of inventing one. If they are tired, it offers a lighter version of your session, not a replacement. Your plan is the source of truth.

The honest state: this is a preview. The coach role is still granted by hand, there is no self-service signup yet, and that is on purpose: I am tuning the flags and the questions around what real coaches actually ask, with a couple of teams already in. If you coach a squad, or even one or two athletes, and want in: reply here or DM me with the email you use on PlanWatts, roughly how many athletes you coach and which sports, and I will switch it on for your account.

On money, no surprises: the coach tier will eventually be a flat monthly price per team (around 19-29 EUR), your athletes always free on their side. Preview coaches use it free while I build, and keep a founder price when billing goes live.

The docs walk through all of it: Coach Tier | PlanWatts Docs

And if you are an athlete whose coach juggles TrainingPeaks exports and spreadsheets: this is the part where you forward them this post.

Cheers,
Jesus

Hello, I found an issue today:

  • I have successfully performed a workout and had two commuting rides as well today.
    PlanWatts marks all three activities as performed workout.
    As as result, TSS on the day, TSB, CTL and ATL are all wrong in PlanWatts.
    Could you please fix this?
  • The calendar on the dashboard appearently does not show planned workouts for the week that are not created by PlanWatts.
  • It would be great to be able to open a detailed view of the calendar day. Not working for me. When there are multiple sessions planned, it gets quite crowded and you hardly can ready what is planned on the day.
  • It seems that the workout builder does not detect races. Am I right?
  • I asked the coach to analyze my yesterday’s workout and I have the impression it only takes the title of the workout into consideration. All answers are “For a session 3 x 10min @ 105 %” decoupling of 7% is rather normal" or “For a session 3x10min @ 105%, the session contains effort of 400+ W which leads to a high VI”. It does not recognize that the coach planned 3 x 30s sprints as well to the training. This is a real issue. Can you please check that? Makes the analysis quite useless. I can share examples..
  • AI says that I spent 16% of my workout in Z5 yesterday. Interval shows “4,7%”, which is the true value. After arguing back and forth with the AI coach, it says I can’t help further and it might be an intervals issue. I think its a coach and algorithm issue within PlanWatts. Never ever that number can be this high in a threshold session. The Z5 watts the coach has and intervals has set are identical.

To be honest: All AI solutions out there moslty lack the same problem. Not being accurate enough in the analysis and in harmonizing data. Everything can be done, every little piece of information could be visualized and tracked, but the values and algorithms behind are simply not mature enough and certainly have integrity issues.

2 Likes

Hi @b3nschiii, I checked all of this against your account and reproduced every one of them. All six are real bugs on my side, none of them is something you did wrong.

All three rides marked as the performed workout. PlanWatts was picking the day’s planned session by taking the first activity with a matching sport and nothing else, so a short commute claimed the slot before your actual workout uploaded. It then wrote the session name back onto that activity in Intervals, and matched sessions to activities by name afterwards, which locked the mistake in. Writing a name into your Intervals data was a bad decision on my part and I am removing it entirely. Pairing is being rewritten to exclude commutes, check duration against the planned session, and defer to the pairing Intervals has already made.

TSS, TSB, CTL and ATL. Partly the above. But separately, the dashboard chart was recalculating its own fitness numbers from a cold start instead of using the values already synced from Intervals, so it was reading low. Two different numbers in the same app. It now uses the synced values.

Planned workouts not created by PlanWatts missing from the dashboard calendar. Straight bug. The widget was only counting sessions created inside PlanWatts and skipping everything synced in. Fixed.

Detailed day view. It does not exist, and clicking a past day did nothing, which is why it felt broken. Tracked as a feature rather than patched, because I think it should also be where you can correct a wrong pairing yourself instead of waiting for me.

Races not detected. You are right. The event category is dropped when your calendar is pulled from Intervals, so a race arrives as an ordinary session and the planner cannot see it at all. Fixing the sync and correcting the races already stored.

Analysis only reading the title. Literally what was happening. Because the wrong ride was credited, the analysis had no structured workout attached to it, so the title was the only plan information it had. The step by step data was available from Intervals the whole time and the code was refusing to look at it unless the session was linked locally. That condition was wrong.

Z5 at 16% versus 4.7%. You were right and Intervals was right. Two causes: the time in zones calculation was using a built in default zone table instead of your configured zones, and it was not smoothing power before assigning it to a zone the way Intervals does. With both corrected I get your ride to within 0.2 points of the Intervals figure. Zones now come from one place in the code with no fallback table anywhere, and your ride is going in as a regression test so this cannot come back unnoticed.

The AI telling you it could not help and that it might be an Intervals issue is its own bug. It should not be able to blame an upstream source it cannot inspect.

On your last paragraph, I am not going to argue with it. What I shipped here was a confidently formatted number built on the wrong constants, and an assistant that defended it instead of saying it did not know. That is the exact problem you are describing.

I can clean up the affected records in your account, there is some data sitting on the wrong ride. I will send you a message rather than go through your training data here.

Thank you for taking the time to write all of this up. Six separate, correctly diagnosed problems is a lot of unpaid work.

1 Like

Thanks for fixing.
Don’t get me wrong, I appreciate th fast feedback as well and that you are trying to solve.

Overall stance

  • Software doesn’t need to be flawless, but core functions have to work reliably
  • Anyone charging money for a product carries particular responsibility when users depend on the data in the middle of active racing and training
  • Charging extra for new features is fair and not the point of criticism

Concrete problems in the app

  1. The race shows up in the calendar but not on the dashboard
  2. The training load graph is set to 90 days but only shows the last three days
  3. Weight and other athlete profile data don’t update automatically. Click on Sync is required every time.
  4. Training plans can be created via the AI coach but not through the regular planning function (premium feature?) This is actually confusing.
  5. Matching between workout and activity should only happen with a clear link established in the interview, not left to the coach to decide automatically

What works well

  • Clean, simple layout, not overloaded with numbers and metrics
  • The planner’s structure and architecture are solid, even though the level of detail can’t be tested without a membership
1 Like

Thanks for being this specific. Four of your five points were real defects, and all four are fixed and live as of today. The fifth deserves a straighter answer than a fix.

  • The race missing from the dashboard. Correct. The line meant to show it was never connected, and the dashboard only looked two weeks ahead, which is the wrong window for a race. It looks four months ahead now.
  • The training load chart set to 90 days showing three. I broke this three days ago, fixing your other six points. The chart switched to reading the CTL and ATL synced from Intervals, and those values only exist for the days your account sends a wellness update. You had three. The axis is real days now, and the history fills itself in on sync, so your next sync should take you from three days to ninety.
  • Weight and profile data not updating. You are half right, and I would rather tell you which half. Weight and resting heart rate should update on their own, and they did not, for the same reason as the chart. Fixed. But FTP, zones and thresholds will keep needing the button on purpose: syncing them every time would silently undo any correction you had agreed with the coach. I would rather you press a button than have the app change your numbers behind you.

Plans only through the AI coach. There is no paywall. The menu entry said “create AI-assisted plan” and opened the ordinary plan editor. The label was wrong, that was all. You can build a plan by hand the same way you would in Intervals, assigning workouts to each day and pushing them to your calendar and your device. What is paid is the periodisation worked out from your goals and your current fitness. The menu says which is which now.

Matching workout to activity. Where Intervals has already made the link, PlanWatts uses that and nothing else. Where there is none it will still choose, because otherwise anyone who plans here and rides without pairing never sees a session completed. What is missing is that you can see that choice and change it, and that is the day detail view: designed, not built.

On process, which matters more than the list. The chart is the example. I verified it against my own account, which has enough data to hide the fault, and shipped it without a test for the case with little data. That test exists now. Open items go on the public changelog alongside the closed ones, so you can see the state without asking.

Thanks again for your detailed reports