A new Intervals Companion App. With widgets!

Hello. I’m the creator of the Intervals Companion app that many (1400 actually!) of you have found recently:

https://apps.apple.com/us/app/intervals-icu-companion/id6739638454

I haven’t posted here much, but I’ve used intervals.icu for years, and it has become the central hub for all my training data. My original goal was to create automatically updating widgets to show fitness, fatigue, and form values on iPhone and Apple Watch. I had the idea for quite some time, but when I realized there’s an easy-to-use and well-documented API (thanks, David!), I realized I might be able to make something useful. I got a new M4 Mac mini, which made running Xcode a less frustrating experience, and I dove in.

The app grew from that original idea with interactive graphs, future wellness data and upcoming workouts, the activity list, the vitals screen, many more widgets, and other bits like the ability to sync Zwift activities to Apple Health. I’m a fan of the sport summary widget with configurable distance and time-based goal rings. The next release will be in a week or two and will include a new totals screen for showing daily/weekly/monthly distance, time, elevation, and load totals for a customizable set of activity types across the selected time range. The graphs on the vitals and totals screens will support drag-and-drop to change their order too. See the image at the end of this post for a preview. I’m also happy to share details about the auto-updating widgets and any other features with anyone interested.

This all started as a project to implement features for my personal use cases. I haven’t kept track of the number of hours I spent on it, but I created it in my spare time over many months. The app is free, of course, but you will eventually see a popup asking for a donation to the Pan-Mass Challenge to support research at the Dana-Farber Cancer Institute. The PMC is a Massachusetts-based bike-a-thon that raises more money for charity than any other single athletic fundraising event in the country. 100% of every donation goes to Dana-Farber, and since 1980 that has totaled over $1 billion. The impact on the world has been enormous, and since 2018 over half of all FDA-approved cancer drugs have had connections to the work done at Dana-Farber.

If cancer research is a cause that resonates with you, or if you would like to support ongoing development of the app, donations can be made via my PMC profile page: https://profile.pmc.org/SM0853 – As you can see, I have a long way to go to hit my goal! Any support has my heartfelt gratitude.

Thank you!
Spencer

33 Likes

Many thanks for doing the effort Spencer - highly appreciated!

1 Like

This companion app is super slick, very nice work! I even have a few of the widgets on my MacOS desktop. Thanks for the work

1 Like

Great - I use intervals also on mobile and often thought an app would be nice to have.

2 Likes

Thanks everyone! Version 1.1 with the new Totals screen is out now. I’m also glad to hear people are trying the widgets on macOS, I have my desktop full of them as well.

I like having a dedicated screen on my iPad too:

4 Likes

This looks great, and would love to try it. I can’t figure out how to use my Strava credentials to log in (like I do on the website).

Hi, thanks for this app! I have added a couple of widgets to my mac too. couple of questions

  1. how do I “force” them to be in color (if possible) and not in b/w? like this, when I’m using other windows on top
  2. I have my app setup to use metric system and I see my weight in kg but the widget shows my weight in pounds, how do I change it?

thanks!

For the widget colors, that’s partially determined by macOS. If you go to the Settings → Desktop & Dock you should see these options:

Changed widget style to full-color. With automatic or monochrome selected, macOS will automatically remove the color unless you are showing only the desktop.

For the new weight widget not showing in metric, that’s a bug, thanks for finding it! Widgets have access to the settings from the full app but needs to be looked up in a special way that I missed. This will be fixed in the 1.1.1 release, hopefully soon.

I’m not actually sure if the Strava credentials will work with the authentication endpoint the app needs to use for access to the data api. Looking at the intervals.icu login window I show as part of the login flow, I think it needs to be an intervals.icu account.

Note that if you use the Strava connection to import your activities, that won’t work with any intervals.icu 3rd part app that uses the data API. That’s due to Strava’s API policy change. I’ve got a few emails about this so far. You will need to use the direct app connections from Intervals to services like Garmin, Wahoo, Zwift, etc. To sync activities recorded with an Apple device you’ll need to use the HealthFit or RunGap app to sync to intervals.

thanks! that worked! :+1:

I’m excited to try it out on iOS, but after logging into intervals and granting it all read/update permissions, it still tells me it needs permissions for calendar, activities, etc. I also tried reinstalling the app and revoking permissions on intervals to reset the login. Any ideas?

I think I know what’s going on. You actually don’t want to check the update permission boxes. Just leave the read boxes checked.

The app doesn’t require update permissions on your account. It only reads data. I have a check that confirms it has all the READ permissions it needs and I think it must be a bit too aggressive, as it’s aborting if you have the update permissions checked as well.

I can clean that up, but you can just leave the READ boxes checked and you should be able to get in.

1 Like

That was it! Thanks!

Hi Spencer, do you plan to develop the same on Android ?

5 Likes

@spmcewen great app!
btw i found a bug on apple watch, the last graph has the colored portion that overlap the setting button.

Really Thank you for the great app. It was really needed!
Congratulations.
I installed it and it is really functional.
I don’t understand only why it doesn’t intercept my Rowing (Virtual Rowing) workouts, everything else does.
I checked and selected all the various activities that I record on Intervals.icu, but Rowing doesn’t seem to digest it. :thinking:

Sorry, this is Apple only. I know there are other intervals front end apps that work both on iOS and Android. AFAIK those are built with non-native frameworks that are great at allowing you to build one app that runs on everything, but they limit the ability to take advantage of native framework features like widgets, watchOS apps, etc. My app was built with Apple’s native tools. All the graphs are built with Apple’s SwiftUI Charts library.

If you could send me the model watch you’re using and a screenshot that would be great: intervalscompanion@icloud.com

Getting the layout working well on all the various sized watches was one of the tricky parts. I mostly tested on my Ultra, both physical device and in the virtual Xcode simulator, but I also ran everything, at least virtually, on SE and Apple Watch 10 sized models. I may have missed something though!

1 Like

I’d like to figure this one out. If you’re syncing activities with Strava to Intervals that could be the issue, as it’s not possible to get the data for those activities from the intervals API.

Or it’s a bug specific to virtual rowing. I haven’t been able to test with every possible activity type, there are lots of them! I suspect it may be Strava (yet again) though, as I just added a fake virtual rowing workout to my calendar and I see it in my app. I should change the icon to something better though.

[EDIT] - on second look it appears I may have missed adding VirtualRowing, which is why it shows up with the generic icon. Let me dig in…

[EDIT #2] - Looking better! These fixes will be in the 1.1.1 release, including fixes to the sporty summary widget for “All Water Sports” which is fixed and now includes the “Rowing” and “VirtualRow” activity types.

ErgData with which I record the Virtual Rowing training session, is then connected to strava, and this then to Intervals. I hope it’s not the problem because ErgData app that saves the training on the LogBook (the native app of Concepr2) synchronizes only on Strava and Training Peaks.

So to have the rowing training data on Intervals, I have to use Strava as an intermediary.

I attach a couple of screens to show what happens

Today: