I’m a triathlete. In 2025, I finished Ironman Ottawa, a long-distance swim, bike, and run race, in 10 hours and 16 minutes. When I returned in 2026, I wanted to go under ten hours. Taking more than sixteen minutes off my time was a substantial challenge.
I wanted to give myself the best chance of doing it. Alongside a proper training build, I felt that understanding the race conditions would help me plan my race. I expected the bike leg to take about five hours, and I wanted to see how the forecast wind would affect each part of the course.
I built Race Conditions to put that forecast on the bike-course map, so I could head into Ottawa with clearer expectations.
Putting the wind on the map
I first tried a single static arrow. Then I put moving wind arrows on the course map, with a rider marker I could play or scrub along the route. As the marker moves, the page updates the expected passage time, route distance, forecast wind and gusts, and whether the rider would face a headwind, crosswind or tailwind.
I could look at a particular stretch of the course and see the wind relative to the direction I would be riding.
Matching the forecast to my ride
Wind can change over five hours. I added settings for an expected bike start time and bike duration. The page uses those choices to estimate when a rider would reach each part of the GPX route, then shows the forecast for that time.
Once the bike view worked, I added hourly temperatures and rain from around the morning race start into the evening. That gave me a view of the rest of the day as well as the bike leg.

Changing the forecast after feedback
I shared Race Conditions in the Ironman Ottawa Facebook group. The post received 76 reactions and 30 comments.

Some people questioned the temperatures because they differed from The Weather Network. I checked which model the app was using through Open-Meteo and changed it to the Canadian GEM model.
After the switch, the temperatures were much closer to The Weather Network’s forecast.
Keeping a working forecast available
During race week, the app fetched a new forecast every fifteen minutes. It checked for a complete set of twenty-five hourly readings before replacing the last working snapshot. Page requests used that saved forecast. If a refresh failed, the previous forecast remained available, and the page showed when it was generated.
After the race, I moved a dated version of the Ottawa page to Cloudflare. The linked page is an archived forecast, not a record of observed race-day weather.
Race day
I already had a bike plan of roughly two hundred watts average. Race Conditions did not fundamentally change it. It helped me understand what to expect on different parts of the course and gave me more confidence going into the race.
From July 29 through August 6, 2026, the site had 178 anonymous visitors. Fifty-five used the wind controls, and thirty-five returned on another day. Most traffic came from Facebook. Visits faded after race day.
On my side, the race went well. I finished in 9 hours and 38 minutes, and I was really happy with my performance. I had hoped to break ten hours, so coming in twenty-two minutes under that goal was well beyond my expectations. It was also thirty-eight minutes faster than the year before.