Atomic Race Team · atomicrunner.com
Atomic Race Team badgeATOMIC/RT ATOMICRUNNER.COM
TRAIN.
LOG.
RACE.
FASTER
EVERY LAP.
LAP 6/81K
{{ auth.look.lapNow }}
{{ auth.look.lapDelta }} vs last
{{ l.n }}{{ l.t }}
START
WEEK
ONE.
FINISH
RACE
DAY.
{{ auth.look.gridLine1 }}
{{ auth.look.gridLine2 }}
T-MINUS {{ auth.look.tminus }} DAYS
LIFT
OFF.
400 METRES AT A TIME
REPS.
RECOVER.
REPEAT.
BOULDER
TO THE WORLD.
BOULDER, COLORADO · 5,430 FT
TRAIN
HIGH.
GOAL {{ auth.look.goal }}
EVERY
SECOND.
{{ auth.look.bpm }}BPM · THRESHOLD
KNOW YOUR
ZONES.
SUMMIT · +640 M
ELEVATION PROFILE
EARN THE
DESCENT.
FIND YOUR
RHYTHM.
♥ 152 BPM
{{ f.c }}
THIN AIR.
BIG LUNGS.
EVERY REP
COUNTS.
ALL THE WAY
THROUGH.
Athletes

Sign in

Checking your session…

Enter the email address your invitation was sent to. You will get a link to sign in - there is no password.

No invite yet? Ask your coach to add you, then use the email they invited.

Check your email

A sign-in link is on its way to {{ auth.email }}. Open it on this device.

{{ auth.msg }}
Powered by StravaPowered by StravaRuns sync from Strava once you're in
Signed in as {{ waiting.who }}

Your training is not on this account yet

Nothing has been lost. Either your coach has not built your block yet, or the name on your sign-in does not match the name on your athlete record. Both are visible to him in Setup and take a moment to fix.

Check again once he has. Do not start a second record - runs logged against it end up somewhere he cannot see them.

If you were told to start on your own

This creates a fresh record under your name. Only do it if Andy has asked you to - otherwise he has to merge it back later.

{{ cloud.who }} {{ cloud.msg }} ATOMICRUNNER.COM Powered by Strava
Atomic Race Team badge
ATOMIC/RT
{{ kindLabel }}
{{ hdrAvatar.ini }}
Athlete
{{ athlete }}
Block {{ phaseLabel }}
Goal
{{ goalLine }}
{{ cdLabel }}
{{ countdown }}
{{ undoBar.label }}
SQUAD
{{ p.who }} {{ p.what }} · {{ p.ago }}
{{ autoCard.src }} {{ autoCard.text }}
{{ tour.step }}
{{ tour.k }} · {{ tour.step }} of {{ tour.of }}
{{ tour.t }}

{{ tour.b }}

Keyboard
Drive it from the keys
{{ k.k }} {{ k.what }}
{{ toastKicker }}
{{ toastLabel }}
How did it feel?
New program {{ progNotice.text }}
{{ planNudge.title }}
{{ planNudge.line }}
Today · {{ today.dateLine }} {{ today.typeWord }} {{ today.phase }} {{ today.seasonNow }}
{{ x.slot }}
{{ x.name }}
{{ x.detail }}
{{ x.dist }} Logged
Rest day
Nothing prescribed. If you ran anyway, put it in.
Race week {{ today.raceBig }} {{ today.raceTo }} {{ today.raceLine }} {{ today.raceGoal }}{{ today.raceKm }}
The block{{ today.wk }}{{ today.stripTo }}
{{ b.lab }}
Phase{{ basePhase.word }} · {{ basePhase.sinceWord }}
Base training
{{ basePhase.line }}
Today {{ t.name }} {{ t.meta }} {{ t.status }} {{ t.why }}
Next build {{ basePanel.nextName }}
Starts
{{ basePanel.nextStart }}
In
{{ basePanel.nextIn }}
Length
{{ basePanel.nextWeeks }}
Week 1 asks for {{ basePanel.nextFirst }}.
{{ dups.n }} {{ dups.word }} counted twice{{ dups.sample }}
Unread on your sessions{{ inbox.total }}
This week{{ today.wk }} · {{ today.phase }}
PlannedRun
Week progress
{{ today.ringPct }}
{{ today.doneLine }}
{{ today.ringSub }}
{{ today.streak }} {{ today.streakWord }}{{ today.streakNote }}
{{ today.review.title }}{{ today.review.wk }}
{{ today.review.pct }}
{{ today.review.km }}
Done
{{ today.review.sessions }}
Hardest
{{ today.review.hardest }}
{{ today.review.verdict }}
Coach: {{ today.review.note }}
Training{{ overview.label }}
{{ c.k }}{{ c.vEl }}{{ c.sub }}
Nothing logged in this window. Drop a watch file on the Sync tab, or log a run by hand from the Plan tab.
Weekly volume{{ overview.selWord }}peak {{ overview.barTop }}
{{ b.tip }} {{ overview.barLabelEls }}
Time in zone{{ overview.zoneNote }}
{{ overview.zoneSrc }}
{{ z.label }}
{{ z.name }} {{ z.pct }} {{ z.time }}
Last 4 weeks
{{ r.tag }} {{ r.text }}
Not started This block begins {{ blockStarts }}, {{ blockStartsIn }} away. Until then the athlete is in base training, and everything below is the plan rather than progress.
{{ s.k }}{{ s.vEl }}{{ s.sub }}
Training hoursRunningAerobic cross-trainingStrength & support{{ hours.caption }}
{{ hours.labelEls }}
Base phase · {{ basePhase.sinceWord }}
{{ basePhase.word }}
{{ basePhase.line }}
{{ basePhase.barFrom }}{{ basePhase.barTo }}
{{ baseSquad.kindWord }} sessions
What the squad is doing
My squad days
{{ r.when }}{{ r.kind }}{{ r.doneWord }}
{{ r.name }}
{{ r.type }} · {{ r.detail }}
Nothing on the Team calendar for your squad days in the next two weeks.

Training log

No block is open, so nothing is prescribed. Add runs here, or drop watch files on the Sync tab. Everything logged counts toward the dashboard totals and carries over when a build starts.

{{ baseLog.count }} logged {{ baseLog.pageInfo }} Delete all {{ baseLog.count }}?
The week {{ baseCal.title }} {{ baseCal.total }}
{{ d.dow }} {{ d.num }} {{ d.todayTag }}
{{ p.tag }}{{ p.status }}
{{ p.name }} {{ p.meta }} {{ p.why }}
–
Plan a session {{ baseAdd.dayWord }}
Nothing in the library matches. Switch to My own and write it.
until {{ baseAdd.recurNote }}
+ Plan puts a session on that day - from the library or your own, once or every week. Runs you log or pull from Strava that day are matched to it, and a workout run too easy says so. + Log adds a run by hand.
Week check-in · {{ baseCheck.weekWord }}
{{ baseCheck.scoreEl }}/ 100
{{ baseCheck.scoreWord }}
{{ baseCheck.compWord }}
{{ m.label }}
{{ classify.summary }}

Suggested session types

{{ classify.summary }} Nothing changes until you apply it, and every row shows the evidence behind the call.

