Durante quase onze anos, meu reflexo diante de qualquer coisa que precisasse de um backend era escrever um. Não porque fosse sempre a decisão certa, mas porque construir é a parte de que gosto e eu era bom o suficiente para me permitir o hábito. Por um longo tempo esse hábito foi um imposto que eu pagava ao meu próprio ego, e eu dizia a mim mesmo que era artesanato. No início de 2025 finalmente parei de pagá-lo, ao menos em um projeto.
Meu portfólio sempre foi algo de que me orgulho, mas sua fundação tinha virado uma cápsula do tempo. Por anos, um pequeno backend em PHP lia dados de arquivos INI; mais tarde, o frontend apenas lia JSON cru direto do disco. A apresentação era caprichada e o fluxo de trabalho era miserável. Cada erro de digitação, cada atualização de projeto significava abrir um editor, mudar um arquivo, dar um commit. Lembro de querer corrigir uma única frase pelo celular, longe da mesa, e perceber que não conseguia fazer isso sem um deploy completo. Foi o momento em que o hábito deixou de parecer artesanato e passou a parecer uma jaula que eu mesmo tinha construído.
Eu não queria construir à mão uma interface de administração do zero — até eu ouvia o ego nisso — então fui olhar o que já existia. A busca me levou de volta ao CMS headless: o frontend totalmente separado do repositório de conteúdo, os dados servidos em qualquer lugar por uma API. Eu já tinha trabalhado com essa forma em escala corporativa, mas não tinha acompanhado o quanto as ferramentas independentes haviam avançado.
Os gigantes SaaS — Contentful e seus vizinhos — são de fato capazes, e também cobram por registro, com tetos de API que se leem como uma contagem regressiva para qualquer coisa que cresça. Eu não queria uma fatura de assinatura que me punisse por usar o meu próprio site. Eu queria ser dono do código e do banco de dados, ponto.
Então olhei apenas para coisas que eu pudesse hospedar sozinho, e auditei as que as pessoas realmente usam:
Strapi ficava no espaço entre uma aplicação pronta e um framework. A interface é boa o bastante para eu fazer uma mudança pelo celular, e nunca tranca a porta do código: roda em Node, então um lifecycle hook ou um controller sob medida estão lá quando um CMS padrão me deixaria sem saída. Tratava seis idiomas como objetos de primeira classe em vez de um pensamento tardio, me deixava moldar os schemas sem escrevê-los à mão, e transformava um artigo em algo modular: blocos que eu podia empilhar em vez de um bloco único de marcação.
Quando comecei este blog alguns meses depois, não comecei de novo. Estendi os modelos que já tinha e apontei um segundo frontend para eles. O leitor de arquivos estáticos tinha virado um motor servindo a dois projetos.
Nada disso foi uma história de conversão. Ainda recorro a uma construção do zero com mais frequência do que deveria, e ainda acho que esse instinto vale a pena ter. Mas ele pertence aos projetos em que errar só custa a mim — não à única peça de infraestrutura que precisa ser entediante e confiável. Escolher a ferramenta aqui era a decisão mais difícil, e por uma vez eu a tomei.
A fundação está lançada; agora é hora de construir.