The hardest part of software is knowing what to build, and vibe coders keep getting that part right. They are usually the person living inside the problem, the contractor tired of chasing invoices or the clinic manager drowning in intake forms, and they build the thing that would have saved them. That is not a small advantage. Most funded startups spend a year and a research budget trying to find the insight a vibe coder already has for free.

What almost never comes with that insight is application engineering. A vibe coded app that works beautifully for ten people can fall apart at a thousand and quietly leak customer data long before anyone notices. The gap is not intelligence or effort. It is a body of unglamorous knowledge about how software behaves under load, under attack, and under change, and it is the part AI assistants are worst at supplying unprompted.

One note on scope before we go further. This is about applications, not websites. We are publishing it alongside our website work because the line between the two keeps moving. A growing share of the sites we build are fronting software of some kind, whether that is a booking system, a customer portal, an inventory lookup, a member area, or an internal tool the company actually runs on. Once a website integration reaches that far, everything below applies to it. For an ordinary marketing site, it does not, and you should not let anyone tell you otherwise.

With that said, this article covers what that missing layer actually contains: what breaks in a vibe coded app as users multiply, which security procedures never get prompted for, and what it really takes to support an application as it grows.

Why Vibe Coders Keep Finding the Right Problems

Because they are the customer. Product discovery is expensive precisely because most builders are guessing at somebody else’s workflow, and a person who has personally rescheduled forty appointments by text message does not have to guess.

Three things follow from that proximity. The feature set is ruthlessly practical, because the builder knows which steps actually hurt. The first version ships fast, because there is no committee translating a need into a specification. And the feedback loop is honest, since the builder uses the tool daily and notices friction immediately.

None of that should be dismissed. A working prototype with real users is proof of demand, which is the single hardest thing to manufacture. The question is never whether the idea was good. It is what has to happen next so a vibe coded app survives contact with growth.

What a Vibe Coded App Is Usually Missing

The visible product is a small fraction of a real application. What sits underneath it is access control, data modeling, error handling, background processing, monitoring, backups, deployment, and the ability to change any of it without breaking the rest. An AI assistant will write the visible part on request and will rarely volunteer the rest, because you did not ask.

That matters more than it sounds. Veracode’s GenAI Code Security Report, published July 30, 2025, tested over 100 large language models across Java, Python, C# and JavaScript and found that 45% of generated code samples failed security tests and introduced OWASP Top 10 vulnerabilities. Java failed 72% of the time, and the models failed to defend against cross-site scripting in 86% of relevant samples. Veracode also reported that performance stayed flat regardless of model size or sophistication, which means waiting for a better model is not a security strategy.

The code an assistant produces is generally correct in the sense that it runs. Whether it is safe, durable, and operable is a separate question that nobody in the loop is currently asking.

The Scaling Wall: What Breaks at 10, 100, 1,000 and a Million Users

Applications do not degrade smoothly. They work fine, then they fall over, and the failure almost always arrives at a predictable threshold. Knowing where those thresholds sit is most of what separates a prototype from a product.

Ten Users: Everything Works, and That Is the Problem

At this size no design flaw is visible. A page that runs sixty database queries returns instantly because the table has forty rows. A task that blocks the server for four seconds is invisible because nobody else is waiting. Ten happy users of a vibe coded app generate confidence that the architecture is sound, and that confidence is the actual risk.

One Hundred Users: The Database Starts Talking Back

The first real wall is almost always the database. Two patterns cause most of it. The first is a query loop, where the app fetches a list and then makes one more query per item, so a page that took ten queries now takes five hundred. The second is missing indexes, where the database has to read every row to answer a question that a proper index would answer instantly.

Right behind that is work being done inside the request. Sending an email, resizing an image, generating a report, or calling a third party API while the user waits ties up the connection and makes the whole app feel slow. Real applications hand that work to a background queue and return immediately. Almost no vibe coded app starts with a queue, because nothing prompted it to.

One Thousand Users: State, Sessions and Storage

Around here the single server stops being enough, and the app has to be able to run as more than one copy. That only works if nothing important lives on the server itself. This is where a vibe coded app usually needs its first real rewrite. Uploaded files have to move to object storage, sessions have to move to a shared store, and any process that assumes it is the only one running has to be rewritten.

