Skip to main content

Deploy a Bolt, v0 or Older Lovable Site on Your Own Domain

Published: •Last updated: Guides
lovablebolt.newv0ai website buildersdeploymentcustom domains
Illustration: an AI prompt and its generated code deployed to a website on a custom domain with SSL

To deploy a Lovable, Bolt.new or v0 website on your own domain, build it to static files (npm run build gives you a dist/ folder for Vite projects, or out/ for a Next.js static export), upload that folder to a static host, and point your domain at it with DNS records. The big exception is any Lovable app created since 13 May 2026: it uses TanStack Start, which needs a server, so it can't run on a static host as it is. If you'd rather not move at all, Lovable, Bolt and v0 (through Vercel) can host the site themselves and connect your domain.

The steps below cover Lovable, Bolt.new, v0, Cursor, Claude and ChatGPT. Builder details were checked against each tool's official docs in October 2026.

Disclosure: this guide is published by Statpio, one of the hosting options compared. We link every competitor fact to its official source.

What did your AI builder actually make?

Check this first, because it decides where the site can live. Open package.json and look at the dependencies. In Lovable it's in the Code tab, or you can ask in the project chat.

You built withWhat you haveHow to tellWorks on a static host?Folder to upload
Lovable, app created on or after 13 May 2026TanStack Start app that runs server codepackage.json lists @tanstack/react-startNo, not as it isNone: use Lovable hosting or a server host
Lovable, app created before 13 May 2026React + Vite appvite in package.json, no @tanstack/react-startYesdist/
Bolt.newThe framework Bolt picked when the project startedvite, astro or next in package.jsonVite and Astro: yes. Next.js: only as a static exportdist/ (Vite, Astro) or out/ (Next.js)
v0Next.js app with shadcn/ui and Tailwind CSSnext in package.jsonOnly with output: 'export' and no server featuresout/
Cursor, Claude, ChatGPTWhatever you asked forA lone index.html, or a project with package.jsonYes, once built, unless it needs a serverThe HTML file itself, or the build folder

Source: Lovable deployment docs, Lovable external hosting guide, Bolt glossary, v0 FAQ, Next.js static exports guide. Checked October 2026.

How do I export and build a Lovable project?

Lovable apps created before 13 May 2026 (React + Vite)

  1. Get the code. Connect GitHub under Project settings → Git → GitHub (available on all Lovable plans) and clone the repository, or use Download codebase for a one-time .zip, which needs a paid Lovable plan.
  2. Install Node.js. Lovable recommends version 22.
  3. If the app uses Lovable Cloud or Supabase, set the browser variables Lovable lists (VITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY, VITE_SUPABASE_PROJECT_ID), for example in a .env file. Vite bakes them in at build time, so a build without them can't reach your backend.
  4. Run npm install, then npm run build. The finished site is in dist/.
  5. Once the site is live, add the new address and your domain to your auth provider's allowed redirect URLs, as Lovable's external hosting guide advises, so sign-ins keep working.

Forms and logins that save to Lovable Cloud or Supabase can keep working once those steps are done: Lovable says the backend can stay in place while you move the frontend to another host.

Lovable apps created since 13 May 2026 (TanStack Start)

Lovable says these apps run server code, and its external hosting guide says a TanStack Start app "does not run from object storage or a CDN alone". Statpio, like every static host, only serves files, so it can't host this project as it is. You have two real options:

  • Stay on Lovable hosting. Publish from Lovable and connect your domain there. Custom domains are available on paid plans; Pro starts at $25/month, or $250/year, as of October 2026.
  • Move to a host that runs server code. Lovable's external hosting guide builds the app with Nitro, which detects Vercel, Netlify and Cloudflare Pages automatically. Build with Node.js 22 and set the server variables the guide lists (SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY).

How do I export and build a Bolt.new project?