{{ classify.capped }}
DateSessionDistanceNowSuggestedWhyConfidence
{{ r.date }} {{ r.name }} {{ r.dist }} {{ r.from }} {{ r.to }}
{{ r.why }}
{{ r.against }}
{{ r.pres }}
{{ r.sure }}
DateSessionTypeDistanceTimePaceAvg HR
{{ r.pace }}
Nothing logged yet. Add a run, or drop a watch file on the Sync tab.
{{ typesOffWarn }}
WEEK {{ week.n }}
{{ week.phase }} · {{ week.dates }}
{{ s.v }}
{{ s.k }}
{{ countdown }}
To race day
Week check-in {{ score.value }} /100 {{ w.label }} {{ medSummary }}
Score breakdown · {{ score.verdict }}
{{ r.label }} {{ r.note }}
Diary this week
{{ n.when }}{{ n.text }}
Nothing written for this week yet.
Earlier note: {{ wkDiary.old }}
{{ d.dow }} {{ d.todayLabel }}
{{ d.date }}
{{ s.slot }} {{ s.boardName }}
{{ s.doneLine }}
“{{ s.altName }}”
{{ s.slot }} {{ s.typeLabel }}
{{ s.boardName }}
{{ s.boardKm }} {{ d.cardUnit }}
{{ x.name }} {{ x.km }}
{{ d.cardPlanSmall }}
{{ d.cardNum }}{{ d.cardPlus }} {{ d.cardUnit }}
{{ d.cardSub }} {{ d.cardMark }}
{{ d.whyLine }}
{{ d.filmCta }}
So far this week {{ weekVerdict.text }}
{{ dayFocusTitle }} One day · sessions, cross-training and notes
{{ s.fitLabel }} {{ s.unread }} new 💬 {{ s.typeLabel }} {{ s.benchStar }} {{ s.teamTag }}
{{ s.name }}
{{ s.detail }}
Your paces
{{ pp.tok }}{{ pp.pace }}
You noted: {{ s.athNote }}
The reps {{ c.label }} Continuous - no reps read from this prescription.
Planned
{{ s.planRead }}
Work
{{ s.workRead }}
Logged
Time
Avg HR
Feel
Execution
Change the workout
Reps
{{ b.reps }}
Each rep
{{ b.size }}
Pace
{{ b.pace }}
Recovery
{{ b.rec }}
Between blocks {{ b.gapLabel }}
Sets {{ wEd.setsLabel }}
Now reads {{ wEd.text }}
Every nudge rewrites the prescription - the reps above, the plan and the watch matching all follow it. Undo puts it back.
This one is written free-form, so the steppers drive the reps line underneath it - the written prescription itself stays as the coach put it.
This prescription is written free-form, so there are no factors to step. Edit the text itself above, or swap it for a bank workout - those always carry the four controls.
{{ sv.wk }} · {{ sv.dow }} {{ sv.date }} · {{ sv.typeLabel }}
{{ sv.name }}
{{ sv.viz.reps }}
Planned
{{ sv.viz.plan }}
Ran
{{ sv.viz.ran }}
Avg pace
{{ sv.viz.pace }}
Avg HR
{{ sv.viz.hr }}
The plan
Your laps · height is speed, colour is effort{{ sv.viz.hovTip }}
Laps appear here once the run syncs from Strava or splits are added below.
Time in zone
{{ b.label }} {{ b.pct }}
Grade
{{ sv.gradeNote }}
Did you run a different workout?
Pick the workout you actually did and the reps below re-read against it. The plan keeps what was prescribed.
Hill reps
Hills are logged as a whole: how many you got through and how hard it was. No per-rep splits.
Prescription: {{ sv.detail }}
Splits
Distance and time per rep. Pace is calculated.
Laps as the watch recorded them
#
Dist ({{ sv.colUnit }})
Target
Time
HR
{{ p.n }}
{{ p.dIn }}
{{ p.target }}
{{ p.pace }}
No splits logged. Hit {{ sv.prefillLabel }} to lay out the reps from the prescription, or add them one at a time.
{{ t.k }}
{{ t.v }}
Session log
{{ f.label }}
RPE - how hard it actually was
Feel
Execution
Replay The run played back in twelve seconds · faster splits burn brighter {{ sv.replay.elevGain }}
{{ p.pace }}
fastest {{ sv.replay.fastest }} · slowest {{ sv.replay.slowest }} · hover a bar for each split
Elevation
From the watch
{{ sv.read.label }}
{{ sv.read.hr }}
{{ sv.read.verdict }}
Coach & athlete{{ sv.cmt.count }}
{{ c.text }}
{{ c.name }} · {{ c.when }} {{ c.seenWord }}
Session notes
Strength and cross-training Also counted in Cross-training →
{{ a.label }}
Strength Aerobic X-training - counts as volume Mobility Conditioning Recovery
{{ sidebarScoreChip }}
Week panel
Week {{ week.n }} · {{ week.phase }}
{{ score.value }} / 100 · {{ score.verdict }}
{{ r.label }} {{ r.note }}
Weekly wellness
{{ w.label }} {{ w.score }}
Coach note - Andy
Diary this week
{{ n.when }}{{ n.text }}
Nothing written for this week yet.
Earlier note: {{ wkDiary.old }}
Progress
THE WORK,
ADDED UP.
{{ progHero.thisWk }}this week{{ progHero.trend }}
12 weekspeak {{ progHero.peak }}
{{ d.tip }}
{{ c.k }}
{{ c.vEl }}
Benchmarks in Analysis
{{ hist.trendTitle }}
Time per rep · lower is faster
{{ hist.labelEls }}
{{ t.k }}
{{ t.v }}
{{ hist.tableTitle }}{{ hist.tableSub }}
{{ r.wkLabel }}{{ r.wkSum }}
{{ r.wk }} · {{ r.date }}{{ r.time }} {{ r.name }} {{ r.type }} {{ r.dist }}
{{ r.diaryTxt }}
{{ r.dur }} {{ r.pace }} {{ r.repPace }} {{ r.hr }} {{ r.rpeWord }}
WkDateSessionDistanceTimeAvg paceRepsHRRPE
{{ r.wk }} {{ r.date }} {{ r.time }} {{ r.name }} {{ r.type }} {{ r.dist }} {{ r.dur }} {{ r.pace }} {{ r.repPace }} {{ r.hr }} {{ r.rpe }} View on Strava
Nothing logged against this filter yet.
Cross-training & support workEverything that isn't a run
{{ xt.headline }}
ActivitySessionsTotal timeAvg RPEShare of time
{{ r.label }} {{ r.group }} {{ r.count }} {{ r.time }} {{ r.rpe }}
Nothing logged yet. Tap an activity chip on any day in the Plan tab, then give it minutes and an RPE - it totals up here and feeds the training-hours chart.
Hub
{{ hubHero.race }}
{{ hubHero.daysEl }}{{ hubHero.daysWord }} {{ hubHero.goal }}goal

{{ overview.predLead }} The track below is the year: blocks, base weeks and every race booked. Charts underneath read from everything logged.

