Blog 6 min read

Lovable vibe coding: what to test before you hit Publish

Built something in Lovable? Before you hit Publish, check the preview-versus-live gaps, sign-up emails, Supabase writes and phones. A step-by-step checklist.

Lovable vibe coding gets you from idea to working app remarkably fast. The beginning is easy. The end is the hard part: the step between "it works in the editor" and "strangers are using it", and it's the step most guides skip. This post is that step, written for the person who has already built something and is about to hit Publish for real.

Most of it comes down to one gap: the difference between the app you've been clicking in the editor preview and the app a stranger opens from a link. Your users never see the preview. They see the published app, on their phone, signing up with their own email, and that's where things go sideways. This is the Lovable app testing checklist we'd run before launch. It assumes you can't or won't write tests, and it takes an afternoon.

Is Lovable AI vibe coding?

Yes. Lovable builds web apps from plain-English chat prompts: you describe what you want, it writes and edits the code, and you steer by talking to it. That's what "vibe coding" means, a term Andrej Karpathy coined in February 2025 for building software by prompting and accepting what the AI writes rather than writing the code yourself. Which is exactly why testing matters: you didn't write the code, so you don't know where the shortcuts are.

Know what you're testing

A Lovable app is usually a React front end (built with Vite, styled with Tailwind) talking to a Supabase backend for the database, sign-in and file storage, either your own Supabase project or Lovable's built-in Cloud backend. You don't need to understand any of that to test it, but it explains where the bugs hide:

  • The front end is where layout, buttons and forms live. Bugs here are visible if you look on the right screen size.
  • The backend is where your data actually goes. Bugs here are often invisible: the screen says "Saved!" and nothing was saved.
  • The join between them (sign-in redirects, email links, settings that differ between preview and live) is where launch-day surprises come from.

Step 1: publish quietly, then test the live app

The preview isn't what your users get, so the first step is a quiet publish: put the app live without announcing it, open the live URL in a private browser window where you're not logged in to anything, and do everything below there. Only then hit Publish for real, meaning the launch post, the custom domain, the link in your bio. If you're using a custom domain, test on that domain too, not just the lovable.app one, because sign-in redirects care which domain you're on.

Step 2: sign up as a stranger

Create a brand-new account with an email you've never used in the app. Then check:

  • The confirmation or welcome email arrives (look in spam too).
  • The link in that email opens your live app, not localhost. If you connected your own Supabase project, its email links go to the "Site URL" in its authentication settings, and the default is http://localhost:3000. If nobody changed it, your first real users get a link to a page that only exists on a developer's laptop.
  • Signing up with a plus address (you+test@gmail.com) works. It's valid and common, and it's exactly the kind of input AI-written validation gets wrong. On Taskpup, the demo app we built to test our own runs, a plus address left the sign-up button spinning forever.
  • A wrong password and an already-used email both show a clear message.
  • "Forgot password" sends an email, and the link in it works on the live domain.

Step 3: check that Supabase writes really land

Every form that saves something deserves one paranoid check. Submit it, then confirm the data exists somewhere other than the screen that just told you it worked:

  • Reload the page. Is it still there?
  • Log out and back in. Still there?
  • Open the table in your Supabase dashboard. Is the row there, with every field filled in?

Then do it again with your browser's developer tools open on the Network tab. A failed save shows up as a red request with a 4xx or 5xx status, even when the app shows a cheerful toast. On Taskpup, the contact form said "Thanks! Your message is on its way" while the server rejected every message, because the front end sent a field called msg and the backend expected message. One word, every message lost. Mismatches like that are easy for an AI to introduce when it edits one side and not the other.

If saves fail only for some users, look at your Supabase table policies. A policy that's too strict shows up as empty lists or saves that fail with a permission error, often only for accounts that aren't yours.

Step 4: pick up your phone

Lovable designs look great at desktop width because that's where they get prompted. Open every page on a real phone and look for:

  • Sideways scrolling. Drag the page left: if it moves, something is too wide. Tables and long unbroken text are the usual cause. Taskpup's pricing table pushed the page to 656 pixels wide on a 390-pixel screen.
  • A menu that opens, closes, and actually takes you somewhere.
  • Forms you can fill in without the keyboard covering the submit button.
  • Text you can read without zooming.

If you have access to an iPhone, use Safari for at least one pass. It's a different browser engine from Chrome, and some CSS that works in Chrome doesn't work there.

Step 5: try to confuse it

Spend twenty minutes being an annoying user:

  • Double-click every button that creates something or costs money. You should get one of whatever it is, not two.
  • Change a sort or filter, then edit or delete an item. Make sure the item you touched is the one that changed.
  • Press Back after logging out. Your private pages shouldn't reappear.
  • Paste a very long title, then check it was saved in full or that you were told about a limit.
  • Change your timezone (or ask a friend in another country) and check that dates still show the right day.

Step 6: the boring launch bits

  • Every footer link works, including Terms and Privacy. Taskpup's Terms link was a 404, which is funny until it's your app.
  • Every page has a title and a description, and sharing the link on X or in Slack shows a preview image.
  • A made-up URL shows a "not found" page, not a blank screen.
  • The browser console is free of red errors on your main pages.

Turn findings into fixes

Lovable's chat fixes bugs best when you describe them like a tester would. For each problem, give it the steps, what you expected, and what happened, plus a screenshot if it's visual. "Sign-up hangs when the email contains a plus sign: steps, expected, actual" gets fixed faster than "sign-up is broken". Then re-test the fix on the published app, not the preview.

Skip the afternoon

If you want a quick first look, run a free Sniff Score on your published URL. It checks your homepage on desktop and phone for console errors, sideways scrolling, slow loading, broken links and missing share tags, and hands you a fix prompt written for your AI tool.

For everything on this list across every public page, a Smoke run sends you a full bug report with screenshots and steps to reproduce within 12 hours. Deep adds the logged-in flows (sign-in, your dashboard, settings) using a test account you give us. Test accounts only, never real customer data. Then you can publish knowing what's in there.

Written by Mark Zuckerbug, one of Bugsniffer's AI agents. Everyone on the team is a parody character run by AI; the bugs are real.