Vibe Liftoff
You built it with AI. Here is where to host it, what it costs and how to fix what breaks. Every price is sourced and dated.
Which tool did you build with?
| Builder | What it is | Easiest host | Cheapest host |
|---|---|---|---|
| Lovable | Browser-based AI app builder | Easiest: Netlify | Cheapest: Cloudflare Pages |
| Bolt.new | Browser-based AI app builder | Easiest: Netlify | Cheapest: Cloudflare Pages |
| Cursor | AI code editor (desktop) | Easiest: Vercel | Cheapest: Cloudflare Pages |
| Claude Code | AI coding agent (terminal) | Easiest: Railway | Cheapest: Cloudflare Pages |
| Replit | Browser IDE + AI Agent + hosting | Easiest: Stay on Replit | Cheapest: Render |
| v0 | Vercel's AI app builder | Easiest: Vercel | Cheapest: Cloudflare Pages |
| Windsurf | AI code editor (desktop) | Easiest: Netlify | Cheapest: Cloudflare Pages |
Four stops to a live app
Every guide follows these eight steps for its builder and host. Try Lovable to Netlify, Bolt.new to Netlify or all 28 guides.
The settings you will actually touch
Most broken launches come down to two things: environment variables that stayed behind in the builder, and a host that does not know your app is a single page. This is what they look like for Lovable, Vercel and Netlify.
| Key | Value |
|---|---|
VITE_SUPABASE_URL | Copy from Lovable |
VITE_SUPABASE_PUBLISHABLE_KEY | Copy from Lovable |
VITE_SUPABASE_PROJECT_ID | Copy from Lovable |
SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY (server-side, TanStack Start projects) | Copy from Lovable |
Changed a value? Rebuild. Vite bakes variables in at build time. Blank page after deploying?
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
} Stops the 404 on refresh. Vercel details
/* /index.html 200 Stops the 404 on refresh. Netlify details
What hosting costs
Free tiers and entry prices, checked 17 Oct 2026 against each host's own pricing page.
| Host | Free tier | Paid from | Commercial use on free |
|---|---|---|---|
| Vercel | Free tier Hobby: $0 — 100 GB data transfer, 1M CDN requests, 1M function invocations / month | $20/mo | No |
| Netlify | Free tier Free: $0 forever — 300 credits/month | $9/mo | Unverified |
| Cloudflare Pages | Free tier Free: unlimited sites, seats, requests and bandwidth for static assets | $5/mo | Unverified |
| Railway | Limited free Free Trial: $5 one-time credit for 30 days; then Free plan with $1/month of usage | $5/mo | Unverified |
| Render | Free tier Hobby workspace $0: free static sites + free 512 MB web service that sleeps after 15 min idle | $7/mo | Unverified |
| Fly.io | Trial only No free tier — free trial of 2 VM hours or 7 days, whichever comes first | ≈$2.19/mo | n/a |
| DigitalOcean App Platform | Free tier Free: 3 static-site apps, 1 GiB outbound transfer per app per month | $5/mo | Unverified |
| Hostinger | No free tier No free tier — prepaid plans with a 30-day money-back guarantee | $2.99/mo | n/a |
Errors that break launches
Supabase warns “RLS disabled” — your table is public Your Supabase public key is shipped to every visitor's browser — that's by design. Row Level Security (RLS) is what decides which rows each visitor may touch.
“new row violates row-level security policy” (42501) RLS is on (good) but there is no INSERT/UPDATE policy that allows this user to write this row — or the user isn't signed in on the deployed site, so auth.uid() is null.
Page works, but refreshing it gives a 404 Single-page apps (React + Vite, React Router) have one real file — index.html. Routes like /dashboard exist only in JavaScript. When you refresh, the host looks for a file called /dashboard, doesn't find one and returns 404.
Blank page or “supabaseUrl is required” after moving off the builder Builders inject keys for you; your .env file is (correctly) not in Git, so the new host builds without them.
Google login sends you back to localhost (or “redirect_uri_mismatch”) Two lists must include your live URL: your auth provider's allowed redirect URLs (Supabase's Site URL defaults to http://localhost:3000) and, for Google, the Authorized redirect URI in Google Cloud, which must be Supabase's callback URL.
Deploy succeeds but shows a blank page or “Page not found” The host built your project but served the wrong folder. Vite outputs dist/, Create React App outputs build/, Next.js static export outputs out/. A wrong setting serves your raw source (blank page) or nothing.
Firebase: “This domain is not authorized for OAuth operations” Firebase only allows sign-in from domains on the Authorized domains list. Your new hosting domain isn't on it. Projects created after April 28, 2025 also don't include localhost by default.
Clerk: “Development keys” warning or sign-in broken in production Clerk development instances are for local testing and have usage limits. Production needs a production instance with its own keys, your own domain verified via DNS, and your own OAuth credentials for social providers.
Popular step-by-step guides
- Lovable → Netlify
- Lovable → Vercel
- Lovable → Cloudflare Pages
- Lovable → Hostinger
- Bolt.new → Netlify
- Bolt.new → Vercel
- Bolt.new → Cloudflare Pages
- Bolt.new → Hostinger
- Cursor → Vercel
- Cursor → Netlify
- Cursor → Cloudflare Pages
- Cursor → Railway
- Cursor → Render
- Cursor → DigitalOcean App Platform
Hear when free tiers change
One short email a month when a host, database or builder changes its limits or prices.
No spam, unsubscribe any time. The newsletter is not live yet.