← All deploy guides

How to Deploy a Lovable Site on EZLaunch

A Lovable project is a Vite + React source codebase, and EZLaunch hosts static files. So deploying takes four moves: get the code out of Lovable, run one build command on your computer, zip the output folder, and drop that ZIP on EZLaunch. Your site is live on an ezlaunch.app subdomain in seconds, and a custom domain with SSL takes one DNS record. The whole thing is about ten minutes the first time and two minutes after that.

What Lovable gives you, and why there is a build step

Lovable generates a complete front-end project: React with TypeScript, built by Vite, styled with Tailwind and shadcn/ui components. That is source code, not a finished website. Browsers cannot run TypeScript or JSX directly, so the project has to be compiled once into plain HTML, CSS, and JavaScript. Vite does that with a single command and writes the result to a folder named dist.

EZLaunch deliberately does not run build steps on its servers. It serves exactly the files you give it, which is what keeps deploys instant and predictable. That means the build happens on your machine, and what you upload is the dist folder, not the whole project.

If your Lovable app uses Supabase for login, a database, or storage, that part keeps running on Supabase. The front end you deploy to EZLaunch talks to it over the network exactly as it did on Lovable's hosting. See the Supabase notes near the end.

Before you start

  • Node.js 18 or newer on your computer. Download it from nodejs.org if node -v in a terminal shows nothing.
  • A free EZLaunch account at app.ezlaunch.app. The free plan accepts ZIPs up to 50 MB; a built Lovable site is usually under 5 MB.
  • A GitHub account, or a paid Lovable plan, which unlocks a direct code download. Either route works.

Step 1: Get the code out of Lovable

Option A, GitHub (works on every Lovable plan). In your Lovable project open Project settings → Git → GitHub and click Connect. Lovable creates a repository in your GitHub account and keeps it in two-way sync: every edit you make in Lovable lands in the repo, and commits you push to the active branch flow back into Lovable. From then on your code is always one git pull away.

Option B, direct download (paid Lovable plans). Open Project settings → Git and use Download codebase, or click the same button at the bottom of the file tree in Lovable's code editor. You get a ZIP of the source project. Unzip it somewhere you can find it.

Step 2: Fix routing before you build

This is the step people skip and then wonder why their site half works. Lovable apps use React Router in browser-history mode, so a page like /pricing only exists inside the running JavaScript app. On a static host, if a visitor opens yoursite.com/pricing directly, refreshes there, or shares that link, the server looks for a file called pricing, finds nothing, and returns a 404. EZLaunch, like most static hosts, does not currently redirect unknown paths back to index.html.

The fix is one prompt in Lovable, before you export or build:

Switch the app from BrowserRouter to HashRouter so it can be hosted as static files. Keep all routes and links working.

Your URLs become yoursite.com/#/pricing and every one of them works when opened directly. If your site is a single page with no routes, you can skip this step.

Step 3: Build the site on your computer

Open a terminal in the project folder. If you went the GitHub route, clone it first. Then install dependencies and build:

git clone https://github.com/YOUR-USER/YOUR-LOVABLE-REPO.git
cd YOUR-LOVABLE-REPO
npm install
npm run build

When it finishes you will have a dist folder containing index.html, an assets folder, and a few other files. That folder is your entire website. You can double-check by running npm run preview and opening the local URL it prints.

Step 4: Zip the contents of dist

EZLaunch needs index.html at the top level of the ZIP, not nested inside a dist folder. So zip the files inside dist, not the folder itself.

  • Mac: open dist in Finder, select all files (Cmd+A), right-click, Compress.
  • Windows: open dist, select all, right-click, Send to → Compressed (zipped) folder.
  • Terminal: cd dist && zip -r ../site.zip .

Correct structure: site.zip → index.html, assets/, favicon.ico. Wrong structure: site.zip → dist/index.html.

Step 5: Upload to EZLaunch

Sign in at app.ezlaunch.app, click New site, and drag your ZIP onto the upload area. The site goes live on a something.ezlaunch.app address with HTTPS already on. Analytics start collecting immediately on every plan.

Prefer the terminal? The CLI deploys the folder you are standing in, so no ZIP is needed:

npm install -g ezlaunch
ezlaunch login
cd dist
ezlaunch deploy

The GitHub connect option on the EZLaunch dashboard copies a repository's files as they are. Because a Lovable repo contains source rather than built output, use the ZIP or CLI route for Lovable projects.

Step 6: Add your custom domain

In your site's Settings → Custom Domain, enter the domain. Then at your DNS provider add an A record pointing the domain to 87.99.143.176. Back in EZLaunch click Check DNS. Once the record resolves, a Let's Encrypt certificate is issued automatically, usually within two minutes, and the site answers on your domain over HTTPS.

Step 7: Make the contact form work

Lovable often generates a contact form that posts nowhere, or wires it to Supabase. EZLaunch can handle it without a backend. Ask Lovable to add one attribute to the form tag:

<form data-ezlaunch name="contact">

Rebuild and redeploy. EZLaunch injects the endpoint, adds honeypot spam protection, and shows submissions in your dashboard. Form submissions are included on paid plans; the free plan hosts the site but does not collect submissions.

Updating the site later

Edit in Lovable as usual. When you want the live site to change: git pull (or download again), npm run build, then either upload the new ZIP to the same site in the dashboard or run ezlaunch deploy from dist. Two minutes, no downtime.

If your app uses Supabase

  • Vite bakes VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY into the build. Make sure a .env file with those values exists in the project before npm run build. Lovable normally commits them; the anon key is designed to be public.
  • In the Supabase dashboard under Authentication → URL Configuration, add your new EZLaunch address and custom domain to the redirect list, or login redirects will fail.
  • Nothing about the database moves. Only the front end is hosted on EZLaunch.

Lovable hosting or EZLaunch?

Lovable publishEZLaunch
SetupOne click inside LovableBuild locally, upload ZIP
Custom domainAvailable on Lovable's paid plansIncluded, free plan too
Forms without a backendNoYes, one attribute
AnalyticsNoIncluded on every plan
Deploy from other tools tooLovable projects onlyAny static site: Bolt, v0, Claude Code, Cursor, hand-written
Best forPrototypes you keep editing dailySites you want on your own domain with forms and analytics

Many people use both: Lovable's built-in preview while iterating, EZLaunch for the live site on the real domain.

Common questions

Does EZLaunch build my Lovable project for me?

No. EZLaunch hosts the built output only. Run npm run build locally and upload the dist folder's contents.

My pages 404 when I refresh. Why?

Your app uses browser-history routing and the host has no file at that path. Ask Lovable to switch to HashRouter (Step 2), rebuild, and redeploy.

The site loads but styles or images are missing.

Almost always the ZIP contains a dist folder instead of the files inside it. Re-zip from inside dist (Step 4).

Can I keep editing in Lovable after deploying to EZLaunch?

Yes. Lovable keeps syncing to GitHub. Pull, build, and redeploy whenever you want the live site updated.

How big can the ZIP be?

50 MB on the free plan, 100 MB on Starter, 500 MB on Pro, 1 GB on Agency. A typical Lovable build is 1 to 5 MB.

More deploy guides

Overview of every option: Deploying sites built by ChatGPT, Claude, Bolt, Lovable, and Replit.

EZLaunch is a product I build. Lovable's features and plan details change; check lovable.dev for current specifics.