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.
| Tool | How it sends code to GitHub | Their docs |
|---|---|---|
| Lovable | Project settings, then Git, then GitHub, then Connect. Lovable makes a new private repository and keeps it in sync both ways. | Lovable: GitHub |
| Bolt | The 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 |
| v0 | The project menu (...), then Settings, then GitHub, then Connect. Choose the account, name the repository, and choose Create Repository. | v0: GitHub |
| Replit | In Tools, add Git. Connect the repository to GitHub, commit your changes, and push. | Replit: Git pane |
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.
On her project's page, in the Add a service card, she chooses App.
Under Where's your code?, she chooses GitHub, then Connect GitHub, and lets Tanzahost read
asha/duka-bookingsonly. See How do I connect GitHub to my app?.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.She gives the app a name and its limits, and chooses Deploy.
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 app | What we see | How it runs |
|---|---|---|
| A Vite site with React (most Lovable and Bolt apps) | A build script, and no start script or server file | We run the build and serve the dist folder as a static site |
| Next.js (most v0 apps) | next in your dependencies | next 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.js | Your 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.lockborbun.lock, we install with npm.Node.js version: from
.nvmrc, orenginesinpackage.json. We offer Node.js 22 and 24.The port: a server must listen on the port in the
PORTvariable, which we set for you. Code that always uses port 3000 or 5000 won't get visitors. In Express, that'sapp.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.
Open your project's Variables tab and choose your app.
Choose Paste a .env file, paste your lines (like the example below), and choose Add them.
When the page says Redeploy to apply, choose Redeploy.
Asha's Lovable app needs two:
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.
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
Static sites and Node.js, in detail