Two Marathons, One Weekend (Take Two)
Table of Contents
Question
How can I use technology to run both the Cape Town trail and road marathon in one weekend, the second time around?
Why
Last October, I lined up for the Cape Town Trail and Road Marathon in the same weekend. 86 kilometers in 48 hours. I wrote about it here. The trail run went ahead. The road marathon was cancelled. The challenge stayed unfinished. On May 23rd and 24th, I am attempting it again. Same idea. Same distance. Same cause. The reasons have not changed: curiosity about what technology can do for a body that has to recover overnight, growth from putting myself in the path of something hard, and purpose through running for the Dalen Mmako Foundation (DMF), which uses sport as a pathway to education for young people in disadvantaged communities. The first attempt taught me that the system around the run matters more than the run itself. This time I am keeping what worked, dropping what did not, and adding one thing I should have had from the start.
Challenges
The four pillars are still the same: running, strength, recovery, and mindset. What is different is what I now know about each of them. From the first attempt I learned that cumulative fatigue is less about the long runs and more about what happens between them. Recovery is where the race is actually won or lost. The mental side is also different the second time around. There is a quiet pressure that comes from attempting something you have already publicly committed to once. The training cycle is shorter, the build is steeper, and the margin for error is smaller. The plan has to account for all of it.
Tools
Custom Training Schedule (Running, Strength, & Recovery)
I used Claude to build a custom training schedule for this cycle, shaped around a May race weekend and what I learned the first time. I used it as a framework rather than a script. The structure is similar to last year: long trail runs on Saturdays, long road runs on Sundays, midweek mileage, gym work, and a taper into race week. What changed is the shape of the build. The cycle is shorter (six weeks instead of six and a half), Week 4 is a deliberate recovery dip before Week 5 peaks at 78 km, and the weekend pairings are tuned closer to what race day actually looks like. Recovery first, mileage second.
| Week (Dates) | Mon Gym + 4k |
Tue 10k |
Wed 10k |
Thu Gym + 4k |
Fri Gym + 4k |
Sat Trail LR |
Sun Road LR |
Weekly Total |
|---|---|---|---|---|---|---|---|---|
| (Apr 13–19) | 4 | 10 | 10 | 4 | 4 | 15 | 12 | 59 |
| (Apr 20–26) | 4 | 10 | 10 | 4 | 4 | 18 | 15 | 65 |
| (Apr 27–May 3) | 4 | 10 | 10 | 4 | 4 | 22 | 18 | 72 |
| (May 4–10, Recovery) | 4 | 10 | 10 | 4 | 4 | 16 | 14 | 62 |
| (May 11–17, Peak) | 4 | 10 | 10 | 4 | 4 | 25 | 21 | 78 |
| (Race Week May 18–24) | 4 | Rest | 4 easy | Rest | Rest | Trail 43 | Road 42 | — |
Beeminder (Running & Mindset)
The accountability system is the same one I described in the first post, with one change: the daily target is higher. Strava tracks my runs in real time, and Beeminder turns that data into a contract with real money on the line. I came across Beeminder in Nick Winter’s book The Motivation Hacker. Instead of relying on willpower, you link the commitment to tangible stakes. Miss the goal, the pledge doubles ($5 becomes $10, then $20, and so on). My target this cycle averages 9 kilometers per day, up from 6 last time, which reflects the shorter runway to race weekend. Each run syncs automatically. The graph turns green when I am on track and red when I am slipping. The mechanic is still the same one that surprised me last year: on days I felt like skipping, the thought of losing money pushed me out the door. What makes it powerful is that it feels like a game. Suddenly, training feels fun. It’s counterintuitive, but that’s the secret to why it works. You can follow along on the goal page.
Sleep & Metrics Dashboard (Recovery)
This is the new piece. Last cycle, I tracked recovery subjectively through the Body State Index in my Input-Output Log. It worked, but it was noisy. A number I gave myself in the morning was a feeling, not a measurement. This time I wanted something more systematic, so I built a custom dashboard that pulls data from my Garmin watch and surfaces the metrics that matter for training. Sleep is the headline section: total sleep duration plotted against an 8-hour goal line, with the Garmin sleep score below it. A 7-day rolling average smooths the daily noise so I can see the trend rather than chase any single bad night. The dashboard also has sections for activity and steps, heart and respiration, stress and body battery, and nutrition. The point is not to optimize any single number. It is to catch the patterns early: a week of compressed sleep before I feel the fatigue, a stress trend that says today should be easy regardless of what the plan says, a nutrition gap that explains why the long run felt heavier than it should have. Recovery was the weakest link in the first attempt. This dashboard is how I am trying to close that gap.
The mid-May slide is the part I am watching: scores hit their lowest right when the taper should feel like rest. A feeling would have missed it.
Apr 19 stands out: nearly 14 hours after a tough weekend. The body asked for it.
Deep sleep mostly sits at the bottom of the typical 13–23% range. It climbed through early May, then fell back toward 10% right as race week arrived. The depth I was building is exactly what I do not want to be losing now.
Final Thoughts
Last year the road marathon was cancelled and the question stayed open: could I have finished both? I never got to find out. This time I do. Same challenge, sharper system, one weekend to settle it.
References
- Dalen Mmako Foundation - nonprofit supporting young athletes in disadvantaged communities
- First attempt blog post - Two Marathons, One Weekend (2025)
- Beeminder goal - current double marathon commitment
- Garmin Dashboard repo - clone, add your Garmin login to the .env, and run the same view on your own data (requires a Garmin watch synced via the Garmin Connect app)
- Strava - training progress