Bastidores

Desenvolvimento· Arrumando a casa · parte 6

Todo o e‑mail dos meus domínios saiu do VPS num só dia.

Como levei as caixas de todos os meus domínios do VPS para a Cloudflare, com Email Routing, Email Sending e um webmail que atende a todos.

A visão Todas as caixas do webmail, com uma caixa para cada domínio e DMARC aprovado.

As caixas de luisjunior.ai, pagenello.com, clipleve.com e garfim.com.br estavam num VPS com CyberPanel. O certificado do IMAP era de staging do Let’s Encrypt, que os aplicativos de e-mail não aceitam, e o garfim.com.br não tinha SPF nem DMARC. Em 29 de outubro de 2026, todas as caixas saíram desse VPS e foram para a Cloudflare, num só dia.

A Cloudflare cobre só uma parte do problema, porque recebe e envia mensagens, mas não tem caixa postal. Para ter uma caixa de entrada de verdade, faltava uma peça que rodasse na minha própria conta, e foi essa peça que escolhi.

Email Routing e Email Sending cuidam do trajeto da mensagem

O Email Routing recebe e-mail e é gratuito. O Email Sending envia, em beta, no plano Workers Paid, com 3.000 envios por mês incluídos e US$ 0,35 por mil adicionais, por Worker, API REST ou SMTP. A Cloudflare não oferece caixa postal, IMAP nem webmail. Esse papel precisava de um webmail que rodasse na própria conta Cloudflare.

Um webmail aberto preencheu a parte que faltava

O app de referência da Cloudflare para isso, o Agentic Inbox, não recebia commits desde abril de 2026. Escolhi o Mailflare, que é de código aberto, sob AGPL, está ativo e tinha 37 contribuidores em 29 de outubro de 2026.

Ele recebe pelo Email Routing e guarda as mensagens em D1 e R2. Mantém a mensagem bruta no R2 antes de processá-la e faz backup diário. Envia pela Cloudflare, mas também aceita Resend ou SES. Aceita domínios ilimitados e funciona como PWA, um app instalado a partir do navegador, sem IMAP.

Uma instalação atende todos os domínios, atuais e futuros

Uma instalação só, no domínio luisjunior.ai, atende todos os domínios. O e-mail é meu, e cada produto entra nele com a sua caixa. Cada caixa de produto tem a opção “Usar todos os domínios” desligada, e a minha caixa pessoal vale em todos.

Em cada domínio, a migração mexeu nos mesmos pontos:

  • o MX saiu do VPS e foi para o Email Routing;
  • o catch-all aponta para o Mailflare;
  • o envio usa o DKIM da Cloudflare;
  • o DMARC está em p=reject.

O MX diz para onde o e-mail do domínio deve ir. O catch-all recebe qualquer endereço do domínio que não tenha caixa própria, e o DMARC em p=reject pede que os servidores rejeitem mensagens que falhem na verificação.

Cada domínio enviou um teste com o DKIM do próprio domínio e DMARC aprovado. As mensagens chegaram na caixa certa, inclusive pelos catch-alls.

Decidi migrar tudo no mesmo dia, depois do piloto

O piloto começou com o domínio de um produto que ainda não lancei. A recomendação inicial era uma semana de piloto, e decidi migrar todos os domínios no mesmo dia.

Os testes do piloto deram estes resultados. Um envio interno chegou em 16 segundos, com DKIM e SPF alinhados. Um e-mail vindo do Gmail chegou em 23 segundos, com DMARC e DKIM válidos e nota 0 de spam. A resposta enviada pelo Mailflare caiu na caixa de entrada do Gmail, e a réplica seguinte também chegou.

As mensagens antigas ficam no VPS até o próprio Mailflare importá-las por IMAP, o protocolo que os aplicativos de e-mail usam para ler mensagens guardadas num servidor. Só depois dessa importação o e-mail do VPS é desligado.

A visão unificada ficou protegida, e algumas partes seguem abertas

O Mailflare original não tem a visão “Todas as caixas”. Ela foi escrita para este uso e publicada em 29 de outubro, depois de checagem de tipos, build e testes. Junta numa lista só o que chega a todos os domínios, mostra a caixa de origem de cada mensagem, e a resposta sai da caixa certa.

O webmail inteiro fica atrás do Cloudflare Access, com login por código de uso único enviado por e-mail e sessão de uma semana. Uma das entradas autorizadas do Access fica fora do próprio webmail, porque o código não pode chegar só dentro da caixa que ele protege.

Algumas partes ficaram de fora. A cópia automática para outro endereço exige a licença Pro do Mailflare (US$ 19, pagamento único), e ela não foi comprada. No iPhone não há app do Mailflare, então o caminho é o PWA, pelo Safari, com a opção Adicionar à Tela de Início. No Mac, o autor do Mailflare publica um app oficial. Também há uma cota diária de envio pela Cloudflare, que começa em 200 e é dividida entre tudo o que a conta envia.

Com isso, as caixas dos domínios saíram do VPS e passaram a ficar numa única instalação na Cloudflare. Quando o próximo produto chegar, basta adicionar o domínio e criar a caixa. O último envio que ainda sai pelo Resend fica para a parte 7 da série.

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