Preview vs produção: um fluxo simples para criar URLs de preview por feature, promover com segurança para produção e voltar rápido quando algo falha.

Um ambiente de preview é uma cópia temporária do seu app que você pode abrir no navegador e compartilhar com outras pessoas. É isolado, então mudanças feitas ali não afetam o app ao vivo. Pense nele como um palco seguro para ver e testar uma nova funcionalidade antes de liberá-la para todo mundo.
Uma configuração comum é uma URL de preview por feature ou por mudança. Isso facilita o feedback: você envia um link para um colega, um cliente ou para você mesmo amanhã, e todos estão vendo exatamente a mesma versão.
Produção é o app real. É o que usuários reais veem, com contas reais, pagamentos reais, dados reais e expectativas reais. Se algo quebra em produção, não é só incômodo — pode significar vendas perdidas, tickets de suporte ou problemas de dados.
Os nomes soam técnicos, mas a ideia é simples: preview é para aprender, produção é para servir.
Apps criados por chat também precisam dos mesmos passos de segurança porque os riscos não mudam. Mesmo que você crie um app conversando com uma plataforma como Koder.ai, você ainda está enviando código que roda no navegador e conversa com bancos de dados. Uma pequena mudança (um campo de formulário ou uma consulta) pode ter grande impacto quando receber tráfego real.
Quando você usa previews corretamente, obtém feedback mais rápido sem quebrar o app ao vivo. Dá para revisar uma funcionalidade em contexto, pegar problemas óbvios cedo e só então promover a mudança para produção quando estiver pronta.
Construir uma feature em uma ferramenta de chat pode parecer quase instantâneo. O risco aparece depois, quando essa mudança tem que rodar em infraestrutura real, conversar com serviços reais e atender usuários reais. Por isso preview vs produção não é só uma escolha de hospedagem — é como você reduz surpresas.
A maioria dos problemas em releases não é “código ruim”. São incompatibilidades entre o que você testou e o que os usuários encontram após o deploy. Uma página pode parecer perfeita em um preview e ainda quebrar em produção porque produção tem configurações diferentes, dados diferentes e regras de segurança mais rígidas.
Os mesmos problemas reaparecem com frequência:
Previews são onde você valida comportamento e fluxo do usuário sem arriscar clientes. São ótimos para checar layouts, navegação básica, validação de formulários e se uma feature funciona de ponta a ponta com dados de teste.
Algumas coisas são difíceis de provar totalmente em previews, a menos que você tenha um staging parecido com produção: comportamento final de domínio e cookies, provedores de pagamento ao vivo, envio real de emails e desempenho sob tráfego real. Essas dependem da configuração de produção e das integrações reais.
O objetivo é um fluxo de lançamento repetível. No Koder.ai, por exemplo, você pode gerar uma URL de preview por feature, revisar com um colega e depois promover o mesmo build para produção após um pequeno conjunto de verificações. E quando algo passar despercebido, você precisa de um caminho rápido de rollback para que um release ruim vire um incidente curto, não uma interrupção longa.
Um bom setup de preview responde rapidamente a quatro perguntas: o que mudou, onde posso ver, qual versão estou olhando e quem pode abrir.
Faça a URL (ou rótulo do subdomínio) seguir como seu time fala sobre o trabalho: nome da feature ou ID do ticket. Mantenha curto, consistente e seguro para colar no chat.
prv-<ticket>-<short-feature> (exemplo: prv-482-checkout-tax)prv-482-checkout-tax-alex)main e prod como palavras reservadasSe você usa Koder.ai, parear cada URL de preview com um snapshot ajuda a manter o preview estável mesmo se mais trabalho acontecer depois.
Um preview deve apontar para um único build e config, não para “o que estiver mais recente”. Isso normalmente significa que uma URL de preview = um snapshot (ou uma versão tipo commit).
Quando chegar feedback, atualize o preview de forma visível: crie um novo snapshot e mude o preview para esse snapshot (ou crie uma nova URL). Evite alterar silenciosamente o que uma URL compartilhada mostra.
Escolha um padrão e documente:
Previews vazam fácil por screenshots e encaminhamentos. Use uma regra clara como “somente time, salvo se compartilhado explicitamente”, e aplique controles básicos (login obrigatório, allowlist ou senha de compartilhamento).
Decida também quanto tempo os previews vivem (por exemplo, deletar após merge) para que URLs antigas não confundam revisores.
Um bom setup de preview mantém cada mudança isolada. Uma feature recebe uma URL, assim os revisores nunca precisam adivinhar qual versão estão vendo.
Parta do ponto mais estável: a branch main se ela se mantiver limpa, ou o último release em produção se a main for barulhenta. Isso mantém o preview focado na feature, não em mudanças não relacionadas.
Faça um workspace dedicado para a feature (por exemplo, “billing-copy-update” ou “new-onboarding-step”). Faça o deploy desse workspace num ambiente de preview e trate a URL de preview como a casa da feature.
Se você usa uma ferramenta de chat como Koder.ai, esse fluxo fica natural: construa a feature no seu próprio espaço e depois exporte ou faça o deploy de um preview separado sem tocar na produção.
Faça uma checagem rápida que pegue as quebras mais comuns. Mantenha-a pequena e repetível:
Anote em uma frase o que você testou. Isso economiza tempo depois.
Envie a URL de preview com uma nota curta: o que mudou, onde clicar primeiro e o que significa “pronto”. Peça feedback específico (texto, layout, casos de borda) em vez de “tá bom?”
Aplique o feedback, redeploy e mantenha notas sobre o que mudou entre as rodadas. Quando o preview for aprovado, você deve ter um rastro claro do que foi testado e por que está pronto.
Um preview não é lugar para uma maratona de QA. É onde você pega erros que normalmente passam para produção porque ninguém viu o app como um usuário real.
Comece pelo básico: abra as páginas principais em larguras desktop e mobile, clique pela navegação e confirme que não aparece tela em branco. Depois faça um fluxo feliz (happy path) de ponta a ponta, do mesmo jeito que um cliente faria.
Um conjunto mínimo de testes que funciona para a maioria dos apps web:
Se seu app conecta com outros sistemas, faça uma checagem de integração pequena por feature. Dispare um email de teste, rode um pagamento em modo sandbox, envie um webhook para um endpoint de teste ou envie um arquivo pequeno e confirme o download. Você não está provando todos os casos — está confirmando que o cabeamento está inteiro.
Previews também quebram por motivos enfadonhos: configurações faltando. Confirme variáveis de ambiente e segredos, e que eles apontam para os serviços certos (geralmente sandbox). Um erro comum é um preview usando chaves de produção ou dados de produção por acidente.
Por fim, faça uma checagem leve de performance. Carregue a página mais lenta e cheque problemas óbvios: imagens enormes, carregamentos longos, chamadas repetidas à API. Se estiver lento no preview, ficará pior em produção.
Se você constrói no Koder.ai, trate essas checagens de preview como hábito: abra a URL de preview, rode o checklist e só então promova. Snapshots e rollback ajudam, mas pegar problemas cedo é mais barato que desmanchar depois.
Promover deve significar uma coisa simples: a mesma versão que você reviu no preview vai para produção. Sem edições de última hora, sem “consertos rápidos” depois da aprovação. Previews são onde você ganha confiança; produção é onde você protege os usuários.
Um portão de release pequeno mantém tudo entediante (no bom sentido). Não precisa de comitê — precisa de um conjunto curto de checagens que você sempre segue, mesmo com pressa:
Mudanças no banco merecem cuidado extra. Um padrão mais seguro é “expandir, depois contrair”. Primeiro, envie mudanças compatíveis retroativamente (adicione uma coluna, crie uma tabela, escreva para ambos). Só depois que a nova versão estiver estável, remova colunas ou caminhos antigos. Isso reduz o risco de rollback falhar porque o banco não bate com a versão antiga.
Tempo também é parte da segurança. Escolha uma regra simples e mantenha-a:
No Koder.ai isso se encaixa bem ao promover um preview revisado para produção e confiar em snapshots e rollback se o smoke test em produção encontrar algo perdido.
A maioria dos problemas em releases não é “bugs novos”. São incompatibilidades entre preview e produção ou falta de rede de segurança quando algo dá errado.
Alguns culpados frequentes:
Se você constrói com uma ferramenta de chat como Koder.ai, trate previews como descartáveis e produção como controlada. O objetivo é simples: cada promoção é repetível e cada rollback é entediante.
Rollback não é só “voltar o código antigo”. Um bom rollback restaura o que os usuários dependem: versão do app, as configurações com que ele roda e um estado do banco compatível com essa versão.
Se você rollbacka o código mas mantém uma configuração nova (uma chave API, flag de feature ou agendamento de job), pode acabar com o mesmo problema com outro nome. Se você rollbacka o código, mas o banco já mudou de formato, o app antigo pode travar ou mostrar dados errados.
Um hábito simples ajuda: tire um snapshot conhecido-bom imediatamente antes de cada release em produção. Esse snapshot é sua linha de segurança. Se a plataforma oferecer snapshots e rollback com um clique (Koder.ai oferece), trate esse passo como não negociável, mesmo para mudanças “pequenas”.
Quando algo dá errado, decida rápido: rollback ou consertar pra frente.
A meta é voltar a um estado em que o sistema se comportava normalmente:
Marque como incidente, pare todas as mudanças novas e nomeie uma pessoa para confirmar a recuperação. Em seguida verifique o básico: páginas-chave carregam, login funciona e ações críticas têm sucesso. Depois de estável, escreva o que causou o rollback e o que será alterado antes do próximo release.
Um release parece mais seguro quando você tem o mesmo conjunto curto de checagens toda vez. Mantenha-o curto o bastante para que você realmente faça, mas específico o bastante para pegar os problemas usuais.
Use isso logo após a feature estar pronta e você ter uma URL de preview:
Execute isso nos primeiros minutos após o deploy em produção, enquanto a mudança ainda é fácil de raciocinar:
Se for imprimir isto, coloque ao lado do seu botão de release. O melhor checklist é aquele que você segue sempre.
Um time pequeno adiciona um novo passo no checkout (como “razão social e VAT”) construído via chat. O time de vendas quer testá-lo em chamadas reais com clientes antes do go-live. O objetivo é manter preview e produção claramente separados, mas mover rápido.
Eles criam uma branch de feature e geram um build de preview com sua própria URL, por exemplo checkout-vat.preview. O preview usa o mesmo formato de banco que a produção, mas com dados de teste. O time de vendas recebe a URL de preview e um pequeno roteiro: “Adicione um item, informe VAT e complete um pagamento de teste.”
Ao longo de dois dias, chegam feedbacks: o campo VAT está confuso e a mensagem de erro assusta. O time ajusta a UI, atualiza o texto e redeploya.
Fluxo simples que seguem:
O release parece OK pelos primeiros 20 minutos, então pagamentos começam a falhar. O bug não está no código: um valor de config escondido (uma env var usada pelo provedor de pagamentos) está ausente em produção.
Em vez de tentar consertar sob pressão, eles dão rollback para o snapshot anterior. Os pagamentos voltam ao normal. Depois eles restauram a nova versão no preview, adicionam a config faltante lá primeiro e repetem o portão de release.
Depois, ajustam o processo para evitar repetição:
Trate releases como rotina repetível, não como evento especial. O objetivo é que preview vs produção fique entediante: os mesmos passos, as mesmas checagens, sempre.
Escreva suas regras de ambiente em linguagem simples. Seja curto e específico: como nomear URLs de preview, quem pode acessá-las, quais dados são permitidos e quem é o dono para consertar problemas encontrados ali. Para dados, uma regra simples ajuda: previews usam dados de teste ou cópias mascaradas, e nunca tocam registros reais de clientes a menos que haja razão e aprovação clara.
Torne um hábito não-negociável: todo release em produção começa com um snapshot e termina com um smoke test. O snapshot dá uma saída segura se o release quebrar algo inesperado. O smoke test prova que o app ainda funciona para as poucas ações que mais importam.
Um padrão leve que você pode reaplicar:
O risco cai rápido quando mudanças ficam pequenas. Prefira releases frequentes com uma feature ou correção por vez. Se uma mudança for grande, divida em pedaços que possam ser enviados com segurança, mesmo que a UI chegue antes da lógica de backend estar totalmente pronta.
Se você constrói com Koder.ai, apoie-se em deployments de preview para cada feature, assim revisores clicam em uma URL real em vez de adivinharem por screenshots. Quando estiver bom, promova para produção e mantenha snapshots e rollback prontos para que um deploy ruim vire um desvio rápido em vez de uma longa interrupção.
Um ambiente de preview é uma cópia temporária e isolada do seu app que você pode abrir e compartilhar para receber feedback. A produção é o app ao vivo em que usuários reais confiam, com dados reais e consequências reais se algo quebrar.
Regra padrão: preview é para aprender e checar, produção é para atender clientes.
Crie um preview para qualquer mudança que afete o que os usuários veem ou fazem: atualizações de UI, formulários, autenticação, cobrança, consultas ao banco de dados ou integrações com terceiros.
Se a mudança puder gerar tickets de suporte caso esteja errada, merece primeiro um link de preview.
Use um padrão simples e consistente que diga aos revisores o que eles estão vendo:
prv-<ticket>-<feature> (exemplo: prv-482-checkout-tax)prod ou mainObjetivo: alguém cola a URL no chat e todos entendem do que se trata.
Um preview deve apontar para um build específico (não para “o que for mais recente”).
Abordagem prática:
Assim o feedback é confiável porque todo mundo testa a mesma versão.
Escolha um padrão e documente:
Recomendação padrão: use dados de amostra, a não ser que haja motivo claro para simular casos de produção.
Trate previews como algo fácil de vazar.
Opções seguras comuns:
Padrão: acesso somente para a equipe, salvo se for explicitamente compartilhado.
Faça um checklist curto que você realmente execute:
Escreva uma frase dizendo o que você testou para os revisores saberem o que foi coberto.
Variáveis de ambiente são uma das principais causas de “funciona em preview, falha em produção”.
Antes de promover:
Nunca reutilize segredos de produção em previews.
Use um padrão compatível com rollback:
Isso reduz o risco de rollback falhar porque o banco deixou de ser compatível com a versão anterior.
Ação padrão quando usuários estão bloqueados ou a causa não está clara: rollback rápido para o último snapshot/versão conhecida boa.
Use hotfix quando:
Após rollback, execute um smoke test rápido em produção (login + ação central) para confirmar a recuperação.