AI

The Harsh Truth About Vibe Coding: Lessons From Building My Own Workflows

I built 80% of an app in three hours with Lovable, then spent 9 days fighting broken auth and database bugs. Here's what building my own n8n and Claude Code workflows taught me about architectural discipline.

Written by Sandeep Mundra
Published on Aug 01, 2026 • 6 min read min read
A developer at a late-night desk looking frustrated at tangled code on a laptop screen beside a database schema diagram
Hour three felt like victory. Day nine told a different story.
The short answer
Vibe coding gets an app to 80% working in hours, then stalls for days on prompt exhaustion, database state bugs, and broken authentication, because speed without architectural discipline just moves the hard work later instead of removing it.
  • The 80% trap: Tools like Lovable and Claude Code get a working demo fast, but the last 20% (auth, data integrity, edge cases) takes longer than a hand-built equivalent would have.
  • The real cause: Prompt exhaustion sets in once an AI agent's context can no longer hold your full schema and auth logic at once, and it starts silently contradicting earlier decisions.
  • The fix: Treating your schema and auth flow as fixed documents the AI must read before every prompt, not something it's allowed to reinvent each session.
  • The payoff: On my own n8n and Claude Code workflows, adding this discipline cut my average post-demo bug-fixing time from roughly 9 days down to 2 to 3.

Two months ago I built 80% of an internal ops dashboard in about three hours using Lovable, celebrated too early, and told my team it was basically done. I then spent the next 9 days fighting the other 20%: broken auth, a database that forgot which rows belonged to which user, and a prompt history so tangled that fixing one bug reliably broke two more. That gap between hour three and day nine is what this article is actually about, and it's the part almost nobody posting vibe-coding demo videos ever shows you.

I've spent 25 years running IndiaNIC, and I still build things myself most weekends, partly out of habit and partly because I don't trust a claim about these tools until I've broken it myself. Vibe coding, using tools like Lovable, Claude Code, and n8n to build software through natural-language prompts, is genuinely the fastest way I've ever gotten from idea to working prototype. It is also, without exaggeration, the fastest way I've seen a codebase quietly become unmaintainable.

A laptop screen showing a long AI coding prompt history beside a code editor panel on a cluttered desk
The moment the prompt history stops helping and starts fighting you.

The 80% Trap: Why Vibe-Coded Apps Stall Right Before the Finish Line

The first 80% of a vibe-coded app is genuinely fast because the AI is solving the easy version of your problem: one happy path, one user, one session, no edge cases. It looks finished because it demos beautifully. It is not finished, because finished means it survives a second real user, a bad network request, and a schema change six weeks from now.

The last 20% is where every corner the tool cut on your behalf comes due at once. Auth that worked because you were the only logged-in user. Database writes that worked because nobody ever hit save twice in a row. None of these show up in a three-hour build session. All of them show up in week two, usually on the same day, usually right before you wanted to ship.

Why "Just Keep Prompting" Is Bad Advice Once You Hit the Wall

What Is Prompt Exhaustion, and Why Does It Happen?

Prompt exhaustion is what happens when an AI coding agent's working context can no longer hold your full schema, auth logic, and prior architectural decisions at once, so it starts quietly re-solving problems it already solved differently earlier in the same project. The symptom isn't a crash. It's a fix that silently contradicts a decision from an hour ago.

The standard advice, "if it's stuck, just describe the bug and keep prompting," works fine for the first ten or so exchanges. Past that point, every new prompt is competing with an increasingly crowded context for the model's attention, and the fix that comes back is often locally correct and globally wrong: it solves the exact bug you described while quietly breaking an assumption three other parts of your app depend on.

I hit this hardest building an n8n workflow that synced customer records between two internal tools. Around the fifteenth iteration, I asked the agent to fix a timestamp bug, and it "fixed" it by changing how a record's owner field was set, because that field happened to be near the timestamp logic in the same node. Nothing in my prompt asked for that. Nothing in the output flagged it. I found it four days later when a colleague's dashboard started showing the wrong owner on records she hadn't touched, and by then I'd built two more workflow branches on top of the broken assumption.

ApproachPrompt-and-PrayArchitecture-First
Schema changesReinvented per session based on the latest promptFixed in a reference doc the agent must read first
Auth logicWorks for one test user, untested beyond thatTested with a second real account before moving on
Bug fixesApplied wherever the model finds nearby codeScoped explicitly to the one file or function at fault
My average post-demo fix timeRoughly 9 days2 to 3 days

The Architecture-First Framework That Actually Works

What Is Architectural Discipline in AI-Assisted Coding?

Architectural discipline in AI-assisted coding is the practice of writing down your schema, auth model, and core invariants as a fixed reference document, then requiring every prompt to work within it rather than letting the model re-derive that structure from scratch each session. It is the single change that moved my own workflows from "impressive demo" to "thing I'd trust in production."

In practice this means three habits. First, before the first prompt, write the data model yourself, even roughly, on paper or in a short doc, and paste it into every session rather than trusting the agent's memory of a decision from three days ago. Second, after any prompt that touches auth or the database, test it with a second account or a second concurrent request before writing the next prompt, not after the feature "looks done." Third, treat every fix as scoped: tell the agent exactly which file or function to touch, and review the diff before accepting anything outside that scope.

The expensive mistake: Accepting a schema migration an AI agent generated without reading the diff yourself. I've had a single accepted migration silently drop a foreign key constraint, and the bug it caused didn't surface for another 2 weeks.

Applying the Framework: What Changed When I Stopped Prompting Blind

The n8n sync workflow I mentioned earlier is the clearest before-and-after I have. After that four-day bug hunt, I rebuilt it with the schema written down first, and every subsequent prompt referenced that document by name instead of trusting the agent to remember the field structure. The rebuild took slightly longer up front, maybe an extra 90 minutes, but it has run in production for months since without a single owner-field bug.

Speed you get back on day one and lose on day nine was never speed. It was debt with a very short grace period.

The same discipline carried over to how I use Claude Code now. I keep a short architecture file at the root of every serious project, schema, auth flow, and the two or three invariants that must never break, and I paste it into context before any prompt that touches more than one file. It feels slower in the moment. It has, every single time, been faster by the following week.

Frequently asked questions

What is prompt exhaustion in AI-assisted coding?

Prompt exhaustion is when an AI coding agent's working context can no longer hold a project's full schema, authentication logic, and prior architectural decisions at once, causing it to silently re-solve or contradict earlier decisions rather than building consistently on top of them.

Why do vibe-coded apps get broken authentication?

Vibe-coded apps get broken authentication because AI builder tools typically test and validate only a single logged-in user during generation, so multi-user edge cases, like session conflicts or permission checks between two real accounts, go untested until real users hit them after launch.

How do you maintain architectural discipline when using AI coding tools?

You maintain architectural discipline by writing your schema and auth model down as a fixed reference document before prompting, feeding that document into every session instead of relying on the model's memory, and reviewing every AI-generated diff for changes outside the specific scope you asked for.

If you're building on Lovable, Claude Code, or n8n right now and everything still feels fast, that's worth enjoying honestly, but it's also worth writing your schema down today, before day nine arrives. That one document is the entire difference between a demo you're proud of and a product you can actually maintain.

Sandeep Mundra

About Sandeep Mundra