Strongly agree, well said. The one-shot is sexy purely because that first demo is so impressive. Going from zero to working app in minutes.

Like you said, working and maintainable are very different things. One-shot hits a wall the moment you need to do anything non-trivial after the initial generation. Bug fixing is extremely hard, even with AI assistance. Same with feature additions. It's pretty much black box at this point on. AI that wrote it now goes in loops wasting tokens without being able to can't reliably fix it either, because it has no memory of the architectural decisions it made (or didn't make, for that matter) the first time round.

What I realized is that the failure here is the absence of a shared mental model between you and the code.

I'm a product designer with average front-end know-how, and a solid understanding on HTML/CSS and how the web works, coming from the era of hand-coding html/css files. After vibe-coding a few products early this year, purely to learn how AI works, how to design AI interaction patterns etc., I built something called Intent Model. (largely inspired by SDD / BDD.

Intent model is a structured, typed artifact (basically a JSON contract) that captures actors, entities, journeys, rules, and constraints before I write (or make the AI write) any code. It sits upstream of everything. Think of it like a condensed, strict distillation of your PRD / BRD / requiremnt doc.

When you hand the AI a well-defined intent file instead of a vague brief, this one-shot becomes structured and bound by rules. Now you're giving it an architecture and to conform to. You define (or make the AI define) the precise variable names, their types, lifecycle, user roles, responsibilities, business rules and constraints in the file. Every generated artifact can trace back to a decision you made deliberately, reviewd and signed-off.

In the design world, we already do this by using design tokens. We can tell the AI that it needs to strictly use design tokens and not use stray properties like a hex color value or raw values not defined in the token contract. This is easily auditable by AI as well.

The result is you can still move absurdly fast and still maintain the understanding, which the one-shot approach throws away. This way, you know why every piece exists because you defined the intent before the AI implementated it.

AI is the accelerant, and you're the architect. The intent is the blueprint you generate to guide/harness the AI.

The best part is, once you have an intent contract at the heart of your project, it becomes impossible to break things too, logically or experience-wise.