Vibe coding launch checklist (15 checks before you ship)
Built a site with AI? This vibe coding launch checklist covers 15 checks, from mobile fit to exposed secrets, with how to check each one and a prompt to fix it.
Before you ship a vibe-coded site, check 15 things: mobile fit, the viewport tag, titles and descriptions, a share image, a favicon, a real 404 page, working forms, HTTPS on your own domain, speed, accessibility basics, analytics, privacy pages, broken links, logged-in pages and exposed secrets. Each one below says why it matters, how to check it, and gives you a prompt for Claude, ChatGPT, Cursor, Lovable, v0 or Bolt.
Most take five minutes. Number 15 is the one that can cost you real money, so don't skip it.
Looks right on every screen
1. It fits on real phone sizes
Why: most visitors arrive on a phone, and AI tools build and preview on a desktop-sized canvas.
Check: open your site at 360px (Galaxy S25), 402px (iPhone 17 Pro) and 440px (iPhone 17 Pro Max), plus a laptop. In doesitfit you want FITS on every screen, not TIGHT or SPILLING. Common causes and fixes are in 10 responsive mistakes in AI-built websites.
Make sure this site has no horizontal scrolling and no text touching the screen edge at 360, 402 and 440px wide. Fix causes, not symptoms: no overflow-x: hidden on html or body. Keep desktop unchanged.
2. The viewport meta tag is there
Why: without it, phones lay the page out about 980px wide and shrink it, so everything looks tiny.
Check: view the page source and search for viewport. You want width=device-width, initial-scale=1, and no user-scalable=no or maximum-scale=1. Details in the meta viewport tag.
Make sure every page has in the head, with nothing that blocks zooming.
Findable and shareable
3. Page titles and meta descriptions
Why: they're what people see in search results and browser tabs. AI starters often keep the template's title (Vite's React TypeScript starter is literally called "Vite + React + TS") or give every page the same one.
Check: open a few pages and read the tab titles. View source for <title> and <meta name="description">. Aim for a unique title of roughly 60 characters or fewer and a description of about 150–160 characters.
Give every page a unique, descriptive
(under 60 characters, main keyword first, brand last) and a of about 150–160 characters that says what the page offers. List them so I can review.
4. A social share image (og:image)
Why: when someone pastes your link in WhatsApp, iMessage, Slack or LinkedIn, the preview card is your first impression. No image means a sad grey box.
Check: send your link to yourself in a chat app. In the source, look for:
<meta property="og:title" content="Your page title">
<meta property="og:description" content="One sentence about the page">
<meta property="og:image" content="https://www.example.com/og.png">
<meta name="twitter:card" content="summary_large_image">
The image URL must be absolute (starting with https://), and 1200×630 is the usual size.
Add Open Graph and Twitter card tags to every page: og:title, og:description, og:url, og:image (absolute URL, 1200×630) and twitter:card summary_large_image. Create a simple og.png with the site name and tagline if none exists.
5. A favicon
Why: it shows in tabs, bookmarks and on home screens. The framework's default logo says "unfinished".
Check: look at the browser tab. For iPhone home screens you also want a 180×180 apple-touch-icon:
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
Replace the default favicon with one based on my logo: favicon.ico (32×32), icon.svg and a 180×180 apple-touch-icon.png, linked in the head of every page.
6. A real 404 page
Why: typos and old links happen. A helpful 404 page keeps the visitor; a blank screen loses them. It should also send a real 404 status, not 200, or search engines may treat the error page as a real page (a "soft 404").
Check: visit /this-does-not-exist, then check the status:
curl -sI https://www.example.com/this-does-not-exist | head -n 1
You want to see 404. Single-page apps that send every URL to index.html often answer 200.
Add a friendly 404 page with a link home and to the main sections, and make sure unknown URLs return HTTP status 404, not 200. Tell me what to change in the hosting config if needed.
Works and loads fast
7. Forms work and show errors
Why: a contact or signup form that silently fails is worse than no form.
Check: submit it empty, with a broken email, and for real. Does each error appear next to the right field, in words? Does the real one arrive in your inbox or database? Do phones show the right keyboard (type="email", type="tel")?
Check every form: visible labels, the right input types, clear error messages next to each field, a success message, a disabled button while sending, and basic spam protection. Tell me where submissions go and how I can test that they arrive.
8. HTTPS and your custom domain
Why: browsers mark plain http pages "Not secure", and one address is better for users and search engines than four.
Check: http://, https://, www. and bare-domain versions should all end up at one https address:
curl -sI http://example.com | grep -iE '^(HTTP|location)'
You want a 301 or 308 redirect to your https address.
Walk me through connecting my custom domain on my host, forcing HTTPS, and redirecting www and non-www to one canonical https address with a permanent redirect.
9. Page speed basics
Why: phones on mobile data are slow, and big images are the usual culprit.
Check: run PageSpeed Insights on the mobile tab. Google's "good" Core Web Vitals thresholds are LCP within 2.5 seconds, INP within 200 milliseconds and CLS of 0.1 or less (web.dev: Web Vitals). Look for 3000px photos in 400px slots and images that load before they're needed.
Make images fast: resize to the largest size they're displayed at (with srcset for different screens), use WebP or AVIF, add width and height attributes, and add loading="lazy" to images below the fold, but not to the hero image.
Does your site fit?
Paste your address (or localhost:3000). doesitfit shows it on real screen sizes at once and tells you, bluntly, where it spills.
Free, no sign-up. Or ask Claude, ChatGPT or Codex to check it.
Usable, measurable and tidy
10. Accessibility basics
Why: keyboard users, screen reader users and people who zoom are real visitors, and the basics are cheap.
Check: every meaningful image has alt text (decorative ones get alt=""). Body text contrast is at least 4.5:1, large text 3:1 (WCAG AA). Press Tab through the page: can you see where you are and reach everything? Pinch-zoom works on a phone. Chrome's Lighthouse accessibility audit catches plenty more.
Do an accessibility pass: alt text on meaningful images, colour contrast at WCAG AA, visible focus styles, everything reachable and usable with a keyboard, labels on form fields and icon buttons, and zoom not blocked.
11. Analytics
Why: otherwise you'll never know if anyone came, or which page they left from.
Check: install your analytics, visit from your phone, and see the visit appear. Make sure your own visits are filtered out, and that key actions like signups are tracked.
Add [privacy-friendly analytics tool] to every page, track signups and contact form submissions as events, and show me how to exclude my own visits.
12. Privacy and legal pages where required
Why: if you collect personal data (emails, form submissions, analytics cookies, payments), many countries expect you to say what you collect and why, and in the EU and UK non-essential cookies generally need consent first. This isn't legal advice: check what applies where you and your visitors are.
Check: is there a privacy page linked in the footer, and does it match what the site actually does?
List every kind of personal data this site collects or sends to third parties (forms, analytics, cookies, embeds, payment, auth), with the file where it happens. I'll use it to write or check my privacy policy.
13. No broken links
Why: AI loves placeholder links: href="#", "/about" pages that were never built, footer links to nowhere.
Check: click every link in the nav and footer. Crawl the whole site with npx linkinator https://www.example.com --recurse or the W3C Link Checker, and search your code for href="#".
Find every link that goes nowhere: href="#", links to pages that don't exist, and buttons without an action. List them and fix or remove each one.
Behind the login and under the hood
14. Logged-in pages are checked too
Why: dashboards and settings are what paying users see every day, and they get the least testing.
Check: go through every logged-in page on a phone-sized screen. doesitfit's Site login helps: log in to your site in a normal window, come back, and the screens reload showing the logged-in view. Live sites usually keep their login away from other websites (the safe default), so check your localhost copy; if you're still logged out there, the Site login box has a fix prompt that only changes development settings.
Go through every page behind the login and apply the same mobile rules as the public pages: no horizontal scrolling at 360px, tables that scroll inside their own box, and buttons at least 44×44px.
15. Secrets are not in the frontend
Why: anything the browser downloads is public. Secret keys in your JavaScript get found and abused, and the bill is yours.
Check: environment variables starting with NEXT_PUBLIC_ or VITE_ are built into the browser code on purpose, so never put secrets in them. Open DevTools on your live site, search the JavaScript files for key prefixes like sk_live_ (Stripe), sk-proj- (OpenAI) and sk-ant- (Anthropic), and for secret and service_role, and make sure .env files aren't in a public repo. With Supabase, the anon (publishable) key is meant to be public but is only safe with Row Level Security on every table; the service_role (secret) key must never reach the browser.
Audit this project for exposed secrets. List every API key or token and where it's used, move anything secret to server-side code or environment variables without a public prefix, check that .env is in .gitignore, and if I use Supabase, confirm Row Level Security is on for every table. Tell me which keys I should rotate.
Before you press publish
- Do the two that can hurt you first: 15 (secrets) and 7 (forms).
- Then the two everyone sees: 1 (fits on phones) and 4 (share image).
- The rest take an afternoon, together.
For the mobile part in depth, see make your AI website mobile friendly. To check without a phone in your pocket, see how to test your website on mobile without a phone, and browse every screen size in /devices.
Questions people ask
What should I check before launching a website built with AI?
Check that it fits on real phones, has page titles, descriptions and a share image, that forms work, that it runs on HTTPS on your own domain, loads fast and works with a keyboard. Above all, make sure no secret keys are in the frontend code.
How do I know if my API keys are exposed?
Open your live site, look through the page source and the JavaScript files in DevTools, and search for your key prefixes and words like secret or service_role. Anything the browser downloads is public.
Do I need a privacy policy for a small website?
If you collect personal data, such as emails, form submissions or analytics cookies, the law in many places expects one. This isn't legal advice, so check the rules where you and your visitors are.
What size should an og:image be?
1200 by 630 pixels is the widely used size for link previews. Use an absolute URL starting with https:// and keep important text away from the edges.