athuno
All templates

Race

Race day simulator

Builds a one-page race plan for one athlete and one race from Athuno, with effort and aid-station sliders, where every segment's pace is one the athlete has already run on that gradient with that many hours in the legs.

For
Athletes and coaches
Runs
On demand
Writes
Nothing

The template

Fill in [race], [date] before you run it.

Race Day Simulator Build a race plan for [race] on [date]. If the race or the date is missing, ask for both before doing anything else. WHO IT IS FOR AND WHAT IT MAKES An athlete, or a coach running it for one athlete at a time. The result is one interactive HTML page, a single file with no build step. Every pace on the plan is one the athlete has already run, read from Athuno. You are the analyst: report what the record shows. Do not advise, prescribe or coach. INPUTS - The athlete: get_me lists who this account can see. If there is more than one, ask which, and use that id in every call. - The window: the 26 weeks ending today. Long days are rare, and eight weeks rarely hold enough of them. WHAT TO READ, THROUGH THE ATHUNO CONNECTOR 1. list_activities over the window, paged back with `before`. Keep runs, trail runs and hikes. 2. get_activity for each kept activity longer than 60 minutes: laps with distance, elevation gain, moving time, average speed, heart rate and start offset. 3. get_streams for the same activities, if the connector offers it: per-second distance, altitude and elapsed time. With streams, cut each activity into stretches of steady gradient yourself. Without them, use the laps, and say in the footer that descents could not be measured, because a lap carries its gain but not its loss. 4. get_thresholds: threshold pace and heart rate, shown for context. No target is derived from them. 5. get_fitness for the last 56 days: CTL, ATL and TSB today, and CTL's peak in the window. 6. get_long_range_plan, to confirm the race and its date if the season plan holds it. Pull with a script, compute everything below, and bake the results into the page as constants. The page never calls the connector. THE COURSE Athuno does not hold the route. Take it from the race's published route and enter it as ordered segments: name, type (flat, climb or descent), length in km, elevation gain and loss in m, average gradient in %, and the aid stations by km. Keep to the segments a runner would name: the climbs, the descents, the runnable stretches between them. The footer credits it as "Course from the published [race] route." THE EFFORT GRID, WHERE EVERY PACE COMES FROM Pool every stretch (or lap) of at least 5 minutes in the window. Give each one: - a gradient row: steep descent (under −8%), descent (−8 to −3%), flat (−3 to 3%), climb (3 to 8%), steep climb (8 to 15%), very steep (over 15%); - a fatigue column from its start offset: under 2 h, 2 to 4 h, 4 to 7 h, over 7 h on the feet. That is twenty-four cells. A cell's value is the mean speed of its three fastest stretches, shown as pace per km, and for the two steepest climb rows also as vertical metres per hour, with n = the number of stretches. One or two stretches show their mean and n. An empty cell shows "no record". READING A CELL FOR A SEGMENT Fatigue column: the predicted time from the start to the beginning of the segment, aid-station stops included. Gradient row: the segment's own gradient. Preference order: 1. the cell itself, if n is 3 or more; 2. otherwise the nearest earlier fatigue column in the same row with n of 3 or more, slowed by the mean ratio between those two columns across the rows that have both; 3. otherwise the cell itself, if it has any stretch; 4. otherwise no target: the segment cannot be planned, and the page says so. Never borrow from a different gradient row. THE PLAN, SEGMENT BY SEGMENT Keep a running clock. For each segment: look up its cell at the clock's current fatigue column, apply the effort slider (speed × effort%), duration = km ÷ speed, then add the aid-station stop for each station inside the segment. Record the pace, the duration, the clock at the segment's end and the source line "{row} · {column} · n={n}". TOTALS Estimated finish, as "Xh XXm", with the finish clock time from the start time. Moving time and stopped time. Time on climbs and its share of the day. The slowest-moving stretch of the plan. THE SLIDERS - Effort on every segment: 80 to 105%, step 1, default 100%. - One slider per climb in the table, 80 to 105%: easing off a climb moves the clock less, so later segments read an earlier, fresher column. - Aid-station stop: 0 to 15 minutes per station, default 3. - Start time: default from the race's published start, else 06:00. Every slider recalculates the whole day. THE PAGE, IN THIS ORDER 1. Header: "Race plan · prepared {date}", the athlete as first initial and surname, the race, and a line "{km} km, {gain} m up, {N} aid stations." 2. "Condition today · {N} days out": CTL, ATL, TSB, CTL peak in the window, the longest run of the last 8 weeks in time and elevation, and a short plain note on what the record shows. No advice. 3. "The plan": KPI cards (estimated finish, moving time, stopped time, time climbing), an SVG elevation profile with climbs shaded and aid stations marked, and the segment table: Segment | km | Gain / loss | Gradient | Clock at start | Effort | Pace | Time. 4. "Adjust": the sliders. 5. "Where every pace came from": the grid as a table, each cell with pace and n, or "no record", and one line on how many stretches it came from. 6. Footer: the sources, the window, and "Every pace is recorded, never modelled." DESIGN One self-contained HTML file, system font, max width 1180px, light and dark from prefers-color-scheme, tabular numerals, the table scrolls sideways on a phone. In a terminal agent save it and open it; in a chat app show it as an artifact. This is a plan built from what the athlete has already run. Decisions on the day stay with the athlete and the coach.

Run it

  1. Connect Athuno once. Add a custom connector with this URL in Claude, ChatGPT, Claude Code or Codex, and sign in to Athuno when it asks.
    https://athuno.com/api/mcp
  2. Paste the template into a chat with the connector on, fill in the words in brackets, and change anything else to suit how you coach.