printable · A4 landscape · v0.1.0
Race Training Calendar
Print-and-pin training calendar for a race build-up: A4 landscape, a dashboard page with pace zones and week rhythm, a day-by-day calendar with tick boxes and write-in km/pace fields, and an optional strength log. Marathon, half, 10K, triathlon run block.
Paste the prompt into Claude (or any agent that can fetch URLs) with your content — you get back a finished, self-contained HTML file.
Live preview — the example content ships with the template and is replaced by your content.
What an agent may change — and what content you should have ready. Everything outside these slots is fixed by design.
Slots
| Slot | Type | Req. | Example |
|---|---|---|---|
doc-title |
text | yes | Marathon Training Plan — 12 weeks |
plan-eyebrow |
text | yes | Training plan · 12 weeks · Mon 10 Aug – Sun 1 Nov 2026 |
title-main |
text | yes | Coastal City |
title-accent |
text | yes | Marathon |
stat-1-label |
text | yes | race day |
stat-1-value |
text | yes | Sun 1 Nov |
stat-2-label |
text | yes | goal time |
stat-2-value |
text | yes | 4:00:00 |
stat-3-label |
text | yes | goal pace |
stat-3-value |
text | yes | 5:41 /km |
stat-4-label |
text | yes | volume |
stat-4-value |
text | yes | 30 → 56 km/wk |
zone-easy-name |
text | yes | easy |
zone-easy-range |
text | yes | 6:10 – 6:40 /km |
zone-easy-use |
text | yes | long runs, recovery · deliberately slow |
zone-goal-name |
text | yes | goal pace |
zone-goal-range |
text | yes | 5:38 – 5:43 /km |
zone-goal-use |
text | yes | blocks inside medium and long runs · the core of the plan |
zone-quality-name |
text | yes | threshold |
zone-quality-range |
text | yes | 5:10 – 5:20 /km |
zone-quality-use |
text | yes | tempo blocks, comfortably hard |
zone-interval-name |
text | yes | interval |
zone-interval-range |
text | yes | 4:50 – 5:05 /km |
zone-interval-use |
text | yes | kilometre repeats |
week-rhythm |
html | yes | <dl><dt>Tuesday</dt><dd>quality session: intervals or tempo</dd></dl> |
rhythm-note |
text | no | Never strength training the day before the long run. |
key-principle |
html | yes | <p><strong>The goal-pace blocks are the core.</strong> Keep easy kilometres genuinely easy.</p> |
checkpoint-heading |
text | no | Checkpoint after the test (week 8) |
checkpoint |
html | no | <dl><dt>1:53 – 1:56</dt><dd>hold <strong>4:00 pacing</strong> (5:41 /km)</dd></dl> |
back-off |
html | yes | <ul><li><strong>Pain that changes how you run:</strong> cut the session, don't push through.</li></ul> |
practical |
html | yes | <ul><li><strong>Race shoes:</strong> at least three long runs in the shoes you plan to race in.</li></ul> |
away-heading |
text | no | Away block — pick what fits |
away-sub |
text | no | For travel days marked on the calendar: run when it works, by feel. |
plan-footer |
text | no | Prepared 14 Aug 2026 · adjust the plan to your life, not the other way around |
calendar-heading |
text | yes | Training calendar |
calendar-note |
text | no | Coastal City Marathon · goal 4:00 (5:41 /km) |
calendar-footer |
text | no | Coastal City Marathon · Sunday 1 November 2026 |
strength-heading |
text | no | Strength training · weight log |
strength-subtitle |
text | no | 1× per week, ~40 min · Tuesday after the run or Wednesday |
strength-progression |
html | no | <p><strong>Progression:</strong> add weight gradually up to the peak week.</p> |
strength-focus |
html | no | <p>Technique before weight: the last repetition should be hard but clean.</p> |
strength-footer |
text | no | Coastal City Marathon · Sunday 1 November 2026 |
Repeat: week (4–30×)
One calendar row per training week, in chronological order. Each row has a gutter cell plus seven day cells (Mon–Sun).
| Slot | Type | Req. | Example |
|---|---|---|---|
week-class |
text | yes | gut |
week-number |
number | yes | 1 |
week-range |
text | yes | 10 – 16 Aug |
week-tag |
text | no | base |
week-target |
text | yes | target ~30 km |
mon-class |
text | yes | day rest |
mon-date |
text | yes | 10 |
mon-note |
text | no | |
mon-session |
text | yes | Rest |
mon-pace |
text | no | |
tue-class |
text | yes | day t-quality |
tue-date |
text | yes | 11 |
tue-note |
text | no | |
tue-session |
text | yes | 6 × 2' brisk, 2' jog (7 km) |
tue-pace |
text | no | by feel, brisk |
wed-class |
text | yes | day rest |
wed-date |
text | yes | 12 |
wed-note |
text | no | |
wed-session |
text | yes | Strength ~40 min |
wed-pace |
text | no | |
thu-class |
text | yes | day t-easy |
thu-date |
text | yes | 13 |
thu-note |
text | no | |
thu-session |
text | yes | 8 km easy |
thu-pace |
text | no | 6:10 – 6:40 /km |
fri-class |
text | yes | day rest |
fri-date |
text | yes | 14 |
fri-note |
text | no | |
fri-session |
text | yes | Rest |
fri-pace |
text | no | |
sat-class |
text | yes | day t-easy |
sat-date |
text | yes | 15 |
sat-note |
text | no | long run |
sat-session |
text | yes | 12 km easy |
sat-pace |
text | no | 6:10 – 6:40 /km |
sun-class |
text | yes | day rest |
sun-date |
text | yes | 16 |
sun-note |
text | no | |
sun-session |
text | yes | Rest |
sun-pace |
text | no |
Repeat: away-session (1–6×)
One line per optional session in the away/travel block. Inside the away-block optional.
| Slot | Type | Req. | Example |
|---|---|---|---|
away-item |
text | yes | 30–40 min easy (5–7 km) |
Repeat: exercise (3–12×)
One row per strength exercise. Inside the strength-log optional.
| Slot | Type | Req. | Example |
|---|---|---|---|
exercise-name |
text | yes | Goblet squat or Bulgarian split squat |
exercise-why |
text | yes | base leg strength |
exercise-sets |
text | yes | 3 × 8–10 |
Optional blocks
checkpoint-block— Decision rules after a mid-plan test race or time trial. Keep it only if the plan actually contains a test session; remove it otherwise.away-block— Menu of flexible sessions for travel days. Keep it only if the calendar contains 'day ev' travel days; remove it otherwise.strength-log— Final page: strength exercises × 15 week columns to write weights into. Remove it if the plan has no strength work.
The authoritative fill instructions from manifest.json — the only place a template may instruct an agent (why).
This is a wall calendar, not a table of text — it is meant to be printed, ticked off with a pen and hung up. Fill it in this order.
1. HEADER. title-main + title-accent together are the race name (rendered uppercase, keep them short). plan-eyebrow states the block length and its first and last day. The four stat pairs are normally race day, goal time, goal pace and volume build (start → peak).
2. PACE ZONES. Derive the four zones from the goal time. The zones are the legend for the calendar's coloured bars, so keep their meaning: easy (sage), goal pace (rust), threshold (amber), interval (dark). Use one unit consistently everywhere — km or miles — including in every session and week target.
3. CALENDAR. Duplicate the 'week' row once per training week, in chronological order (min 4, max 30), and delete every data-example row. Per row: week-number is only the number ('wk' is fixed in the template); week-range is Monday–Sunday; week-target is the planned volume, which you compute as the sum of that week's sessions.
Every day cell has a class attribute slot ({day}-class) that drives its colour and layout. Use exactly one of:
· 'day rest' — rest day or strength-only day. Tick box and write-in boxes are hidden automatically; the text renders small and italic ('Rest', 'Strength ~40 min').
· 'day t-easy' — easy / recovery / long easy run (sage bar)
· 'day t-quality' — tempo or threshold work (amber bar)
· 'day t-interval' — intervals, repeats (dark bar)
· 'day t-goal' — goal-pace work, including long runs finishing at goal pace (rust bar)
· 'day t-test' — test race or time trial (blue, tinted cell)
· 'day ev' — travel, holiday, wedding, festival: a day the plan works around. Put the event name in {day}-session; tick boxes hide automatically.
· 'day t-race' — race day itself. Put the race name in {day}-note and '42.2 km · goal 4:00' style content in {day}-session.
Do not put anything else in these slots and do not invent class names.
Keep {day}-session under ~40 characters so the cell stays readable. {day}-note is the small rust flag above it ('long run', 'in race shoes', 'test gels and drinks', 'moved from Saturday') — leave it empty and it disappears, same for {day}-pace on rest and event days. {day}-date is the day of the month; add a short month name on the first of a month ('1 Sep').
Mark special weeks through week-class: 'gut g-recovery', 'gut g-peak', 'gut g-taper', 'gut g-test', 'gut g-event', 'gut g-race'. Ordinary weeks are just 'gut'. week-tag is the matching short label, or empty.
4. OPTIONAL BLOCKS. Remove checkpoint-block if the plan has no mid-plan test; remove away-block if there are no travel days; remove strength-log if there is no strength work. The strength log has 15 fixed week columns — for a longer plan, say so to the user rather than adding columns.
5. SANITY-CHECK THE PLAN before you deliver it: volume builds by roughly 10% per week, a recovery week every third or fourth week, hard days never back to back, the long run never the day after strength work, a real taper in the final two to three weeks, and the race in the last row. If the user's request implies an unsafe ramp, say so instead of printing it silently. This is a training aid, not medical advice — for injury, illness or a first marathon after a long break, suggest they check the plan with a coach or physio.
LANGUAGE: you may translate the fixed labels (weekday headers, 'week', 'logged', legend, panel headings) into the user's language, and should when the user's content is in that language. Never translate the class vocabulary — 'day t-goal', 'gut g-peak' and friends must stay exactly as written.
PAGE 1 PANELS: week-rhythm is a dl (dt = when, dd = what). key-principle is the one thing this athlete must not get wrong. back-off and practical are short ul lists. Keep page 1 to a single sheet: four zones, three columns, roughly 4 + 3 + 4 items.
Published versions are immutable: /t/race-training-calendar@{version}/ never changes once live. /t/race-training-calendar/ always points at the latest.