How TrailGoat calculates
your plan
Every number in a TrailGoat plan comes from a model you can read about on this page — what it assumes, where it was validated, and where its edges are. Runners are nerds about this stuff. So are we.
Pacing & arrival times
Grade-adjusted effort. The route is walked segment by segment and each segment's distance is weighted by the energy cost of its gradient: flat ground costs 1.0, climbing costs more (about +3% per percent of grade, growing faster as it steepens), and gentle descents give a little back until about −12%, where braking starts costing you again. Your total time is then distributed across the course in proportion to that effort — so a mile with 800 ft of climb gets far more clock than a flat one. The pacing splits, the aid-station arrivals, the crew sheet and the printout all flow through this one model, so they always agree.
The fade. Distributing time by effort alone assumes you run even effort all day. Real finishers don't — they bank early miles and slow late. We validated against real checkpoint splits from five runners at The Bear 100 and HURT 100: even-effort landed 45–185 minutes wrong through the middle of a 100. So the plan lets effort-pace drift upward linearly through the day, fitted at +1.8% per hour of running — which cut the mean checkpoint error from 66 to 34 minutes on those splits. (ultraPacer independently ships ~2%/hr as its default, which we take as a good sign.) The fade is on by default and the pacing card tells you exactly what it did; you can switch to even effort any time.
Surface (beta). Per-surface effort multipliers (gravel ≈ 1.03×, trail ≈ 1.10× vs pavement) exist behind a beta toggle in the Pacing card. They're off by default because we haven't finished validating them against real race splits — when a factor hasn't earned its keep, it doesn't touch your plan.
Not modeled (yet): altitude, darkness, heat as a pacing input (heat drives hydration, not pace), and individual downhill skill. If a condition isn't listed above, it isn't in the number — we'd rather tell you that than quietly pretend.
Hydration
The fluid target starts from a baseline of 460 mL/hr for a 70 kg (154 lb) runner in moderate conditions — adequate hydration, deliberately not the maximum a gut can absorb, because over-drinking risks hyponatremia. From there it scales by:
- Your body weight — sweat loss scales roughly with mass, so the target is anchored per-kg around the 70 kg reference. (Set it in the About-you panel; without it, you get the reference runner.)
- Your sweat rate — the 1–10 slider spans 0.75× to 1.6×.
- Heat & humidity — the target rises with temperature above ~60 °F, with a bump for humid air (less evaporative cooling), capped at 1.7× combined.
- Duration — very long efforts taper the hourly rate slightly (down to 0.85× past 24 h); nobody drinks hour-one volumes in hour thirty.
The result is clamped between 350 mL/hr and a ceiling set by your experience level (800–1500 mL/hr) — fluid absorption is trainable, and a beginner's plan shouldn't assume an elite gut. Per-leg carries in the plan then use the temperature forecast for the hours you'll actually be on each leg, not a day-wide average.
Sodium
Sodium is derived from your fluid volume times a concentration set by the how-salty-do-you-sweat slider — from ~300 mg/L (barely a crust) to ~2000 mg/L (white shorts by mile ten). We then take 70% of that as the replacement target: you don't need to replace every milligram, just enough to keep the system happy. Heat-acclimated athletes conserve sodium, so answering yes trims another 15%.
Carbs & calories
Carb targets are a range grounded in what ultrarunners actually consume — roughly 20–60 g/hr — not the textbook 60–90 g/hr ceiling that mostly produces GI disasters in the wild. The range is driven by duration:
- Under 90 minutes: 0–30 g/hr — stored glycogen covers it; fueling is optional.
- 1.5–3 h: 20–45 g/hr · 3–6 h: 25–50 g/hr · 6–12 h: 30–55 g/hr.
- 12 h and beyond: 40–60 g/hr — eating becomes the job, and real food counts as much as gels.
The range then scales modestly with intensity, total vert, body weight, and your experience level (gut tolerance is trainable — a beginner's plan caps at 55 g/hr, an elite's at 110). Calories are carbs × 4. A calorie deficit over a long day is normal and expected: the plan fuels the effort, it doesn't try to replace it.
Weather: forecast vs typical
Weather comes from Open-Meteo, fetched for the course's own coordinates. Two honest modes, always labeled:
- Live forecast — when your date is within the ~16-day forecast window, you get the real hourly forecast.
- "Typical for the date" — beyond that window, we average the same calendar date over recent years at that location. It's climatology, not prophecy: the right way to plan clothing and fluids in March for a July race, and clearly marked so you never mistake it for a forecast.
As race day enters the forecast window, the plan (and your crew sheet, which fetches weather live each time it's opened) switches to the real forecast automatically.
Course data
Catalog courses come from the races' own published GPX files, imported weekly and run through validation gates: distance is checked against the advertised race distance, GPX waypoints are classified so turn markers and mile posts don't masquerade as aid stations, and courses with no elevation data get real terrain elevation from a DEM instead of showing zeros. Surface mix (trail / gravel / paved) comes from OpenStreetMap. When something fails a gate, we'd rather show less than show wrong.
The fine print
Models are maps, not territory. TrailGoat's numbers are honest starting points built from your course and your inputs — but your gut, your training, and the day's surprises are the tiebreaker, and general guidance is not medical advice. Train your fueling like you train your legs, and adjust on the day. When the model and your body disagree, your body has seniority.
Try it on your race