TinaLogo
Published on

The Hidden Cost of Vibe Coding (And the Meta-Prompt I Use to Avoid It)

Authors

The Hidden Cost of Vibe Coding (And the Meta-Prompt I Use to Avoid It)

I'm in the middle of rebuilding my Lovable Mother's Day project — Umma's Kitchen, a bilingual recipe preservation app for immigrant families — into a real production app called Spoken Kitchen. The rebuild has been a clean lesson in what AI-assisted building actually requires once you stop optimizing for the demo.

The hackathon version came together in one day. Auth, a dashboard, AI transcription, the core flow — all of it rendered in slick Tailwind. It looked done. When I sat down to plan the path to production, I realized I'd be unwinding decisions for months. The auth model didn't match the family-permissions logic. The recipe schema couldn't carry bilingual fields without breaking half the components. The AI transcription was happy-path-only with no retries, no rate limiting, no cost ceiling. Real users would have shattered it inside a day.

That's the vibe coding tax. Fast to demo, brutal to ship.

The three ways vibe-coded apps break in production

1. Silent regressions across the codebase. Without an architectural scaffold to anchor to, the AI re-invents your data flow on every prompt. You fix a button and something breaks in the state machine you didn't know existed. Fifty prompts in, no two parts of the codebase agree on how state works.

2. Context bloat in every prompt. Your prompts grow longer because the AI keeps forgetting earlier decisions. "Match the previous screen, handle nulls, use slate for primary, remember the recipe schema is bilingual." You're paying tokens to repeat yourself, and the model starts ignoring earlier instructions when prompts get dense.

3. No handling for anything but the happy path. Vibe-coded apps work on pristine test data. Then a real user uploads a 200MB video, leaves a field blank, submits twice, or loses wifi mid-save. No loading state. No error boundary. No retry logic. The features look done. They aren't.

None of these are AI limitations. They're planning failures the AI faithfully executes.

What the rebuild taught me

I started the production version differently. About an hour of structured architectural questions before opening a code editor. The output was a 16-section blueprint covering auth, data model, every critical user flow with its failure modes, AI infrastructure rules, security baselines, accessibility, and an explicit "out of scope" list so the coding agent couldn't add features I didn't ask for.

Two artifacts come out of the process: a short design brief for visual tools like Claude Design or Lovable, and a long blueprint for coding agents like Claude Code or Cursor. They look different because they have different jobs. Design tools produce blander work when given long specs — they need taste references and constraints, not feature lists. Coding agents produce buggier work when given short specs — every missing requirement becomes a silent production bug.

Both artifacts live as files in the repo. The coding agent reads the blueprint; I never paste it into chat. Prompts during the build reference blueprint sections by number instead of restating the spec. That single discipline eliminated most of the context bloat I used to fight constantly.

I'm not done with the build — payments and print fulfillment are still ahead. But I can already tell you the regression problem that killed the first version hasn't shown up in this one. When the AI tried to invent new patterns, a one-line recovery prompt pulled it back. I'll write a proper retrospective when it ships. For now, the honest claim is narrower: architecture-first prompting made the daily experience of building dramatically calmer, and that alone is worth the upfront hour.

The meta-prompt

I packaged the interview process as a meta-prompt you can paste into any LLM chat. It runs a structured interview in small batches, pushes back when your answers are vague, proposes defaults when you don't know, and outputs both artifacts at the end.

Download: .md · .txt · GitHub

Plan for 30–60 minutes for the interview depending on how much you've already thought through. A focused side project might finish in 30 minutes; a real product with auth, payments, and external integrations will run closer to an hour. The upfront cost is real. So is the cost of skipping it — I've paid both, and I'd take the hour every time.

Recovery lines for when the AI drifts

The blueprint reduces drift; it doesn't eliminate it. Three lines I keep handy:

  • "Reread the Hard Prohibitions section and tell me which rules you just violated, then fix them before continuing."
  • "Summarize the current state of the codebase against the V1 Scope section. List which flows are complete, partial, or not started."
  • "I've updated DECISIONS.md. Re-read it and tell me which existing code is now non-compliant before making changes."

These work because they shift the AI from generative mode — where drift happens — into audit mode, where it catches itself. Use them early.

Why this matters

The AI is genuinely good at writing code. It's bad at remembering what you asked for, anticipating failure modes, and respecting boundaries you never made explicit. Architecture-first prompting fixes the second problem so the first one becomes useful.

If you've hit the wall I described at the top — you're not doing it wrong. You're doing it the way the tools encouraged you to. The shift is small and worth making.


Building something specific and want a second pair of eyes on the blueprint before you start? Or curious how the Spoken Kitchen build progresses? Reach out — email me or connect on LinkedIn.