·1 min read

Vibe coding is real

Andrej Karpathy posted about "vibe coding" last week, describing it as fully giving in to the vibes, letting AI write the code, and not really looking at it.

He's right that it works. I do it daily. But the framing misses something.

The vibes only land after the thinking is done. When I tell Claude "make the hover state feel premium, not playful," it produces good results because I've already specified what the component does and what constraints it operates under. The vibe is the last mile.

Without that groundwork, "make it feel premium" produces generic output. The AI has no anchor. It pattern-matches on the average of everything it's seen, which is, by definition, mediocre.

My workflow looks more like: spec first, vibe last. I write a detailed spec covering behavior and edge cases, then describe the aesthetic in loose terms. "Snappy, not bouncy." "Quiet until you need it." These constraints do more work than specific CSS values. ease-out 200ms is a guess. "Should feel like it settles into place" lets the AI pick the right combination.

Vibe coding without specs is prototyping. Vibe coding with specs is shipping.