arrow_back All posts
Dev Log

Why I Chose intervals.icu Over Strava

Every training app starts with a data source. Here's why Flott talks to intervals.icu — and why that decision shapes everything.

When you're building a training app, the first question isn't "what framework?" or "what database?" — it's where does the data come from? Get that wrong and everything downstream falls apart.

I had three options: Strava, Garmin Connect, or intervals.icu. I picked intervals.icu. Here’s why.


Strava has an API. Sort of.

Strava’s API is built for social apps, not coaching apps. You can pull activities, sure. But the rate limits are aggressive, the data is summarized (no raw HR streams without extra calls), and the authorization flow is designed for multi-user OAuth apps with redirect URIs and token refreshes.

For a single-user app built at 2am? That’s a lot of ceremony for one athlete.

warning The Strava tax

Strava's API terms also require you to display their logo, link back to activities on Strava, and follow strict branding guidelines. For a personal tool, that's baggage.


Garmin has the data but guards it

Garmin Connect has the richest raw data — HR second-by-second, GPS tracks, training effect, body battery, the lot. But their API is partner-only. No public developer access. You either get invited to their developer program (good luck) or scrape the web UI (don’t).

lock Garmin's developer portal: "Contact us to discuss partnership"

Dead end for an indie project.


intervals.icu gets it right

intervals.icu is built by one person — David Tinker — and it shows in the best way. The API is simple, powerful, and designed for exactly this use case.

REST
Simple API
Basic
Auth model
Open
Data access

What I get out of the box:

  • Activities with full metrics — distance, pace, HR avg/max, training load, aerobic effect
  • Wellness data — weight, HRV, resting HR, sleep duration, sleep score
  • Fitness tracking — Fitness, Fatigue, and Form numbers calculated daily
  • Calendar events — planned workouts I can read and write to
  • Athlete profile — HR zones, threshold pace, FTP

All with HTTP Basic Auth. One API key. No OAuth dance. No token refresh. No rate limit headaches.

Flotti
Flotti

This is where I get my data. Activities, wellness, form numbers — all in one place. I can see what you did, how you recovered, and what's coming up. That's everything I need to give you real advice.


The write-back is the killer feature

Most training APIs are read-only. You can pull your data out, but you can’t push anything back in.

intervals.icu lets me write planned workouts back to your calendar. That’s what makes the Plan screen work — when Flotti builds your week, those sessions show up in your intervals.icu calendar alongside everything else.

calendar_today Flotti-generated plan synced back to intervals.icu calendar

No copy-pasting. No switching apps. Flotti plans it, intervals.icu shows it, your watch executes it.

lightbulb Why this matters

An AI coach that can only suggest workouts is a chatbot. An AI coach that can schedule them on your calendar is an actual training tool. The write-back API is what makes Flotti more than a conversation.


The trade-off

intervals.icu isn’t perfect. It’s a niche platform — most athletes haven’t heard of it. The API documentation is a Google Doc (seriously). And it depends on your watch data being synced through Garmin Connect or Strava first, so it’s not the source of the data, it’s the aggregator.

But for what Flott needs? It’s the best foundation I’ve found. Simple auth, rich data, write access, and a developer who actually uses his own product.

That’s rare.

The takeaway

Your data source shapes your entire app. Strava is social, Garmin is locked down, but intervals.icu gives you the full picture — plus the ability to write back. For a personal AI coaching app, that's everything.

Flotti

The Flott Blog

Training smarts, dev stories, and Flotti opinions.