Database connections become a limit of their own, since every copy of the app holds a pool of them and databases cap how many they will accept. Caching starts to matter, and so does knowing when to invalidate it. This is also the point where a schema change made carelessly can lock a table and take the whole product offline during business hours.

A Hundred Thousand and Beyond: Failure Becomes Normal

At real volume something is always broken somewhere, and the engineering shifts from preventing failure to containing it. Requests get rate limited so one abusive client cannot starve everyone else. Operations get made idempotent so a retried payment does not charge twice. Reads get split onto replicas. Traffic gets absorbed by a content delivery network so the origin only handles what genuinely needs it.

The mindset change is the hard part. A prototype assumes the happy path. A production system assumes the network will drop, the third party will time out, the queue will back up, and the job will run twice, and it is written so that each of those is survivable rather than catastrophic.

Security Procedures a Vibe Coded App Almost Never Includes

Security is where a vibe coded app moves from a personal risk to somebody else’s problem, because the data being exposed belongs to customers. The failures repeat with remarkable consistency.

Broken Access Control

This is number one on the OWASP Top 10:2025, ahead of security misconfiguration and supply chain failures, and it is the defining flaw of the average vibe coded app. Logging in is authentication. Deciding what that specific user is allowed to see is authorization, and it is the part that gets skipped. If changing a number in a URL shows you somebody else’s record, you have it.

It is not hypothetical. CVE-2025-48757, published May 29, 2025 and scored 9.3 critical, describes insufficient database row-level security in the Lovable app building platform, allowing remote unauthenticated attackers to read or write arbitrary database tables of generated sites. An entire class of generated applications shipped with the same hole because the underlying pattern was never enforced.

Secrets in the Wrong Place

API keys, database credentials and service tokens belong in server-side environment variables with scoped permissions, never in client-side code and never committed to a repository. This is one of the most common findings in a vibe coded app audit. Anything shipped to a browser is readable by anyone who opens the developer tools, and a key with full database access sitting in front-end JavaScript is not a vulnerability so much as an open door.

Cloud Storage Left Open

Misconfiguration sits second on the OWASP list, and unprotected cloud storage is its most common form. In July 2025 the Tea app exposed roughly 72,000 images including about 13,000 selfies and photo identification documents, because the storage bucket holding them sat behind no authentication at all and could be downloaded by anyone with the URL. Days later a separate accessible database revealed around 1.1 million private messages. Nothing was hacked in any dramatic sense. A setting was wrong, and that is exactly how a vibe coded app tends to fail.

Personal Data Handled Casually

If your vibe coded app collects names, email addresses, phone numbers, health details or anything similar, you have obligations before launch, not after. That means a privacy policy at the point of collection, consent that is not pre-checked, encryption in transit and at rest, no personal data written into logs or error reports, a real deletion mechanism, and collecting only what the product genuinely needs. Payment details deserve their own rule: hand them to a payment processor and never store them yourself.

Dependencies Nobody Is Watching

Software supply chain failures rank third on the 2025 OWASP list. Every package an assistant pulls in becomes your responsibility, including the packages those packages depend on. Somebody has to track advisories and apply updates, and on most vibe coded app projects nobody has that job.

How to Properly Support a Vibe Coded App as It Grows

Supporting an application is a discipline, not an event. It is the work that makes change safe, and it is most of what experienced engineers actually do. Here is what belongs in place before a vibe coded app carries anyone’s business but your own.

Version Control and Review

Every change tracked, every change reversible, and a second set of eyes on anything touching authentication, permissions or data. Version control is not bureaucracy. It is the ability to answer “what changed” at two in the morning when the app is down.

Separate Environments

Development, staging and production, with staging matching production closely enough to be worth trusting. Testing in production with live customer data is how a routine change becomes an incident.

Automated Tests and a Deploy Pipeline

Tests that cover the paths that actually earn money, run automatically before anything ships. The point is not perfect coverage. It is that the app tells you when a change broke something you forgot existed, which is the exact failure mode of a vibe coded app being changed at speed.

Reversible Database Migrations

Schema changes need to be scripted, applied in order, and reversible. Code can be rolled back in seconds. A destructive migration cannot, which is why database changes get more care than anything else in the stack.

Backups You Have Actually Restored

An untested backup is a guess. Restore it into a scratch environment on a schedule and time how long it takes, because the number you need in a crisis is not whether a backup exists but how long recovery takes and how much data you lose.

