Category: Data

A New Dashboard for Long-Distance Triathlon: Tracking the 2026 Ironman, 70.3 and T100 Season

Long-distance triathlon has never generated more data. Between the Ironman Pro Series, the Ironman 70.3 circuit and the PTO’s T100 Triathlon World Tour, the professional field now races across dozens of events a year, each producing split times, finishing margins and — if you go looking for it — a rich picture of the environmental conditions athletes faced on the day. The problem is that this information sits scattered across result pages, weather databases and is rarely analysed as a whole. So I built something to fix that.

I’ve developed an interactive Long-Distance Triathlons Dashboard, together with an open data repository, to bring professional results from Ironman (full distance), Ironman 70.3 and T100 into one place and let anyone explore how performances — and the conditions behind them — are trending. This post walks through what the tool does and offers a snapshot of how the 2026 elite season has played out so far.

The dashboard

The dashboard is live and free to use here: ironmandt100analysis.netlify.app. It uses professional-only results — no age-group data — sourced from PTO Stats (the Professional Triathletes Organisation), combined with race-day environmental data from Open-Meteo. It’s organised into three views.

  • Trends & Conditions — split-time trends across seasons and how race-day conditions line up with performance.
  • Athletes — individual athlete profiles and split histories.
  • Rankings & Predictions — current standings and model-based projections for future races this season.

The core of the analysis lives in the Trends & Conditions view. Rather than tracking a single winner’s time — which is noisy, since one exceptional or off day skews the picture — the trend charts plot the average of each race’s top three finishers for every split (swim, bike, run and overall), with a shaded band showing ±1 standard deviation across that podium. A tight band means the top three were closely matched; a wide band means the race blew apart. You can filter by race brand to compare like-for-like distances, and by category to separate the men’s and women’s fields.

Where I think it gets genuinely useful — and where it connects to my longer-standing interest in environmental physiology — is the conditions layer. For every race the dashboard pulls temperature, humidity, wind and the WBGT (Wet Bulb Globe Temperature) heat-stress index, and sets them against performance. There’s a race-level view (winning splits against the day’s conditions) and a finisher-level view, where every individual result is plotted against the condition recorded for that race and a Pearson correlation is computed on whatever subset you’ve filtered to. Water temperature is matched to swim splits; WBGT is used for the bike and run, because those are where combined heat stress bites hardest. A sortable race-by-race table underneath ties it all together — date, event, winner, every split, and the conditions on the day.

A couple of honest caveats are built into the tool. Splits aren’t comparable across brands, because the distances differ (a full Ironman, a 70.3 and a 100 km T100 are three different animals), so the “fastest recorded splits” are grouped by brand. And the wind figure is each day’s maximum hourly reading, which can overstate what athletes actually felt during an early-morning start. Transparency about these limitations matters more to me than a tidier-looking chart.

The open data repository

The 2026 season so far

So what does the season look like through the middle of 2026? Below are some of the headline professional results across the three series. These are selected highlights — the full race-by-race picture, with every split, lives in the dashboard.

T100 Triathlon World Tour

The big structural change for 2026 is that the T100 now runs separate men’s and women’s events through the regular season — four standalone races for each field — before both converge at the Qatar World Championship Final in December. On the men’s side, reigning champion Hayden Wilde opened in devastating form, taking Singapore by more than six minutes (3:21:58). Rico Bogen then successfully defended his San Francisco title over Lasse Nygaard Priester, with Wilde third. In the women’s races, Taylor Knibb edged a tight season opener on the Gold Coast, and Georgia Taylor-Brown ran down Julie Derron in Spain to claim her first career T100 title.

T100 race (2026)FieldWinner
Gold CoastWomenTaylor Knibb
SingaporeMenHayden Wilde
Spain (Pamplona)WomenGeorgia Taylor-Brown
San FranciscoMenRico Bogen

Ironman (full distance)

The full-distance season delivered one of the standout performances of the year: at Ironman Texas (the North American Championship, 18 April), Kristian Blummenfelt stopped the clock at a barely believable 7:21:24 — reported as the fastest full-distance time on record — outrunning Marten Van Riel late on. The women’s race the same day went to Solveig Løvseth in 8:11:09, ahead of Taylor Knibb (8:14:48) and Marta Sánchez (8:31:06). Løvseth then completed a full-distance double at the Ironman European Championship in Hamburg, holding off Laura Philipp to win in 8:11:11, just over a minute clear — a remarkable run of form from the reigning Ironman world champion. And earlier in the year at Ironman New Zealand, Trevor Foley and Kat Matthews took the men’s and women’s titles.

Ironman 70.3

