miinideckmiinideck
PricingUse casesBlog
Sign in
Prompting AI

Export clean, self-contained HTML from v0 or Lovable for private sharing (2026)

v0 and Lovable build React/Next projects, not single files — so "export" means a folder or a public deploy, neither of which is a quiet private link. Here's how to get a clean build and share the static slice privately.

By miinideck·September 10, 2026·7 min read
TL;DR
  • v0 and Lovable don't make single HTML files. They build React/Next projects, so "export" means a multi-file folder (Download ZIP, GitHub push) or a deploy on their own infrastructure — neither is a quiet private link.
  • The clean path depends on what your app is: a front-end-only build is static files once built, and static files can live at a private link with no deploy and no account for the viewer.
  • If the app has a backend, a database, or server routes, it needs a real server — host it on Vercel or Netlify, which exist for exactly that. The static slice is the part this guide covers.

You finished a page in v0. It looks right in the preview pane. You want to send it to one person — a client, a teammate, a friend whose opinion you trust — without putting it on the public internet first. So you go looking for the export button.

And you find two: Download ZIP and Deploy. Neither does what you pictured. The ZIP is a folder of source code that won't open by double-clicking. The deploy publishes a live, public URL on shared infrastructure. There's no "give me one quiet thing I can hand to one person" button, because v0 and Lovable were never building one file. They were building a project — and the preview pane you've been staring at is rendered by their server, not by a file you own yet.

That gap — between what these tools produce and what private sharing needs — is the whole story here. Once you see the shape of the output clearly, the clean path is obvious.

What v0 and Lovable actually export

Both tools generate a React/Next.js project, not a webpage. That's a real distinction with consequences.

  • v0's Download ZIP hands you the source: a components/ directory, a package.json, config files, Tailwind setup. Open the ZIP, double-click index.html, and nothing happens — there is no index.html. It's source that needs a build step before a browser can run it. (A ZIP viewer lists what is actually inside without extracting anything, which is the fastest way to see whether there is an entry page at all.)
  • Lovable's export is the same idea routed through GitHub: it connects a repo and pushes the project source there. Again, source — not a runnable artifact.
  • Both tools' "Publish" / "Deploy" skips the export entirely and stands up a hosted, public version on their own platform. Fast, but it's a public deploy, and you're now hosting on their terms with their footer.

So the raw export is source code, and the deploy is a public URL. The thing in between — a runnable bundle you can share privately — is something you produce yourself, in one step, and it's easier than it sounds.

The one step that makes it shareable: build it

A React/Next project becomes browser-ready when you build it. The build turns source into a folder of plain static files — HTML, CSS, JS, assets — that any browser can serve without a Node process running.

For most v0 pages and many Lovable front-ends, that's a static export:

Build this as a static site with no server runtime. Output plain static files to a dist or out folder — index.html as the entry, with bundled CSS and JS and all assets, so it runs by opening index.html in a browser with no npm start.

After the build you have a folder. That folder is the real deliverable. It's not one file — it's index.html plus its bundled assets, referencing each other by relative path, exactly as they did in the preview. And a folder of static files is something you can share privately without deploying it.

(If you'd rather skip the project entirely and get a genuine single file, that's a different request made at generation time — ask the model to build a vanilla single-page HTML instead of a React app. The portable-export prompt patterns cover that route. But for an app you've already built in v0 or Lovable, building the project is faster than rewriting it.)

Built the project? Zip the output folder and drop it. miinideck unpacks it and serves the whole app at one private link — relative paths intact, nothing public unless you say so. No card, no account for you, no account for the person who opens it.

Drop your built folder (no signup)

Why not just deploy it and send that URL?

You can. For some apps you should — and we'll get to exactly which ones. But for a private review, a public deploy carries baggage the moment doesn't need.

A deploy is public by default. It's discoverable, it's indexed, and it lives until you remember to tear it down. For a finished product, that's correct. For "tell me if this v0 layout works before I show the client," it's the wrong altitude — you've published a thing to share it with one person.

The private-link path inverts that default. The bundle is private and no-index from the start. The link is unguessable. Anyone you send it to opens it with no account; anyone you didn't send it to never finds it. When the review's over, you let it expire or delete it. "Anyone can see it" means anyone you handed the link to — not the public.

You also get review controls that fit a draft: a password on the link when the page is sensitive, and a record of who actually opened it so you know whether your reviewer has looked yet. Those are sharing concerns, not hosting concerns, and they belong on the link.

The honest boundary: when it needs a real backend

Here's where the static path stops, and it's worth being plain about it.

The build-and-share route works because the app's logic runs entirely in the browser. That's true for most v0 prototypes and a lot of Lovable pages — they're front-ends. But the moment your app needs a server at runtime, static files aren't enough.

You need a real host when the app has:

  • Server-side rendering or API routes — Next.js app/api/ handlers, server actions.
  • A database — anything reading or writing persistent data on request.
  • Authentication with real sessions, or secrets used server-side at runtime.

For those, host on Vercel or Netlify. That's precisely what they're built for: they run the server, handle the routes, manage the environment, and give you a production URL with a backend behind it. Trying to flatten a backend app into static files won't work, and you shouldn't fight it.

The line is clean: server logic → Vercel or Netlify. Static front-end → a private link. A surprising number of "apps" from v0 and Lovable are front-end-only — a landing page, a calculator, an interactive mockup, a dashboard with hard-coded data. Those are the ones that fit the quiet-link path, and they're the common case for a review.

Make sure it actually travels

One last check, because an export that renders in v0's preview pane can still break for a stranger. AI-built pages often reach out to CDNs, Google Fonts, or a dev backend — references that resolve inside the tool's environment and 404 on someone else's network. A proper static build bundles its own assets, which is most of the fix. The proof is empirical: open the built artifact on a different network or device before you send it. If it renders there, it renders for your reviewer.

That's the whole arc. v0 and Lovable build projects, not files — so you build the project into static output, share the static slice at a default-private link, and send the backend-having apps to the host that's built for backends. If your app is the static kind, you can share a v0 build or share a Lovable app in the time it takes to zip the folder.

More in Prompting AI

Prompt patterns to ship portable, self-contained HTML from any AI tool (2026)

AI tools default to modular HTML — clean for development, fragile for one-file delivery. Cross-tool prompt templates that produce a single portable file from the first generation.

June 11, 2026·7 min read

Animation prompts that level up Claude / Lovable / Cursor-built sites (2026)

AI-built pages default to clean, static, and slightly bland. Four animation patterns and the cross-tool prompt templates that bring them in — without dragging in a heavy library.

June 5, 2026·7 min read

Prompting any AI tool for portable, shareable HTML: the complete guide (2026)

Prompt patterns that get Claude, ChatGPT, v0, Lovable, and Cursor to ship self-contained, lightweight, interactive HTML you can actually send as a link.

August 21, 2026·2 min read

Send your own private link.

miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.

Try it free →See pricing
miinideck

HTML files, finally as links — for AI builders, agencies, and consultants. Default-noindex, default-private, default-yours.

Product

  • Pricing
  • Use cases
  • Try it free

Resources

  • Blog
  • Free tools
  • Featured on
  • Report abuse

Legal

  • Privacy
  • Terms
Listed onmiinideck listed on Product Huntmiinideck listed on Faziermiinideck listed on TheSaaSDirmiinideck listed on AIToolHuntmiinideck listed on LaunchNest
© 2026 miinideckMade for people who don't want their work indexed.