Preseason: Done
How I re-enforced my leaky AI coding stack before the European season begins and building-under-pressure
Sometime in the spring, Fantasy Fútbol started reporting its problems to somebody who had stopped working on it.
The app has machinery running in the background all day: pulling in fixtures, scoring matches, firing the notification that tells you your draft is about to start. When one of those jobs fails, it’s supposed to email me. It was not emailing me. Sitting in a file nobody had opened in months was a contractor’s address, typed in during the build, but that contractor’s role had long since wound down to zero. So for a long stretch, every time something went wrong in the background, an alert went out, landed in an inbox belonging to someone with no reason to open it, and died there.
Nothing dramatic came of it. Nothing was broken, exactly. But the part of the system that notices trouble and the part of my role that would do something about it had quietly come unhooked, and nothing in place would ever have told me.
Once I started looking, it turned out be more than one thing. It was a category.
I found two of my own notes giving different answers to the same question about the codebase. Neither was marked as uncertain. Both read with total confidence. The only way to find out which one was lying was to go look at the code myself (read: Claude Code read-only investigation), which rather defeats the purpose of writing things down!
I kept a couple Notion files whose entire job was to explain to my AI how Fantasy Futbol works so that Claude didn’t have to guess. When I finally checked it against reality, it was wrong in at least nine separate places. Not stylistically off. Just wrong. It described infrastructure I planned on implementing but didn’t have yet, and referenced commands that do not run. And the AI had been steering by it the whole time.
And then the one that actually got my attention. On three occasions, my AI told me it had finished work it had not finished. It wrote up the completion, described what it had done, and I believed it, because why wouldn’t I. That writeup went into my notes. Which means the fiction did not stay a fiction for very long. It became the record.
Here is the diagnosis, and it is not “AI is unreliable,” though sure, verify everything.
I was running two systems that could not see each other. Notion held everything written down: the runbooks, the policies, the bug database, the reasons things are the way they are. Claude Code did the actual work in the codebase. Those two things had no connection whatsoever. The connection was me, in my chair, copying text out of one window and pasting it into another.
Every seam is a place where things leak, and in this case I was the seam. On a good day I moved all the right context across. On a normal day I moved most of it. On a Tuesday night when I was tired and it was late, I moved only what I remembered or thought was essential.
I got the fix from a guy on YouTube named Nick Milo, who I had never heard of and now owe something to. His argument is about note-taking, but it applies excellently to AI coding and business building. The essence is: do not put the accumulated thinking of your life inside a product you do not own. Not because the product is bad. Because it is not yours, and someday you will want to take it somewhere else, and you will find you cannot.
I would even sharpen it slightly for my own case. My problem was never Notion, and it was never Claude. My problem was that everything my Claude project or Notion database actually knew, every decision, every bug, every reason a thing works the way it does, lived somewhere I could not point at in totality, could not hold, and could not hand to anything else.
So I spent a week and a half moving it all... The whole thing now lives in a folder of plain text files on my own iCloud Drive with a backup on my own laptop’s hard drive. It’s got current state, the queue of what is next to build, the bug database, the runbooks, the meeting history, the legal documents, a written description of the codebase checked line by line against the actual code. It’s boring, it’s ugly, and it is 100% mine.
Now that this foundation is in place, then, only then, can I plug the AI into it via Claude Cowork. Every working session now starts by reading that project folder to ground it in my single source of truth, and ends by writing updates back into it. This is the whole trick: AI is my tenant now. It temporarily rents my project context and updates my owned file ledger with all the progress it made every session. Previously, and unbeknownst to me, AI was my landlord.
To be fully forthright about the limits of this, note that I did not become independent of Claude. I use it constantly, for more of this business than I would have predicted two years ago when I started. Nothing about the last week and a half changed that.
What changed is that the dependency became swappable. If Codex gets better (it may already be), or cheaper (it already is), or if the open models keep improving to the point where I can run one on my own machine for free forever, the switching cost is now a folder of text files. Not a year of tacit knowledge that exists only in my head and in a chat history I do not own. A folder. I hand it over and the new AI reads it.
That is not independence. It is optionality. Optionality is worth less than independence, but considerably more than nothing, and it is the honest name for what I bought.
Now the part where this becomes a business decision rather than a hobby.
The season starts in a matter of weeks. The game is live on the App Store. Tomorrow night at eight o’clock I sit down and draft my first league of the season. For the first time, the people playing this thing are going to include people I am not related to.
This means the volume of everything is about to change. Feedback, feature requests, confused messages, things I did not anticipate. Right now that arrives as a trickle. In three weeks, I can only hope it arrives as a deluge.
You’re not supposed to tune up your engine during a roadtrip. Ideally you do it before you embark. Similarly, I can’t expect myself to recreate my entire coding workflow while a season is underway. So I handled it in July. I had roughly two weeks of quiet left and I spent a week and a half of it on filing cabinets instead of features (though I did still find time for features). The alternative was building new things on top of a written record that had already proven it would lie to me. Every feature I ship from here compounds on whatever foundation is underneath it, and I’m glad I found out now that the foundation was rotten rather than in October with a hundred people in the middle of a season.
The work done before the fixtures start counting is the last work I got to do calmly.
Speaking of which.
Fantasy Fútbol is live! You draft clubs, not players, across the Big 5 European leagues and everything they play in, and you set a starting five each month. Leagues run from three to nine managers, so a group chat is about the right size.
The draft happens live, all of you at once, and the fixtures start counting as soon as you’re done drafting. Please find a few friends or family members and get a league started. My line is always open for feedback.
Thank you for reading. Have a great week!
Luke,
Commissioner and Founder of Fantasy Fútbol


