Em resumo
- O site pessoal e o blog Caderno de engenharia rodam em PHP 8.3+ e MySQL na Hostinger.
- A IA atua como editora organizada pelo Google Gemini, sem realizar pesquisas automáticas na web.
- O deploy exigiu contornar problemas de versão do PHP, erros de FTP em TLS e cache do Cloudflare.
- O projeto adota práticas avançadas de SEO, dados estruturados FAQPage e um índice em texto para IA.
Construí meu site pessoal e o blog Caderno de engenharia, que estão no ar em https://lkeppler.com.br. A primeira versão foi gerada com o Codex, e depois revisei, corrigi e fiz o deploy com o Claude Code. Eu queria um lugar meu para publicar projetos e notícias de tecnologia, barato de manter, em uma hospedagem compartilhada comum, e com IA ajudando na escrita sem inventar fatos ou fontes.
Qual é a stack do projeto?
A base roda em PHP 8.3 ou superior e MySQL na hospedagem compartilhada da Hostinger, sendo que o servidor roda PHP 8.5. Decidi que nada de Node.js, Composer ou build no servidor entraria na jogada, mantendo o front-end apenas com HTML, CSS e JavaScript sem framework. Criei um painel próprio com rascunho, revisão, agendamento, histórico de versões, importação e exportação em JSON, arquivamento e exclusão. Para simplificar, o agendamento não usa cron: o servidor decide na leitura se um post agendado já pode aparecer. A segurança básica inclui senha com password_hash, proteção CSRF, verificação de origem, sessão com tempo limite, limite de tentativas de login e o código privado fora da pasta pública.
Por que mudei o papel da IA no fluxo?
No começo, a integração usava a API da OpenAI com pesquisa na web, mas descobri que o free tier da API da OpenAI não inclui chamadas gratuitas e toda chamada falhava sem créditos. Troquei para o Gemini, no plano gratuito do Google AI Studio, com o modelo gemini-3.8-flash, onde pela tabela de preços do Google em https://ai.google.dev/gemini-api/docs/pricing o plano gratuito não oferece pesquisa no Google e o conteúdo enviado pode ser usado para melhorar os produtos do Google. Mudei o fluxo para que a IA não pesquise nada: eu trago a notícia ou o texto com os links das fontes, e ela organiza no formato do blog, aplica a voz editorial e prepara título, resumo, perguntas frequentes e SEO. Links que não estão no meu material são removidos automaticamente, todo resultado entra como rascunho e só é publicado quando eu decido, com um limite de 20 pedidos por dia.
O que quebrou no deploy e como resolvi?
Erro 500 no primeiro acesso: o servidor estava com PHP 7.4.33, e o código exige PHP 8.3. A solução foi trocar a versão no hPanel, e agora o site mostra uma mensagem clara se a versão estiver errada. Caminhos de FTP incorretos: a conta de FTP começava dentro da pasta public_html, mas o código privado fica um nível acima, então o script de deploy passou a usar caminhos absolutos. Certificado TLS do FTP: o certificado TLS era *.hstgr.io e não cobria o IP do servidor, então o script conecta no IP e valida o certificado por esse nome em vez de desligar a verificação. Transferências abortadas via FTP: uploads acima de cerca de 30 KB eram abortados com o erro 450 Transfer aborted. Link to file server lost em TLS 1.3, problema resolvido mudando para TLS 1.2 que continua criptografado. Cache do Cloudflare: o Cloudflare servia o JavaScript antigo do painel a partir do cache, resolvido versionando CSS e JS pelo hash do conteúdo para cada deploy furar o cache. Além disso, o script de deploy nunca envia o arquivo de configuração do servidor e nunca apaga arquivos remotos.
Como estruturei SEO, AEO e GEO e o desempenho?
Para otimizar a busca e assistentes de IA, estruturei título SEO de até 60 caracteres e descrição de 130 a 160, uma lista "Em resumo" no topo, perguntas frequentes no final com dados estruturados FAQPage, dados estruturados BlogPosting com palavras-chave, idioma e as fontes citadas. Também criei um índice em texto para assistentes de IA em https://lkeppler.com.br/llms.txt, além de sitemap com data de atualização e RSS. No desempenho, o avatar da home que tinha 1,35 MB em PNG e aparece com 415 pixels de largura caiu para 79 KB em WebP, e as páginas públicas ganharam cache de 5 minutos, compressão no servidor e arquivos CSS e JS versionados por hash do conteúdo.
Perguntas frequentes
Qual é a stack tecnológica utilizada no Caderno de engenharia?
O projeto utiliza PHP 8.3 ou superior e banco de dados MySQL em uma hospedagem compartilhada da Hostinger, sem dependência de Node.js, Composer ou ferramentas de build no servidor. O front-end é construído com HTML, CSS e JavaScript puros sem frameworks.
Como a inteligência artificial é integrada no fluxo de escrita?
A IA, utilizando o modelo gemini-3.8-flash do Google AI Studio, atua estritamente como editora e não como repórter. Eu forneço o texto base e os links das fontes, e ela organiza o conteúdo no formato do blog, aplicando a voz editorial e preparando títulos, resumos e perguntas frequentes.
Como foi resolvido o problema de cache no Cloudflare durante o deploy?
O Cloudflare mantinha versões antigas do JavaScript do painel em cache. A solução adotada foi versionar os arquivos CSS e JavaScript utilizando o hash do conteúdo, garantindo que cada novo deploy fure o cache automaticamente.