The 70.3 circuit has been relentless. Marten Van Riel has been close to untouchable over the middle distance, and Kat Matthews has strung together a run of results that mark her as one of the athletes of the season so far. Kristian Blummenfelt showed his range with a narrow win in a Geelong thriller. A snapshot of the middle-distance winners:

Ironman 70.3 race (2026)MenWomen
GeelongKristian BlummenfeltKat Matthews
Aix-en-ProvenceMichele BortolamediMarjolaine Pierré
ElsinoreMarten Van RielKat Matthews
SwanseaHarry PalmerLizzie Rayner

Why look at it this way

Naming winners is the easy part. What interests me is the layer underneath: how tightly bunched the podiums are becoming, where the time is genuinely being won and lost across the three splits, and how much of the day-to-day variation in performance tracks with heat, humidity and wind rather than fitness alone. A 7:21 at Texas and an 8:11 at a hot, humid European Championship are not the same test, and treating conditions as a first-class variable — not an afterthought — is exactly what the dashboard is designed to make possible.

This is very much a living project. I’ll keep adding races as the 2026 season continues toward the T100 final in Qatar where I will also compete again and the Ironman World Championships, and I’ll keep refining the models behind the rankings and predictions. Have a look at the dashboard, dig into the repository, and tell me what you’d like to see next.

Data sourced from PTO Stats (Professional Triathletes Organisation) and Open-Meteo. Results summarised here are selected highlights compiled from public race reporting as of July 2026; see the dashboard for the complete, up-to-date dataset.

What’s New in the Lactate Threshold App: Anaerobic Speed Reserve, Flexible Training Zones, Maximum Speed and More

The Lactate Threshold app started as a simple tool to turn a step test into a clean set of threshold values. Over the past few development cycles it has grown into something closer to a complete profiling and prescription workspace. This post walks through the most significant additions — anaerobic speed reserve, maximum speed determination, switchable 3- and 5-zone models — and the smaller refinements that came with them.

Anaerobic Speed Reserve (ASR)

The headline feature is the ability to determine an athlete’s anaerobic speed reserve — the velocity range that sits between the speed at maximal oxygen uptake (vVO2max, or maximal aerobic speed) and maximal sprinting speed (MSS). Everything an athlete does above their aerobic ceiling happens inside this band, which is exactly why it matters for events decided by surges, kicks and repeated high-intensity efforts.

The concept owes much to the work of Dr Gareth Sandford and colleagues, who showed that ASR and maximal sprint speed are “untapped tools” for differentiating the world’s best middle-distance runners and for understanding the complexity of athlete profiles that traditional aerobic categories miss. Two athletes with an identical vVO2max can have very different reserves above it — and therefore very different tolerances to supramaximal work — information that is invisible if you only look at threshold and VO2max.

Dr. Martin Buchheit’s research extends this directly into programming. Prescribing high-intensity work as a percentage of maximal aerobic speed alone ignores the differing mechanical ceilings between individuals, so the same session can impose very different relative stress on two athletes. Anchoring supramaximal efforts to a percentage of the ASR instead normalises that stress, and the evidence shows it reduces the inter-individual variability of physiological adaptation. The app now makes that calculation a single step rather than a spreadsheet exercise.

Maximum Speed Determination

Because ASR depends on having a reliable upper anchor, the app now supports maximum sprint speed (MSS) determination as a first-class input. Enter the result of a short maximal sprint and the app uses it as the top of the reserve, pairing it with the aerobic anchor derived from the step test. This closes the loop: from a single profiling session you get the threshold values, the aerobic speed, the sprint ceiling, and the reserve that connects them.

Flexible Training Zones: 3 or 5

Training-zone prescription is now configurable. You can choose between a 3-zone model — the classic below-LT1, between-thresholds, above-LT2 structure favoured in polarised approaches — and a more granular 5-zone model for coaches who want finer resolution across the intensity spectrum. Zones are generated directly from the athlete’s own threshold and speed anchors rather than from generic percentages, so the prescription reflects the individual profile the test produced.

Switching between the two models takes a tap, which makes it easy to align the output with whichever periodisation philosophy a given athlete or training block calls for.

Other Improvements

Alongside the marquee features, this round of work brought a number of refinements: cleaner presentation of the threshold detection results, a more consistent workflow from data entry through to zone output, and better handling of the speed-based inputs that the ASR and MSS features rely on. The aim throughout has been to keep the app fast to use rink-side or track-side while quietly adding depth for those who want it.

Development is ongoing, and I’ll keep posting updates here as new capabilities land. If you’re using the app and have feedback or feature requests, I’d be glad to hear them. If you use it for any purposes make sure you reference it:

A note for team-sport coaches: if you are specifically after a tool to plan HIIT sessions with change-of-direction (COD) prescriptions, I’d recommend Dr Martin Buchheit’s dedicated COD shuttle prescription app, available here. It is purpose-built for that use case and complements the profiling work the Lactate Threshold app is designed for. A screenshot is below.

Key References

  • Sandford GN, Allen SV, Kilding AE, Ross A, Laursen PB. Maximal Sprint Speed and the Anaerobic Speed Reserve Domain: The Untapped Tools that Differentiate the World’s Best Male 800 m Runners. Sports Medicine, 2019.
  • Sandford GN, Laursen PB, Buchheit M. Anaerobic Speed/Power Reserve and Sport Performance: Scientific Basis, Current Applications and Future Directions. Sports Medicine, 2021.
  • Buchheit M, Laursen PB. High-Intensity Interval Training, Solutions to the Programming Puzzle. Part II: Anaerobic Energy, Neuromuscular Load and Practical Applications. Sports Medicine, 2013.

Pointing the AI toolkit at the Giro d’Italia 2026

In my last post I shared my first proper experiment with AI tools — scraping publicly available muscle-injury data from the major football leagues and pulling it into a dashboard that I could update and share with almost no manual work. I promised I would do more, and it did not take me long to find an excuse. With the Giro d’Italia in full swing, I could not resist pointing the same toolkit at a race I have been following obsessively for weeks.

So this time I used ClaudeClaude Cowork and GitHub to build a live dashboard for the 2026 Giro d’Italia. It scrapes publicly available race data, pulls it together, and refreshes itself — and you can explore it directly at the bottom of this post or on its own GitHub page.

How the GIRO finished

And what a Giro it turned out to be. Jonas Vingegaard (Visma–Lease a Bike) rode with a control that bordered on the imperious, lighting up the brutal Piancavallo stage to put the result beyond any doubt and then rolling into Rome in the maglia rosa. For a rider who has already won the Tour de France and the Vuelta, this maiden Giro completes the set of all three Grand Tours — a milestone worth pausing on, whatever you make of the strength of the opposition this May.

Behind him, Felix Gall (Decathlon CMA CGM) took second, a little over five minutes back, with Jai Hindley (Red Bull–Bora–hansgrohe) completing a fine return to the podium in third. Thymen Arensman (Netcompany–Ineos) ended up just off the box in fourth.

The minor jerseys produced their own subplots. Paul Magnier (Soudal Quick-Step) was the sprinter of the race and took the cyclamen points jersey, while Giulio Ciccone (Lidl-Trek) went hunting for mountain points with real appetite and claimed the blue. The young riders’ classification went right down to the wire between Afonso Eulálio (Bahrain Victorious) and Davide Piganzoli — I’ll let the dashboard below tell you who held the white jersey in the end, and who took the bunch sprint on the streets of Rome. That, really, is the whole point of the exercise: the numbers update themselves, so I don’t have to.

How I built the data source and dashboard

The workflow was remarkably similar to the football injuries project, which is exactly what I find so interesting about these tools — once you understand the pattern, you can reuse it for almost anything.

I asked Claude and Claude Cowork to gather the publicly available race data — general classification, stage results, the points and mountains battles, rider profiles — and to organise it into something I could actually look at rather than squint at across a dozen browser tabs. The agents then built the dashboard itself, and I hosted the whole thing on GitHub using GitHub Pages, which is free and gives me a clean public link. Because the page lives on GitHub and reads the underlying data, I can refresh it whenever I like, or automate the update entirely, and then simply embed it back here on the blog with a single line of code.

The dashboard is organised into a few tabs: an overview, the stages, the evolution of the GC over the three weeks, the points battle, the individual rider profiles, and — for the data nerds among us — a set of estimated power figures.

All of this took me a fraction of the time it would have done even a year ago, and with effectively no programming on my part. That is genuinely new, and worth pausing on.

The usual health warning

As I wrote last time, I will keep being honest about the limitations. The data here are scraped from publicly available sources, so their veracity and accuracy are only ever as good as the source — and in cycling, numbers move and get corrected constantly. The estimated power values deserve a particularly large pinch of salt: these are modelled figures derived from public information, not measurements from a calibrated power meter, and anyone who has worked in performance physiology knows how much can hide behind a single wattage number. Treat them as a bit of fun and a conversation starter, not as evidence.

With those caveats firmly in place, I have mostly used this as another chance to learn what these tools can and cannot do — how to gather, share and visualise data quickly, and where the human still very much needs to stay in the loop. Critical thinking, as ever, is key.

Have a play

Here is the dashboard, embedded live. It updates itself, so it should already be showing the final classifications from Rome.

Update

I updated some views and with each individual rider now you can see the summary of their participation and what they did in each stage.