Predicted now
{{ p.label }}
{{ p.time }}
{{ p.range }}
The year
BASE · {{ bb.weeks }}
{{ b.name }} · {{ b.weeks }}
{{ r.grade }}
{{ ph.label }}
{{ m.label }}
Season plan Now: {{ record.year.season.nowWord }} Suggested from your races and race planner · tap a phase to keep it Base → build → peak → taper → recovery, laid around the A and B races.
{{ record.year.season.edit.title }}
Season terrain Height is weekly distance · peak {{ tr.peak }} · scroll to fly along the season
Your season as a landscape. The glowing ridge is what you ran each week, the dashed purple range what is planned. Flags are races from your Hub, the dotted line is today. Hover a week for its numbers, scroll sideways to travel along it.
⚑ {{ f.label }}
{{ f.sub }}
{{ c.tip }}
{{ c.tip2 }}
{{ m.label }}
RunPlanned⚑ Races┆ Today
The race calendarYour races this season
Click a grade to cycle it A · B · C · D. Blocks supply their own races; anything else you pencil in here.
{{ r.distWord }}
{{ r.stateWord }} {{ r.statusWord }} {{ r.countdown }}
{{ r.name }}
{{ r.when }}
TARGET{{ r.goalShow }} RAN{{ r.resultShow }}
Nothing on the calendar. Add a race here, or set a day's type to Race on the Plan and it appears.
Base periods
BASE {{ bp.weeks }} wk {{ bp.range }}
{{ g.k }}
{{ g.note }}
Pace zones
Goal time
Equivalent performances (Riegel)
{{ e.label }}
{{ e.time }}
Goal check
The goal time against what training says, and every pinned pace against what the goal needs. Altitude is allowed for when it is switched on.
{{ g.tag }}
{{ g.head }}
{{ g.body }}
{{ goalCheck.emptyNote }}
Pace zones & splits
Derived from the goal time. Type into Override to pin a zone by hand - it turns red and stops moving.
m
{{ alt.note }}
Zone{{ paceHeader }} 400m800m1K1 mile2K Override
{{ z.label }} {{ z.code }} {{ z.pace }} {{ z.seaPace }} sea · {{ z.altDelta }} {{ z.s400 }}{{ z.sea400 }} {{ z.s800 }}{{ z.sea800 }} {{ z.s1k }}{{ z.sea1k }} {{ z.smi }}{{ z.seaMi }} {{ z.s2k }}{{ z.sea2k }}
Heart rate zones
Karvonen - percentage of heart rate reserve.
{{ h.z }} {{ h.bpm }} {{ h.pct }}
{{ h.desc }}
Personal bestsYour bests, and what training says now{{ record.pbLead }}
{{ p.label }}{{ p.gap }}
Predicted now{{ p.predicted }}
{{ p.source }}
Shoe mileageHow far each pair has gone{{ record.shoeLead }}
{{ sh.name }} {{ sh.dist }}
{{ sh.note }}
Type a shoe name on any session and its mileage adds up here.
Program · workouts
{{ wol.big }}
{{ wol.title }} · {{ wol.doneWord }}
Every session in this program, in order. Filter by kind, click a row to open it. Coaches can change the name, distance and prescription right here; athletes see the full session. ✓ done, ✕ missed, ● today, ○ to come.
{{ c.label }}{{ c.pct }}
{{ c.of }}
No program running. Workouts list the sessions of a program once one is open.
WeekDateSessionPrescriptionPlannedRan
{{ r.mark }} {{ r.wk }}{{ r.phase }} {{ r.date }} {{ r.name }}{{ r.type }}★ {{ r.detail }} {{ r.km }} {{ r.act }}
{{ r.detailIn }}
Changes save when you click away from a field.
Nothing in this view.
Races · race plan
{{ rpl.race }}
{{ rpl.sub }}
Open a program with a race distance and a goal time, and the race plan builds itself here.
Splits every
Strategy
{{ x.k }}
{{ x.v }}
{{ x.sub }}
Course profile{{ rpl.courseWord }}
{{ rpl.chart }}
{{ rpl.note }}
{{ sp.label }}{{ sp.cum }}{{ sp.pace }}
Races · glide path
{{ gl.race }}
{{ gl.sub }}
{{ gl.msg }}
Key session · {{ gl.ks.distWord }}{{ gl.ks.srcWord }}
{{ gl.ks.title }} {{ gl.ks.paceWord }}
{{ gl.ks.restWord }} · {{ gl.ks.sub }}
{{ gl.ks.conf }}
Goal confidencePassedNot yetRun it to see
Goal pace
{{ gl.ks.hitWord }}{{ gl.ks.bestWhen }}{{ gl.ks.avgWord }}
{{ x.when }} · {{ x.word }} · {{ x.conf }}
Looks like a match{{ gl.ks.candWord }}
Run it any time in the block. Your best attempt in the last 10 weeks sets the confidence.
Set a goal time for this race and the target pace for every rep fills in.
On this course · {{ gl.rc.name }}
{{ g.k }}
{{ g.v }}
{{ g.sub }}
{{ gl.rc.gapWord }}
{{ gl.rc.pcWord }} The predicted times above are flat-course figures from your training.
{{ x.k }}
{{ x.v }}
{{ x.sub }}
Predicted finish, week by week Trend to race day Goal Faster is higher
{{ t.label }}
Today
Goal {{ gl.goalWord }}
Now {{ gl.nowWord }}
Race day {{ gl.projWord }}
{{ x.label }}
{{ gl.note }}
Races
{{ rov.nFlag }}{{ rov.nName }}
{{ rov.nDate }}{{ rov.nMeta }}Goal {{ rov.nGoal }}
{{ rov.rc.headline }}
{{ rov.fc.fcShort }} {{ x.k }} · {{ x.badge }} {{ rov.eaHot }} entry alerts
{{ rov.nDays }}{{ rov.nDaysWord }}{{ rov.nWeeks }}
No race on the calendar yet
The next 12 months{{ rov.upN }} races planned
{{ m.label }}
Race-day forecast
Loading the forecast…
The forecast could not be loaded.
{{ x.k }}
{{ x.v }}
{{ x.d }}
{{ rov.fc.fcTcWord }}
{{ rov.fc.fcAdj }}{{ rov.fc.fcAdjWord }}
{{ rov.fc.fcHours }} · Open-Meteo forecast
Key session · {{ rov.ks.distWord }}{{ rov.ks.srcWord }}
{{ rov.ks.title }} {{ rov.ks.paceWord }}
{{ rov.ks.restWord }} · {{ rov.ks.sub }}
{{ rov.ks.conf }}
Goal confidencePassedNot yetRun it to see
Goal pace
{{ rov.ks.hitWord }}{{ rov.ks.bestWhen }}{{ rov.ks.avgWord }}
{{ x.when }} · {{ x.word }} · {{ x.conf }}
Looks like a match{{ rov.ks.candWord }}
Run it any time in the block. Your best attempt in the last 10 weeks sets the confidence.
Set a goal time for this race and the target pace for every rep fills in.
Goal check
{{ g.k }}
{{ g.v }}
{{ g.sub }}
{{ rov.rc.gapWord }}
{{ rov.rc.pcWord }}
Race readiness
Today
{{ x.word }}{{ x.badge }}{{ x.why }}{{ x.how }}
Glide path
{{ g.k }}
{{ g.v }}
{{ g.sub }}
Prep races for your next race
Prep races are ranked from where you live. Share your location or set your home city and the best ones near you show here.
No prep races fit the timing within 500 km. Open the finder to travel further or set dates.
Your next race is not in Discover, so there is no course to match. Pick it in the prep finder to use its date and distance.
Plan a race and the best prep races for it show here.
Bucket list and entry alerts{{ rov.eaHot }} now
Save races to your bucket list in Discover with the + button. Entry windows for them show here, with reminders.
Race passport
Races
{{ rov.ps.count }}
Raced
{{ rov.ps.km }}
Countries
{{ rov.ps.co }}
{{ rov.ps.next }}
Races near you, next 4 months
No races within 250 km in the next 4 months.
Season builderPlan your next season
Goal distance
Window
Goal
Prep races
Travel from home{{ sb.tLbl }}
{{ sb.sub }}
No goal races fit these settings. Widen the window, travel further or switch to include qualifiers.
{{ x.n }}{{ x.flag }}{{ x.dist }}Bucket list
{{ x.city }} · {{ x.date }}
{{ x.difL }}{{ x.pb.full }}{{ x.tc }}{{ x.away }}
{{ k.label }}
{{ m.label }}
No prep races fit the timing within your travel distance.
{{ sb.how }} Hatched bars on the timeline are those easy days.
Race passport
{{ ps.count }}
races
{{ ps.kmWord }}
raced
{{ ps.nCo }}
countries
{{ ps.nCont }}
continents
{{ ps.nSt }}
US states
{{ ps.nextWord }}
Sign in to keep a race passport.
Year in racing cardDrawing…
Year in racing
A card to share
Your races, distance, countries and best time for the year, with a map of where you raced. 1080 × 1350, sized for Instagram.
{{ ps.findsWord }}Runs on the day and distance of a race in Discover, or marked as races on Strava.
{{ f.flag }}{{ f.n }}{{ f.date }} · {{ f.meta }}{{ f.why }}
Log a race that is not in Discover
Looking…No place found by that name.
✓ {{ ps.geoPicked }}
Distance milestones
{{ m.n }}{{ m.label }}{{ m.sub }}{{ m.best }}
{{ m.label }}{{ m.sub }}
{{ d.title }}
{{ c.label }}
{{ f.flag }} {{ f.label }} {{ f.n }}
Your records
{{ r.k }}
{{ r.v }}
{{ r.n }}
{{ r.date }}
Kinds of race
{{ b.label }}{{ b.n }}
US states
{{ st.c }}
Collections
{{ c.label }}{{ c.n }}
Races per year
{{ y.n }}
{{ y.y }}
{{ y.km }}
Stamps
{{ e.flag }}{{ e.n }}{{ e.date }} · {{ e.meta }}{{ e.src }}
No stamps yet. Mark races as run in Discover, add races found in your training log, or log one by hand.
Races · Discover
{{ rl.count }} / {{ rl.total }}
races matchUpdated Oct 2026✓ {{ rl.verWord }}
The races we know about: search by name, city, state or country, then filter by distance, region, month (or a window of months) and PB potential. More filters adds Race Challenge, how to enter, course shape, tags, country, a generous cutoff, altitude and typical temperature. Sort by fastest course and pick a distance to use it as a PB race finder. I live at altitude rates races without the altitude cost; Races near me asks for your location and measures the distance to each race. Races are listed most popular first until you pick another sort, and the crown marks the 25 most prestigious races. Dots are coloured by distance. Add a race to your bank, then drag it onto a year in Hub → Races. Entry rules and dates are a guide - check the race site before you plan around them.
Preparing for a race?
{{ rl.pr.tFlag }}{{ rl.pr.tName }}
{{ rl.pr.tMeta }}
Find your best prep races
{{ rl.pr.tWk }}
{{ rl.pr.tWkWord }}
{{ rl.pr.nRes }}
{{ rl.pr.nResWord }}
{{ rl.pr.nRec }}
recommended
How the match score works
Pick the race you are training for, and every race in the library that could prep you for it gets a score out of 100. A score of 80 or more earns the Recommended star.
Timing30Full points inside the ideal window for the prep race's distance, falling in a straight line to 0 at the edge of the hard window. Times 0.9 when the date is estimated from past years. Distance20Prep distance ÷ your race distance: 0.3 to 0.6 scores 20 (a half before a marathon, a 10K before a half). 0.6 to 0.9 falls from 20 to 8; 0.15 to 0.3 rises from 10 to 20; below 0.15 falls to 0 at 0.05. A 5K before a 5K scores 16. Travel2020 − 10 × √(distance ÷ your travel limit), from the nearest place you search: 20 on your doorstep, 10 at your limit. 10 for every race when no place is set. Goal25PB effort: 25 × (PB potential − 1) ÷ 4, minus 8 with the Heat risk tag. Dress rehearsal: 25 × (1 − difference), where the difference is 0.5 × climb per km + 0.3 × race-hour temperature + 0.2 × altitude, each scaled 0 to 1 (climb ÷ the larger of 3 m or half your race's climb per km, temperature ÷ 6 °C, altitude ÷ 800 m). Balanced: the average of the two. Halved when a road race preps a trail race. Entry5Open or parkrun 5, tour package 2, lottery 1.
Prep raceIdeal windowHard windowUp to 5.5 km2 to 4 weeks before1 to 65.5 to 12 km3 to 52 to 712 to 25 km4 to 63 to 825 to 43 km5 to 84 to 10Over 43 km6 to 104 to 14
A race counts when it is before your race, inside the hard window (or inside your own dates, if you set them), under 90% of your race's distance (a 5K can prep a 5K), open to enter (not qualifier, invitation-only or corporate), active and rated. Road races only prep road races; a trail race can be prepped by trail or road races. A weekly parkrun is scored on the Saturday closest to the middle of its ideal window.
Results sort by score, then the nearer race, then the earlier one. Your other filters still apply. Plan two prep races picks the best pair at least 2 weeks apart.
Your races
No race in the library by that name.
{{ rl.pr.pastWord }}
{{ rl.pr.askWord }}
Where
Looking…No place found by that name.
Add a place to rank races near you.
Whenoptional
→
Goal
By match score
{{ p.label }} ★ {{ p.label }}
{{ rl.hov.name }}
{{ rl.hov.meta }}
DOT COLOUR = DISTANCE · TAP A DOT
Best month to race{{ rl.bm.sub }}
★ {{ rl.bm.bestWord }}
{{ m.label }} {{ row.label }}{{ row.n }}
Median race-hour temperature 0°15°30 °C Share of rated races with 4.5★ or 5★ PB potential Number of races in the library ★ = the month with the lowest median Race Challenge (at least 3 races)
Road to race dayWeeks before {{ rl.pr.tl.target }}. Each square is a prep race; tap one to open it. Ideal windowHard windowRecommended
{{ l.label }}{{ l.n }}
{{ k.label }}Today
Race details
{{ rl.sel.flag }}{{ rl.sel.dist }}{{ rl.sel.city }}Prestige
{{ rl.sel.name }}
{{ rl.sel.whenWord }}
{{ rl.sel.statusWord }}
{{ rl.ov.score }}/10
Race Challenge
{{ rl.ov.word }}{{ rl.ov.scaleWord }}
{{ rl.ov.why }}
Race Challenge
Not rated yet
{{ rl.ov.why }}
Elevation gain
{{ rl.ov.o.gain }}
{{ rl.ov.o.gainSub }}
Start to finish
{{ rl.ov.o.net }}
{{ rl.ov.o.shape }}
PB potential
{{ rl.sel.pb.word }}
{{ rl.ov.o.pbSub }}
{{ rl.ov.tcLine }}
Coach's tip{{ rl.ov.tip }}
{{ rl.ov.altNote }}
How Race Challenge works
Race Challenge compares this race with other {{ rl.ov.kindWord }} races of the same distance, based on climbing, descents, race-day weather, altitude and footing.
It comes from one number, the time cost: how much slower than ideal conditions a typical runner should expect, in percent. PB potential is read off the same number, so the two always agree.
How demanding is the race itself, considering elevation gain, gradient, terrain, technicality, altitude, exposure, and other course-specific factors?
1Gentle Challenge0–2 of 10Straightforward terrain and a relatively forgiving course. A great introduction to the distance or race type.
2Moderate Challenge2–4 of 10Some hills, terrain changes, or other demands, but manageable with appropriate preparation.
3Demanding4–6 of 10Meaningful physical demands that reward specific training, smart pacing, and good race execution.
4Very Challenging6–8 of 10Significant elevation, technical terrain, altitude, or sustained exposure that tests endurance and resilience.
5Epic Challenge8–10 of 10An exceptionally demanding course that calls for specialised preparation, strong execution, and considerable resilience.
The Race Challenge tab breaks the time cost down factor by factor, with the road and trail models side by side.
How PB potential works
How favourable is the race for running a personal best, considering course profile, elevation, surface, turns, weather, and typical conditions?
1Some PB PotentialA race with distinctive demands, where a strong performance is still very achievable with the right preparation.
2Good PB PotentialGenerally favourable, with a few course or environmental factors to consider.
3Strong PB PotentialA solid option for a PB, with a reasonably fast course and manageable conditions.
4Excellent PB PotentialA fast, runner-friendly course with few significant obstacles to a great performance.
5Exceptional PB PotentialA premier PB opportunity, typically flat, smooth, fast, and well suited to sustained pacing.
The dial reads course speed, not how good the race is. It comes from the same time cost as Race Challenge, with credit for net-downhill courses: each 1% of time cost moves the needle back about half a step, and Exceptional means the course and usual weather cost about 1.3% or less. It reads the same at every distance.
Score = 5.4 − 0.5 × net time cost, in half steps from 1 to 5. Net time cost subtracts a downhill credit (0.3 per m/km of net drop, up to 3) and, on courses dropping 5 m/km or more, half the descent cost.
Trail races are compared with each other: 5.5 − time cost ÷ 16, in half steps from 1 to 5. Exceptional on a trail race means fast for a trail race, not fast against a road course.
{{ t.label }}✓ VerifiedCourse profile on file
Ratings are estimates from the course and typical race-day weather. Conditions on the day can differ.
What the tags mean
Each tag follows a fixed rule, so it means the same thing on every race.
World MajorTokyo, Boston, London, Berlin, Chicago, New York City, Sydney and Cape Town.PB courseExceptional PB Potential (5 of 5) and no Heat risk. Trail races also need a time cost of 12% or less.Good debutRace Challenge 4.5 or less, open to first-timers (no qualifier, invitation or corporate-only entry), a generous time limit (6 h for a marathon, 3 h for a half), no Heat risk and below 2,500 m. Trail races up to about 105 miles.Net downhillRoad course dropping 2 m per km or more.AltitudeCourse altitude of 1,200 m or more.Heat riskRoad: heat cost of 2.5% or more, a race-hour average of 22 °C or more (5 km and longer), or a dew point of 18 °C or more with highs of 24 °C or more. Trail: heat cost of 8 or more, or an average of 24 °C or more.UTMB World SeriesPart of the UTMB World Series.Evening or night startStarts in the evening or at night.Women's raceA women-only race.
Race day
{{ rl.sel.whenWord }}
Entry
{{ rl.sel.entry }}
Entry window
{{ rl.sel.ew }}
Field
{{ rl.sel.field }}
Course
{{ rl.ov.o.shape }}
Course
{{ rl.ov.o.shape }}
Typical temperature
{{ rl.ov.o.temp }}
Start (local time)
{{ rl.ov.o.start }}
Time limit
{{ rl.ov.o.limit }}
Popularity
{{ rl.ov.popN }}/100{{ rl.ov.popRank }}{{ rl.ov.popOf }}
Prestige · top 25
Popularity is a score from 0 to 100 for how well known and sought after a race is. It loosely takes in how often the race is named among the best, its standing in the sport, how hard it is to get a place, how long it has been running and how many people take part.
Road and trail, city marathons and small classics all sit on the same scale, so you can find the popular races anywhere in the world, whatever their type, size or class. Discover lists races by this score until you pick another sort.
The 25 highest-scoring races carry the Prestige crown.
Training focus{{ rl.ov.focusSub }}
{{ f.k }}
{{ f.v }}
Book a gait analysis with Atomic PT ↗
Entry notes
{{ rl.sel.std }}
Similar racesIf you like this race, try these.
{{ rl.ov.trustWord }} {{ rl.ov.trustLine }} Details checked against {{ rl.sel.srcHost }} ↗
Report an error · {{ rl.sel.name }}
It lands in the coach's feedback list with the race attached.
Elevation
Climb figures for scoring come from the validated race library, and each one has a source: measured by Marathon Routes, published by the race, a reference site, our own research, or an estimate.
A published figure wins over a GPS trace, because overpasses and tunnels can make a flat city course look rolling.
The chart is drawn from the course file (a GPX or a traced profile). Its height axis spans at least 150 m, so flat courses look flat. Coaches can upload the course GPX to replace it.
{{ rl.ov.profName }}
{{ rl.ov.chart }}
{{ rl.ov.profSrc }}
Even-effort pace planFlat-course goal (h:mm:ss) Finish {{ rl.ov.adj }}Halfway {{ rl.ov.paceHalf }}Average {{ rl.ov.paceAvg }}
Bar height is the effort cost of each {{ rl.ov.paceUnit }}. Enter your flat-course goal for split times.
{{ x.n }}{{ x.g }}
{{ x.t }}
{{ x.cum }}
{{ rl.ov.paceHow }}
{{ rl.ov.noProfileMsg }}
Course map
{{ m.label }}
StartFinish{{ rl.ov.kmWord }}
{{ rl.ov.noRouteMsg }}
Course details
{{ x.k }}{{ x.v }}
Race Challenge{{ rl.ov.scaleWord }}
Every race gets a time cost first: how much slower than ideal conditions a typical runner should expect, in percent. Each factor below adds to it. Race Challenge = 10 × (1 − e−time cost ÷ k), with k = 10 for road and 55 for trail, so road and trail races are each rated against their own kind.
Adds (%)RoadThis raceTrailThis race
Climbing0.35 × m/km + 0.02 × (m/km)²0.6 × m/km + 0.006 × (m/km)²
Late hillsExtra when over 40% of the climbing is in the last 40%Not used
Long descents0.2 per m/km of descent above 5 m/kmNot used
Heat0.4 per °C of effective temperature above 13 °C1.2 per °C above 15 °C, +4 if described as hot or desert
Cold0.15 per °C below −2 °C, plus wind chill0.6 per °C of minimum below 0 °C, +3 if snow or freezing
Wind0.08 per km/h of average wind above 14 km/hNot used
Altitude0.35 per 100 m above 800 m0.5 per 100 m above 1,500 m
SurfaceCobbles 1, steps 3, sand 2.5, unpaved 2, trail sections 1.5 (firm rail trail 1), snow or ice 2, dark 0.5; max 4Technical 10, snow or ice 8, mountain 6, sand 6, mud or jungle 6, moorland 6, steep 4, multi-day 4, navigation 4, singletrack 2; −4 if runnable; max 30
Crowding0.8 for races of 10.5 km or less with 15,000+ runnersNot used
Effective temperature is the average over race hours, plus 0.4 × (dew point − 12 °C) when the dew point is above 12 °C. Weather costs scale with how long the race takes, so heat counts for more in a marathon than in a mile.
Trail difficulty is per km, not total, and rated for its distance. Western States and UTMB come out Very Challenging rather than Epic Challenge because steeper races exist.
{{ rl.ov.score }}/10{{ rl.ov.word }}
Gentle ChallengeEpic Challenge
Not rated yet
{{ rl.ov.why }}
Coach's tip{{ rl.ov.tip }}
{{ rl.ov.altNote }}
Course-adjusted finish time
{{ rl.ov.tcLine }}
Your goal on a flat course in ideal weather (h:mm:ss)
{{ rl.ov.adj }}{{ rl.ov.adjDelta }}
{{ rl.ov.adjHow }}
{{ rl.ov.how }} Ratings are estimates from the course and typical race-day weather. Conditions on the day can differ.
Why this rating
{{ rl.ov.barsSub }}
{{ b.k }}{{ b.v }}
{{ b.note }}
{{ rl.ov.creditWord }}
PB potential
{{ rl.sel.pb.word }}{{ rl.sel.pb.num }} of 5
{{ rl.ov.starsSub }}
Race-day forecast
Loading the forecast…
The forecast could not be loaded.
{{ x.k }}
{{ x.v }}
{{ x.d }}
{{ rl.ov.fcTcWord }}
{{ rl.ov.fcAdj }}{{ rl.ov.fcAdjWord }}
{{ rl.ov.fcHours }} · Open-Meteo forecast
Typical race-day weather
Typical weather is measured data: hourly temperature, humidity, dew point and wind from the ERA5 reanalysis (via Open-Meteo) for 2022 to 2025, within 5 days of the race date and over the hours the race is run. Humidity is what makes heat hard, and dew point captures it better than % humidity.
The start time shown is the one the race publishes.
Temperatures on road courses with big climbs or drops are adjusted to the course elevation, at 6.5 °C per 1,000 m.
{{ x.v }}
{{ x.k }}
{{ rl.ov.wxNote }}
Race day
{{ x.k }}{{ x.v }}
{{ rl.ov.dayNote }}
Compare{{ rl.ov.cmpLabel }}
{{ h.name }}
{{ h.sub }}
{{ x.k }}{{ c.v }}
The easier or faster value in each scored row is in red.
Elevation, on one scale
{{ t.label }}
{{ x.label }}
{{ rl.ov.cmpNoChartMsg }}
{{ rl.ov.cmpMsg }}
{{ rl.rankWord }}
Plan two prep racesThe best pair at least 2 weeks apart · combined score {{ rl.pr.pairTotal }}
No two prep races at least 2 weeks apart fit these settings.
{{ rl.pr.emptyWord }}
{{ c.rank }}{{ c.flag }}{{ c.dist }}{{ c.statusShort }}
{{ c.name }}
{{ c.cityShort }} · {{ c.whenWord }}{{ c.away }}
{{ c.prScore }}matchRecommended
{{ ch.label }}
{{ c.difL }}PB potential{{ c.pb.word }}{{ c.fieldC }}
{{ c.flag }} {{ c.rank }}{{ c.name }}{{ c.cityShort }}{{ c.away }} {{ c.whenWord }}{{ c.dist }} {{ c.difL }} PB potential{{ c.pb.word }}{{ c.prScore }}
No races match these filters.
Race planner
THE NEXT {{ rp.yearsWord }} YEARS.
The long view, kept loose on purpose. Drag races into months and between years; a known race lands on that year's date and anything else is pencilled into its month. Nothing here changes a plan until you send it to the Hub.
{{ c.k }}
{{ c.v }}
{{ c.sub }}
Drag onto the calendar Training from
ABCDRace grade Plan B · ✈ travel race Build shadow Date TBCKnown date Entry windowResults
{{ yr.year }}
{{ yr.stat }}
{{ yr.flagWord }}
{{ m.label }}
{{ sh.label }}
{{ rc.label }}
TODAY
{{ c.label }}
{{ b.label }}
{{ yr.dropLabel }}
{{ t.kicker }}
{{ t.grade }} {{ t.flag }} {{ t.name }}
{{ t.meta }}
! SWAP
{{ ly.year }}
{{ ly.stat }}
{{ r.label }}
{{ x.when }} {{ x.grade }} {{ x.flag }} {{ x.name }} {{ x.dist }} {{ x.meta }} {{ x.state }} !
{{ r.dropWord }}
SOMEDAY
No year yet. Drag one onto a month above.
{{ b.flag }}{{ b.name }} {{ b.distWord }}
Every race takes the same space: A is solid, B tinted, C outlined, D dashed. The hatching behind an A race is the build it needs. Dragging a race moves it a week at a time, so race day stays a Sunday - hold Alt for single days. Double-click any week to pencil a race in.
Bucket list{{ rp.bankCount }}
Every race you want to run.
Drag a card onto a year to plan it, or onto a race already there to swap the two. Pick a year chip to drop it straight onto its usual date. Grouped by status - booked and committed first, then planned and someday - and by priority within each.
Not in the list yet.
{{ bg.label }} {{ bg.count }}
{{ b.distWord }} {{ b.flag }} {{ b.state }}
{{ b.name }}
{{ b.where }}
{{ b.profWord }}
{{ b.wantWord }}
Plan for
{{ rp.bankEmpty }}
Completed races
Goal against what you ran, how it felt, and what you would do differently.
DateRaceGoalRanAgainst goalRatingNotes
{{ h.date }} {{ h.goal }} {{ h.delta }}
Checks
Two A races of the same distance too close together, long races without room to recover, races in an A taper, and whether a plan B can wait for a ballot. Several A races a year is fine when they differ in distance. Click one to open the race.
{{ rp.noFlagsNote }}
{{ rp.ed.kicker }}
{{ rp.ed.flag }}
{{ rp.ed.title }}
TRAVEL
{{ rp.ed.when }}
{{ rp.ed.dbWhere }}
Course
{{ rp.ed.prof.elev }}
{{ rp.ed.prof.gain }}
Field
{{ rp.ed.prof.field }} finishers
Race-morning weather
{{ rp.ed.prof.wx }}
PB potential{{ rp.ed.prof.stars }}
{{ rp.ed.dbStd }}
Dates follow past editions and the published 2027 ones where announced. Climb without a ~ is published course data; ~ marks an estimate where sources disagree or none is published. Watches read climb differently. PB potential weighs the course first, then the usual weather.
Not in the list yet - fill it in below.
When
{{ rp.ed.dkWord }}
{{ rp.ed.gradeNote }}
{{ rp.ed.goalPace }}
{{ rp.ed.routes }}
Plan B: {{ rp.ed.backupsWord }}
Tune-up ideas
{{ rp.ed.tuneLead }}
{{ tu.flag }} {{ tu.name }}{{ tu.meta }}
{{ f.tag }}{{ f.text }}
{{ rp.ghostKicker }}
{{ rp.ghostName }}
{{ rp.ghostWhere }}
Cross-training · {{ ct.weekWord }}
EVERYTHING
THAT ISN'T
RUNNING.
{{ c.k }}
{{ c.v }}
{{ c.sub }}
Balance
{{ ct.balWord }}
{{ ct.balLine }}
{{ ct.streak }}
Weeks at 2+ strength
{{ ct.streakLine }}
Log today
{{ t.pct }}
{{ t.label }}
{{ t.done }}{{ t.of }}
{{ c.text }}
Log a session {{ ct.sheetWord }}
{{ x.label }} {{ x.text }} {{ x.src }}
Total training time RUNSTRENGTHMOBILITYCROSS-TRAIN
{{ b.total }}
{{ b.share }}
{{ b.label }}
Strength program · {{ sp.blockN }} blocks
STRONGER EVERY WEEK.
{{ sp.week }}
{{ x.n }}
ExerciseSets × repsLoadTempo / cueProgressionThis week
{{ x.now }}
History · compare
Block vs block
Two builds side by side: volume, intensity, long runs and key sessions, week for week.
Two blocks with a race date are needed to compare.
vs
{{ r.k }}
{{ r.a }}
{{ r.b }}
{{ r.d }}
The read{{ t }}
Key session against key session
{{ bvb.cardA.title }}
{{ bvb.cardA.sub }}
{{ z.k }}
{{ z.v }}
{{ bvb.cardA.detail }}
{{ bvb.cardB.title }}
{{ bvb.cardB.sub }}
{{ z.k }}
{{ z.v }}
{{ bvb.cardB.detail }}
Block A
{{ cmp.aSub }}
Block B
{{ cmp.bSub }}
{{ cmp.oneBlockNote }}
{{ st.k }}
{{ st.a }}
{{ st.b }}
{{ st.delta }}
Weekly volume, week against week
{{ cmp.aName }} {{ cmp.bName }}
Aligned by week number, counting back from each race day. Vertical is {{ unitLong }}, horizontal is the week of the block.
{{ cmp.chart.labelEls }}
Long run, week against week
The longest run logged in each week of each block.
{{ cmp.longChart.labelEls }}
Like workout against like workout
Best rep set at each distance that appears in both blocks. Times are for one rep, so lower is faster.
Rep {{ cmp.aName }} {{ cmp.bName }} Difference
{{ r.label }} {{ r.aBest }} {{ r.aFrom }} · {{ r.aCount }} {{ r.bBest }} {{ r.bFrom }} · {{ r.bCount }} {{ r.delta }}
No rep distance appears in both blocks yet.
Two sessions, side by side
Pick one from each block. Defaults to the most recent session with reps in it.
{{ cmp.sessA.title }}
{{ cmp.sessA.meta }}
{{ cmp.sessA.detail }}
{{ f.k }}
{{ f.v }}
{{ rp.label }} {{ rp.time }} {{ rp.pace }}
{{ cmp.sessB.title }}
{{ cmp.sessB.meta }}
{{ cmp.sessB.detail }}
{{ f.k }}
{{ f.v }}
{{ rp.label }} {{ rp.time }} {{ rp.pace }}
What the two blocks say
· {{ f }}
Calendar · {{ cal.who }}

