← Back to Archive
[PIVOT MEMO]June 24, 2026

The 'Five Time Bombs' Of Vibe Coding: A Polite Rebuttal To A Viral Facebook Post.

Reading Time: 13 minAnger:4/5

A post is currently doing the rounds in which a self-described software engineer — nine full-stack apps to his name, eighty audits in the bank, all numbers we are invited to take on trust — warns the vibe-coding masses that their applications are riddled with five hidden 'time bombs.' The post has the unmistakable cadence of social media engagement bait: a confident opening boast, a Ferrari metaphor, five neatly numbered horrors, and a closing nudge toward two audit tools that have presumably paid for the placement. It is the LinkedIn-influencer voice applied to software architecture, and it works, because most of the people reading it are anxious enough about their own code to believe anyone who sounds certain.

The trouble is that, while around seventy per cent of the advice is broadly sensible, the remaining thirty per cent is either oversimplified to the point of being misleading, technically inaccurate, or — most damning — silent on the risks that actually take Lovable, Replit, Cursor and Claude Code projects down in production. Let us go through the five points in order, give credit where credit is due, and then talk about the time bombs that did not make it into the original list because they are not as catchy.

The framing problem: 'AI-built' is not a category of bug

Before any of the five, there is a category error to dispatch. The post treats AI-assisted applications as a fundamentally new species of software with their own special diseases. They are not. Every problem on the list pre-dates Lovable, Cursor, Replit and Claude by a decade or more. Ephemeral filesystems, leaked API keys, context loss in large codebases, missing error boundaries, and patchy compliance posture are hosting, security, engineering, UX and legal problems respectively. They are not 'vibe coding' problems. An experienced developer using AI will avoid them. An inexperienced developer will hit every one of them whether AI is involved or not. Blaming the tool gives the operator a free pass, which is comforting, but it does not fix anything.

1. The 'Vanishing Database' — half right, sold as a universal law

The honest part of this point is the warning that serverless platforms have ephemeral filesystems and that storing user data in a file inside the deployment is, in most cloud setups, a fast way to lose it. That much is true and worth saying. The dishonest part is the claim that 'most AI tools default to SQLite.' In 2026 this is simply not the case. Lovable defaults to a hosted Postgres backend wired up with row-level security; that integration is one of the platform's most-used features and the chat will nag you toward it on day one. Replit pushes users toward managed cloud storage for anything resembling a real application. Cursor and Claude Code generate against whatever stack you tell them to, and the stacks people pick from in 2026 are overwhelmingly Postgres, Neon, Supabase, PlanetScale, Firebase and Mongo Atlas. SQLite is, if anything, becoming less common in AI-generated work, not more.

It is also worth saying, gently, that SQLite is not inherently bad. It is an excellent database. It runs on the device you are reading this on. It powers desktop apps, mobile apps, internal tools, edge deployments and a respectable tail of small SaaS products that quietly make money without anyone writing a Facebook post about them. The real question is not 'SQLite or not.' It is whether your storage choice matches your hosting model. A SQLite file on a persistent VPS is fine. The same file on a stateless serverless function is a coin toss with your users' data. The problem is the mismatch, not the database engine.

2. The 'Open Wallet' — the strongest point, slightly misframed

This is the bit the original author gets most nearly right. Shipping an OpenAI key in client-side code is genuinely dangerous, you genuinely can have your account drained in an afternoon, and environment variables on the server are genuinely the answer. No quarrel there. The framing, though, is a touch off. The rule is not 'never paste keys in code.' Keys live in code all the time — in backend config, in CI/CD secrets, in deployment environments, in private repositories. The rule is 'never expose secrets to untrusted clients.' That is a subtly different sentence, and the difference matters because the first version frightens beginners away from perfectly normal practices like committing example config to a private repo.

The other thing missing from the original post is that the tools have moved on. Lovable detects a startling proportion of secret-exposure patterns and routes credentials through its managed secrets system by default. Cursor and Claude Code warn aggressively when you try to inline an API key. The image of an AI cheerfully pasting sk-… into a React component and shipping it to production was more accurate in 2023 than it is now. It still happens, but it happens to people who actively wave the warnings away.

3. 'Goldfish Memory' — real, but not an AI-specific disease

