Bastidores

Desenvolvimento· Arrumando a casa · parte 3

Como troquei o luisjunior.ai com cerca de 10 segundos fora do ar.

O roteiro para levar três sites no ar para Astro em Workers da Cloudflare sem mudar URLs: o inventário, a ordem da troca e a conferência depois.

Linha do tempo de uma troca de site com cerca de 10 segundos fora do ar.

Em 29 e 30 de outubro de 2026, troquei a hospedagem dos sites do ClipLeve, do Pagenello e do luisjunior.ai. Cada um virou um projeto Astro servido por um Worker da Cloudflare, e os três já estavam no ar. O objetivo era manter cada URL, o link do app e a posição nas buscas, com a menor parada possível.

O inventário de URLs veio antes de qualquer registro de DNS

Antes de mexer no DNS, listei os endereços que não podiam quebrar. No luisjunior.ai, eram as 23 URLs do sitemap antigo. Os 19 textos do blog foram importados sem mudança de texto, nas mesmas URLs e com as mesmas âncoras.

O ClipLeve tinha um caso diferente. O app publicado e a ficha da App Store usam /suporte.html, /privacidade.html e /termos.html, além das versões em inglês. Como o app e a loja apontam para esses endereços, eles precisavam continuar funcionando. No site novo, cada um redireciona com 307, um redirecionamento temporário, para a URL sem .html.

O /sitemap.xml, que o Search Console já conhecia, passou a redirecionar com 301, o redirecionamento permanente, para /sitemap-index.xml. Por isso, o sitemap não precisou ser reenviado.

O teste local era igual à produção: npm run preview faz o build e roda o Worker local, com os mesmos arquivos _headers e _redirects e a mesma página 404. Com isso, o que eu via no computador era o que iria para a produção.

O Pagenello tinha mais peças que os outros dois. Ele também usa o D1, banco de dados da Cloudflare, o envio de e-mail e o Turnstile no formulário. O ClipLeve e o luisjunior.ai têm só arquivos estáticos.

A troca tem três passos e cerca de 10 segundos fora do ar

A troca do luisjunior.ai aconteceu em 30 de outubro, em três passos:

  1. Publiquei o Worker antes de mexer no DNS.
  2. Apaguei os registros que ligavam a raiz ao site antigo: dois registros A e os TXT de verificação do provedor antigo.
  3. Liguei o domínio ao Worker como domínio personalizado.

Os TXT de verificação são registros que o provedor usa para confirmar que o domínio é seu. Publicar primeiro significa que, quando o domínio muda de destino, o site novo já responde. O tempo fora do ar foi de cerca de 10 segundos, entre a saída do último registro A e a ligação ao Worker, às 17:46 UTC.

No ClipLeve, os TXT de verificação do provedor antigo ficam por cerca de uma semana. Assim, dá para voltar ao site antigo se for preciso.

Depois da troca, conferi a produção com as mesmas URLs

As 23 URLs do sitemap antigo do luisjunior.ai respondem 200. HTTP e www redirecionam com 301 para a raiz, que agora recebe HSTS, o cabeçalho que manda o navegador usar sempre HTTPS. Essas conferências foram feitas na produção, logo depois da troca, e não só no teste local.

A análise do site só roda depois do consentimento. Antes do aceite, nenhuma requisição sai para o Google. Depois dele, os eventos são enviados e recebem resposta 204.

O luisjunior.ai enviou 23 URLs ao IndexNow, protocolo que avisa buscadores participantes sobre URLs novas ou alteradas, e o ClipLeve enviou 29. O Lighthouse da produção do luisjunior.ai deu 98 a 99 de desempenho no celular, com LCP perto de 2 s, e 100 nas demais categorias. No computador, deu 100 em tudo, com LCP de 0,5 s.

Dois tropeços do Astro que valem para quem usa o framework

No Pagenello, o Astro juntava palavras em 17 quebras de linha do código, algumas já no ar. Entre os casos estavam “onLinkedIn” e “within2”. Uma quebra de linha nem sempre vira espaço na página, e por isso a correção foi colocar {" "} explícito nas 17 quebras. A regra também foi escrita nas instruções do projeto. Ao fotografar a home do luisjunior.ai para a capa da parte 4, achei o mesmo tropeço no aviso de cookies, que mostrava “conteúdo.Como uso cookies”. A correção entrou junto com esta série.

O segundo tropeço também foi do Pagenello: um deslocamento de layout de 0,041 aparecia quando a fonte da marca chegava. Corrigido, o CLS ficou em 0 e o PageSpeed deu 100 nas quatro categorias.

Cada deploy envia ao IndexNow só as URLs que mudaram

Depois da troca, npm run deploy faz o build, calcula quais URLs mudaram, publica o Worker e envia só essas URLs ao IndexNow. Assim, uma correção em um texto não reenvia o site inteiro.

Cada página tem uma data, que alimenta o lastmod do sitemap. O lastmod é a data de última modificação que o sitemap informa para cada URL. O CI do GitHub roda checagem de tipos e build a cada push.

O roteiro coube numa lista curta porque o trabalho pesado veio antes: o inventário de URLs, o teste local igual à produção e a conferência logo depois. Na parte 4, conto como ficou o site novo do luisjunior.ai.