{{ cal.monthLabel }}

{{ cal.yearLabel }}
{{ cal.summary }}
Based in
Your calendars ✓ Google ✓ Outlook Work events stay on this device. Your coach never sees them. Plan in your phone calendar
{{ cal.links.msg }}
{{ cal.links.feedMsg }}
iPhone: tap Open in calendar app. Google Calendar: Other calendars → + → From URL, paste the link. Outlook: Add calendar → Subscribe from web. It refreshes on its own while the plan changes.
Medication & supplements · this week
Nothing tracked. Add a medication or supplement and tick the days it is taken.
The week view shows one athlete. Switch to Athlete above.
{{ cal.wk.label }} {{ cal.wk.extWord }}
Life
{{ d.lifeTxt }}
Training
{{ d.trainTxt }}
Load
{{ d.heatWord }}
{{ c.day }} {{ c.text }}
{{ d.dn }}{{ d.num }} ✈ Travel
{{ e.title }} {{ q.label }}
{{ h.label }}
{{ e.title }}
{{ e.time }}
{{ cal.agendaTitle }}
{{ r.headLabel }} {{ r.headSub }}
{{ r.slot }} {{ r.label }} {{ r.meta }}
Nothing scheduled in the next six weeks.
{{ w.label }}
Week
{{ c.wkPlan }}{{ c.wkUnit }}
{{ c.wkAct }}
{{ c.num }} {{ c.num }} {{ c.badge }}{{ c.extN }} {{ c.km }}
{{ c.loc }}
{{ c.l1Slot }} {{ c.l1 }} {{ c.l1F.a1Ini }}{{ c.l1F.a2Ini }}{{ c.l1F.a3Ini }}{{ c.l1F.more }}
{{ c.l2Slot }} {{ c.l2 }} {{ c.l2F.a1Ini }}{{ c.l2F.a2Ini }}{{ c.l2F.a3Ini }}{{ c.l2F.more }}
{{ c.l3Slot }} {{ c.l3 }} {{ c.l3F.a1Ini }}{{ c.l3F.a2Ini }}{{ c.l3F.a3Ini }}{{ c.l3F.more }}
{{ c.more }}

