Guia · Lovable, Bolt e v0

Seu projeto do Lovable no ar, com domínio e banco.

O gerador entregou o código; falta um lugar para ele rodar. Suba o zip ou o repositório na LumaHost Cloud, a partir de R$ 14,90 por mês.

30 dias de garantia · Pix ou cartão · sem fidelidade

O caminho

Do zip exportado ao link público, em cinco passos.

Sem Docker e sem configurar servidor. A detecção do tipo de projeto é automática.
  1. 01

    Exporte o projeto

    No Lovable, conecte o GitHub ou baixe o código. No Bolt, use o download do projeto. No v0, use a opção de baixar ou enviar para um repositório. Apague node_modules e .git se for mandar o zip.
  2. 02

    Crie o app e envie

    No painel, Novo app e Enviar .zip (até 100 MB), ou informe owner/repo e a branch. O nome vira nome.lumahost.app. A RAM mínima é 256 MB, e um front-end estático costuma ficar nisso.
  3. 03

    Defina as variáveis antes do deploy

    Chaves do Supabase, URL do banco e qualquer VITE_ ou NEXT_PUBLIC_. Variável de build lida depois do deploy não vale: mudou, faça um novo deploy.
  4. 04

    Confira a porta

    Se há servidor, ele escuta em process.env.PORT e em 0.0.0.0. Front-end puro sobe como static e não tem porta para cuidar.
  5. 05

    Aponte o domínio

    Crie um CNAME ou um registro A com o valor que o painel mostra. O certificado HTTPS sai sozinho.

Por que não basta clicar em publicar

O que o gerador não resolve por você.

Hospedagem embutida serve para prototipar. Em produção, você quer domínio seu, banco seu e logs.

Lovable, Bolt e v0 geram bem a primeira versão, e a publicação deles é prática para mostrar para alguém. O problema aparece depois: o domínio é do gerador, o banco é de um serviço que você não escolheu e, quando algo quebra, não existe um log para ler. Ter o código exportado é justamente a saída para isso.

Esses projetos costumam sair em um de dois formatos. O mais comum é um front-end Vite com React, que sobe como site estático, usa quase nenhuma RAM e conversa direto com o Supabase. O outro é um app Next.js, que precisa de um processo rodando, ouvindo na porta que a plataforma entrega. A Cloud detecta qual é qual e faz o build sozinha; se errar, um lumahost.json na raiz corrige o tipo, a porta e os comandos.

Variáveis e banco

Supabase ou Postgres: os dois funcionam.

O banco da Cloud fica na mesma rede do app, sem passar pela internet.

Se o app já usa Supabase, deixe como está: coloque a URL do projeto e a chave anônima nas variáveis. Em projetos Vite, os nomes começam com VITE_, e o valor é gravado no código durante o build. Por isso a ordem importa: variáveis primeiro, deploy depois.

Se quiser o banco no mesmo lugar do app, crie um Postgres gerenciado (mínimo 512 MB de RAM) e copie a URL interna para uma variável DATABASE_URL. Ele tem backup diário com 7 dias de retenção, que você baixa e restaura pelo painel. A conexão de fora, da sua máquina, ainda não está disponível.

variáveis do app
VITE_SUPABASE_URL=https://xxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...
DATABASE_URL=postgres://...  # URL interna do banco

Armadilha conhecida

Next.js 16 e o erro do dynamic.

Cai em muito projeto exportado. A correção são duas linhas.

Projetos novos do Next 16 vêm com Cache Components ligado. Nesse modo, a configuração dynamic deixa de ser aceita, e o build falha com Route segment config "dynamic" is not compatible. Vários códigos gerados ainda trazem essa linha por hábito.

O conserto: remova o export const dynamic, envolva a parte que lê o banco em um Suspense e chame await connection() antes da consulta. Isso diz ao Next que aquele trecho depende da requisição. A lista completa de erros está em erros comuns.

app/page.tsx
import { Suspense } from 'react'
import { connection } from 'next/server'

async function Lista() {
  await connection() // depende da requisição
  const itens = await db.item.findMany()
  return <ul>{itens.map(i => <li key={i.id}>{i.nome}</li>)}</ul>
}

export default function Page() {
  return <Suspense><Lista /></Suspense>
}

Quanto custa

Quatro planos, preço fixo em reais.

Pix ou cartão, mensal ou anual. O upgrade vale na hora.

Hobby

R$ 14,90/mês

1 GB de RAM, até 1 vCPU, 10 GB de disco

Dev

R$ 24,90/mês

2 GB de RAM, até 2 vCPU, 20 GB de disco

Pro

R$ 44,90/mês

4 GB de RAM, até 3 vCPU, 40 GB de disco

Studio

R$ 79,90/mês

8 GB de RAM, até 4 vCPU, 80 GB de disco

Apps ilimitados dentro da RAM do plano. Bancos gerenciados saem do mesmo pool (mínimo 512 MB cada) e têm backup diário de 7 dias, menos o Redis. No anual, dois meses saem de graça.

  • HTTPS automático em nome.lumahost.app e no seu domínio
  • Logs de build e de execução no painel
  • Deploy também pelo MCP, direto do Claude Code ou do Cursor
  • Upgrade de plano vale na hora

Dúvidas

Perguntas frequentes

Posso hospedar um projeto do Lovable sem GitHub?

Pode. Exporte o projeto, compacte a pasta e envie o .zip pelo painel (até 100 MB, sem node_modules). Se preferir, conecte o GitHub e cada push vira um deploy.

O app do Lovable usa Supabase. Preciso migrar o banco?

Não. Se o app já fala com um projeto Supabase, ele continua falando: basta colocar a URL e a chave nas variáveis de ambiente, antes do deploy. Migrar para um Postgres da Cloud só faz sentido se você quiser tudo num lugar só, e aí o trabalho é do esquema e dos dados, não da hospedagem.

Por que meu build do Next.js 16 falha com "dynamic is not compatible"?

Projetos novos do Next 16 vêm com Cache Components ligado, e aí export const dynamic = 'force-dynamic' quebra o build. Tire a linha e leia o banco dentro de um Suspense, depois de await connection(), de next/server.

O site abre em branco depois do deploy. O que é?

Quase sempre é variável VITE_ faltando no momento do build: o Vite embute o valor no código, então ele precisa existir antes do deploy. Defina e faça um novo deploy, não só um reinício.

Posso testar antes de me comprometer?

Pode. Existe garantia de 30 dias: se não for o que você esperava, devolvemos o primeiro pagamento via Pix, com as regras descritas na página da Cloud.

Continue lendo

Guias e documentação.

Outros guias

Tire o projeto do protótipo.

Escolha um plano, suba o zip e, se não for o que esperava, devolvemos o dinheiro em até 30 dias.

30 dias de garantia, reembolso via Pix. Sem fidelidade.