TIPS 22 · FUORI

Porque deixei o Lovable

Como levar um projeto para fora do Lovable ou do Replit sem perder nada: código, base de dados, chaves, utilizadores, ficheiros e domínio, com os prompts para usar no Claude Code.

O que é e porque importa

O Lovable é cómodo. O motivo por que o deixei é outro: dentro de uma plataforma assim, o código vive do lado deles, o deploy passa por eles e os preços são eles que decidem. Eu prefiro um projeto que está numa pasta minha.

Para mim, há um ano essa comodidade fazia sentido, porque as outras ferramentas eram difíceis. Hoje com o Claude Code peço as mesmas coisas que pediria ao Lovable, a escrever como num chat, e no fim o projeto é meu: levo-o para onde quiser.

É uma escolha minha, não uma regra. Se estás bem onde estás, fica: este guia serve-te na mesma, porque ter uma cópia tua de tudo nunca faz mal.

A questão é que um projeto não é só o código: há os dados, as contas dos utilizadores, os ficheiros carregados, as chaves, o domínio. Cada peça sai por uma porta diferente, e se te esqueces de uma, dás por isso quando um utilizador já não consegue entrar.

Uma regra antes de tudo: não apagues nada enquanto o novo não funcionar.

1. O código num GitHub teu

No Lovable: Project settings → Git → GitHub. Ligas a tua conta e mandas criar o repositório: o Lovable cria-o privado e mantém-no sincronizado nos dois sentidos, o que mudas no Lovable vai para o GitHub e vice-versa.

No Replit: Tools → Git. Se o projeto ainda não tem repositório, carrega em «Initialize Git Repository». Depois ligas o GitHub (da primeira vez o Replit pede-te para o autorizar), fazes um commit e o push de todos os ficheiros.

Depois clonas o repositório para o teu computador, a partir do botão «Code» da página do repo no GitHub. A partir daqui é uma pasta tua.

2. A base de dados: estrutura e dados

O código leva a estrutura da base de dados, não os dados. No Lovable a estrutura está nas migrations, ficheiros SQL normalmente na pasta supabase/migrations. Os dados, ou seja, as linhas a sério, exportas à parte.

Sem os dados tens uma app vazia.

No Lovable Cloud a exportação da base de dados está nas definições avançadas do Cloud: More → Cloud → Overview → Advanced settings → Export data. O link chega por email: é um arquivo de backup do Postgres, com estrutura e dados, e restaura-se com pg_restore. Os ficheiros carregados e as chaves ficam de fora: levas-los à mão, como explico mais abaixo.

No Replit as bases de dados são duas. A de desenvolvimento usas enquanto constróis. A de produção é a que a app publicada usa, e é lá que estão os dados dos teus utilizadores: é essa que tens de exportar.

Abre a ferramenta Database e escolhe a de produção. No separador My Data podes exportar os dados para um ficheiro. No separador Settings está a string de ligação: segundo a documentação do Replit, qualquer cliente compatível com PostgreSQL se pode ligar à base de dados de produção, por isso o pg_dump também. Trata-a como uma palavra-passe.

Importas para um Postgres ou Supabase teu, novo e vazio.

3. Variáveis de ambiente e chaves

As variáveis secretas não saem nem com o código nem com a exportação da base de dados. E no Lovable os segredos não se podem voltar a ler, só substituir: o valor vais buscá-lo ao serviço que to deu.

No Replit encontra-las em Tools → Secrets, com os valores visíveis. Se a app estiver publicada, verifica também os segredos de produção nas definições de Publishing: podem ser diferentes.

Faz a lista de todas: base de dados, API, pagamentos, email. Põe-nas no .env do computador e nas definições do novo alojamento, nunca no código.

Quando a app nova funcionar, gera-as todas de novo e revoga as antigas: passaram por outra plataforma e já não sabes onde foram parar.

4. Utilizadores, ficheiros, domínio

Os utilizadores

As contas de login não viajam com as tabelas: se só mudares os dados, os utilizadores ficam para trás.

A exportação completa do Lovable Cloud, pelo contrário, inclui-os, com as palavras-passe cifradas. Se a restaurares num projeto Supabase, os utilizadores mantêm a palavra-passe; as sessões não, por isso todos vão voltar a fazer login.

No Replit, em Tools → Users & Auth, separador Users, vês quem se registou. Com o Replit Auth os utilizadores entram com uma conta Replit. As linhas deles na base de dados viajam com os dados, a forma de entrar não: decide antes o novo login e como fazer voltar quem já lá está.

Se vens por outro caminho e as palavras-passe não se podem levar, prepara um email de «redefine a tua palavra-passe» para enviar no dia da mudança.

