Reconstruindo meu site com Astro
Por que migrei do Hugo para o Astro, e como este site publica artigos técnicos bilíngues a partir de simples arquivos MDX.
Também disponível em English
Nesta página
Este site rodava em Hugo com um tema de terceiros. Funcionava, mas qualquer customização significava editar templates Go dentro de um tema vendorizado — e o resultado nunca era realmente meu. Então reconstruí tudo do zero.
Por que Astro
Para um site pessoal que é 95% conteúdo, os requisitos são simples:
- Saída em HTML estático, sem runtime de framework no cliente
- Markdown/MDX como formato de escrita
- Internacionalização de primeira classe, já que escrevo em inglês e português
- Syntax highlighting que não envia JavaScript para o navegador
O Astro atende a todos. O conteúdo vive em coleções tipadas, então uma description faltando ou uma data malformada quebra o build em vez de publicar metadados quebrados silenciosamente:
const blog = defineCollection({
loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }),
schema: z.object({
title: z.string(),
description: z.string(),
pubDate: z.coerce.date(),
tags: z.array(z.string()).default([]),
draft: z.boolean().default(false),
}),
});
O fluxo bilíngue
Cada artigo é um par de arquivos que compartilham o mesmo nome:
src/content/blog/
├── en/rebuilding-my-website.mdx
└── pt/rebuilding-my-website.mdx
O nome do arquivo é o slug da URL e também é como o site pareia as traduções: se o equivalente existe, o post automaticamente cria o link para ele e emite as tags hreflang corretas para os mecanismos de busca. Se não existe, nada quebra — artigos podem existir em apenas um idioma.
Publicar um post é exatamente isto:
git add src/content/blog/pt/meu-novo-post.mdx
git commit -m "post: meu novo post"
git push
O Netlify faz o build e o deploy. Sem CMS, sem banco de dados, sem painel de administração — apenas arquivos em um repositório, como deveria ser.