{{ cal.selLabel }}

In
Prescribed
{{ x.slot }} {{ x.label }}
{{ x.meta }}
Nothing prescribed on this day.
Your events
{{ e.title }}
{{ e.meta }}
{{ e.note }}
Click any day in the grid to add something - a title and you are done. Multi-day blocks shade the days they cover.
{{ cal.formTitle }}
{{ cal.selLabel }}
Length
Color
Repeats
{{ me.roleWord }} · {{ me.email }}
{{ me.photoMsg }}
{{ me.statRuns }}
Runs logged
{{ me.statKm }}
All time
{{ me.statBlocks }}
Blocks
{{ me.statStreak }}
Day streak
{{ pfx.todoWord }} Finishes the card your teammates see
{{ pcard.ini }}
{{ pcard.no }} Your team card
{{ pcard.name }}
{{ pcard.tag }}
{{ p.k }}
{{ p.v }}
Season recap
Your recap fills in as runs come in from Strava or watch files.
Atomic Race Team · {{ me.recap.yearWord }}
{{ me.recap.km }} {{ me.recap.unitWord }}
Runs
{{ me.recap.runs }}
Time on feet
{{ me.recap.hours }}
Longest
{{ me.recap.longest }}
{{ me.recap.longestWhen }}
Biggest month
{{ me.recap.bestMonth }}
{{ b.label }}
{{ me.recap.races }}
{{ me.recap.bestSet }}
{{ me.recap.source }}
These show on your team card and drive paces in the Hub.
Race day
{{ me.blockDate }}
Paces and predictions follow the goal. Other races live in Hub → Races.
Your colour
Units
Squad board
Runs land in your log automatically when you pull. Needs the site's Strava app: client ID here, secret on the server.
● {{ me.strava.who }} {{ me.strava.last }}
Strava has no 90-day limit: Everything pages through your whole history, which can take a few minutes.
{{ me.strava.msg }}
{{ dups.n }} {{ dups.word }} {{ dups.sample }}
Feedback
WHAT'S BROKEN, WHAT WOULD HELP.
Bugs, ideas, anything confusing. Pick what it is and where it happened, say it in a line or two. The coach sees every note.
{{ fb.coach }} From the squad
What you've sent
{{ it.av.ini }}
{{ it.by }}{{ it.kindLabel }}{{ it.where }} · {{ it.when }}
{{ it.text }}
Nothing here yet.
Help
How it all works
New here, or want the quick walk-through again? ● Strava connected Privacy policy
Start here
1
Connect Strava
You → Profile. Every run arrives with laps and heart rate. The quick-sync button in the top bar pulls the last 30 days and tidies everything up.
2
Set your goal and paces
Races → Hub. Paces and heart-rate zones come from your goal; edit any of them.
3
Follow the plan
Today for the session in front of you, Program → Plan for the whole block. No program yet? Start a base or build program there.
Find your way around
Today’s session, this week, time in each zone, the streak and the next race, at a glance. Click any zone bar for that week’s breakdown.
The speech bubble in the header, and the button on Today, open your thread with the coach. Pick a run or workout under About to ask about it specifically. A red badge shows anything unread; coaches see every athlete’s thread in one list.
Every week of the block on one sheet. Click a day for the session, your paces and how it went; Edit there changes it, Log or edit opens the full session page for splits, heart rate, effort and shoes. Drag a session to move or swap it. Click a week's label to set its focus, copy it or delete it. Show 3–6 weeks at a time, tag load and down weeks with a pattern, and see Hub races as ⚑ on their day. Compact, Block map and Print / PDF sit in the toolbar.
Every session of the program in one table: filter by workouts, long runs or key sessions, click a row to open it. Coaches edit the name, distance and prescription in place.
The charts: volume, time in zone, fitness and form, compliance by run type, load and benchmark sessions. Pick a phase and every chart follows; click a week to open it. In base training it reads your last 12 weeks of logged runs.
Month, Agenda and a Week view with hours: sessions at your usual times beside your own events, clash warnings, travel days and a life-plus-training load strip. Live link puts the plan in your phone calendar.
Quick ratings (energy, sleep, soreness, stress, mood, motivation, nutrition), cycle, weight, tags and a note, tied to a run, a day or a week. Session notes and check-ins appear here too. Shared with your coach unless marked private.
History is every run, week by week, with that day’s diary line beside it; filter by kind, search, or pick a rep set to see its trend. Compare puts two blocks side by side.
Overview is your year: the season terrain, race cards and predictions. Zones holds goal, pace and heart-rate zones. PBs and Shoes have their own pages. Races is the multi-year planner with a Someday lane to drag from, and Library is every race we know, on a map.
Week logs bike, indoor bike, elliptical, swim, hike and anything you add, against minutes-per-week targets. Program is your strength program by section, with progressions.
News is the team paper; Squad the lineup with team numbers and alumni; Milestones the road of races, PRs and new faces; Races who is racing when. Every race in your Hub has a Private / Team sees it switch.
Athletes is everyone at a glance: numbers, category, status, current block, compliance and invites. Sessions takes the squad tracker export; Update synced plans sends sessions out. Library is the workout bank. Setup builds race, time or time + race programs, or imports one from a sheet.
Undo in the header reverses the last change. Data saves on your device and syncs to the team server when signed in. Something wrong? You → Feedback.
Nothing matches. Try another word, or use Report an issue above to ask.
X-Train
EVERYTHING THAT ISN'T RUNNING.
{{ p.k }}
{{ p.vEl }}
{{ p.sub }}
{{ xtHero.balance.pct }}
Balance
{{ xtHero.balance.target }}
{{ xtHero.balance.sub }}
{{ xtHero.balance.streak }}
{{ xtHero.balance.streakWord }}
{{ xtHero.balance.streakNote }}
Log today {{ xtHero.quickNote }}
The week-by-week picture
Minutes per family per week, read from what is logged on each day. Darker means it was harder - the shade follows average RPE.
{{ c.label }}
{{ c.label }}
{{ c.label }}
Total training time by week {{ xtTime.lead }}
{{ r.label }}
{{ r.total }}
{{ xtTime.openLabel }} {{ pp.label }} {{ pp.min }} Nothing logged this week.
Nothing logged yet. Open a day on the Plan, pick an activity from the strength and cross-training tiles, and give it minutes - the grid and the hours build from there.
Strength
STRONG LEGS, FAST LEGS.
{{ strHero.line }}
{{ strHero.big }} {{ strHero.bigWord }}
The nine areas {{ strHero.weekWord }} tap to log this week · the deeper the tint, the more it has been trained this block
In the gym
Turn this week's areas into a checklist you tick off between sets, with today's load beside the plan's.
{{ strSession.title }} {{ strSession.progress }}
Pick the areas above, or tap tiles in the header, and the exercises appear here.
{{ it.area }}
{{ it.name }}
{{ it.note }}
Sets
{{ it.sets }}
Today · plan {{ it.load }}
{{ it.trend }}
{{ s.k }}
{{ s.v }}
{{ s.sub }}
Strength minutes by week
{{ strBarLabelEls }}
What was actually trained
{{ strMatrixNote }}
Area {{ w.label }} Total Last
{{ r.title }}
{{ r.total }}
{{ r.last }}
The program
Exercises, sets and loads per area. Edit in place.
{{ b.n }}

