How to Deploy a v0 Site on EZLaunch
v0 by Vercel generates Next.js projects, and Next.js can produce a fully static site with one config line. Download the project from v0, set output: 'export', run npm run build, and upload the out folder to EZLaunch. The catch: static export only works when the app has no server-side code, so this guide shows what to ask v0 for up front.
What v0 produces and what EZLaunch needs
v0 outputs React components and, for full projects, a Next.js app with the App Router, Tailwind, and shadcn/ui. Next.js normally runs on a Node server. EZLaunch serves static files only, so you use Next's static export mode, which turns every page into an HTML file at build time.
Static export supports client components, client-side data fetching, and static pages. It does not support API routes, server actions, middleware, dynamic routes without generateStaticParams, or the built-in image optimizer. Landing pages, marketing sites, portfolios, and docs export cleanly. Dashboards with server actions do not.
Shortcut: tell v0 at the start, "Make this a static marketing site: no API routes, no server actions, no middleware, use plain <img> tags, and set output: 'export' in next.config." Then everything below just works.
Step 1: Download the project
In v0 open your project and use the download option to get a ZIP of the codebase, or push it to a GitHub repository from v0's project menu and clone it. Unzip or clone into a folder on your computer. You need Node.js 18 or newer.
Step 2: Turn on static export
Open next.config.js (or .mjs / .ts) and make sure it contains:
const nextConfig = {
output: 'export',
images: { unoptimized: true },
trailingSlash: true,
};
export default nextConfig;
images.unoptimized is required because the image optimizer needs a server. trailingSlash makes every page export as about/index.html, so /about/ resolves on a static host without any fallback rules. If v0 used next/image with remote URLs, those keep working unoptimized.
Step 3: Build
cd YOUR-V0-PROJECT
npm install
npm run build
With output: 'export', the build writes a folder named out containing index.html, one folder per route, and a _next folder of assets. If the build fails with a message about a server feature, that is the page or component you need to ask v0 to make static.
Zip it the right way
EZLaunch needs index.html at the top level of the ZIP, not inside a folder. Zip the files inside your output folder, not the folder itself.
- Mac: open the folder in Finder, select all (Cmd+A), right-click, Compress.
- Windows: open the folder, select all, right-click, Send to → Compressed (zipped) folder.
- Terminal:
cd out && zip -r ../site.zip .
Correct: site.zip → index.html, assets/. Wrong: site.zip → out/index.html. The free plan accepts ZIPs up to 50 MB.
Upload to EZLaunch
Sign in at app.ezlaunch.app, click New site, and drag the ZIP onto the upload area. The site is live on a something.ezlaunch.app address with HTTPS and analytics already on. Or skip the ZIP and deploy the folder from the terminal:
npm install -g ezlaunch
ezlaunch login
cd out
ezlaunch deploy
Custom domain and forms
Domain: in the site's Settings → Custom Domain enter your domain, add an A record at your DNS provider pointing to 87.99.143.176, click Check DNS. A Let's Encrypt certificate is issued automatically, usually within two minutes.
Forms: add data-ezlaunch name="contact" to any <form> tag and redeploy. EZLaunch injects the endpoint, filters spam with a honeypot, and shows submissions in the dashboard on paid plans.
Vercel or EZLaunch?
v0 is made by Vercel and deploys there in one click, which is the natural home for a Next.js app that needs server features. For a static site, EZLaunch gives you a custom domain on the free plan, form handling without writing an API route, analytics without a third-party script, and the same workflow for sites built with Lovable, Bolt, Claude Code, or by hand. Prototype in v0, ship the static version on EZLaunch.
Common questions
Build error: "Page with dynamic = 'force-dynamic' couldn't be exported."
A page opts into server rendering. Remove that export or ask v0 to make the page static.
Links to /about work from the homepage but 404 on refresh.
You are missing trailingSlash: true, so the page exported as about.html instead of about/index.html. Add it and rebuild.
Can I keep the v0 contact form?
If it posts to a server action, replace it with a plain <form data-ezlaunch name="contact">. EZLaunch handles the submission.
More deploy guides
Overview of every option: Deploying sites built by ChatGPT, Claude, Bolt, Lovable, and Replit.
EZLaunch is a product I build. Menu names and features in v0 change; check its documentation for current specifics.