Free tool · runs entirely in your browser
Drop in a ride file from a power meter and see how the ride was actually paced — sliced by time, by distance, by quarter, by terrain, and climb by climb. All of it computed automatically.
Built for the question every rider asks after a hard day: was that fitness, fueling, or pacing? One file can't fully answer it, but it narrows things down a long way.
.fit file from a ride recorded with a power meter.
Heart rate adds one more measure.A long ride hides different stories at different zoom levels. Averaged over half an hour, a savage opening ten minutes disappears. Averaged over the whole day, a rider who faded badly on the last three climbs looks merely tired.
So rather than making you choose a resolution, this shows the ride every useful way at once: in equal quarters, hour by hour, in short blocks, by distance, split into climbing versus flat versus descending, and then climb by climb with the power on each one.
Then it applies fixed rules and raises flags. The rules are plain thresholds, not a model guessing — if the first thirty minutes were above 95% of threshold power, that flag fires, every time. You can check the arithmetic yourself.
Best on races and hard group rides. On an easy endurance spin most of these measurements have nothing interesting to say.
or click to browse · accepts .fit and .fit.gz
No file handy? — a made-up 48-mile gravel race, so you can see what the tool does.
Functional Threshold Power — roughly the hardest power you could hold for an hour. Your head unit or training app knows it. Every percentage here is measured against this number, so if it's wrong, they all are.
Body weight, not the bike. Used for watts per kilogram, which matters most on the climbs. (150 lb ≈ 68 kg.)
Automatic. The block sizes, distance steps, terrain split and climb detection all adapt to the length and shape of the ride you drop in. Nothing to set.
Headline numbers for the whole ride. Definitions are in the glossary at the foot of the page.
Weighted average power for each slice, in order, with your FTP as a dashed line. Switch resolutions to zoom in and out. A staircase falling left to right is a fade; a flat row is even pacing; one tall bar at the start is a rider who went with a group that was too fast.
Observations, not conclusions. Each is a fixed rule that either fired or didn't. Read them together — the combinations carry the meaning.
Fade + nothing left at the end → genuinely ran out. Look at fueling, and at whether the ride was longer than anything trained for.
Fade + a kick at the finish → did not run out. Something else capped the effort: cramping, riding alone with nobody to chase, a mechanical, or a deliberate decision to ride steady. The file can't tell which. The rider always can.
Hot opening + fade → the most common pattern in racing, and the most fixable. The start was a cheque the back half had to cash.
Climbing power dropped → on a hilly course this decides the result. Placings change on the late climbs, not the early ones.
Matches spent early → hard surges are limited and don't come back. Spent before the race is decided, they're gone.
No flags at all is a good outcome. It means the distribution of effort wasn't the problem.
How hard the first minutes were, as a share of threshold. This matters more than it looks — an opening above threshold is paid for hours later. Under about 85% is conservative; over 95% is a debt.
The same ride cut several ways. Quarters show the broad shape fastest. By distance is the one to use when you know the course and want to line numbers up with a particular sector.
The ride sorted by gradient rather than by clock. Climbing is anything over 3%, descending under −3%. The gap between climbing power and flat power tells you what kind of rider showed up — and how much of the day was actually spent going uphill, which is usually less than it felt.
Every sustained climb the file contains, in order, with the power on each. Read the weighted-power column top to bottom. If it falls as the ride goes on, that's the clearest single sign of a rider running down — and on a hilly course it's what decides the finishing position.
The best effort at each duration, and where on the course it happened. A rider's best ten-minute effort at mile 4 of a hundred-mile race says a great deal about how the day was going to end.
How the ride's time split across the seven power zones, from your FTP. Where a rider actually spends the hours often explains the day more than the averages do.
Hard efforts — "matches" — and where they were spent. Plus any point the bike stopped or slowed to walking pace, which usually marks rough sectors, a mechanical, an aid station, or a hand-up on the move.
The JSON is handy if you want to paste this into an AI chat and talk it through. Include what the file can't see — how it felt, whether you cramped, what you ate, whether you were in a group or on your own. That context is usually what settles the question.