Guides
Deploy guides for Lovable, Bolt, and Vite apps
Fix the deploy failures that leave a vibe-coded app blank, looping to localhost, 404ing on refresh, or failing the Vercel build. Each guide is a step-by-step check against the host and the repo.
lovable blank white screen after deploy
Lovable app shows a blank white screen after deploy
The Lovable preview works, but the deployed URL is a blank white page. Missing VITE_ env vars are inlined at build time. Find them, set them on the host, and confirm the app mounts.
supabase login redirects to localhost after deploy
Supabase login redirects to localhost after deploy
Sign-in works in preview, then production sends the browser to localhost. Update the Supabase Site URL and redirect allow list, and stop sending localhost from redirectTo.
vite react 404 on page refresh vercel netlify
Vite or React SPA returns 404 on refresh
The home page loads on Vercel or Netlify, but refreshing a client route returns 404. Serve index.html for those paths with a rewrite, without hiding real asset files.
cannot find module @rollup/rollup-linux-x64-gnu vercel
Vercel build cannot find @rollup/rollup-linux-x64-gnu
The Vercel build stops with Cannot find module @rollup/rollup-linux-x64-gnu. A Mac-written npm lockfile omitted Rollup's Linux optional dependency. Regenerate the lockfile and check it.
vite wrong output directory dist vs build vercel
Bolt or Vite deploy used the wrong output directory
A Bolt or Vite build finished, but the host published build or .next instead of dist. Point the output directory at the folder that actually contains index.html.
Questions that come up next
Do these guides apply to Bolt, v0, and Cursor apps too?
Yes when the app is a Vite client bundle. Bolt's default export is Vite. v0 and Cursor projects are Vite when they ship a vite.config file and read import.meta.env. A Next.js app uses NEXT_PUBLIC_ variables, publishes .next, and does not need the SPA rewrite described here.
The free scanner only accepts a public GitHub URL. What about a private repo?
The scanner reads files through the public GitHub API and does not clone private repositories. A private repo can still be sent through the intake form, which asks for read-only access instead of publishing the code.