AI & publishing

How to publish a v0, Bolt, or Lovable project as a live website

3 September 2026 · 3 min read

v0, Bolt, and Lovable all do the same core trick: you describe a page and get working code back, running right there in the browser. None of them is a host, though, so at some point you have to move that code onto a real URL you can actually send someone. What the next step looks like depends on one thing: whether what you built is already plain HTML, or a framework project that needs a build step before it can be hosted anywhere.

Figure out which one you have

Download or export the project first. Open the folder and look for an index.html sitting at the top level, next to plain .css and .js files. If that's what you see, you already have a static site and can skip straight to uploading it.

If instead you see a package.json, a src folder full of .tsx or .jsx components, and no index.html anywhere near the root, you're looking at a framework project, most commonly React, Next.js, or Vite depending on which tool generated it. That's not something a static host can serve directly. It needs one more step first.

Building a framework project into static files

A React or Vite project builds with one command: npm install followed by npm run build. That produces a dist folder (or build, depending on the template) containing the finished HTML, CSS, and JS. That folder is what you zip and upload, not the source folder you started with.

A Next.js project needs one extra check first. Static hosting only works if the app doesn't rely on server-side routes or API endpoints, since there's no server running behind it. If it's a static export, add output: 'export' to next.config.js, then run next build. That produces an out folder you can upload the same way. If the project genuinely needs a Node server (API routes, server actions, image optimization at request time), a static host isn't the right fit for it and no amount of exporting will change that.

Uploading either kind

Once you have a folder with an index.html at the root, whether that came straight from the export or from a build step, zip it and upload it to MakeMySiteLive. It's validated, scanned, and live at a free yourname.makemysitelive.com address with HTTPS by the time the upload finishes.

Prefer not to leave the terminal? The CLI (npm i -g @mmsl/cli, then mmsl deploy) takes a folder or a .zip directly, so there's no separate zipping step either.

What stops working once it's static

Anything that ran on a server while you were previewing inside v0, Bolt, or Lovable, like an API route, a database call, or server-side form handling, won't run after a static export. Everything that happens in the browser (styling, animation, client-side JavaScript, fetch calls to an external API) keeps working exactly as built, since none of that depends on your original tool's server.

Key takeaways

  • Check for an index.html at the project's root first. If it's there, the project is already static and ready to upload.
  • No index.html and a package.json instead means it's a framework project (React, Next.js, or Vite) that needs a build step first.
  • Vite and plain React projects build with npm run build, producing a dist or build folder to upload.
  • Next.js needs output: 'export' in next.config.js before next build, and only works this way if the app doesn't depend on API routes or a running server.
  • Whatever folder ends up with index.html at the root is what gets zipped and uploaded, not the original source folder.

Frequently asked questions

Can I upload my v0, Bolt, or Lovable project straight from the export, with no build step?

Only if the export already contains a plain index.html at the root. If it's a React, Next.js, or Vite project instead, you need to run a build first and upload the output folder, not the source.

Why doesn't my Next.js app work after I upload it?

Static hosting can't run a Node server, so API routes and other server-side features won't work. Export the app statically (output: 'export' in next.config.js, then next build) and only upload the resulting out folder if the app doesn't depend on those features.

Which folder do I actually zip and upload?

Whichever one has an index.html sitting at its top level. For a fresh static export that's usually the export itself; for a framework project it's the build output (dist, build, or out), never the source folder with package.json in it.

Will my animations and client-side interactivity still work?

Yes. Anything that runs in the browser, CSS, JavaScript, client-side fetch calls, works exactly as built. Only server-dependent features stop working once the site is static.

Share this article

Keep reading

More from the blog

Ready to go live?

Create a free account and publish your first site in 2 minutes.

Get started free