Notas das trincheiras.
Notas de campo sobre PHP, Symfony, PrestaShop, CI/CD e a engenharia nada glamourosa que mantém a produção tranquila. Sem enrolação — só o que realmente funcionou, e por quê.
-
Três strings e dois fallbacks: integrando a share sheet nativa ao Forgemage.net
O botão de compartilhar na página de detalhe de pedido do Forgemage.net abre a share sheet do sistema onde quer que o sistema operacional tenha uma — Android, iOS, Windows, macOS —, copia o link onde não tem, e fica quieto quando você simplesmente muda de ideia. Aqui está a implementação inteira: navigator.share com três strings, uma guarda de AbortError que deixa cair em vez de capturar, um fallback de clipboard com um fallback de execCommand por baixo, e o detalhe de uma letra no Symfony que decide se o link compartilhado funciona ou não.
Ler artigo ↗ -
Cada novo forjamago deixava a busca mais lenta: matando o N+1 por trás do Forgemage.net
O diretório de forjamagos do Forgemage.net rodava umas sete queries por card — reviews, tempo de resposta, status online, três relações lazy — além de contadores de facetas recalculados a cada mudança de filtro. Veja como levei uma página de 24 cards de ~168 queries para um punhado, com um cache em batch escopado à request e uma passada paginate-then-hydrate, sem mexer nas páginas de perfil individuais.
Ler artigo ↗ -
Markdown for Agents, self-hosted: um subscriber Symfony no lugar de um plano da Cloudflare
A Cloudflare converte páginas em markdown para agentes de IA via Accept: text/markdown — nos planos pagos. O mesmo contrato HTTP cabe num event subscriber Symfony de 144 linhas. Minha homepage foi de 59 KB de HTML para 7,7 KB de markdown, na mesma URL.
Ler artigo ↗ -
Claude Code pelo celular: Tailscale, Termius e a máquina inteira no bolso
O /remote-control do Claude Code espelha uma sessão no seu celular. SSH via Tailscale te entrega a workstation inteira: retomar sessões, abrir novas em qualquer repo, acompanhar logs, reiniciar containers — sem nada exposto à internet.
Ler artigo ↗ -
RepoWrapped: um Spotify Wrapped para um repo do GitHub, e a API que brigou comigo
Uma ideia de fim de semana — uma página de stats compartilhável e um badge de README para qualquer repo e contributor do GitHub — virou uma briga com a API de stats do GitHub: 202 que nunca se resolvem, um muro no top 100 e um lookup do primeiro commit que você precisa arrancar de um header.
Ler artigo ↗ -
Deixando PMs não técnicos consultarem a codebase em linguagem natural
Por que construí um analista de IA somente leitura que permite a gerentes de projeto fazer perguntas sobre uma codebase e ter um ticket no Jira criado automaticamente — e por que a coisa toda só funciona porque a IA pode ler, mas nunca escrever.
Ler artigo ↗ -
Adicionando code review por IA a um GitLab self-hosted — sem entregar as chaves
Como integrei o Claude ao pipeline de merge requests de um GitLab self-hosted antigo, e por que todo o design depende de nunca deixar a IA ler um diff não confiável e ter um token ao mesmo tempo.
Ler artigo ↗