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 Claude, Claude 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 it 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 it
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.

