Skip to content
Guides

Move an app from Lovable, Bolt, v0 or Replit

Send your Lovable, Bolt, v0 or Replit app to GitHub, then deploy it on Tanzahost with its variables and your own domain.

Updated 17 Oct 20264 min read

Each of these tools can put your app's code in a GitHub repository. From there, you connect the repository to a Tanzahost app, add the app's variables (like its Supabase keys), and point your domain at it. We detect whether it's a Vite site, a Next.js app or a Node.js server, and build it for you.

Step 1: put your code on GitHub

Every tool does this from its own screens. These are their own instructions, checked on 2026-10-17.

ToolHow it sends code to GitHubTheir docs
LovableProject settings, then Git, then GitHub, then Connect. Lovable makes a new private repository and keeps it in sync both ways.Lovable: GitHub
BoltThe GitHub icon at the top right, Log in to GitHub, install Bolt's GitHub app, then name the repository and choose Create repository. Bolt commits your changes by itself.Bolt: GitHub
v0The project menu (...), then Settings, then GitHub, then Connect. Choose the account, name the repository, and choose Create Repository.v0: GitHub
ReplitIn Tools, add Git. Connect the repository to GitHub, commit your changes, and push.Replit: Git pane
v0 and branches

v0 works on its own branch and, when you choose Publish, merges it into the chat's base branch, usually your repository's default branch. Build the branch your finished code lands on, usually main.

Step 2: add the app on Tanzahost

Asha built a booking page for her shop in Lovable. It lives in the repository asha/duka-bookings.

  1. On her project's page, in the Add a service card, she chooses App.

  2. Under Where's your code?, she chooses GitHub, then Connect GitHub, and lets Tanzahost read asha/duka-bookings only. See How do I connect GitHub to my app?.

  3. She picks the Repository and the Branch main, and leaves Build every time I push on, so each change she makes in Lovable deploys by itself.

  4. She gives the app a name and its limits, and chooses Deploy.

Until GitHub is switched on

Connecting GitHub needs our GitHub app, which isn't set up yet, and the GitHub tab says so. Meanwhile, download your repository from GitHub as a ZIP (Code, then Download ZIP) and choose Upload a ZIP instead. The folder GitHub wraps around your files is removed for you.

What we detect

We read your package.json and build the app the way its framework expects.

Your appWhat we seeHow it runs
A Vite site with React (most Lovable and Bolt apps)A build script, and no start script or server fileWe run the build and serve the dist folder as a static site
Next.js (most v0 apps)next in your dependenciesnext start, unless you have your own start script
A Node.js server (many Replit apps)A start script, a main file, or a server.js, index.js or app.jsYour start script, or that file

Good to know:

  • Package managers: we use npm, pnpm or Yarn, from your lock file. Bun's lock file isn't used yet: if your code has only bun.lockb or bun.lock, we install with npm.

  • Node.js version: from .nvmrc, or engines in package.json. We offer Node.js 22 and 24.

  • The port: a server must listen on the port in the PORT variable, which we set for you. Code that always uses port 3000 or 5000 won't get visitors. In Express, that's app.listen(process.env.PORT).

  • The health check: a new version gets visitors only once / answers with a success. If yours lives elsewhere, set Health address in the app's Build and run card.

  • Something else? Change the Install command, Build command, Start command or Folder in Build and run.

Step 3: add your variables

Your app's keys don't travel with the code. Copy them from the old tool's settings, or from your .env file.

  1. Open your project's Variables tab and choose your app.

  2. Choose Paste a .env file, paste your lines (like the example below), and choose Add them.

  3. When the page says Redeploy to apply, choose Redeploy.

Asha's Lovable app needs two:

Terminal
VITE_SUPABASE_URL=https://abcd1234.supabase.co
VITE_SUPABASE_ANON_KEY=…

Variables are there while the app builds, too. That matters here: a Vite app only gives the browser variables whose names start with VITE_, and writes them in when it builds (Vite's docs). Next.js does the same for names starting with NEXT_PUBLIC_ (Next.js docs). So after changing one, redeploy.

Keep secret keys on the server

Anything with VITE_ or NEXT_PUBLIC_ is readable by every visitor. A Supabase project's anon key is made for browsers; its service role key, or a payment secret, is not. Give those to server code only, under a name without the prefix.

Some tools write the keys straight into the code instead, like a Supabase client file with the address in it. Then there's nothing to copy, and the app works as it is.

Step 4: your domain

Your app is live first on its free address, like duka-7h3k.tanzahost.co. When it works there, open the project's Domains tab and choose Add a domain. See How do I add my own domain?.

If your app uses Supabase sign-in, add the new address to the Site URL and redirect URLs in your Supabase project's sign-in settings, or logins will send people back to the old one.

Next