TL;DR
localhost:3000 é o seu playground. Produção é o mundo real. A diferença entre os dois é o que separa "fiz um app" de "tenho um produto". Este artigo explica exatamente o que muda, e como não travar nessa transição.
O momento que todo vibecoder conhece
Você passou horas (ou minutos, com a ajuda de uma IA) construindo algo incrível. Tá rodando lindo no seu navegador. Você mostra pra um amigo e ele pergunta: "Manda o link?"
E aí vem o silêncio.
Porque localhost:3000 não é um link. É o seu computador falando com ele mesmo. E a distância entre isso e um site de verdade na internet é onde 90% dos vibecoders travam.
O que é localhost, afinal?
Quando você roda npm run dev, seu computador vira um servidor web temporário. O "localhost" é literalmente "este computador aqui". A porta 3000 é como o número de um apartamento, indica qual programa está atendendo.
Só você tem acesso. Desligou o terminal? Morreu.
O que muda em produção?
1. Seu código precisa de uma casa permanente
Em vez de rodar no seu notebook, o app precisa viver em um servidor que fica ligado 24/7. Pode ser uma instância dedicada, uma máquina virtual, ou um serviço serverless, mas precisa estar sempre disponível.
2. Variáveis de ambiente
No localhost, muita gente coloca senhas e chaves direto no código. Em produção, isso é um desastre de segurança. Você precisa usar variáveis de ambiente: configurações que existem no servidor mas nunca no código.
# Em vez disso no código:
const dbUrl = "postgresql://user:senha@localhost:5432/meubanco"
# Você usa isso:
const dbUrl = process.env.DATABASE_URL3. HTTPS é obrigatório
No localhost, tudo roda em HTTP (sem o "S" de seguro). Na internet, HTTPS é obrigatório. Sem ele, navegadores mostram avisos assustadores, funcionalidades como câmera e geolocalização não funcionam, e o Google te penaliza no ranking.
Configurar SSL manualmente é chato. Plataformas modernas como o Veloz fazem isso automaticamente.
4. Banco de dados
Aquele PostgreSQL ou SQLite rodando na sua máquina? Ele não existe em produção. Você precisa de um banco de dados hospedado, seja um serviço gerenciado (como Supabase ou Neon) ou um banco rodando no seu servidor.
E não esqueça: os dados do localhost não migram sozinhos. Você precisa rodar migrations e, possivelmente, seeds.
5. DNS e domínio
No localhost, o endereço é um IP local. Em produção, você precisa de um domínio (como meuapp.com.br) e configurar DNS para apontar para o seu servidor. Parece simples, mas é onde muita gente se perde com registros A, CNAME e propagação.
6. Performance e escala
Seu notebook tem 8GB de RAM e serve uma pessoa (você). Em produção, podem ser centenas ou milhares de pessoas acessando ao mesmo tempo. O servidor precisa aguentar, e de preferência estar perto dos seus usuários.
Se seus usuários estão no Brasil e seu servidor está nos EUA, cada clique tem 150-200ms de latência extra. Por isso fazer deploy no Brasil faz diferença.
Por que vibecoders travam aqui?
Porque ninguém ensina deploy. Tutoriais terminam em "rode npm run dev e pronto". Cursos focam em React, não em infraestrutura. E a documentação de deploy assume que você já sabe o que é Docker, Nginx e SSH.
O vibecoder moderno sabe construir. Ele usa Cursor, Bolt, ou Claude pra criar apps funcionais. Mas a hora de colocar no ar ainda parece um muro.
Como simplificar essa transição
A boa notícia: você não precisa aprender DevOps. Ferramentas modernas abstraem toda essa complexidade.
Com o Veloz, por exemplo, o processo é:
$ veloz deployIsso cuida de tudo: build, infraestrutura, SSL, DNS, banco de dados, variáveis de ambiente. Seu app sai do localhost para produção, no Brasil, com baixa latência, em segundos.
Checklist: do localhost à produção
Antes de fazer deploy, confira:
- ✅ Nenhuma senha ou chave hardcoded no código
- ✅ Todas as URLs usando variáveis de ambiente
- ✅ Banco de dados em um serviço externo (não local)
- ✅ Migrations prontas para rodar
- ✅ Build funcionando (
npm run buildsem erros) - ✅
.env.exampledocumentando todas as variáveis necessárias
FAQ
Por que meu app funciona no localhost mas não em produção?
Geralmente é por causa de variáveis de ambiente não configuradas, URLs hardcoded como localhost:3000, ou dependências que existem só na sua máquina. Em produção, tudo precisa ser explícito.
Preciso de HTTPS para meu projeto?
Sim. Navegadores modernos bloqueiam funcionalidades como geolocalização, câmera e cookies seguros sem HTTPS. Além disso, o Google prioriza sites com SSL no ranking.
Qual a diferença entre um banco local e um banco em produção?
O banco local roda na sua máquina e morre quando você desliga. Em produção, o banco precisa estar em um servidor sempre disponível, com backups e conexões seguras.