Context windows are finite, AI assistants do forget earlier architectural decisions, and large codebases do start producing regressions as the model loses track of how the pieces fit together. All true. What is also true is that this is not a new problem invented by AI. Human engineering teams produce exactly the same outcome at sufficient scale. There are enterprise systems in production right now, written by fifty people over a decade, where nobody in the building can draw the architecture diagram without lying. The difference is that AI surfaces the problem earlier and faster, which is arguably a feature, not a bug.

The proposed fix — 'keep a README' — is the right instinct but a thin answer. A README is not architecture. The actual countermeasures are Architecture Decision Records that explain why things are the way they are, a product requirements document the AI can be pointed at when it forgets, database documentation, automated tests that fail loudly when behaviour drifts, CI checks that catch regressions before they ship, and clear ownership of the boundaries between modules so the model only has to reason about one thing at a time. Do that and the goldfish gets a much longer memory. Don't, and no amount of prompt engineering will save you.

4. The 'White Screen Of Death' — wrong cause, real problem

A blank white screen in a modern single-page app is almost never caused by slow internet. Slow internet causes spinners, timeouts, and the slow apparition of content from the top down. Blank white screens are caused by JavaScript runtime exceptions, React hydration failures, missing environment variables at build time, broken imports, unhandled promise rejections, and the kind of crash that happens before the first render commits. The original post's diagnosis — 'the AI forgot the loading spinner' — describes a different bug entirely.

Which is a shame, because the underlying point is correct: AI assistants do code enthusiastically for the happy path and underweight the awkward bits. The awkward bits worth obsessing over are not loading indicators, though. They are input validation, retry logic with exponential backoff, idempotency for anything that touches money, offline behaviour, race conditions between dependent requests, and what happens when a third-party API quietly returns a 200 with a malformed body. Error boundaries and loading states are table stakes; the real engineering happens in the edge cases.

5. The 'Legal Landmine' — confidently wrong about the law

This is where the original post crosses from oversimplified into actively misleading, and it is the section that ought to make a working professional uncomfortable. Three problems in quick succession. First, most small SaaS operators are not Data Processors under GDPR. They are Data Controllers, because they decide why the data is collected and how it is used. A processor is somebody acting on a controller's behalf — your email provider, your analytics vendor, your hosting platform. Conflating the two is a basic GDPR mistake, and it changes which obligations apply to you.

Second, 'ask the AI to generate a privacy policy and stick it at /privacy' is dangerous advice presented as a quick fix. A privacy policy is a legal document that must accurately describe your specific data collection, your specific third-party processors, your specific cookie use, your specific analytics, your specific retention periods and your specific user-rights process. A generic AI-generated policy that does not match what your app actually does is not protection. It is a written admission that you have misled your users, which is worse than having no policy at all.

Third, and most importantly, a privacy policy is not GDPR compliance. It is one small piece of it. Real compliance also requires cookie consent done properly, terms of service that are coherent with the privacy policy, data processing agreements with your processors, a record of processing activities, a documented procedure for data deletion requests, a documented procedure for data export requests, and a plan for what happens when something goes wrong. Telling readers they can tick the GDPR box by pasting an AI-generated page at /privacy is the legal equivalent of fixing a leaking pipe with a screenshot of a wrench.

The time bombs the original post forgot

The richest irony is that the genuinely common failure modes in AI-generated applications — the ones an experienced reviewer actually sees, every week, in real Lovable and Replit projects — are not on the list. They are less viral, presumably because they require slightly more than three hundred words to explain. Here are five that should have been.

A. Row-level security that is not actually configured

This is the single most common serious bug in Lovable-style applications. The app connects to a hosted Postgres backend, RLS is enabled at the project level so the linter goes quiet, but the policies on the individual tables are missing, too permissive, or wrong. The result is that any authenticated user can, with one curl command and the publishable key that is sitting in the page source by design, read every other user's data. SQLite vanishing into a serverless restart is a manageable problem. Quietly leaking every customer record to anyone with a browser console is not.

B. Authentication and authorisation that look fine and aren't