Bolt chooses a framework when you start a project, but you can name one in your prompt. If you already know you want static hosting, ask for Vite and React at the start.

  1. In Bolt, click the project title in the top left, then Export → Download, and unzip the file (Bolt's download steps). Or click the GitHub icon in the top right to push the code to a repository.
  2. Check package.json. If it lists vite or astro, run npm install and npm run build; the site lands in dist/. If it lists next, follow the v0 steps below.
  3. If Bolt created a database for your project (part of Bolt Cloud), test sign-ins and data on the new address before you move your domain. This guide only moves the frontend files.

How do I turn a v0 project into static files?

v0 builds Next.js apps, including "full-stack apps with authentication, databases, and external API integrations" (v0 FAQ). A static host can only serve a Next.js static export, which can't use features that need a server.

  1. Connect GitHub from the project menu: Settings → GitHub → Connect. v0 creates a private repository and pushes your code to it. GitHub sync is on v0's free plan. Clone the repository.
  2. Look for server features. Next.js's static export doesn't support Server Actions ('use server'), Route Handlers (route.ts files) that read the incoming request, cookies(), rewrites, redirects or headers in next.config, a proxy.ts or middleware.ts file, Incremental Static Regeneration, Draft Mode, intercepting routes, dynamic routes without generateStaticParams(), or image optimization with the default loader.
  3. If the app needs any of those, keep it on Vercel (click Publish in v0). If it doesn't, add two lines to the config object in next.config. The second one turns off image optimization, which needs a server:
const nextConfig = {
  output: 'export',
  images: { unoptimized: true },
}

Then run npm install and npm run build. Next.js writes the site to an out/ folder.

What about sites from Cursor, Claude or ChatGPT?

  • A single index.html, perhaps with a CSS file and images, needs no build. ZIP it and upload it.
  • A folder with a package.json is a project. Run npm install and npm run build and upload the build folder: dist/ for Vite and Astro, out/ for a Next.js static export.
  • A React artifact from Claude (a .jsx or .tsx file) isn't a website on its own, because browsers can't run JSX directly. Ask the AI to put it in a Vite project, then build that.
  • If you build in ChatGPT, Claude or Cursor, connect Statpio once and the assistant can publish the finished site for you: see how to build a website with Claude, ChatGPT or Cursor.

How do I upload the build to Statpio?

Option 1: upload a ZIP (every plan)

  1. Create a free Statpio account, click New Website and give it a name. The site gets a free onstatpio.com subdomain with SSL; you can change the subdomain in the project's Settings.
  2. ZIP the build folder (dist/ or out/). Statpio needs index.html at the top of the ZIP, or directly inside the one folder you zipped. Uploads can be up to 25 MB on Free Forever and 50 MB on Solo Pro.
  3. Verify your email address if you haven't yet; Statpio asks for it before the first deployment.
  4. Open Deployments, leave Deployment Type on Static Site and drop the ZIP onto Drop your website ZIP here.
  5. Open your onstatpio.com address. Click through the pages, refresh on an inner page and send a test form.

Each upload is a new deployment, and you can roll back to an earlier one instantly. Statpio keeps 5 rollbacks on Free Forever, 20 on Solo Pro and 50 on Agency Pro.

Option 2: deploy from GitHub (Solo Pro and up)

  1. Get your code into GitHub. Lovable and v0 sync automatically once connected; in Bolt, use the GitHub icon.
  2. In your Statpio project, open Integrations → GitHub Actions. Under Connect GitHub Account, click Install GitHub App and give it access to the repository, then choose the repository under Select Repository and pick the Branch to deploy.
  3. Leave Install Command as npm install and Build Command as npm run build. Set Output Directory to dist (the default), or to out for a Next.js export.
  4. Click Connect Repository. Statpio adds a workflow file (.github/workflows/statpio-deploy.yml) to the repository, and every push to that branch builds and deploys the site.

Lovable commits your edits to the connected branch, so changes made in Lovable then go live without a manual upload. v0 works differently: it pushes edits to a separate working branch and merges them into your base branch through a pull request when you click Publish, so deploy the base branch and expect v0 changes to go live once that pull request is merged. The build runs on GitHub Actions, so any VITE_ variables must be in the repository, for example in a .env file. They end up in the public JavaScript anyway, so never put a secret key in one.

Why do my pages show a 404 when I refresh?

React and Vite apps (older Lovable apps, Bolt Vite projects) handle routes such as /pricing in the browser, so there is no pricing.html file on the server. Statpio's SPA Mode fixes this by serving index.html for those routes. It switches on automatically when Statpio detects a single-page app at deploy time; check it under Settings → General → SPA Mode in your project. Keep it on for apps with client-side routing; turn it off for sites with separate HTML pages, such as a Next.js static export.

What does Statpio add to my pages?

A small (about 3 KB compressed) first-party analytics script, plus the form protection described below. On Free Forever it also adds a small Statpio badge; paid plans don't show it. The script sets no cookies and uses no third-party trackers. It keeps a visit ID in sessionStorage for the open tab (and uses localStorage only if you choose to leave out your own visits), so check whether your jurisdiction requires consent for that. Ad blockers can block it. Every plan shows visitors, sources, pages, countries and devices; Solo Pro adds UTM campaigns, goals, funnels and the live visitor view.

How do I make the contact form work without a backend?

First check what the form does now. If it already saves to Lovable Cloud, Supabase or a Bolt database, keep it. If it only shows a thank-you message and saves nothing, switch it to a plain HTML form, and Statpio captures it on every plan. A form is captured when it:

  • uses method="POST" and has no action attribute;
  • gives every field a name;
  • has no submit handler of your own. Remove onSubmit, preventDefault() and any fetch() call: your own handler conflicts with Statpio's and breaks the CAPTCHA.

You can ask the builder to make the change: "Change the contact form to a plain HTML form with method="POST" and no action attribute. Remove the onSubmit handler and any fetch or preventDefault code. Give every input a name attribute. Keep the current design." In a React component the result looks like this:

<form method="POST">
  <label htmlFor="name">Name</label>
  <input id="name" name="name" type="text" required />

  <label htmlFor="email">Email</label>
  <input id="email" name="email" type="email" required />

  <label htmlFor="message">Message</label>
  <textarea id="message" name="message" required></textarea>

  <button type="submit">Send</button>
</form>

Don't add a honeypot field yourself. Statpio inserts its own hidden one (__statpio_hp) and a visible Cloudflare Turnstile check. The check appears inside the form, including forms your app draws after the page loads. If a submission arrives without it, the visitor sees a short verification page after clicking Send instead, and the message is saved once they pass it. To keep Statpio away from a form that saves elsewhere, such as a Supabase sign-in form, add a hidden input named __statpio_ignore to it.

Submissions, including file uploads, appear under Forms & Leads in your dashboard. To hear about new ones, turn on browser notifications on your computer or phone. The monthly limit is 250 submissions per website on Free Forever, 10,000 on Solo Pro and 100,000 on Agency Pro; over it, up to the same number again is kept, locked until you upgrade. Rather not touch the code? Build a form under Forms & Leads → Forms instead and show it in a corner button on every page.

How do I connect my own domain?

Custom domains need Solo Pro ($9/month or $89/year, up to 5 domains). On Free Forever, the site stays on its onstatpio.com address.

  1. In your project, open Custom Domains. In Connect Custom Domain, keep www. Domain (recommended), type your domain without the www, for example example.com, and click Connect Domain.
  2. At your domain registrar, create the two CNAME records the dashboard shows:
TypeNameValue
CNAMEwwwcname.onstatpio.com
CNAME_acme-challenge.wwwThe validation value from your dashboard, which looks like <your-domain>.<id>.dcv.cloudflare.com

Source: the Custom Domains screen in the Statpio dashboard.

Statpio issues the SSL certificate automatically once it finds the validation record. To use the bare domain (example.com), forward it to www at your registrar: Statpio serves root domains through www, and the dashboard shows how to set up forwarding at common registrars. If the domain points at Lovable, Bolt or Vercel today, replace those records rather than adding new ones beside them.

Should you keep the site on the builder's own hosting instead?

Often, yes. If your app needs a server (every new Lovable app, and v0 apps with server features), or you want one bill and one-click publishing, the builder's hosting is simpler. Here's what a custom domain costs on each, as of October 2026.

OptionFree addressYour own domainServer code and backend
Lovable hostingxxx.lovable.appPaid plans; Pro from $25/month ($250/year)Yes, including TanStack Start apps; Lovable Cloud backend
Bolt hosting.bolt.hostPaid plans; Pro is $25/month billed monthlyBolt Cloud includes hosting and databases
v0 on Vercel.vercel.appAdded in v0's domain settings and finished in Vercel. The free Hobby plan is for personal, non-commercial use; Pro is $20/month per developer seatYes, Next.js server features run on Vercel
Statpioonstatpio.com subdomainSolo Pro, $9/monthNo, static files only; form capture and analytics built in

Source: Lovable plans, Lovable custom domains, Bolt pricing, Bolt hosting, Bolt glossary, v0 custom domains, Vercel pricing, Statpio pricing. Checked 10 October 2026; Lovable prices are for the lowest credit tier.

Statpio fits static sites that need forms and analytics built in, or several sites on one plan (5 projects on Solo Pro). If you only need free static hosting with your own domain, Netlify's free plan and Cloudflare Pages include custom domains, which Statpio's free plan doesn't. Our comparison of Vercel alternatives for static sites covers them in more detail.

Building the site for a client?

The export, upload and domain steps are the same. Giving the client access to their leads and analytics is covered in our guide to hosting client landing pages with custom domains and forms. The white-label client portal, where clients see their leads and analytics under your agency's brand, is part of Agency Pro ($99/month).

Ready to try it?

If your project builds to dist/ or out/, you can start free on Statpio, upload the ZIP to an onstatpio.com subdomain and test routing and your form before you pay for anything. When you want your own domain, compare the Statpio plans. If your app needs a server, keep it on Lovable, Vercel or another host that runs server code.

Frequently asked questions

Can I host a Lovable app on a static host like Statpio?

Only if it was created before 13 May 2026. Those are React + Vite apps: run npm run build and upload the dist folder. Lovable apps created since then use TanStack Start, which runs server code and, according to Lovable's docs, doesn't run from a CDN or object storage alone. Publish those on Lovable or on a host that runs server code, such as Vercel, Netlify or Cloudflare Pages.

Why does my Lovable or Bolt site show a 404 when I refresh a page?

React and Vite apps handle routes in the browser, so the server has no file for a path like /about. On Statpio, keep SPA Mode on in the project's Settings (it's detected automatically when you deploy) and Statpio serves index.html for those routes. On other hosts, add a fallback rewrite that serves /index.html.

Do I need a paid Statpio plan to use my own domain?

Free Forever hosts 1 site on a free onstatpio.com subdomain with SSL, but custom domains start with Solo Pro at $9/month or $89/year. That plan also adds GitHub deploys and full analytics.

How do I hear about new form submissions?

Turn on browser notifications on your computer or phone: Statpio then alerts you to new form submissions and waitlist signups, even with the tab closed. Every submission is also listed in your dashboard under Forms & Leads.

Can I keep using Supabase or Lovable Cloud after moving the frontend?

Yes. For an older React + Vite Lovable app, set VITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY and VITE_SUPABASE_PROJECT_ID before you build, and add the new address and your domain to the allowed redirect URLs in your auth settings so sign-ins keep working. A TanStack Start app on a server host also needs SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY for its server code.

Does Statpio's analytics need a cookie banner?

Statpio's analytics sets no cookies and uses no third-party trackers, but it keeps a visit ID in the browser's sessionStorage for the open tab. Whether that needs consent depends on where you and your visitors are, so check the rules that apply to your site.

Keep reading