Engineering

From Vibe-Coded Prototype to Production: The 12-Point Audit

8 min read | Engineering Strategy

The prototype works. You built it yourself in a fortnight, mostly by describing what you wanted and accepting what came back, and it does the thing. Now someone wants to pay for it — and the question you cannot answer is whether it is safe to let them.

This is now one of the most common conversations we have. Vibe coding won the adoption argument: JetBrains’ January 2026 pulse survey puts 90% of developers using at least one AI tool at work. The unresolved question is what happens between a working prototype and a product with real users, real money and real liability attached.

Here is the audit we run. Twelve checks, roughly in the order we run them, with the honest verdict at the end about what usually needs rewriting and what usually does not.

45%
of AI-generated code samples failed OWASP Top-10 benchmarks (Veracode)
1.7×
more issues than human-written code, incl. 75% more logic errors (CodeRabbit)
2.74×
higher rate of XSS vulnerabilities in AI-generated code (CodeRabbit)
48%
of developers always review AI output — though 96% say they don’t fully trust it (SonarSource)

1. The Security Six

Always first, because these are the findings that turn a soft launch into an incident. Every one of them is something we have found in a real prototype.

1
Authorisation on every endpoint, not just authentication
The classic AI-assisted gap: the route checks that you are logged in, never that the record belongs to you. Enumerate every endpoint and test it as the wrong user. Expect to find at least one.
2
Secrets are not in the repo
API keys in committed .env files, hardcoded database URLs, a service key that reached the client bundle. Scan the full git history, not just the current tree — rotation is the only fix once it is pushed.
3
Input validation on the server
Client-side validation is a UX feature, not a security control. Every write path needs server-side schema validation, whatever the form does.
4
Output escaping and XSS
Any place user content is rendered as HTML. This category shows up at nearly 3× the human-written rate in the research, and prototypes lean heavily on “just render it.”
5
Dependency audit
Run the audit tool, then check for packages that do not exist upstream or were plausibly hallucinated. Also check licences — a copyleft dependency in a commercial product is a legal problem, not a technical one.
6
Rate limiting and abuse surface
Signup, password reset, any endpoint that costs you money per call (email, SMS, model inference). Prototypes essentially never have this, and it is the fastest way to a surprise invoice.
If you do only one thing

Log in as User A, capture a request, replay it with User B’s identifier. If you get A’s data back, stop the launch. This one test finds more real vulnerabilities in AI-assisted prototypes than any scanner we run.

2. The Correctness Three

🧪
7 · Any tests at all
Not coverage percentage — existence. If there is no suite, the prototype’s correctness is a claim, not a fact. Generating one is now hours of work, so there is no argument against it.
💸
8 · Money and time arithmetic
Floating-point currency, naive timezone handling, off-by-one date maths. These pass every demo and fail every audit. Check them by hand.
🔀
9 · Concurrency and state
Double-submit, two users editing the same record, a webhook arriving twice. Prototypes are built and demoed single-user; real usage is not.

3. The Operability Three

🔭
10 · You can see failures
Error tracking, structured logs, an alert that reaches a human. Without this you learn about outages from customers, which is the expensive way.
💾
11 · Backups you have restored
“The provider does backups” is not a backup strategy until you have actually performed a restore into a scratch environment and it worked.
📦
12 · Reproducible deploys
A documented path from empty repo to running environment. If deployment lives in one person’s shell history, that person is now infrastructure.

4. So Does It Need a Rewrite?

Usually not. This is the part most people expect us to get wrong in the other direction, so let us be specific.

The business logic in a vibe-coded prototype is typically fine, because it encodes something you understood well and described clearly. What is missing is the surrounding layer — the authorisation checks, the validation, the tests, the error handling, the operability. That layer is additive. It bolts on.

What genuinely forces a rewrite is a data model that cannot express what the product now needs to do. If entities are wrong at the schema level, everything above them is built on sand, and patching gets more expensive than restarting. That is the one check worth doing before any of the twelve above: can this schema represent the next six months of the roadmap? If yes, harden it. If no, redesign the model and reuse the logic.

Harden — 2 to 4 weeks
Data modelSound
MissingTests, authz, errors
StructureMessy but readable
PathAudit → fix → ship
Rebuild the core — 6 weeks+
Data modelCannot express roadmap
MissingMulti-tenancy, roles
StructureNo module boundaries
PathNew spine, reuse logic

Either way, the prototype was not wasted. It is the most precise specification of your product that has ever existed — every screen, every rule, every decision, made concrete. That is worth considerably more than the document you would otherwise have written.

If you are in the hardening case, the MVP gap describes exactly that last mile. If you are commissioning someone to do it, how to brief an app development agency covers what to send them — and yes, “here is a working prototype” is a genuinely excellent brief.


Point us at the repo.

We run this twelve-point audit as a fixed-scope engagement and come back with a prioritised findings list, a harden-or-rebuild verdict, and an honest estimate for each path.

Start the Conversation →

Engineering Insights

Latest from Syntaxa Studio.

Loading latest posts