Sign-up works. Sign-in works. The screenshots look great. Nobody has checked whether the admin route is gated server-side, whether role checks happen on the request or only in the rendered UI, whether the password reset flow can be triggered for someone else's email, or whether the JWT is being validated on the endpoints that mutate data. AI assistants are very good at producing auth flows that pass a casual test and very bad at producing auth flows that survive a hostile one. Catastrophic when it goes wrong, and it goes wrong quietly.

C. Cost explosions

An uncached call to a paid AI model inside a useEffect that fires on every render. A retry loop with no backoff that hammers an API until the quota burns through. A background job that, due to a missing idempotency key, runs the same expensive completion forty times before anyone notices. These are the bills that arrive in the morning and reframe the entire week. Most AI-built apps have no per-user rate limiting, no daily cost ceiling, no monitoring on token spend, and no alert when usage crosses a sane threshold. The 'open wallet' in 2026 is not usually a leaked key. It is an unbounded loop the operator wrote on purpose without realising what they were doing.

D. Nothing has ever been tested under load

The app works for one user, which is the developer, on a fast connection, with a warm cache. It has never been hit by a hundred concurrent sessions, let alone a thousand. The first time it is, when a tweet lands or a newsletter goes out, the database connection pool exhausts, the serverless cold starts queue, a synchronous AI call in the request path stretches to thirty seconds, and the whole thing falls over precisely at the moment success was supposed to be happening. This is a much more common cause of public embarrassment than a missing loading spinner.

E. No backups, no recovery plan, no idea what to do at 2am

Hosted databases are durable. They are not, however, immune to a misguided migration that drops the users table, a hostile insert that corrupts a critical row, or an accidental delete from the SQL editor at the end of a long evening. A backup that you have never restored is not a backup; it is a hope. Most AI-built apps have neither a tested restore procedure nor a documented runbook for the moments when things go wrong. That is a much sharper time bomb than the ones in the viral post, and it does not benefit from being audited by a tool with a clever name.

What to actually do, in plain English

  • Pick a storage architecture that matches your hosting model, and understand both — the database engine is not the variable, the mismatch is.
  • Put every secret in your platform's managed secrets store, and audit your client bundle for anything that looks like a key.
  • Treat row-level security as a feature you must verify on every table, not a checkbox you tick once at project setup.
  • Test auth and authorisation with a second account, in an incognito window, against every privileged action — including the ones nobody is supposed to find.
  • Put a hard daily ceiling on any paid API your app calls, and alert yourself when usage looks unusual; assume a loop will eventually escape into production.
  • Write Architecture Decision Records as you go, so the next prompt — yours or the model's — has somewhere to look up why the code is the way it is.
  • Run the app against a synthetic load test before launch day, not on launch day; cold serverless and exhausted connection pools are not surprises in 2026.
  • Take a backup, restore it into a scratch project, and verify the data is intact — a backup you have not tested is a story you are telling yourself.
  • Treat the privacy policy and terms as living documents tied to what the product actually does, and get a competent human to look at them before you take payments.

The bottom line

The viral post is not malicious and it is not entirely wrong. About seventy per cent of it is the kind of advice a sensible mentor would give a beginner, dressed up in the breathless 'here are the secrets nobody wants you to know' register that the platform rewards. The remaining thirty per cent ranges from technically imprecise to legally misleading, and the list omits the failure modes that actually take AI-built applications down once real users show up. Read it, by all means, but read it the way you would read any influencer thread: with the assumption that the engagement-optimised version of a problem is rarely the accurate one.

AI did not invent ephemeral filesystems, leaked keys, large-codebase drift, brittle frontends or sloppy compliance. It just made it easier for people who did not know about those problems to build software anyway. The bombs were always there. The Ferrari analogy is fine. The brakes have been on the dashboard the whole time.

If you build with Lovable, or Replit, or Cursor, or Claude Code, the things to worry about are mostly the things working developers have always worried about: where your data lives, who can read it, what happens when something fails, what it costs to run, and whether the legal posture matches the product. None of that is glamorous. None of it will go viral. All of it is what separates a side project from a business.

Found this useful? Argue with it.

More Heresies →

// The Dispatch

Get the truths
the agencies hide.

No spam. No "10 tips." No webinars. Just brutal pragmatism delivered when there is something worth saying. Unsubscribe in one click.

By subscribing you agree to receive opinions you did not ask for.