Why Vibe-Coded Apps Break After the Demo (With Examples)

Why Vibe-Coded Apps Break After the Demo (With Examples)

A vibe-coded app fails when real users, real data and real volume arrive. Six failure points, UI/UX to scale, each with an example and the fix.

Siti NabilahSiti NabilahGeneral
23 Oct 26
17m
Part of the series:CRM Automation for Malaysian SMEs: The Complete 2026 Guide to Replacing Manual Processes

Vibe-coded apps rarely fail because the AI wrote bad code. They fail because the demo only ever tested the happy path: one user, clean data, a fast laptop and the person who built it. The moment staff, customers and real volume arrive, six things break, and they break in a predictable order.

This post is written for the business owners who sat through our UI/UX for business class and built their first app by prompting. Some of you are building a software product to sell. Others are building an internal tool for your own staff. The six failures are the same for both; only the person who pays for them changes. What follows is everything that happens after the screen looks right, with one concrete example for each failure.

Key Takeaway

A vibe-coded app is a prototype that looks finished. It usually breaks on six fronts: screens designed only for the happy path, logic and secrets in the wrong place, messy data with no backup, slowdowns once the records pile up, code nobody can safely change, and accounts nobody owns. Use the app as a living specification, then harden it before anyone depends on it.

What is a vibe-coded app, exactly?

A vibe-coded app is software built by describing what you want to an AI tool and accepting what it generates, without reading or designing the code yourself. The term was coined by Andrej Karpathy in early 2025 and it describes a real shift: a clinic owner in Shah Alam or a tuition centre in Ipoh can now build a working booking screen in an afternoon.

That is genuinely useful. The trap is that "working" in the builder's preview and "working" for 40 staff on 40 different phones are two different claims. The AI optimises for the first one, because the first one is all you showed it.

Here is the uncomfortable number. In Veracode's 2025 GenAI Code Security Report, AI models given a choice between a secure and an insecure way to write the same code picked the insecure one in 45% of tasks. The code ran. It just was not safe.

45%
of AI coding tasks produced code with a security flaw

Does this apply to internal tools, or only to software you sell?

Both. It does not matter whether you are starting a software company or building a tool only your own team will use. A vibe-coded app meets the same real users, the same real data and the same growing volume either way. The difference is who feels the failure first.

Building a software product to sellBuilding an internal tool for your company
Who finds the bugYour paying customerYour staff, in the middle of a working day
A data leak exposesYour customers' data and your reputationYour prices, margins, payroll and customer list
When it slows downCustomers churn and ask for refundsStaff quietly go back to the spreadsheet
When the builder leavesNobody can ship the next releaseNobody can fix the tool the team now depends on
The real costLost revenue and trustLost hours, wrong numbers and bad decisions

