I couldn't figure out what to do at the gym
Not the motivation part. I was there, ready to go. But standing in front of a squat rack trying to program a workout from scratch? Every single day? I had writer's block for workouts
So I did what any engineer would do. I opened ChatGPT and said "build me a workout generator"
That little annoyance is the reason everything else in this story exists. I just didn't know it yet
The First Version Was Barely a Thing
October 2025. Vite + React. A movement library, a randomizer, some CSS. It would spit out a CrossFit WOD so I didn't have to think. Deployed to GitHub Pages. Done
Except it wasn't done. It was never done
I showed it to a couple friends
"Only CrossFit?"
That one question changed everything. Because the answer was obvious - the template system I'd built wasn't CrossFit-specific. It was a workout structure. AMRAP, EMOM, Tabata, For Time - those are just formats. Swap the movements and you've got a gym workout. Or a home workout. Or yoga. Or calisthenics
Same engine. New templates and movements for each type. By November I had seven workout types and the thing had a name - WodSpark
The Workouts Were Meh Though
Generating random workouts is easy. Generating good ones is a completely different problem
I'd get a workout and it would be all pull. Deadlifts into pull-ups into rows. My lats were filing a restraining order. So I built a push/pull balancing algorithm - track what the workout is loading and distribute it
Then grip. Two consecutive grip-heavy movements in the same workout and your forearms are toast by round three. Nobody programs like that in a real gym. So the generator shouldn't either
These weren't features on a roadmap. They were problems I found by actually using the thing every morning. The app got smarter because I kept showing up
Then It Took Over My Life
The timer came next. Once you're using your own app for real workouts, you need a real timer. Then the Morning Storm - a daily challenge with a global leaderboard. Then workout history. Then shareable workout cards. Then a dual-skin CSS system because desktop and mobile needed completely different vibes
By December I was 82 commits deep in a single month. Here are some actual commit messages:
"Millions of updates."
That was the whole message. What updates? Who knows. Not me, apparently
"Zustand updates. Woof!"
I was migrating state management mid-feature while building a timer, redesigning the desktop layout, and fixing a GPU crash. At the same time
"Before social flare. Major UI updates. It's so pretty :)"
"Finally fixed the horrible regenerate issue."
"Massive desktop redesign." "Massive desktop redesign."
Two commits, same message, same day. Two completely different redesigns
The app was legitimately good. The way I was building it? Absolute mess. And that mess wasn't a side detail. It turned out to be the whole point
Swipe Animations While Grocery Shopping
One of my favorite moments though - I wanted chained swipe animations. Workout cards that cascade into each other for a single visual wow. The timing had to be perfect or the whole thing felt janky
Getting that right manually would have been a nightmare. But Claude Code with Chrome MCP could see the browser. So I added a few timing logs to the terminal, told Claude what I wanted, and left to go grocery shopping
Came back with groceries. The animations were done. Flawless timing, every transition chained exactly right
That's when I realized the tools had leveled up. But my process hadn't. And the gap between those two things was about to get painful
Vibe Coding Was Killing Me
Here's the thing nobody tells you about AI-assisted development. It's not the speed that gets you. It's that you can't trust what comes back
Vibe coding is throwing things over the wall to see what sticks. You ask for something, you get something back, and it's almost never what you asked for. So you fix it. Then you fix the fix. Then you fix what the fix broke
I was building a page and it was endless. The brown color came back, so I said swap it to the grey glass. Then I said it again. Same message, over and over.
Fix this. Fix that. Fix this again. Every single thing was after the fact. I wasn't building. I was babysitting
And then it hit me. I shouldn't be fixing all of this. If I planned everything up front - if I prepared for all the stuff I keep having to fix afterward - I'd never have to fix it in the first place
Something had to change
The Power Upgrade
So I tried it. Instead of throwing a prompt over the wall and cleaning up the mess, I spent 30 minutes planning an entire feature in detail. Every chunk. Every file. Every acceptance criteria. All the stuff I'd normally catch after the fact, decided up front
Then I let the AI build it
And it came back right. The first time
That's the whole insight. Stop babysitting. Start planning. The back-and-forth disappeared because I'd already answered the questions before the AI ever had to guess
I built a system around it - one that breaks features into stories, stories into chunks, and chunks into implementation specs detailed enough that an AI agent can build them autonomously. Validation gates catch quality issues. Checkpoints track every change. Tests gate every build
The first time it touched WodSpark was February 18th. And the git history changed overnight
Before:
"Millions of updates." "Fixed mobile center load." "Lots of bug fixes!" "CSS updates"
After:
"checkpoint: before chunk 1 - fix-desktop-shuffle-overflow" "checkpoint: before chunk 3 - premium-history-cards" "complete: enhance-history-empty-state (story 5/8)"
Every change tracked. Every feature planned. Every commit meaningful
The Numbers
| Period | Commits | Vibe |
|---|---|---|
| Oct 2025 | 38 | "first commit" energy |
| Nov 2025 | 68 | feature avalanche |
| Dec 2025 | 82 | beautiful chaos |
| Jan 2026 | 81 | great features, messy process |
| Feb 2026 | 44 | structured, intentional, shipped |
February had fewer commits than any other month. And it shipped more. Desktop polish cycle - 9 stories, all completed. Shareable workout cards. Premium history cards. App Store and Google Play submission. Privacy policy. Bug fixes with actual test coverage
44 commits that did more than the 82 in December. That's the part that still gets me
WodSpark Is on the App Store Now
The app that started because I couldn't figure out what to do at the gym is on the App Store. 7 workout types. 75+ formats. Push/pull balancing. Grip-aware generation. A daily challenge with a global leaderboard. A timer with haptic feedback. Offline support. Push notifications
All 7 native features passed device testing on the first try
From One Project to All of Them
Here's what's wild though
When I was building WodSpark, that was it. One project. All my attention. And I still couldn't keep it organized. That's the whole tell. The mess wasn't because I was spread thin. The mess was the process
The system changed the math completely. Plan a feature in detail, let agents build it, use that time to plan the next one. Everything staggered, everything spinning
Since building craft I've shipped a personal site with scroll animations and a blog. A knowledge mining system with RAG pipelines and creator personas. An expert council that routes technical questions across domains. A memorial chatbot built from 27,263 of my mom's text messages. Even the way I train now runs through the same shift. And the plugin itself keeps getting better with every project that runs through it
All of it managed through the system that started as "please stop me from committing 'Millions of updates'"
Not because I found more hours. Because the hours I had started compounding
I look at that git log now and the whole story is right there. "Millions of updates" was me building blind. The clean commits after are just what it looked like once I stopped



