Gritmaps: routes for your intervals

Hi all,

gritmaps.com is an app that takes a planned workout from your calendar and finds a loop where the climbs & headwinds line up with your effort blocks.

Climbs and headwinds for effort blocks, descents and tailwind for recoveries.

That’s the idea in one picture: a tempo block from the workout placed on a +7.9 % climb, into an 11 km/h headwind.

Signup on https://gritmaps.com and try it out! It’s in beta and I’d like your help to make it an essential tool for structured training outdoors. Feedback welcome and feel free to vote on what I should build next (poll at the end) :folded_hands:


How it works

You plan the session in Intervals.icu as usual:

Gritmaps reads it from your calendar:

Route search is treated as an optimisation problem: from your start point it generates candidate loops in 8 compass directions and simulates physics, leading to a score for how well the terrain fits the session among other criteria. Some flexibility is allowed for adjusting the workout durations (inversely proportional to the intensity: hard sprints can only be adjusted by a few seconds, recovery up to couple minutes).

The physics: a simulation runs over every road segment: gravity, rolling resistance (tyre and surface), aero drag, and the wind forecast for the time you’ll pass that spot. Your FTP and weight (with the bike’s) feed it, taken from Intervals.icu. The predicted ride time is grounded in the physics and power as you follow the workout (the ride in the Timeline shot further down for instance was planned at 1h 36m and took 1h 35m).

Elevation comes from national LiDAR where it exists (0.5–2 m in Switzerland) and Copernicus 30 m elsewhere. Efforts interrupted by junctions, traffic lights or villages are penalised. It can also route hill repeats, and use spare time you give it to reach better terrain. And you can add up to 5 waypoints (a café, a climb you want in), the loop passes through every one.

Recovery rides work too, since it keeps you off the hard climbs.

Surface profiles. Routing runs on GraphHopper, the open-source engine komoot also uses, but with profiles I fine-tuned myself. There are five: two asphalt (major roads, quiet roads), two gravel (smooth, rough) and one MTB.

I spent time over the summer refining the profile rules by riding myself but that’s where your feedback can also help :grinning_face_with_smiling_eyes:

To your device. One click pushes the course and the terrain-adapted workout to Garmin Connect or Wahoo. Each workout step ends at a distance on the route, so it fires where the climb starts. The app is still missing the real-time update component, it’s one of my next projects. GPX route and FIT workout can also be exported for other devices.

After the ride. The Timeline compares planned and actual. This ride shows 97 % time in target, a 62 % execution match, 1h 36m planned against 1h 35m actual, and a map coloured by heart-rate zone. It can sync the ride to Strava as an optional report, even though right now I’m waiting for the obscure approval process to increase the athlete cap.


What’s next

It’s free, go signup on https://gritmaps.com and I can’t wait for your feedback!

Below some ideas for what comes after, feel free to vote

  • Live re-matching mid-ride via a connect IQ and wahoo ELMENT add-on: miss a turn and the rest of the workout moves onto the terrain still ahead
  • Rain radar & temperature on the route with associated scoring
  • Traffic exposure: keep off busy roads
  • Native phone app (installable)
  • Native phone app has turn-by-turn navigation with re-routing
  • Running & trail running support
  • Something else (tell me in a reply)
0 voters
4 Likes

This is a great idea and a welcomed approach to an challenge most of us face. Prior to creating an account, do you have documentation we may read?

2 Likes

Great idea—I’ll definitely use it.
Just a few notes… I only tested it for a practice run, but I think you should also take roundabouts, traffic lights, and busy roads into account. I once tried doing a workout on a route chosen by Gritmaps, but the road was so busy (it was a high-traffic roundabout) that I had to stop.
Anyway, it’s a great idea, and I’ll certainly be using the app.

2 Likes

This is a really useful idea for structured outdoor training. Matching climbs and headwinds to effort blocks could make workouts much more practical. Great work on the project!

2 Likes

Thanks! excellent points. Today I only take traffic lights and intersections into account, it’s part of the interval continuity subscore which weights for 10% and urban avoidance 5% to avoid entering into dense urban areas, and it’s always a trade-off as many subscores contribute to the overall score. Btw you can check the subscores by expanding the little toggle icon up right like in the screenshot

Traffic is an excellent suggestion and as a matter of fact I have started looking into integrating statistical traffic data or calling real-time APIs like I do for weather, so your comment motivates me further to carry on with this. It could be an additional dimension in the scoring.

Excellent point about roundabouts, this one I had not considered. I could penalize them for high intensity sprints like I do for intersections.

Thanks again Manuel and keep the feedback coming!

2 Likes

Hi there thanks! sure so there are some technical elements in the How it works part of the landing page Outdoor structured training, on real roads — Gritmaps have you had the chance to check those out? otherwise, happy to put together some more in-depth information here, feel free let me know what would be of particular interest to you?

Thanks @Jonas_Chapuis ,
As for traffic, if possible—at least, that’s what I would do—I wouldn’t assess it in real-time. Usually, workout planning—and thus the route generated by Gritmaps—is done before actually heading out into traffic.
You really ought to evaluate the route and the associated average traffic levels for at least the seven days leading up to the workout, so you have an idea of ​​what to expect on the road.
If I plan it right now, it will show me the current traffic… but I’ll be heading out in the afternoon.
I hope that makes sense.

THANKS

