hidden: true
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.
hidden: true
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 um container, 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, container, 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
hidden: true
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.