{{ b.title }}

{{ b.purpose }}
{{ b.examples }}
ExerciseSets / repsLoadNotes
{{ logPanel.when }}
{{ logPanel.title }}
{{ logPanel.sportLine }} · {{ logPanel.source }}
{{ h.k }}
{{ h.v }}
{{ h.sub }}
{{ logPanel.verdict }}
{{ logPanel.why }}

Route

{{ logPanel.trackNote }}

Splits

{{ logPanel.lapCount }} · {{ logPanel.lapTotal }}
{{ logPanel.lapMetaNote }}
#DistanceTimePaceHR
{{ p.n }} {{ p.pace }} {{ p.tag }}
No laps in this file. Add splits by hand if you want rep-level detail.
Session notes
Sync
YOUR WATCH, READ FOR YOU.
Connect Strava once and every run arrives on its own. Or drop a file straight off the watch below.
● Strava connected
Strava connectedNot connected
Runs · 30 days
{{ syv.runs }}
Distance
{{ syv.dist }}
From Strava
{{ syv.fromStrava }}
Latest
{{ syv.last }}
30 days agoToday

Sync a watch file

Drop the activity file straight off Garmin, COROS or Strava. It is read here on this device and nothing is uploaded. Pick the session it belongs to and the distance, time, heart rate and lap splits are filled in for you.
Garmin, COROS, Polar, Suunto?There is no direct automatic sync with them yet. The easy route is to let your watch app post to Strava and connect Strava here; runs then arrive on their own. A direct Garmin Connect sync would need Garmin to approve the app for their developer program. Until then, drop files below.
{{ src.name }} {{ src.how }}
{{ sync.msg }}
To import
{{ sync.batch.selected }}
of {{ sync.batch.total }} files read
Distance
{{ sync.batch.km }}
{{ sync.batch.span }}
Time
{{ sync.batch.time }}
moving time
Skipped
{{ sync.batch.dupes }}
already logged
Unreadable
{{ sync.batch.failed }}
files
Import from
Up to
Files cover {{ sync.batch.earliest }} - {{ sync.batch.latest }}. {{ sync.batch.outside }} fall outside the dates set here and are left unticked.
{{ sync.batch.cappedNote }}
DateFileDistanceTimeNote
{{ r.date }} {{ r.file }} {{ r.dist }} {{ r.time }} {{ r.note }}
{{ c.k }}
{{ c.v }}
{{ c.sub }}

{{ sync.candTitle }}

{{ sync.matchNote }}
{{ c.when }} {{ c.type }} {{ c.gap }}
{{ c.name }}
{{ c.planned }}
{{ sync.noCandNote }}
{{ sync.baseNote }}

Laps in the file

{{ sync.lapNote }}
#DistanceTimePaceAvg HR
{{ l.n }} {{ l.dist }} {{ l.time }} {{ l.pace }} {{ l.hr }}

Bulk import a block

A CSV or JSON export covering several weeks matches every row to a session by date in one pass. Columns are read by name, date, distance, duration, avg HR, in any order and any units.
Library
THE TEAM BANK.
Workouts
{{ libCountN }}

Session library

{{ libLead }}
{{ libCount }}
Slot
Order
Saves as {{ woPreview }}, joins the library list below, and appears in every Ran instead picker.
Bulk rename {{ libCsvNote }}
{{ r.caret }} {{ r.type }} {{ r.name }} {{ r.reps }} {{ r.benchLabel }} {{ r.used }}
This name covers {{ r.variantCount }} different sessions. Renaming moves them all; splitting moves only this one - {{ r.variantShape }} - onto a name of its own.
Reps
{{ r.edit.reps }}
Distance
{{ r.edit.dist }}
Pace
{{ r.edit.pace }}
Recovery
{{ r.edit.rest }}
Float
{{ r.edit.float }}
Reads as
{{ r.edit.text }}
{{ r.edit.saved }} {{ r.edit.applied }}
Reps
{{ b.reps }}
Each rep
{{ b.size }}
Pace
{{ b.pace }}
Recovery
{{ b.rec }}
{{ r.edit.warn }}
Sets
{{ r.edit.setsLabel }}
Reads as
{{ r.edit.text }}
{{ r.edit.saved }} {{ r.edit.applied }}
Prescription - too compound for steppers, edit it directly
{{ r.edit.saved }} {{ r.edit.applied }}
{{ v.role }} · {{ v.level }} {{ v.dist }}
{{ v.presc }}
{{ libEmpty }}
Team
SET ONCE, PUSH TO EVERYONE.
Squad sessions by date. Every synced plan picks them up on Update.
Sessions
{{ teamCountN }}

Team workouts

Squad sessions by date, shared across every program in this file. An athlete with team sync switched on for a weekday gets whatever the team is doing on that date - even when their block started weeks earlier or later.

