Writing
Blog
Analysis, technical decisions and notes from real projects.
hreflang: the SEO mistake that breaks bilingual sites
Without hreflang, Google treats /pt and /en as duplicate content and picks a version on its own. How to do it right — reciprocal, with x-default — and the different-slug trap that points to a URL that does not exist.
frontendKeeping an AI from inventing facts in a summary
A language model fills gaps with what sounds plausible. In a summary of someone else’s content, that is misinformation with your name on it. The guardrails that keep the AI anchored to the source — and why the one that matters does not trust the model.
iabackendData modeling: the decision that is hardest to reverse
Frameworks, languages and interfaces get swapped. The data model, once in production with real data, resists — and every feature is born fighting it. Why this is the decision that most deserves care up front.
arquiteturabackendCSP with a nonce in Next.js: closing the XSS door without breaking Fast Refresh
A strong Content Security Policy with a per-request nonce neutralizes XSS even when something slips past sanitization. The catch that trips people up: making it coexist with hot reload in development.
segurancafrontend