The kind of vibe coding I want to defend.
I asked Claude to build me a download server. That sentence makes
some developers wince. They picture a junior dev pasting unreviewed
AI output into production and calling it shipped. That is not what
vibe coding looks like — at least not the version I'd defend.
Most people think vibe coding means typing a sentence into ChatGPT
and watching files appear. That misses where the actual work is.
ChatGPT, in my workflow, is for discussion — sounding out
an idea, arguing about scope, talking through trade-offs before any
code touches disk. The development happens elsewhere: Claude
Code with a stack of Skills, plus Get Shit Done
for the disciplined slow parts — milestones, plans, atomic commits,
code review as its own pass.
Even there, the prompt is not "hey Claude, write me XYZ."
It's a conversation. I bring the what and the why.
I argue with Get Shit Done about which milestone holds which scope,
and what's allowed to bleed into the next one. I tell the AI how I,
as a human, picture the thing — the texture, the constraints, the
parts I won't compromise on. The AI is the developer in that pairing.
It can also test the finished product live.
What stays with the human is control. Reading the
diff. Catching the silent failures. Knowing when to say "no, that
abstraction is wrong, throw it away." Making sure no API key ends
up in a public repo, no migration drops a column without a backup,
no --force push lands on main at midnight. The AI types
faster than me. It does not assume responsibility.
Vibe coding is cool. It also comes with responsibility — especially
when the thing you build will run on someone else's stack, ship to
third parties, hold their files. Jenni was an exercise in exactly that:
I read every line of the upload pipeline, hardened the bits that
mattered (Argon2id, zip-slip, zip-bomb caps, ClamAV, signed cookies,
CSP headers, rate-limited login, non-root container), ran her against
my own production for months before this site went up. The code is
fast. The trust is slow.
That's the vibe coding I want to defend.