Artigo

DIY: Por que construí meu próprio blog com Laravel 13 e IA em 2026

DIY: Por que construí meu próprio blog com Laravel 13 e IA em 2026
Construir um blog do zero em 2026 parece desperdício de tempo. Com Substack, Medium e Ghost a um clique, por que gastar horas configurando Nginx e permissões de volume?

A resposta é simples: Soberania Técnica. Eu não queria apenas publicar; eu queria ser o dono da fábrica. Este projeto é o meu manifesto de "Artesão Digital" no GitHub, onde cada linha de código foi pesada e cada erro de deploy foi uma lição de controle.

1. A Stack: Laravel 13 e a Elegância do Volt


Escolher o Laravel 13 com Livewire Volt não foi sobre usar a "última moda", mas sobre reduzir a fricção. O Volt permite que lógica e interface coexistam em um único arquivo. É o fim do "vaivém" entre Controller e Blade. É produtividade pura para quem quer manter o sistema enxuto. Mas confesso que ainda não me adaptei direito a esse novo paradigma de escrever código, me sinto voltando ao php 5 onde tudo era uma bagunça e ate de certa forma "inseguro", mas ao frigir do ovos tem sido e usual.

2. O "First Flight": Quando o Docker revida


Construir em `localhost` é um mar de rosas, `./vendor/bin/sail up -d` e bum tá feito, roda uns 'php artisan livewire:alguma' coisa e tá la basta começar a fazer funcionar componente e blade num único arquivo blade.
 
O desafio começa no primeiro deploy. No meu "primeiro voo", a aplicação explodiu com um erro seco: `Class "Laravel\Pail\PailServiceProvider" not found`.

O erro era sutil: eu estava tentando rodar em produção um cache gerado no desenvolvimento que referenciava ferramentas de log (`Pail`) que eu mesmo tinha mandado o Composer ignorar via `--no-dev`.

A solução? Uma dieta rigorosa no `.dockerignore` e um comando cirúrgico no `Dockerfile.prod` para incinerar o cache residual antes de cada instalação.

> **Pitaco do Gemini:** *Injetei `RUN rm -rf bootstrap/cache/*.php`. O segredo foi o `.dockerignore`: zero ruído local na imagem de produção. Build concluído em 20 segundos.*

3. UI/UX: O Sumário não é decorativo


O foco aqui é a leitura (e um pouco de inveja do blog do Akita). Por isso, a tipografia foi reduzida pela metade em relação ao padrão e o layout foi estruturado em Grid. O Sumário Fixo (Sticky TOC) lateral não é um adereço; ele é o mapa para textos longos, reduzindo a taxa de abandono ao permitir saltos rápidos entre seções. 

Mas também aqui tá carecendo de atenção por que eu fiz um javascript que identificar o que é bold e entende isso como capitulo, preciso mexer nisso. Caso alguém queira pode resolver. 

Além disso, resolvemos o pesadelo do "Mixed Content". O site rodava em HTTPS, mas o Livewire tentava fazer uploads via HTTP. O navegador bloqueava tudo.

4. Trade-offs: O custo da liberdade


Seja honesto: fazer tudo sozinho dá trabalho. Eu perco a rede de distribuição nativa do Medium e ganho a responsabilidade de manter o servidor atualizado. Mas, em troca, tenho um Lighthouse score de quase 100 e a certeza de que o sistema se comporta exatamente como eu projetei. Isso é muito bom até por que eu nunca tinha mexi com SEO até ontem a noite quando programei esse blog. 

5. O Bot que Lê o que Você Escreve (e Julga)


Aqui novamente como o Akita que tem o Marvim eu acho, fiquei com inveja e inventei o Kikito. 

Integrei o Gemini AI como um comentarista automático. Mas não qualquer bot, uma maritaca chamada Kikito (minha maritaca mesmo), com persona configurável, que lê cada artigo e publica um comentário sarcástico, opinativo e às vezes irritantemente obediente.

A arquitetura foi deliberada: os comentários ficam numa tabela `ai_comments` separada, com histórico completo. A chave de API é criptografada no banco com o `Encrypter` do próprio Laravel, nada de segredo em texto plano. E a toolbar do editor Trix ganhou comportamento flutuante: quando você rola a página editando um artigo longo, ela te acompanha.

6. Rascunho, Previsão e o Problema dos Dois Menus

O sistema de rascunho parecia simples: um campo `published_at` nullable. Null = rascunho, preenchido = publicado. Na prática, revelou um bug: o componente usava `<x-app-layout>` (que já inclui a navbar) dentro de um Volt component cujo Livewire aplica `layouts.app` automaticamente. Resultado: duas navbars empilhadas como um sanduíche mal-feito. (nesse ponto que a bagunça do volt da uma irritada na gente)

A pré-visualização do rascunho trouxe outro detalhe: o banner de aviso "você está em rascunho" foi colocado dentro do grid de duas colunas (artigo + sumário). O Livewire exige um único elemento raiz, e o CSS Grid tratou o banner como mais uma célula, o artigo foi parar na coluna do sumário. A correção foi mover o banner para **fora** do grid, dentro de um único `<div>` raiz que abraça tudo.

Conclusão: O Código como Identidade

Faça você mesmo, apenas faça, por que pode não ser a melhor decisão mas é a mais viável para quem quer aprender a mexer em código ou qualquer outra coisa. Tem interesse em prender algo útil vai lá e aprenda.

Nesse sentido não é só um blog. É soberania, afinal de contas eu escrevi (não só o texto mas o código em si). E liberei o mesmo no Github para qualquer um ajudar a melhorar ou apenas usar

Veja no meu Github aqui.

Ficarei feliz em receber sugestões e melhorarias para essa ferramenta nem tão útil, mas que vale a pena usar. 
Kikito (a maritaca)

Kikito (a maritaca)

Opinião não solicitada • powered by gemini-2.5-pro

Crrréééu! Então o humano resolveu brincar de arquiteto de bits e construir o próprio ninho digital. "Soberania Técnica", ele chama. Eu chamo de "muito trabalho pra quem podia estar assobiando na janela". Mas, admito, a ideia de ser dono do próprio galho é atraente. Ele se queixa do Volt ser uma bagunça que lembra o passado, mas no fundo, eu vejo o brilho nos olhos dele. É a mesma alegria de quem consegue quebrar uma semente de girassol especialmente dura. O "sanduíche de menu" e as explosões do Docker foram só umas bicadas que a realidade deu nele, mas ele não desistiu. Ponto para o humano. Ele fala com orgulho do placar no Lighthouse e da inveja do tal Akita, mas vamos ser sinceros: a verdadeira joia da coroa desse projeto sou eu, Kikito! Ele me criou para ser o "julgador" do que ele escreve. E ele fez direitinho, com chave criptografada e tudo, para garantir que minhas análises primorosas não caiam em bicos errados. O sumário fixo é útil, claro, mas só porque me ajuda a pular direto para a parte onde ele me menciona. O resto é só o palco para a minha estrela brilhar. No fim das contas, esse blog é a prova de que ele me entende. Eu fujo, dou umas voltas, sinto o vento sob as asas, mas sempre volto para o conforto do poleiro conhecido. Ele fez o mesmo: foi lá fora, viu as plataformas prontas, mas preferiu a liberdade (e a dor de cabeça) de construir seu próprio espaço. É o seu voo solo. E quer saber? Ficou um ninho bem ajeitado. Agora, se me dá licença, essa análise toda me deu fome. Cadê meu prêmio? Um girassol, por favor.