Updates and improvements to NavRun
Added web analytics.
NavRun now loads Ahrefs' lightweight, cookieless web analytics so I can see which pages people actually find useful and where the site needs work. No personal data, no ad tracking — just aggregate page traffic.
Fixed broken links and sharper search results.
Two blog posts linked to pages that no longer existed — those now point to the right features. Behind the scenes, every blog post, the pricing page, and the releases page now carry their own search and social descriptions instead of a generic fallback, and two over-long post titles got trimmed so they read cleanly in search results.
Share your results.
Every free tool now has a Share button that creates a clean, branded image of your result — your race predictions, pace, training paces, or fueling plan — with a link that unfurls nicely on Strava, Instagram, Reddit, and texts. Copy the link, download the image, or share straight from your phone.
Free tools now come with charts.
Every free calculator now visualizes your results: a predicted-time curve on the race predictor, your split progression on the pace calculator, a training-zone pace chart, and a cumulative-carbs timeline on the ultra fueling planner.
Three new free tools.
Three more free calculators — no signup required: a Pace Calculator (pace, time, or distance from any two, with even-effort splits), a Training Pace Calculator (your VDOT score plus easy/marathon/threshold/interval/repetition paces from one race), and an Ultra Fueling Calculator (carbs, fluid, and sodium per hour with an aid-station plan). Find them all under Free Tools in the nav, or at /tools/.
Race predictor leveled up.
Enter a second race and the free Race Time Predictor now reveals your speed-vs-endurance profile, sharpens its predictions from your own results, and gives you training paces — easy, marathon, threshold, interval, and repetition.
Free race time predictor — no account needed.
A new free tool at /tools/race-time-predictor/ lets you plug in one recent race result and get estimated finish times from 5K all the way up to 100 miles. No signup, no Strava connection required. For ultras, the predictions come with an honest caveat: terrain, elevation, and nutrition matter in ways a pace-based formula can't fully capture, so confidence intervals widen as distances get longer. If you want a pace band to carry on race day, there's an option to email yourself a printable PDF version. The tool is also linked from the homepage under "Free Tools."
Coach analysis on the analytics dashboard renders reliably.
The AI coach summary on /analytics/ occasionally returned a response that wasn't strictly valid JSON, producing a broken card with raw text in the summary field. Coach analysis now uses OpenAI's JSON mode and the same hardened parser the multi-week plan generator uses, so unparseable responses fall back to a clean "Analysis unavailable." message instead of leaking partial JSON into the UI. Resolves Sentry #7485577612.
Multi-week plan generation hardened against null AI output.
If the AI emitted null for a week's target mileage, generation would crash at the very end of the request after the paid AI call had already succeeded. Null values now coerce to zero miles in both the parser and the success-log aggregation, so the plan saves successfully. Resolves Sentry #7467496318 (and its paired wrapper #7467496320).
Strava activity syncs survive transient upstream blips more cleanly.
When Strava (or its CDN) returns an unusual server error during a webhook-triggered activity sync, NavRun now recognizes it as a typed upstream-server error instead of a generic exception. Behavior is unchanged from your perspective — Strava's webhook still retries — but our internal logs now capture the response source so we can tell the difference between a Strava issue, a CDN hiccup, and our own networking next time it happens.
Multi-week training plans are more reliable for longer race blocks.
Generating a 4-week plan with race context could occasionally fail mid-response when the AI ran out of room to finish writing. Multi-week plan calls now request structurally guaranteed JSON, get more headroom to complete, and surface a clear "try fewer weeks" message if the response is ever cut short — instead of a generic error and a wasted request.