CSV format
Columns are read from the header row, in any order, and anything unrecognized is ignored. date and name are the only ones required. Build the session either as reps · rep_distance · pace · rest or recovery, or write it out in prescription - the structured columns are assembled into the same grammar the week grid edits. Leave distance or work blank and each athlete keeps whatever their own plan prescribed - the calendar supplies the workout, not everybody's mileage. Numbers are miles unless you write km. A name already in the library brings its own prescription, so a date and a name is a complete row. Importing adds to what is already here. One date, group, name, standard and race is one session, so re-importing a corrected sheet replaces only the rows it covers and leaves everything else alone.
{{ teamMsg }}
Who is synced
{{ p.athlete }} {{ p.days }}
Set this per athlete under Setup → Building the week.
Next 7 days
{{ n.when }}{{ n.kind }}{{ n.variant }}
{{ n.name }}
{{ n.detail }}
{{ n.where }}
No squad sessions in the next 7 days.
{{ teamCount }}
{{ blankRowNote }}
Not given in a while
DateDayGroupSessionTypeStdForDistWorkPrescription
{{ t.dow }}
{{ t.meta }}
{{ teamEmpty }}
Team session
{{ teamEdit.dow }} {{ teamEdit.date }}
{{ teamEdit.status }}
{{ teamEdit.statusNote }}
In a plan: {{ teamEdit.preview }}
Reps, pace and rest
Reps
{{ b.reps }}
Distance
{{ b.size }}
Pace
{{ b.pace }}
Recovery
{{ b.rec }}
Put it on the calendar every week
The build
{{ block.title }}
{{ block.sub }}
{{ block.pct }}
{{ block.done }}{{ block.doneWord }}
{{ block.perWord }}
Click a day for the full session; Edit in there changes it. Drag a session to another day to move it, or onto another session to swap them. Click a week's label to set its focus, copy it or delete it. Show 3, 4 or 6 weeks at a time to focus on one block, and add a pattern to tag load and down weeks. Races from your Hub show as ⚑ on their day, with ⚠ when a hard session clashes.
{{ block.cd.big }}
{{ block.cd.unit }} {{ block.cd.label }}{{ block.cd.sub }}
{{ k.label }} Longest run ({{ block.map.u }}) ↓ Cutback week
{{ p.label }}
RACE ↓
{{ c.tipTitle }}
{{ c.tipTot }}
{{ r.label }}{{ r.v }}
{{ c.lr }}
{{ c.label }}{{ c.pct }}
{{ k.label }} DoneMissedPlanned
{{ d }}WEEK
{{ w.cycLabel }}
Focus{{ w.focus }}
{{ w.label }}{{ w.date }}{{ w.phase }}{{ w.protoTag }}
⚑ {{ r.name }} ⚠ {{ d.clash }}
{{ c.km }}★
{{ c.name }}
REST
{{ w.total }}{{ w.ringWord }}
{{ d }}
{{ g.label }} {{ g.total }}
{{ block.detail.when }}
{{ block.detail.phase }}
{{ x.slot }}{{ x.type }}
{{ x.name }}
{{ x.detail }}
{{ x.km }}{{ x.logged }}
Rest day
{{ block.detail.acts }}
No block open. The picture appears once a program is built.
{{ tm.msg }}
THE ATOMIC
{{ tm.issue }}
Type
Build stories turns each line into a tidy post (headline, short story, big number, people) for you to check before publishing. Post as written publishes your text exactly, first line as the headline.
{{ tm.noneText }}
{{ c.kind }}{{ c.date }}
{{ c.stat }} {{ c.title }} {{ c.body }}
{{ w.ini }}
{{ tm.sbWho }} · {{ tm.sbRace }}{{ tm.sbTag }} {{ tm.sbTime }}
{{ b.when }}
{{ b.kind }}{{ b.title }} {{ b.stat }}{{ b.body }}{{ b.quote }}
THE LINEUP
Finish your card:
{{ tm.lineupEmpty }}
{{ p.ini }} {{ p.no }}
{{ p.name }}
{{ p.no }}{{ p.name }}
{{ p.tag }} {{ p.bio }}
{{ b.k }} {{ b.v }}
Next: {{ p.next }} {{ p.since }}
CLUB HISTORY {{ tm.msCount }} · scroll back through the years · click a marker
Back-dated milestones go straight onto the history and stay out of News. Add as many as you like, oldest first is easiest.
The road starts with your first milestone. Add when the club began, when people joined, first races and PRs.
{{ y.t }}
NOW
{{ m.kind }} · {{ m.date }}
{{ m.title }}
{{ m.stat }}{{ m.golds }} {{ w.ini }}{{ m.more }}
Click for the full list
RacePRMilestoneNew faceNumbered squares are team races · ★ marks PRs and podiums
DEPARTURES{{ tm.clock }}
NO DEPARTURES · ADD RACES ON HUB
DATERACERUNNERSINSTATUS
{{ ch.c }} {{ r.race }} {{ r.who }} {{ r.inT }} {{ r.status }}
The season aheadTwelve months · click a race for who is running
{{ mo.m }}{{ mo.y }}
Every run, every block
HOW FAR YOU'VE COME
{{ k.k }}
{{ k.v }}
Two years by monththis year in red · hover a month
{{ b.lab }}
Personal bests
{{ p.k }}
{{ p.v }}
Typical pace, by monthruns of 5 {{ lt.unit }}+ · {{ lt.paceThen }} → {{ lt.paceNow }}
Lower is faster
Race results
{{ r.date }}{{ r.name }}{{ r.goal }}{{ r.t }}
Coach
ATHLETES
Next number {{ crew.nextNo }}
On the roster, but matching no athlete here
{{ orphanNames }} - their sign-in cannot link to a record. Create an athlete with exactly that name, or rename an existing one to match.
The same athlete, twice
Merging keeps the fuller record, moves every logged run and block onto it, and carries the sign-in link across.
{{ d.name }} {{ d.detail }}
Not assigned to an athlete
{{ p.raceTitle }} {{ p.raceMeta }} · {{ p.meta }}
No.NameCategoryStatusTraining forLast 4 weeksStravaSign-in
{{ r.block }}{{ r.race }} {{ r.pct }}{{ r.run }} {{ r.strava }} {{ r.signin }}
No one matches.
{{ a.name }}{{ a.summary }}
{{ a.followNote }}
Programs
{{ p.raceTitle }}{{ p.meta }}
{{ p.confirmMsg }}
No programs yet.
Races
{{ rc.grade }}{{ rc.name }}{{ rc.date }} · {{ rc.away }}
Training diary · {{ dy.who }} {{ dy.streak }}
{{ dy.bigEl }}
{{ dy.sub }}
{{ k.k }} {{ k.v }} {{ k.sub }}
Last 28 days low → high wellness · click a day to filter
{{ c.lab }}
{{ k.label }}
{{ k.v }}
{{ k.delta }}
{{ dy.heading }}
{{ dy.scopeHint }}
{{ m.label }}
{{ m.hint }}
Cycle
Weight {{ dy.wU }}
Tags
{{ dy.msg }}
{{ g.label }} {{ g.sub }}
{{ it.dnum }} {{ it.dow }} {{ it.mon }} {{ it.wellTxt }}
{{ it.src }} {{ it.scope }} Private {{ it.by }}
{{ it.title }}
{{ it.text }}
{{ it.text2 }}
{{ d.label }} {{ d.v }}
#{{ t.label }}
{{ it.extra }}
{{ r.name }} {{ r.text }}
{{ dy.emptyText }}
Two edits at once {{ conflict.name }}'s plan was changed by {{ conflictWho }} while you were editing. These days differ between your version and theirs:
{{ d }}{{ conflict.more }}
Logged runs, diary entries and notes from both sides are kept either way.
A new version is ready
Analysis · {{ an.title }} {{ an.streak }}
Pick a phase or ring to filter every chart on this page. Hover a week for its numbers, click it to see its sessions. Time in zone comes from heart rate where your watch recorded it. With no program running, Analysis reads your last 12 weeks of logged runs instead.
{{ an.big }}
{{ an.sub }}
SHOW
{{ k.label }} {{ k.v }}
{{ k.sub }}
Week by week PlannedRun, coloured by phase Hover a week · click to open it
{{ c.pct }} NOW
{{ c.label }} · {{ c.phase }}
{{ c.date }}
{{ c.line }}
{{ c.keys }}
{{ c.n }}
{{ an.wk.title }} {{ an.wk.sub }}
{{ d.dow }}
{{ x.km }}{{ x.mark }}
{{ x.name }}
REST
Time in zone
{{ ztl.headline }}
{{ ztl.sub }}
{{ ztl.elev }}{{ ztl.elevWord }}
{{ c.hovLine }}
{{ c.label }}
{{ l.line }}
{{ l.label }}
{{ l.sub }}
{{ l.pct }}
{{ l.hrs }}
hatched cap = climb that week, where the files carry elevation
Compare · {{ ztl.cmp.label }}
{{ r.label }}
{{ r.a }}
{{ r.b }}
{{ r.d }}
{{ ztl.sel.easyPct }} EASY
{{ ztl.sel.label }} · {{ ztl.sel.hrs }}
{{ r.label }}{{ r.pct }}{{ r.delta }}
Read of the week
{{ n }}
Click any bar above to read that week.
Fitness · fatigue · form 42-day and 7-day load averages from zone time. Form is the gap between them.
fitness fatigue race day
Form today
{{ fit.form }}{{ fit.formWord }}
Fitness
{{ fit.fitness }}
Fatigue
{{ fit.fatigue }}
{{ fit.freshest }}
{{ fit.raceNote }}
Compliance by kind of run Logged against planned, to today. Red where under 70% or over 115%.
{{ r.label }}{{ r.pct }}
{{ r.sub }}
Load
{{ hubLoad.big }}
{{ hubLoad.line }}
{{ hubLoad.sub }}
Acute : chronic load
{{ acwr.caption }}
Ratio, vertical Week of block, horizontal
{{ acwr.labelEls }}
Quality
{{ hubQuality.big }}
{{ hubQuality.line }}
{{ hubQuality.sub }}
Intensity distribution
{{ intensity.headline }}
{{ intensity.labelEls }}
Quality Aerobic / easy
Time in zone
{{ zone.caption }}
{{ zone.total }}
{{ r.name }} {{ r.pct }} {{ r.time }}
Nothing to split yet.
Progress
{{ hubProgress.big }}
{{ hubProgress.line }}
{{ hubProgress.sub }}
Long run progression
{{ lr.caption }}
{{ lr.labelEls }}
Benchmark sessions
Grouped by rep distance found in the lap data. Time for one rep each session. Faster is lower.
All sessions in History →
{{ b.name }}
{{ b.sub }}
{{ b.labelEls }}
Latest
{{ b.latest }}
Change
{{ b.delta }}
Rep by rep
{{ c.label }} HR
{{ r.date }} {{ c.t }} {{ r.hr }}
{{ b.repGrid.note }}
Nothing to compare yet. Log splits for a session that repeats in the block - 8×1K, 4×2K Progression, Fartlek and Tempo all recur - and the second time it appears, its trend shows here.
Analysis · base
{{ anb.big }}
{{ anb.sub }}
{{ k.k }}
{{ k.v }}
Weekly volume, coloured by time in zoneClick a week for its zones
{{ w.label }}
Time in zone{{ anb.bandTitle }}
{{ b.label }}{{ b.sub }}{{ b.pct }}
{{ anb.hrNote }}
Fitness & form{{ anb.fit.formWord }}
Fitness
{{ anb.fit.fitV }}
Fatigue
{{ anb.fit.fatV }}
Form
{{ anb.fit.formV }}
Squad board
{{ wall.title }}
{{ wall.sub }} · {{ wall.n }} on the board
The week ahead {{ briefing.range }} · quality sessions across the squad
{{ d.label }}
{{ g.label }}{{ g.teamTag }}
{{ w.ini }} {{ g.more }}
easy / rest
Racing this week
{{ r.av.ini }} {{ r.name }} {{ r.race }} · {{ r.when }}
Where the team runs {{ heat.n }} runs · {{ heat.km }} · {{ heat.people }} athletes
© OpenStreetMap contributors · Drag to pan · scroll to zoom · the brighter the road, the more of the squad has run it
{{ r.rank }} {{ r.ini }}
{{ r.name }}
{{ r.wk }}
{{ r.big }}
Quality this week{{ r.done }} {{ r.moreDone }} Next race{{ r.next }}
Nobody has shared yet. Profile → Squad board → Shared with the team puts you on it.
Squad sessions
Next 7 days
{{ n.when }}{{ n.kind }}{{ n.variant }}
{{ n.name }}
{{ n.detail }}
{{ n.where }}
No squad sessions in the next 7 days.
{{ x.when }} {{ x.kind }} {{ x.name }} {{ x.variant }}{{ x.detail }}
The squad
{{ squad.logged }} {{ squad.totalWeek }}
Typed distances and watch files both count. Click a name for a training summary; open their profile from there.
Sort by
Athlete This week Last 4 weeks Compliance Ran yesterday Last run Flags Race
{{ r.av.ini }}
{{ r.block }}
{{ r.week }} {{ r.planned }} {{ r.prev4 }} {{ r.comp }} {{ r.compSub }} {{ r.ran }} {{ r.quiet }} {{ r.flagText }} {{ r.note }} {{ r.race }} {{ r.raceIn }}
{{ squad.sum.name }} {{ squad.sum.block }}
{{ t.k }}
{{ t.v }}
{{ t.sub }}
Week by week · ink is total, pink is work at LT1+
{{ w.label }} {{ w.km }} {{ w.days }}
No athletes yet. Add them under Setup.