1 Like

Thanks for the quick reply. Yes, I had a look through the How It Works information and the app does look very useful.

I was mainly hoping to understand a little more about the data privacy and security side of things. There are so many apps and integrations popping up now that I tend to be cautious about connecting anything new to an account until I understand how the app, and the team behind it, handle user data, access, and security.

Any additional information you can share on that would be really appreciated.

1 Like

Hi nice app.

I have tested it today—nice work! It would be nice to include the heatmap from my recent rides, but I was a little confused about how to send the GPX file to my Garmin Edge 840. Any suggestions?

Also, when I send the GPX file, how do I know which target HR/power zone to train in while navigation is active?

I am beginner so sorry for stupid questions as I am doing mainly the intervals on smart trainer.

Outside doing only the rides with Power Guide, but it is not a perfect …

There are some missing important information about the GDPR and I saw an issue when deleting my account.

1 Like

Yes of course, very legit request! So i have this privacy notice in the landing page: Privacy Policy · Gritmaps and the terms are Terms of Service · Gritmaps which you can also access via the “About” menu item within the app. I hope this helps, don’t hesitate to ask more specific questions if you need!

1 Like

Thanks a lot for the feedback Andrzej!

not sure if this is what you are looking for but you can access a compliance and power map from the Timeline tab once you have ridden your ride: for this, you have to push it initially yes
image

to send the itinerary and the adapted workout, click on “Pick this workout” and then “Push to Garmin” button (you need to connect your Garmin account for that first).

Once you have successfully pushed you will get a guide (see below) on how to configure your edge for proper navigation with workout targets. You have to first load the workout, then the corresponding course, but the guide shows the steps. I’m planning a connectIQ custom app to make this step easier btw.

Thanks, i will make the information more readily available in the menus. Your account was deleted, but I have seen the error you went through, there was a disconnection so you never got the feedback. I will streamline this process now, thanks a lot for the heads up.

1 Like

@Manuel_Oberti so I have just pushed a new version that includes a traffic score component :car::car:

gritmaps now scores an estimated traffic exposure for every route, as a seventh axis in the score breakdown that weights for 5%.

More details

After careful analysis, I have first started with a version without live traffic data. Each road segment gets an estimate from its OSM road class and the built-up density around it, so a tertiary road through a town counts as busy and the same class in the countryside doesn’t. Busier segments lower the score. The axis carries 5% of the total, so it nudges the ranking and doesn’t dominate it. It doesn’t depend on the time of day either.

I checked the estimates against measured volumes. Calling a road busy, meaning 3,000 vehicles a day or more, has precision 72% and recall 71% against the Swiss NPVM traffic model, by length over the Swiss network. On 6,850 counted UK points from the DfT 2025 census, it’s 95% and 88%. Those UK points over-represent A roads, which makes them an easier test, so the Swiss figures are the fairer reference.

The tradeoff was whether paying the price of the added complexity of adding such external sources of data (which also have limited coverage globally) vs. implementing a “good enough” approximation.

Across 88 searches in Switzerland (11 start points, rural and city centres, two profiles, two workouts, two ride times), the top-ranked route changed in 15 of them, about one in six. Rural and city starts were affected about equally: 8 of 48 and 7 of 40. When it changed, the new first choice was always the less exposed route. The route that lost the top spot had been slightly ahead on the other axes. The 5% weight is why it takes a close race to flip the order, and a route with a clear power, duration or surface advantage still wins. The effect is largest where a loop has to use a road in town or a primary road to close. City-centre routes sit lower on this axis (median 0.65 against 0.92 rural), so the score separates them most there.

2 Likes

Thanks…I’ll try

Is it possible for the starting point and the ending point to be different, rather than it being a round trip?

Not at the moment. But why not yes. Just curious of your use case? Of course if the destination would be further than the workout allows I would have to pad with zone 2 (same as spare time feature)

I really like this website’s features. I mostly train alone and tend to ride the same five routes. Having routes tailored to my training gives me more variety and options to choose from.

I don’t want to spend too much time thinking about route planning. Getting five suitable suggestions, picking one, and heading straight out is ideal for me.

Looking at the GPX files, it also seems to avoid dangerous roads. I live in Germany, where I often find B roads uncomfortable for cycling, so I appreciate that the suggested routes mostly follow L and K roads.

1 Like

Amazing job, thanks for sharing. I’m more into trail running and I did some tests and found the routes that have been generated very similar to what I could use for some runs. I guess very small adaptation is needed to adapt it for trail running. Ping me if you ever go that way and need some help testing or sugesting something. Keep it up the great job. It’s already very usefull for trail running as it is now.

How about this to Hammerhead Karoo

Hi Paulo, thanks a lot for your message! This is so encouraging, because trail running is exactly the next step I was considering.

I need to adapt the physiological settings and the physics model for running so that duration predictions are accurate. Otherwise like you say the effort matching algorithm should work fine, and great to hear that your tests prove it does. I had in mind two modes: train running, where elevation and terrain is the target, and marathon running where one looks for asphalt and flat routes.

I will certainly let you know first hand when I have the running beta! Thanks again

1 Like

Hi Joao, thanks for your message. I’m adding this integration to the todo list. Is anyone else using Hammerhead in the forum? please like so that I know.

In the meantime, have you tried downloading the .fit workout file and the .gpx to load them manually?

1 Like