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 -vin 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
distin 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_URLandVITE_SUPABASE_ANON_KEYinto the build. Make sure a.envfile with those values exists in the project beforenpm 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 publish | EZLaunch | |
|---|---|---|
| Setup | One click inside Lovable | Build locally, upload ZIP |
| Custom domain | Available on Lovable's paid plans | Included, free plan too |
| Forms without a backend | No | Yes, one attribute |
| Analytics | No | Included on every plan |
| Deploy from other tools too | Lovable projects only | Any static site: Bolt, v0, Claude Code, Cursor, hand-written |
| Best for | Prototypes you keep editing daily | Sites 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.