EthioDeploy/Docs
HomePricing
Overview

Overview

  • Getting started
  • How deploys work

Frameworks

  • Framework guides

Configuration

  • Web services & background workers
  • Environment variables
  • Addons
  • Database & Redis tools
  • Branch deployments
  • Custom domains
  • Analytics

Domains

  • Buying a domain

Agent mode

  • Agent mode
  • Agent plans & credit

CLI

  • Command-line tool

Account

  • Team access
  • Billing

Help

  • Troubleshooting
  • Still stuck?
Deploy guides
  • Next.js
  • Node.js
  • Python
  • SvelteKit
  • Lovable
  • Bolt
Compare
  • AI coding agent
  • Hosting in Ethiopia
  • vs Heroku
  • vs Vercel
  • vs Render
  • vs Railway
Deploy guidesLovable

Deploy a Lovable app

Sync your Lovable project to GitHub and EthioDeploy builds it on every push. Older Lovable apps deploy as-is; apps created since May 2026 need one start command.

Last updated October 21, 2026

Detected by
vite or @tanstack/react-start in package.json
Install
npm ci (from your lockfile)
Build
npm run build
Start
Static files with an index.html fallback (Vite apps), or node .output/server/index.mjs (TanStack Start apps, set it yourself)

These are the defaults. Override any of them in Settings → Build.

New Lovable apps need a start command

Lovable apps created since May 13, 2026 use TanStack Start, which runs a server. If package.json lists @tanstack/react-start, set the Start command to node .output/server/index.mjs in Settings → Build and add the env var NITRO_PRESET=node-serverbefore the first deploy. Without them the app is treated as a static site and won't load.

Check which kind of Lovable app you have

Lovable has generated two kinds of apps. Open package.json in your repo:

  • No @tanstack/react-start: an older React + Vite app that runs entirely in the browser. We build it with npm run build and serve dist/, and every route falls back to index.html, so deep links and page refreshes work with no extra config.
  • Has @tanstack/react-start: a newer app that renders on a server. Set the Start command and NITRO_PRESET as described above. We set PORT for you and the server reads it.

Connect Lovable to GitHub

In Lovable, open Project settings → Git → GitHub and connect. Lovable creates a new private repository for the project; it can't connect to an existing one.

The sync is two-way on the default branch (usually main): changes you make in Lovable are pushed to GitHub, and EthioDeploy redeploys on every push. You can keep building in Lovable and your EthioDeploy app stays up to date.

Environment variables

Your app needs its Supabase values. Lovable keeps them in the .envfile, which you can see in Lovable's code editor or in the synced repo. Add them in the project's settings on EthioDeploy:

  • VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY (all apps). These are baked into the JavaScript at build time, so add them before the deploy and redeploy after any change.
  • SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY (TanStack Start apps, read by server code), plus NITRO_PRESET=node-server.
  • Any secrets your server functions read. Secrets stored in Lovable are not part of the repo, so copy them over by hand.

See Environment variables.

Your backend stays where it is

EthioDeploy hosts the app itself. If your project uses Lovable Cloud or your own Supabase project, the database, auth and storage keep running there, and the deployed app talks to them with the values above.

  • Add your EthioDeploy URL (and your custom domain, if you add one) to your auth provider's allowed redirect URLs, or sign-in will fail.
  • Edge functions live in supabase/functions/ and keep running on Supabase. Deploy changes to them with the Supabase CLI.
  • While the project uses Lovable Cloud, AI model calls and app connectors keep running through Lovable.

Deploy

  1. Sign in with GitHub and install the EthioDeploy app on the repo.
  2. Click “New Project” and pick the repo.
  3. Watch the build in the dashboard. When the health check passes, your app is live at <project-slug>.ethiodeploy.com. Every push to the default branch redeploys, and the old version keeps serving until the new one is healthy.

Troubleshooting

The site doesn't load and the build log shows Caddy

Cause: A TanStack Start app was served as a static site because no start command was set.

Fix: Set the Start command to node .output/server/index.mjs, add NITRO_PRESET=node-server, and redeploy.

Blank page, and the browser console mentions supabaseUrl

Cause: The VITE_SUPABASE_ values weren't set when the app was built.

Fix: Add them in Settings, then trigger a new deploy.

Sign-in fails or redirects to the wrong site

Cause: Your new URL isn't in the auth provider's allowed redirect URLs.

Fix: Add the ethiodeploy.com URL and any custom domain to the allowed redirect URLs.

A feature that calls a server function fails

Cause: It reads a secret that lives in Lovable, not in the repo.

Fix: Add the secret as an env var in Settings and redeploy.

Still stuck? Check the deployment's build log in the dashboard, or see Troubleshooting.

Ready to deploy? Sign in with GitHub and pick your repo. No Dockerfile, no YAML.

Other framework guides

Next.jsNode.jsPythonSvelteKitBolt

See the full docs for custom domains, env vars, addons, and billing.

On this page

  • Check which kind of Lovable app you have
  • Connect Lovable to GitHub
  • Environment variables
  • Your backend stays where it is
  • Deploy
  • Troubleshooting

Product

  • Pricing
  • Documentation
  • AI coding agent
  • Agent mode docs
  • Domains
  • Hosting in Ethiopia

Deploy guides

  • Next.js
  • Node.js
  • Python
  • SvelteKit
  • Lovable
  • Bolt

Compare

  • EthioDeploy vs Heroku
  • EthioDeploy vs Vercel
  • EthioDeploy vs Render
  • EthioDeploy vs Railway

Company

  • About
  • Support
  • Contact
  • Terms
  • Privacy

EthioDeploy: agentic first development and deployment, started in Ethiopia, built for developers everywhere.