Os ficheiros carregados

Fotos, documentos, avatares: não estão na base de dados nem no código. No Lovable Cloud encontra-los em More → Cloud → Storage. Descarrega-os e volta a carregá-los no novo armazenamento, em buckets (as «pastas» do armazenamento) com os mesmos nomes.

No Replit estão em App Storage: Tools → App Storage, escolhe o bucket no menu em cima à esquerda e na vista Objects descarregas cada ficheiro com o ícone ao lado.

Depois conta os ficheiros antes e depois.

O domínio

Aponta onde o domínio está registado e copia os registos DNS atuais antes de os mudares. No Replit o domínio ligado está em Publishing, separador Domains. Se o compraste dentro da plataforma, vê como se transfere antes de fechares seja o que for.

5. Abre a pasta com o Claude Code

Abre o terminal na pasta do projeto e arranca o Claude Code (cd para a pasta, depois claude). Lê os ficheiros sozinho. Eu dou-lhe estes pedidos, por esta ordem.

O prompt
Lê o projeto todo e explica-me como está feito: framework, base de dados, login, serviços externos. Faz-me a lista das variáveis de ambiente que são precisas.

Este é o mapa. Nos projetos Replit a app costuma encontrar a base de dados na variável DATABASE_URL: no novo vai ter de apontar para a tua.

O prompt
Cria um ficheiro .env.example com todas as variáveis, sem valores reais, e acrescenta .env ao .gitignore.

O .env.example só tem os nomes. Os valores reais ficam no .env, no teu computador, e o .gitignore diz ao git para nunca o enviar.

O prompt
Põe-no a arrancar localmente. Se alguma coisa depender da plataforma antiga, diz-me o quê e propõe-me como substituí-la.

É aqui que saem as coisas escondidas: um login que passa pela plataforma, um endereço escrito no código. Quanto o Claude Code pergunta antes de agir depende do modo de permissões, que mudas com Shift+Tab. Quando perguntar, lê o que ele vai fazer antes de dizeres que sim.

O prompt
Importa o dump da base de dados para uma base de dados local e verifica que as páginas mostram os dados reais.

Precisas do Postgres no computador: se faltar, pede ao Claude Code que te ajude a instalá-lo. Depois abre a app: se vês os teus utilizadores e os teus conteúdos, os dados estão lá.

6. Publica onde mandas tu

O prompt
Prepara o deploy no [Vercel / teu servidor]: diz-me os passos, as variáveis a definir e o que mudar no DNS. Não mexas em nada até eu te dizer ok.

A última frase conta: primeiro quero ler o plano. Também podes usar o plan mode (Shift+Tab, ou /plan antes do prompt): o Claude escreve um plano e não altera os ficheiros até o aprovares.

Antes de mudar o domínio, testa tudo no endereço que o novo alojamento te dá: login com uma conta antiga, um ficheiro carregado, os pagamentos em modo de teste. Depois, só quando a nova versão funcionar, por esta ordem:

  1. Mudas o domínio e acrescentas o novo endereço aos URL de redirecionamento autorizados pelo login.
  2. Geras as chaves de novo e revogas as antigas.
  3. Desligas a versão antiga.

Os erros mais comuns

  • Exportar do Replit a base de dados de desenvolvimento. Os dados da app publicada estão na de produção: exporta essa.
  • Escrever os valores reais no .env.example. Aí só vão os nomes; os valores ficam no .env, que o git ignora.
  • Esquecer como entram os utilizadores. Decide antes o novo login e como voltam a entrar os que já estão registados.
  • Copiar as chaves antigas para o novo e ficar por aí. Gera-as de novo e revoga as antigas.

Checklist

  • Código num GitHub teu, privado, clonado no computador
  • Estrutura e dados exportados da base de dados de produção
  • Lista das variáveis e .env.example sem valores reais
  • Utilizadores, ficheiros e registos DNS guardados
  • App a correr localmente com os dados reais
  • Login, ficheiros e pagamentos testados no novo alojamento
  • Domínio mudado, chaves geradas de novo, versão antiga desligada em último lugar

Perguntas frequentes

Serve também se o meu projeto não está no Lovable nem no Replit?

Sim. Os menus mudam, as peças não: código, dados, chaves, utilizadores, ficheiros e domínio. Procura na documentação da tua plataforma como sai cada uma.

Tenho de saber programar?

Não. Precisas de saber ler o que o Claude Code te propõe antes de dizeres que sim, e de não ter pressa. O trabalho técnico faz ele; as decisões tomas tu.

← Todos os guias