Teste local verde até no S23, e o staging ainda achou um defeito.08 nov · DesenvolvimentoOutra IA revisou 4.170 traduções da IA em inglês e corrigiu 307.08 nov · Inteligência artificialA conta live do Stripe estava ativa, mas falhou na minha conferência.08 nov · LançamentoTrês regras de HSTS num só domínio: por que deixei o preload de fora.08 nov · DesenvolvimentoUma palavra a menos derrubou 13 páginas que já estavam no ar.08 nov · DesenvolvimentoOutro agente de IA revisou meu código 71 vezes e criou dois defeitos.08 nov · Inteligência artificialDepois de 20 anos de carreira, publiquei meu primeiro pacote no npm.08 nov · LançamentoSozinho com IA: iPhone, Android, SaaS com MCP e CLI, e já faturando.07 nov · BastidoresCopiei a mecânica dos líderes e recusei a mentira deles.07 nov · BastidoresA pergunta de LGPD que trava a venda: e o backup?07 nov · ProdutoA IA calibrou minha câmera pelos números. Ficou cara de lanterna.07 nov · BastidoresUm usuário não via o dia de ontem. Abri todo o passado do Garfim.07 nov · Produto62% baixavam o Garfim. O problema estava antes da página.07 nov · LançamentoO idioma certo na tela pode virar o errado no servidor.07 nov · DesenvolvimentoO limite de 10 por minuto que deixou passar muito mais.07 nov · DesenvolvimentoUm PR do Dependabot travou meu banco e as rotas voltaram 500.07 nov · DesenvolvimentoMeus produtos novos não começam do zero. Começam de um clone.07 nov · DesenvolvimentoTirei uma trava da minha IA e a resposta caiu de 5,5 s para 3,7 s.07 nov · DesenvolvimentoTroquei velocidade por uma auditora que confere cada frase.07 nov · Inteligência artificialEscrevi o método CERNE lendo seis especificações reais.07 nov · Inteligência artificialComo anunciar na Meta e vender online no CPF sem abrir empresa.05 nov · BastidoresPausei anúncios depois de ignorar o resultado anterior.05 nov · BastidoresComo depurei um erro de API sem log no registro do Garfim.05 nov · DesenvolvimentoComo forçar atualização no React Native antes de um defeito grave.05 nov · DesenvolvimentoComo levei o LCP do ClipLeve de 9,9 s para menos de 1,5 s.05 nov · DesenvolvimentoPubliquei 650 páginas contra a regra do meu método.05 nov · Inteligência artificialUma conta para organizar erros, métricas e IA dos meus produtos.05 nov · BastidoresSeparei o painel do site e pus o Access na porta.05 nov · DesenvolvimentoUma lista de 69 itens encontrou requisitos só no papel.05 nov · BastidoresO antispam esperou tanto que parou o formulário.05 nov · DesenvolvimentoCortei a publicação de 17 minutos para 4 na minha máquina.05 nov · DesenvolvimentoEu gravo. A IA corta, legenda e entrega o vídeo curto.05 nov · Inteligência artificialComo criar anúncios UGC com IA usando o método PROVA.05 nov · Inteligência artificialA IA disse que usou as skills. A página provou o contrário.05 nov · Inteligência artificialNove páginas reprovadas antes de encontrar uma identidade.05 nov · Inteligência artificialEm 48 horas, juntei domínios, e‑mail, sites e medição num padrão só.30 out · BastidoresPor que tirei os três sites do GPT Sites.30 out · DesenvolvimentoComo troquei o luisjunior.ai com cerca de 10 segundos fora do ar.30 out · DesenvolvimentoRefiz o luisjunior.ai do zero: cada afirmação com prova.30 out · LançamentoUm padrão para todos os domínios, inclusive os de produtos futuros.30 out · BastidoresTodo o e‑mail dos meus domínios saiu do VPS num só dia.30 out · DesenvolvimentoDecidi mover o envio do Garfim do Resend para a Cloudflare.30 out · DesenvolvimentoO método FONTE para aparecer no Google e nas respostas de IA.30 out · Inteligência artificialTrês sites, três decisões de busca, e uma delas é não gerar páginas.30 out · Inteligência artificialMedição de vários sites num painel só, com consentimento.30 out · BastidoresComo a IA me apresenta mídias para aprovação29 out · Inteligência artificialO Garfim chegou ao Google Play. Agora tem Android e iPhone.22 out · LançamentoConseguir testadores e esperar 14 dias: a reta final do Garfim no Android.22 out · BastidoresO ClipLeve chegou à App Store. O que aprendi até aqui.20 out · LançamentoO ClipLeve foi rejeitado de novo. Dessa vez, por uma palavra.20 out · ProdutoO Garfim foi aprovado. E já está na App Store.16 out · LançamentoA última negativa do Garfim: câmera, assinatura e o caminho inteiro.16 out · LançamentoClipLeve: o cuidado por trás de um vídeo mais leve.12 out · ProdutoPor que restaurar uma assinatura pode falhar em outra conta.12 out · ProdutoQuando um aplicativo pode dizer que sua conta foi excluída?12 out · ProdutoO que a primeira negativa da App Store me fez explicar.08 out · LançamentoO que quero aprender com o teste fechado do Garfim.08 out · ProdutoO trabalho de uma assinatura continua depois da compra.03 out · DesenvolvimentoPor que o Garfim ganhou um plano gratuito.03 out · ProdutoO login funcionou. Por que a tela do Garfim não saiu do lugar?03 out · LançamentoPagenello: um site começa pelo que o visitante veio fazer.03 out · LançamentoComo uma foto do almoço vira um produto.27 set · ConcepçãoAs decisões que continuo tomando ao desenvolver com IA.27 set · DesenvolvimentoApresentar o Garfim ao público também é um teste do produto.27 set · Lançamento

GET luisjunior.ai/llms.txt

Esta é a versão do site escrita para modelos de linguagem: os mesmos fatos, sem layout, prontos para um assistente de IA ler e citar. Agentes no Chrome também encontram aqui ferramentas WebMCP para consultar produtos, textos e contato.

conectando…0 tokens · 0 tok/s