Turning my DNF diary into a vibe-coded design tool
Overthinking my way into an interactive prototype
“The definition of insanity is doing the same thing over and over and expecting different results.”
— probably not Albert Einstein
I have been accused from a young age of being too stubborn for my own good, which might explain why, when I get it into my head that I want to do something, I have a hard time letting go of it. And for a long time, I’ve wanted to run ultras in the Marin Headlands.

I still run here once or twice a week and I love training on these trails, but putting my pattern recognition skills to work, I’m realizing that I might need to take a break from racing here.
Two weeks ago, I lined up at the start of my second 50 mile race, the Marin Ultra Challenge. I went into it feeling great. I’d been consistent with my training and I thought I’d solved some problems that had been recurring issues in previous races. Three weeks prior, as my longest training run, I’d set a 50k PR. It wasn't flawlessly executed by any means, but I did not feel wrecked afterward. My last speed workouts felt amazing. I went in with a plan. I found my friend Amy at the starting line area, and we shared the first few miles together.


I have a whole race recap written up if you really want to hear the blow-by-blow, but long story short: as someone with no childhood athletic background to draw on, I’m learning that endurance sports have a way of exposing your weaknesses. In the nine years since my first-ever trail race, I’ve been playing whack-a-mole with those issues. Learning which physical sensations are just minor complaints that will settle down once you’re warmed up, and which ones are a harbinger of a injury that will require more time off (I still guess wrong sometimes, out of an abundance of optimism and denial). Figuring out what sits well in my stomach and what doesn’t, and at what point in the day. Every race is an experiment—and yes, every long run is also an experiment, but there’s a certain flavor of sleep-deprived anxiety that I just can’t replicate on a regular Saturday.
But, much like every single project I’ve ever been part of, a race day plan is subject to entropy. On a software team, I don’t think it’s anyone’s fault. It’s just that messy realities have a way of nudging a system just a little off track, a little bit at a time. Things can and will go sideways no matter how well-prepared you think you are. That is definitely true in a trail race, more so when you’re a mid-to-back of the pack runner. More time on the trail just means more time for your perfect strategy or system to break down. You just have to accept that things will probably get a little messy at some points and lean on those problem-solving skills and support systems when they do.
I’m still glad I put together that plan, but it derailed very early on. I had some new hip pain as soon as I got out of the car (never a problem before, and hasn’t been a problem since), I didn’t want to eat any of the things I had planned in the early miles, and the season’s first heat wave slowed me down enough that I was going to miss a time cutoff. Looking at my past several years of race data, I can see a few patterns emerging:
early under fueling or stomach issues spell doom
My unwillingness to adapt to the heat is becoming a problem
Psychosomatic aches and pains are kind of a thing with me
On that last point, I am an anxious person and thought being really familiar with the course would help with anxiety. I am coming to realize that resentment and dread are far bigger disadvantages:
I had a really unpleasant nine hours on these trails that ended in DNFing with hypothermia, and every race I've done here since then has been kinda cursed (aka I am totally getting into my head about it)
One of my biggest character flaws is that I get bored doing the same thing over and over, and that boredom turns into a LOT of resentment at actually doing it. Which was my dominant emotion during this race. It is not an emotion I want to associate with trails I am otherwise madly in love with.
Well, I’ve figured out a lot of things, but the one thing I have not changed is signing up for races on the same trails I train on, if I’m going to keep doing this. (It’s a compulsion. I can’t explain it.) The second thing is incorporating heat training. Simple enough.
My notes, scattered across multiple docs and spreadsheets, have also not been cutting it. I wanted a way to annotate my data on a timeline and map view. I couldn’t find a tool to do this, so I made one instead. There are a few features I'd love to implement. Strava import is broken, for one thing. Right now it's just a tool for myself and my running coach. So, you know, I can fondly look back on the exact point at which I paused to empty the comments of my stomach on the side of the trail, and so on.
Try it out for yourself. (Warnings: This is really, truly just a janky vibe coded prototype. Heavy emphasis on “prototype”. I haven’t started tinkering around with visual design. I have put zero effort into encrypting user info. It's honestly possible it might break with more than one user. Or more than one gpx file.)

Lovable turned out to be a decent way to get this up and running with minimal fuss. It was fairly simple to get something functional and okay-looking up and running. After brainstorming a minimal set of product requirements, prompting and debugging it was not unlike writing user stories and bug tickets in a software project tracking system. (This is not a sponsored post.)
And I guess it’s true that the way you do one thing is the way you do everything, because my design thinking hat was firmly glued to my head at this point, and I realized that obviously there needs to be a customer emotional journey map. Really, name a more natural pairing for a recitation of pain points than an ultra.

I have some plans for additional journey mapping functionality. I don’t think I’ll build it out too much since there are already design-specific tools that do this, but I think it’s going to be a helpful way for me to figure out what I can tweak so future experiences will be better. Also, there are some fun things you can include in a trail running journey map that (I hope) don’t apply to most customer journey maps, like puking and crying.
I’m still training and volunteering out here. I really do love these trails more than I can express in words. But the next time I pin on a bib, it’ll be somewhere else.

By the way, the friend I started running with ended up with a massive 50 mile PR while training for a 100 miler. Amy is a badass who wrote about that experience on her own blog. If you're wondering what went through the mind of someone who did successfully run all 50 miles, you should read it.
Add a comment: