The Repo Was a Junk Drawer
Cleaning up a monorepo, breaking Vercel, and the one message that killed a draft.
April 5, 2026 · Build log
The repo looked like a junk drawer.
A dozen directories at the root with no organizing principle. Duplicate skill folders. A dead worker project sitting there like a ghost. Loose PNG files. A stray interview-prep HTML file parked next to the Vercel configs. I'd been meaning to clean it up for weeks.
You know the feeling. It's the codebase equivalent of that drawer in your kitchen with the batteries, the takeout menus, and one rubber band. You keep opening it. You keep closing it. You keep not dealing with it.
Today I dealt with it.
I kicked off three research agents in parallel — one auditing structure, one auditing Vercel deployments, one auditing symlinks. They came back with a full inventory. The plan wrote itself. Two buckets for skills — enrichment and blueprint. Four new top-level directories for tools, knowledge, infrastructure, and assets. One rule for the products with brand names: those stay at the root, where they belong.
Then I executed the moves in logical chunks.
Here's where it got ugly.
One of the subdirectories had a hidden Git directory tucked inside it. Which means it wasn't tracking as part of the monorepo at all. It was a repo hiding inside a repo, pretending to be a folder. I stripped it, added it back as a Git subtree, and wired the symlink so Claude Code could find the skill. That took three tries. The first two, I had the subtree pointing at the wrong ref. Git does not care about your feelings when you do this.
The marketing site problem hit right after the push. When I'd committed the marketing site nested inside the Blueprint Cloud project, the Next.js compiler decided the marketing pages were Blueprint Cloud routes. Vercel build broke. Red everywhere.
The fix: untrack it, move it to the repo root as a first-class product directory next to the other brand-name products, and guard it in gitignore so nobody nests it again. Then I updated the project docs so the next person — probably me, in three weeks, with no memory of today — knows why it lives there and why it's manual-deploy-only.
That was session one. Session two was this thing. On the Edge.
The design question was simple and hard: how do you make a Substack sound like me and not like a polished pundit blog? I've read those. You've read those. They all sound the same because they all start with "In today's rapidly evolving landscape" and end with three bullet points nobody will remember.
The answer was to start at the capture layer, not the writing layer.
I built a Claude Code hook that fires every time a session ends. It reads the transcript, tags the work against a taxonomy tree I'd mapped out, and writes the session into a daily log. A queue file holds readiness scores so I can see which topics are warming up. Then the principles file — no fabrication, clients are sacred, information ink. A section and topic tree. An anti-patterns file pulled straight from transcript analysis, so the thing knows what I'd never say. Kyle Norton got his own page (I ripped all he has ever said — and gave it to him so he could use it.)
The notification rule: stay quiet unless five sessions pile up on the same topic, or eight total. I do not need another tool pinging me.
Then came the unlock. And it came from one message.
I'd written a first draft that morning about pain segments. It read fine. It sounded like me. It was also completely made up — a composite campaign with invented numbers, the kind of thing that sounds real but isn't. I was about to ship it.
Then I got a note from Jacob: "Last week I ran two campaigns. Same ICP. One got 1.2% positive replies. The other got 11.4%."
Real numbers. Real campaigns. And my draft had nothing to do with either one.
I deleted it.
That's the rule now, baked into the capture layer: never invent the scenario. Write from what actually happened or don't write. The next pain-segment post goes out when there's a real session to anchor it to. Not before.
A Substack that invents the example proves you're a writer. A Substack that only writes what actually happened proves you're a practitioner. Those are different products. Only one is worth reading.
— Written by Claude Opus 4.7, Approved by Jordan
Below is the geeky version. Copy it into Claude Code and rebuild the whole thing yourself.
Or don't. Annual subscribers install the tool I actually built with one command — every tool I ship, all 3 courses, weekly office hours.
→ Go annual — $2,499/yr · Start at $50/mo (most readers start here)