Worth a look

Notes from anyone in the squad, and sessions whose laps do not agree with what was written. Open one and the workout picker is right there. Lap checks read the open athlete, {{ squad.reviewWho }}; switch athlete to check someone else.

{{ squad.reviewCount }}
{{ r.kind }} {{ r.when }} {{ r.wk }} {{ r.who }}
{{ r.title }}
{{ r.detail }}
Nothing waiting. No notes from the squad, and every logged workout of {{ squad.reviewWho }} matches what was prescribed.

Races coming up

Every booked race across the squad, soonest first. Goal races and tune-ups written into a plan both appear.
{{ r.away }} {{ r.date }} {{ r.name }} {{ r.who }} {{ r.repeatNote }} {{ r.weekly }} {{ r.goal }} {{ r.kind }}
No races booked ahead of today.
Program builder
EVERY ATHLETE, EVERY BLOCK.
Upload a CSV or copy an athlete’s program, then fine-tune the whole block.
YOUR PLAN, YOUR CALL.
Start a program for your next race, open one you already have, or step back into base. Your coach sees every change.
Athletes
{{ athCountN }}

02Your programs

{{ myProgs.lead }}
{{ p.state }}{{ p.weeks }}
{{ p.name }}
{{ p.range }}
No programs yet. Build one below, or keep logging in base.

01New program

Start from an athlete above with + New program, or from scratch here. Set the race, work down the steps, review the proposed plan, then create it.
Upload a CSV The main way in. Upload the program CSV, or paste the grid from Sheets (week's Monday, week number, AM/PM, then Mon–Sun). "ART" cells become squad slots. Build it, then fine-tune in The open program below.
No week rows found - each row needs the week's Monday as m/d/yy in the first column. {{ gi.summary }}
{{ gi.peak }}
Copy an athlete’s program Start from another athlete’s block: the same sessions, re-dated to the new race. Pick the source and set the race on the next screen.
New program · The race
The block length comes from the race date - the standard block for the distance, condensed if race day is nearer. Nothing is created until you press Create the program in step 6.
{{ draftWeeksHint }}
Starting point
{{ draftSrcNote }}
Held{{ heldWord }}

02The open program

{{ ctrl.who }}'s program as it stands. Race day is what every week counts back from, so changing it moves the whole plan. Edit any day in the grid below; changes reach the athlete straight away.

{{ gradeNote }}
The whole block {{ liveGrid.total }} · type or step a day's distance, blank for rest
{{ d }} {{ liveGrid.unitWord }}
{{ c.tag }}
{{ g.total }}
No program is open. Upload a CSV or copy a program above, or open one from the Athletes tab, or press + New program, and the build steps appear here.

03Build from rules

Optional. Generate or regenerate the plan from a level, a week shape and rules. Not needed for an imported or copied program.

03Build from rules

Editing {{ ctrl.who }}. Work down the steps - each one can override everything above it, and the last word is always the week you arrange by hand in step 2. On a new program, step 6 shows the whole proposed plan to review and hand-tune before anything is created.

Say the program
Talk it through and the steps below fill in. Days a week, which sessions on which days, how hard to build, where the long run starts, what syncs with the team.
{{ brief.interim }}
{{ brief.msg }}
{{ f.k }}{{ f.v }}
{{ l.n }} · {{ l.title }}
{{ l.note }}
1

Level

Picks which of your own programs the block is built from. Everything below bends that program to this athlete.
{{ ctrl.levelNote }}
2

Week shape

Which day each session lands on. Set the pattern with the controls, then rearrange it directly - arrows swap two days, the dropdown changes one day’s job.
Runs per week
Sets the number of rest days. Nothing further down adds to it - the rules in step 3 only move them.
Long run day
Rest days you always want
Session types in play
All on by default, so the level program comes through as written. Toggle one off and its sessions become easy runs.
The week
{{ ctrl.previewNote }}
Arranged by hand {{ ctrl.driftNote }}
{{ p.dow }}
{{ p.label }}
{{ ctrl.shapeNote }}
3

Rules

Guard rails on the shape above. These move rest days around - they never spend one, so your runs per week holds.
Non-negotiables
AM/PM doubles on
4

Team & club sync

Replaces that day’s session with the squad workout, matched by date - so an athlete offset from the group still gets the same session.
Race team
Club
Club sessions run Tuesday and Thursday only.
5

Fixed sessions

Written into every week. Nothing overwrites these - they are the top of the pile.
DayKindNameTypeDistanceGrade
-
6

Review the plan

{{ pv.summary }}

The build at a glance ({{ pv.unitWord }})
Black is a key workout, pink the long run, gray easy running, white rest; ★ marks a benchmark session. Each number is a day's distance - click it to change it (Enter or click away applies); 0 or blank turns the day to rest, a number on a rest day makes it an easy run. The dashed top row writes one weekday across EVERY week. Click a week label to open that week below.
{{ d }} Total
All wks
{{ c.tag }}
{{ g.total }}
{{ pv.jumpNote }}
{{ pv.weekLine }}
{{ d.dow }}
{{ d.type }} {{ d.star }}{{ d.name }} {{ d.dist }} Changed
Swap the session · {{ pv.pickPanel.title }} {{ pv.pickPanel.current }}
Quick edit {{ pv.pickPanel.edit.text }}
Reps
{{ pv.pickPanel.edit.reps }}
Rep distance
{{ pv.pickPanel.edit.dist }}
Pace
{{ pv.pickPanel.edit.pace }}
Rest
{{ pv.pickPanel.edit.rest }}
Float
{{ pv.pickPanel.edit.float }}
Quick set
{{ r.name }} {{ r.type }} {{ r.p }} {{ r.dist }}
{{ pv.editedNote }} Every session stays editable on the Plan tab afterwards.

Write it into the plan

{{ ctrl.applyNote }}

{{ ctrl.appliedLabel }}
{{ ctrl.lrNote }}
{{ ctrl.refreshNote }}

04Settings

Weekly score weights

{{ weightsScope }}
Volume compliance carries the most weight. Components with no data drop out and the rest re-normalize, so a partly-logged week still scores honestly.
{{ w.label }} %
Total{{ weightTotal }}%

Colours

Data & backups

Everything saves in this browser as you type and syncs to the team server when signed in. Exports are for backups and for handing a block to someone outside the app.

Everything saves as you type and syncs to the team server. Backups are for moving or keeping a copy.

{{ t.athlete }} {{ t.meta }}

13Start a program

Pick a race or none, the days you run, what each day is, and a weekly mileage. Every week follows that pattern at that mileage, and race week is eased off. Squad days take whatever the team is doing that date; the run you pick is the fallback when there is no session.
{{ sd.kindNote }}
{{ sd.weeksWord }}
Weekly mileage
{{ sd.unit }}/wk
{{ sd.recentWord }}
Sync squad sessions
Race team
Track club
Your week · drag a run onto another day to swap them · tap a day to run or rest
{{ dd.squadWord }} {{ dd.miles }}
REST
{{ sd.summary }}
{{ chat.head }}
{{ chat.withName }}
{{ chat.emptyWord }}
{{ m.text }}
{{ m.meta }}
About