Monitoring That Tells You First

Google’s Site Reliability Engineering practice names four golden signals of monitoring: latency, traffic, errors and saturation. Watch those four, add error tracking that captures exceptions with enough context to debug them, and set alerts that reach a human. The goal is simple and rarely met: you should know the vibe coded app is broken before a customer tells you.

Logging Without Leaking

Logs need to be detailed enough to diagnose a problem and clean enough that they are not a second copy of your customer database. Personal data, tokens and passwords do not belong in them, and log retention needs a deliberate limit.

A Written Incident Plan

Who gets called, how to roll back, how to reach customers, and what triggers a breach notification. Write it while nothing is wrong, because judgment during an outage is worse than judgment on a Tuesday afternoon. Most incidents on a vibe coded app are made worse by improvising this in the moment.

Load Testing Before the Spike

Simulate ten times the traffic you have and watch what gives out first. The answer is almost never what you expected, and finding it on a quiet afternoon is infinitely better than finding it the day a post takes off.

Documentation and a Second Person

If one person is the only one who understands how the vibe coded app runs, the app has a single point of failure that no amount of infrastructure fixes. Write down how it deploys, where things live, and what to do when the obvious thing does not work.

If You Built Something That Works, Do Not Throw It Away

The instinct to scrap a vibe coded app and rebuild from nothing is usually wrong. The prototype proved something no rewrite can prove, which is that people want it. What it needs is hardening, and hardening has an order.

Hardening a vibe coded app starts with access control, because exposed data is the failure you cannot take back. Move secrets out of anything a browser can read. Lock down storage buckets and check what is publicly reachable. Get backups running and restore one. Add monitoring so you learn about problems first. Only then start optimizing for growth, because a fast app that leaks records is worse than a slow one that does not.

The right moment to bring in an engineer is not when the app breaks. It is when the app starts holding other people’s information or taking their payments, whichever comes first. That is the line where the consequences stop being yours alone. If you are weighing that decision for a customer-facing site rather than an application, our post on vibe coding website risks covers the same tradeoff, and the same discipline shows up in ordinary web work in our guide to why sites get slow and how to fix it.

Frequently Asked Questions About Scaling a Vibe Coded App

Can a vibe coded app handle real users?

Often yes, up to a point. Small user counts hide most design flaws, so a vibe coded app can feel solid for months. Trouble tends to arrive at the first traffic spike, when database queries, blocking work inside requests, and single server assumptions all fail at once.

Is AI-generated code secure?

Not reliably. Veracode tested over 100 models and found 45% of generated samples introduced OWASP Top 10 vulnerabilities, with performance flat across model sizes. Assistants write code that runs; whether it is safe is a separate question that has to be checked deliberately.

What is the most common security flaw in these apps?

Broken access control, which also ranks first on the OWASP Top 10:2025. The app checks that you are logged in but not whether you are allowed to see the specific record you requested. Changing an identifier in a URL to view another customer’s data is the classic symptom.

When should I hire an actual engineer?

When the app stores other people’s personal information, processes payments, or has users who would be genuinely harmed by an outage. Before that it is a prototype and the risk is yours. After that the risk belongs to your customers, and it needs someone who has carried that responsibility before.

Do I have to rebuild my app from scratch?

Usually not. Most working prototypes can be hardened in place by fixing access control, moving secrets server-side, securing storage, adding backups and monitoring, then addressing performance. A full rewrite throws away the validated product along with the flaws.

The Bottom Line

A vibe coded app is a real accomplishment and an incomplete one. The idea, which is the part most teams get wrong, is usually right, because the builder lived the problem. What is missing is the engineering layer that keeps software correct under load, under attack, and under change, and that layer is learned rather than prompted. Treat the prototype as proof and the hardening as the actual build, in that order, and you keep the advantage without handing your customers the risk.

Turn a Working Prototype Into a Product

If your idea works and you are not sure what it would take to hold up in front of real customers, that assessment is the kind of work our website and application design services are built for. To have someone look at what you have already built before it carries anyone’s data, get in touch with Demur Design. And to get our guides on building and running software as they publish, subscribe to the Demur Design newsletter in the footer below at demurdesign.com.

This article is researched and drafted with AI, then reviewed, fact-checked, and published by Demur Design.

Sources

Leave a Reply