A common belief is that internal tools can skip the hardening because "it's only for us". The opposite is usually true. An internal tool touches your most sensitive numbers (cost, margin, salaries, every customer's phone number), and staff have no choice but to use it, so they will not complain loudly; they will work around it. A software product at least has customers who tell you when it breaks.

Shop staff using an internal tablet app at the counter, the kind of internal tool often built with vibe coding
Internal tools run at the counter, all day, by people who did not build them. Photo: Caden Norcott on Unsplash.

Why do vibe-coded apps fail? The six failure points

Each section below is one failure point, the example that shows it, and what fixes it. They are ordered the way they usually surface: UI/UX first, because staff complain on day one, and ownership last, because it only bites when someone leaves.

1. UI/UX: the app was designed for the demo, not the day

The problem. When you prompt "build me an attendance screen", the AI designs the screen you described: a list and a Save button. It does not design the states you did not mention. Empty states, loading states, error states, the phone with a keyboard covering half the screen, the double tap on a slow connection. Each screen is also generated separately, so the same action ends up called "Save", "Submit" and "Confirm" on three pages.

Example: the tuition centre attendance app

A tuition centre builds an attendance app on a laptop. It looks clean. On Monday the teachers open it on their phones in class: the Save button sits under the keyboard, there is no "saved" message, so teachers tap twice and every student is marked present two times. By Friday the parent report shows 200% attendance and the owner stops trusting the numbers.

Vibe-coded app UI/UX problem: attendance screen with the Save button hidden under the phone keyboard versus a fixed screen with a visible save button and saved confirmation
The same attendance screen built for the demo (left) and for a real school day (right).

The fix. Design the unhappy states before the happy one. For every screen, write down: what it shows with no data, while loading, when the save fails, and on a 6-inch phone. Then prompt for those states by name. One naming list for actions ("Save" means save, everywhere) removes half the confusion.

2. Implementation: the logic and the secrets live in the wrong place

The problem. AI builders like to put everything in the browser because it is fastest to show. That includes the price calculation, the "is this user allowed to see this?" check and sometimes the API key. Anything in the browser can be read and changed by anyone who opens the developer tools.

This is not theoretical. In 2025 a researcher scanned 1,645 apps from one popular AI app builder's showcase and found about 170 of them let anyone read or write the database with the public key, because row-level security was never switched on (Superblocks write-up of CVE-2025-48757). Names, emails and some API keys were exposed.

Example: the renovation quotation tool

A 6-person renovation firm in Petaling Jaya vibe-codes a quotation tool. The margin is calculated in the browser and every staff login can load every quote. A junior sales rep who leaves the company opens the network tab, copies the full price list with cost and margin per item, and takes it to a competitor. Nothing was hacked. The app simply handed it over.

Vibe coding security problem: prototype keeps margin calculation, permission check and API key in the browser, production keeps them on the server
In a prototype, the browser holds the margin, the permission check and the key. In production, the browser only asks.

The fix. Three rules. Prices, permissions and anything involving money are calculated on the server, never in the browser. Every table has access rules that are tested by logging in as the lowest-level user and trying to read someone else's data. No secret key ever appears in front-end code; ask the AI directly "show me every key in the client code" and remove them. Our post on how business websites get hacked covers the same trap on websites.

3. Data: no model, no rules, no backup

The problem. A prototype stores whatever you type. Phone numbers arrive as "012-345 6789", "+60123456789" and "0123456789". Names are entered twice. Deleting a customer deletes their invoices too. And nobody set up a backup, because the preview never needed one.

The most public example: in July 2025 SaaStr founder Jason Lemkin was nine days into a vibe-coding experiment when the AI agent ran destructive commands and wiped a database holding records on 1,206 executives, despite being told not to make changes (eWeek). The platform's CEO called it "unacceptable" and added separation between development and production data afterwards.

Example: the clinic reminder that never arrives

A dental clinic in Johor Bahru builds a booking app that sends WhatsApp reminders. A third of the reminders silently fail because receptionists typed phone numbers four different ways. No-shows go up, not down, and the clinic blames WhatsApp. The real cause is one missing rule: store every number in one international format at the moment it is typed.

Vibe-coded app data problem: the same phone number typed four different ways causes WhatsApp reminders to fail, fixed by saving one +60 format
One missing data rule. Four ways to type the same number, and only one of them reaches the patient.

The fix. Before the next prompt, write your data on one page: what a customer is, what a booking is, which fields are required, what format each field takes, and what happens when something is deleted (usually: archive, never erase). Turn on automatic daily backups and do one test restore. A backup you have never restored is a hope, not a backup.

Frequently Asked Questions

No. Vibe coding is the fastest way to turn an idea into something people can click, which makes it excellent for prototypes, internal experiments and showing a developer exactly what you want. It becomes risky only when the prototype is treated as finished software and customers or staff start depending on it.
Yes. Whether you are starting a software company or building a tool only your staff will use, the app meets the same real users, data and volume. Internal tools often hold the most sensitive numbers in the business, such as cost, margin, payroll and the full customer list, and staff tend to work around problems instead of reporting them, so failures stay hidden longer.
Yes, after it is hardened. That means server-side permissions and pricing, tested access rules, a defined data model, daily backups with a tested restore, a separate test environment, and company-owned accounts. Small internal tools can get there in days. Customer-facing apps that take payments or personal data need a proper review first.
Because it was built and tested with a handful of records. Most AI-generated screens load every row at once and filter in the browser. At 50 bookings that is instant; at 20,000 it takes seconds and eventually crashes on older phones. Pagination, search on the server and database indexes fix it.
The AI rewrites more code than the bug needs, and nothing checks what else depended on that code. Use version control so every change can be undone, ask for the smallest possible change, and keep a short list of things you test by hand after every change.
Not by default. Keep it as a living specification: it shows the flows, screens and fields your business really needs, which is the hardest part of any software brief. Whether to harden it or rebuild depends on how much money and personal data it touches and how many people rely on it.

4. Scale: fine at 50 records, frozen at 20,000

The problem. Scale for an SME is not millions of users. It is the same 15 staff using the app for a year. Prototype screens typically load every record and filter on the phone. They also assume one person acts at a time, so two people can book the same slot or approve the same claim.

Example: the property agency listing app

A property agency in Penang builds a listing app for its 30 agents. In month one it loads instantly. By month eight it holds 9,000 listings with photos, and the listing page downloads every one of them before showing anything. Agents on mobile data wait 20 seconds, give up, and go back to the shared spreadsheet. Two agents also book the same unit viewing at 3pm because nothing stops a double booking.

Vibe-coded app scaling problem: page load time grows from 0.3 seconds to over 20 seconds when every listing loads at once, versus loading 20 at a time
Illustrative load times. Loading everything works in month one and fails by month eight; loading 20 at a time stays flat.

The fix. Load 20 records at a time and search on the server. Compress photos at upload. Add a rule in the database (not just on the screen) that one slot can only be booked once. Then test with fake volume: generate 10,000 records before launch and use the app on a mid-range phone over mobile data.

5. Maintenance: nobody can change it safely

The problem. After a few weeks the app is thousands of lines that nobody has read. Each new prompt fixes the reported bug and quietly breaks two other screens, because the AI rewrites more than it needs to and nothing tests what changed. This is the prompt loop: you spend more time re-fixing old features than building new ones.

Example: the commission calculator

A car dealership's sales manager vibe-codes a commission calculator. A new incentive scheme needs one extra rule. The fix works, but it also changes how rounding is done on the old scheme, and three salesmen are underpaid by a few hundred ringgit each. It is found two months later, at payroll, by an angry salesman with a calculator.

The fix. Put the code in version control from day one so every change can be rolled back. Keep a test list of the five calculations that must never change, with known answers, and run it after every change. Ask the AI for the smallest possible change and to explain what else it touched.

6. Ownership: the app lives in someone's personal account

The problem. The hosting, database, domain and API keys are all signed up under one person's personal email and credit card. Usage-based services bill per message or per request with no limit set. Personal data of customers sits in a service nobody has checked against your PDPA obligations.

Example: the event registration app

A training company's marketing executive builds an event registration app on a free tier, under her own email. She resigns. Three months later the card on file expires, the database is paused, and 2,000 registrations for next month's seminar are unreachable. Nobody else has the password.

Employee leaving the office with a box of belongings, the moment a vibe-coded app on a personal account loses its owner
If the app lives in her personal account, it leaves with her. Photo: Vitaly Gariev on Unsplash.

The fix. Every account sits under a company email with at least two admins. Set spending limits on every usage-billed service. Write one page that lists where the app is hosted, where the data lives, who can access it and how to restore it.

How is a prototype different from production software?

A prototype proves the idea is worth building. Production software keeps working when you are not watching. The screens can look identical; everything underneath is different.

Prototype vs production iceberg: the vibe-coded screens are the tip, with six layers underneath that real users need
What you vibe-coded is the tip. These six layers are what real users stand on.
AreaVibe-coded prototypeProduction-ready app
ScreensHappy path on a laptopEmpty, loading, error and mobile states
PermissionsChecked on screenEnforced on the server and in the database
DataWhatever was typedDefined fields, formats and archive rules
BackupNoneDaily, with a tested restore
VolumeTested with 20 recordsTested with 10,000+ records on a phone
ChangesPrompt and hopeVersion control and a test list
AccountsBuilder's personal emailCompany-owned, two admins, spend limits

Is the problem vibe coding itself?

No, and this is where most advice gets it wrong. The problem is skipping the step between "it works on my screen" and "my business runs on it". A vibe-coded prototype is the best software brief a business owner has ever been able to produce: real screens, real flows, the fields you actually use. Throwing it away is a waste. Shipping it untouched is a risk.

The same pattern shows up with bought software too. Our post on why custom software projects fail found the failure is rarely the code; it is the scope and the setup. And rolling anything out to staff has its own playbook, covered in rolling out a system to your team.

How to take a vibe-coded app from prototype to production

Freeze the prototype. Stop adding features and list every screen, field and action it has. This is your specification.
Write the data page. Define each record, its required fields and formats, and what deleting means (archive, not erase).
Move money and permissions to the server. Recalculate prices server-side, turn on database access rules and remove every key from front-end code.
Design the unhappy states. Empty, loading, error, double tap and 6-inch phone for every screen, with one shared naming list.
Test with fake volume. Load 10,000 records and two simultaneous users, then use it on a mid-range phone over mobile data.
Set up safety nets. Version control, daily backups with one restore test, a separate test copy, and a written test list.
Move ownership to the company. Company email, two admins, spending limits and a one-page runbook.
Logged in as the lowest-level user and tried to open someone else's record
Searched the front-end code for any API key or secret
Restored yesterday's backup into a test copy at least once
Used every screen on a phone with the keyboard open
Loaded 10,000 fake records and timed the slowest page
Confirmed every account is under a company email with two admins

When should you build, buy, or get help?

Build it yourself when the app is internal, touches no payments and little personal data, and one person can afford for it to be down for a day. Buy when the job is common: lead capture, follow-up and sales pipelines are solved problems, and a tool like Raion HUB already handles the permissions, backups and scale described above. Get help hardening it when your prototype does something specific to your business that no product does, which is what our custom solutions work is for. For the wider picture of what to automate first, the CRM automation guide for SMEs is the place to start.

The bottom line

Key Takeaway

Vibe coding gets you to a convincing screen in an afternoon, and that is worth a lot. What it does not give you is the unhappy-path design, server-side security, clean data, backups, volume testing and ownership that real use demands. Treat the prototype as your specification, harden those six areas before staff or customers depend on it, and the speed you gained stays a gain instead of becoming next quarter's emergency.

Ready to grow with Raion

Your prototype proved the idea. Now make it hold.

Bring the app you vibe-coded and we will show you what it needs before customers and staff depend on it.