Written by Cyprian Aarons, founder and principal engineer at Topiax.
Reviewed August 31, 2026 by Cyprian Aarons
About the authorYou built it.
That used to be the hard part.
Now you can describe an idea to Lovable, Cursor, Claude Code, Codex or Replit and have something working before lunch.
Landing page.
Authentication.
Database.
Dashboard.
Maybe Stripe.
You click around.
Everything works.
You send the link to a friend.
Also works.
🥳
Then a real user signs up.
They never receive the auth email.
Someone refreshes the page and loses their session.
The mobile menu overlaps the checkout button.
A webhook arrives twice.
Google indexes basically nothing.
Someone with the wrong account can read a record they probably shouldn't.
And suddenly:
“It works” becomes a much more complicated sentence.
Welcome to the interesting part of vibe coding.
The prototype is no longer the hard part. The release is.
Vibe coding has moved the bottleneck
I am very pro vibe coding.
Seriously.
Being able to turn an idea into working software this quickly is ridiculous.
The mistake is assuming:
generated
=
finished
AI made code generation cheap.
It did not make these disappear:
architecture
permissions
state
mobile behavior
QA
security
performance
SEO
recovery
product judgment
If anything, those things matter more now.
Because we can produce a lot more software before we fully understand what we have produced 😂
Current freelance demand reflects this.
Companies are already hiring people specifically to take existing Lovable and AI-generated applications and debug them, test them, review architecture, validate permissions, fix integrations and make them production-ready.
The new bottleneck is not creation.
It is verification.
1. Your UI works. Does it feel intentional?
There is a visual pattern showing up across AI-generated applications.
You know it when you see it.
Huge hero.
Rounded everything.
Three cards.
Gradient.
Random glass effect.
Then mobile arrives and the whole thing starts negotiating with itself 😂
I think of this as the slop floor.
Not necessarily ugly.
Just statistically average.
The underlying problem is simple:
Undefined design decisions become model guesses.
Tell an agent:
Make this more premium.
and it has to invent what premium means.
Tell it:
Use our existing spacing tokens.
Primary CTA remains above the fold.
Do not introduce new colors.
Mobile has one primary action.
Use the existing card primitive.
Define loading, empty, error and success states.
Now you're designing a system.
Agents perform better when they are grounded in concrete references and constrained by an explicit design system instead of vague aesthetic adjectives.
Before launch, test:
375px mobile
tablet
desktop
long text
short text
empty state
loading state
error state
keyboard navigation
focus states
real data
very ugly real data 😂
If only the screenshot you designed looks good, the interface isn't finished.
1. Your UI works. Does it feel intentional?
2. Authentication deserves more than “signup worked once”
This is probably one of the most common places AI-built apps get interesting.
Especially:
Lovable + Supabase.
The happy path:
signup
→ email
→ login
→ dashboard
Nice.
Now test:
refresh
logout
login again
expired session
two browser tabs
forgot password
wrong email
unverified email
OAuth failure
account deletion
A current Upwork request specifically mentions state and permissions that appear fixed in Lovable but later regress across logout, login and page refreshes.
That is exactly the sort of thing the happy-path demo doesn't tell you.
2. Authentication deserves more than signup worked once
3. Supabase RLS is not optional decoration
If your app uses Supabase, look at Row Level Security before launch.
Not after somebody discovers they can query another customer's records.
Test:
Can User A read User B's data?
Can User A update User B's data?
Can an unauthenticated request reach protected tables?
What can the anon key actually do?
Do admin workflows have different permissions?
Do storage policies match database policies?
Do not ask:
“Did the AI configure RLS?”
Ask:
“Can I prove the wrong user cannot perform this operation?”
Different question.
Much better question.
3. Supabase RLS is not optional decoration
4. Test the ugly paths, not just the demo
Vibe-coded products are usually tested like this:
click button
→ expected thing happens
→ green check
Production adds:
timeout
duplicate request
slow API
API returns malformed data
dependency unavailable
process restarts
webhook arrives twice
user double-clicks
database write succeeds but confirmation disappears
If your app touches:
payments
orders
emails
CRM records
bookings
refunds
uploads
this matters a lot.
The safest question is:
If this request happens twice, can the business action happen twice?
That one question catches a surprising number of expensive bugs.
4. Test the ugly paths, not just the demo
5. Your database needs to survive reality
AI agents are great at creating schema quickly.
They are less useful when the schema evolves through 47 conversations and nobody remembers why half the tables exist.
Before launch:
check foreign keys
check unique constraints
check nullable fields
check indexes
check deletion behavior
check migrations
check backups
check orphaned records
check concurrent writes
And please test with real-ish data.
Five perfectly shaped demo rows are very polite.
Users are not.
6. Integrations fail differently from your app
Stripe doesn't care that your demo looked lovely.
Neither does HubSpot.
Or Resend.
Or Twilio.
Or some API you found at 2 AM.
Test:
success
failure
timeout
rate limit
duplicate callback
late callback
invalid response
expired token
partial completion
The important distinction:
A failed response does not always mean the external action failed.
If money, messages or records are involved, verify external state before blindly trying again.
7. Deployment is part of the product
localhost:3000 is a very forgiving place.
Production isn't.
Vibe coders regularly ask how to get from a locally working application to an actual deployed stack with hosting, databases and domains.
Before calling the launch done:
production environment variables
DNS
HTTPS
database environment
storage
email
background jobs
secrets
logging
error tracking
backup
rollback
Then deploy from scratch once.
You will learn things 😂
5. Deployment is part of the product
8. Your app needs observability before it needs more features
If the first sign that something broke is:
customer emailed me
you don't have observability.
At minimum, know:
did the request arrive?
did the operation start?
did it succeed?
did it fail?
where?
for whom?
what was the operation ID?
You don't need a NASA control room.
You need enough evidence to reconstruct what happened.
9. Your beautiful AI-built site may have terrible SEO
This one is easy to miss.
You build the product.
Launch.
Post it.
Then:
crickets.
Some vibe-coded sites are shipping with basic discovery gaps such as:
missing titles
missing descriptions
bad HTML hierarchy
missing alt text
no sitemap
bad robots.txt
broken canonicals
poor structured data
weak internal linking
client-heavy rendering
bad mobile performance
These are not hypothetical concerns.
A current Lovable optimization project explicitly asks for technical SEO, crawlability, mobile responsiveness, Core Web Vitals, structured data, sitemap, robots.txt and final QA on an already-live site.
There are also Lovable users currently discussing exactly these missing SEO layers after building custom AI-generated sites.
Before launch, check:
title
description
canonical
robots.txt
sitemap.xml
Open Graph
structured data
heading hierarchy
alt text
internal links
404s
mobile rendering
Core Web Vitals
6. Your beautiful AI-built site may have terrible SEO
10. Then make the content easy for AI to understand too
Do not replace SEO with GEO.
Build on top of it.
Good crawling and indexing remain the foundation for AI retrieval as well.
Then make your pages easier to extract.
Instead of:
## Our Revolutionary Platform
700 words of vibes
try:
## What does the product do?
[40–60 words that actually answer the question]
Answer-first structure and question-shaped headings help both extractability and humans.
Funny how that works.
11. Your website saying you're great isn't enough
Search and AI discovery increasingly depend on evidence outside your own domain too.
That can include:
GitHub
directories
reviews
communities
technical posts
industry publications
founder profiles
credible comparisons
For a small founder this doesn't mean launching a giant PR campaign.
It means:
exist somewhere other than your own homepage.
Build useful things.
Answer questions.
Publish technical evidence.
Contribute.
Give people a reason to mention you.
12. Do one release review before your users do it for you
This is the habit I think vibe-coded products need most.
Before launch, stop building for a moment.
Take one consequential workflow.
Example:
SIGN UP
→ VERIFY
→ CREATE ACCOUNT
→ START TRIAL
→ PAYMENT
→ ACCESS PRODUCT
Now attack it.
Ask:
What can fail?
What can happen twice?
What can happen in the wrong order?
Where do permissions change?
What survives a restart?
What evidence proves success?
Can we recover?
Can the user recover?
What happens on mobile?
Can people discover the page?
Then make the release decision.
Not:
feels ready.
But:
GO
CONDITIONAL GO
NO-GO
That is a much stronger way to ship.
7. Do one release review before your users do it for you
The Vibe Coder Launch Checklist
Before you launch an AI-built app, check these twelve areas:
□ UI / responsive behavior
□ loading / error / empty states
□ authentication
□ permissions / RLS
□ database integrity
□ API integrations
□ duplicate actions / retries
□ deployment
□ logging / observability
□ technical SEO
□ crawlability / AI extractability
□ recovery / rollback
If those are green, great.
Ship it.
If three of them made you go:
hmm...
also great.
You found them before your customers did.
Vibe coding isn't the problem
Bad verification is.
Keep using Lovable.
Keep using Cursor.
Keep using Claude Code.
Keep using Codex.
The speed is genuinely amazing.
But the workflow should be:
VIBE
↓
BUILD
↓
VERIFY
↓
RELEASE
Not:
VIBE
↓
BUILD
↓
STRIPE PAYMENT FROM FIRST CUSTOMER
↓
OH NO
😂
The prototype isn't the hard part anymore.
The release is.
Built something with AI and about to launch?
This is what the Topiax 48-hour Launch Readiness Review is for.
We take one consequential workflow and pressure-test the parts AI-generated demos tend not to show:
failure paths
state
permissions
duplicate actions
retries
external integrations
recovery
evidence
release controls
Then you leave with a bounded decision:
GO
CONDITIONAL GO
or
NO-GO
Not a six-month consulting engagement.
Not “we'll redesign your whole startup.”
One workflow.
48 hours.
A release decision you can defend.
Keep the vibe. Add the verify.
Choose your next move
Keep learning or check one workflow before release.
Production Agent Dispatch turns each week's field note into one failure pattern, one practical control, and one next move. Four minutes or less.
Use the 48-hour Launch Readiness Review when an AI-built app is about to meet real users.
Book a Launch Readiness Review