O que é o Astro?
O Astro é um framework web moderno, otimizado para sites focados em conteúdo como blogs, documentação e portfólios. A grande diferença dele para frameworks como Next.js ou Nuxt é que o Astro envia zero JavaScript por padrão — seu site é HTML puro, super rápido.
Tip
O Astro usa a arquitetura de ilhas (Islands Architecture): somente os componentes que precisam de interatividade recebem JavaScript. Todo o resto é HTML estático.
Estrutura de um projeto Astro
Quando você cria um projeto Astro, a estrutura de pastas é assim:
meu-blog/├── public/ # Arquivos estáticos (fontes, imagens, favicon)├── src/│ ├── components/ # Componentes reutilizáveis (.astro)│ ├── content/ # Conteúdo do blog (posts em .md/.mdx)│ │ ├── blog/ # Posts do blog│ │ └── authors/ # Perfis de autores│ ├── layouts/ # Templates de página│ ├── pages/ # Rotas do site (cada arquivo = uma página)│ └── styles/ # CSS global├── astro.config.ts # Configuração do Astro├── package.json # Dependências└── tsconfig.json # Configuração TypeScriptComo funciona o conteúdo?
Content Collections
O Astro usa o conceito de Content Collections — coleções tipadas de conteúdo. No nosso blog, temos três coleções:
blog— posts do blog (arquivos.mdou.mdx)authors— perfis de autoresprojects— projetos para o portfólio
Cada coleção tem um schema definido com Zod, que valida o frontmatter automaticamente:
const blog = defineCollection({ loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }), schema: ({ image }) => z.object({ title: z.string(), description: z.string(), date: z.coerce.date(), tags: z.array(z.string()).optional(), authors: z.array(z.string()).optional(), draft: z.boolean().optional(), }),})Escrevendo um post
Para criar um novo post, basta criar uma pasta dentro de src/content/blog/ com um arquivo index.mdx:
src/content/blog/└── meu-primeiro-post/ └── index.mdxO conteúdo do arquivo usa frontmatter (metadados no topo entre ---) seguido do conteúdo em Markdown:
---title: 'Meu Primeiro Post'description: 'Uma descrição curta do post.'date: 2026-02-13tags: ['exemplo']authors: ['fabricio']---
Aqui começa o conteúdo do post em **Markdown**!Note
O campo authors referencia os IDs dos arquivos em src/content/authors/. Por exemplo, ['fabricio'] referencia o arquivo src/content/authors/fabricio.md.
Usando MDX: Markdown com superpoderes
Arquivos .mdx permitem usar componentes dentro do Markdown. Por exemplo, este callout que você está vendo é um componente:
import Callout from '@/components/Callout.astro'
<Callout variant="warning"> Cuidado com este trecho!</Callout>Tipos de callout disponíveis: note, tip, warning, danger, example, quote.
Deploy no GitHub Pages
Passo 1: Repositório no GitHub
Crie um repositório no GitHub (pode ser privado). O nosso está em:
https://github.com/fabricioctelles/blog.ft.ia.brPasso 2: GitHub Actions (deploy automático)
O arquivo .github/workflows/deploy.yml configura o deploy automático. Toda vez que você faz git push na branch main, o GitHub:
- Faz checkout do código
- Instala dependências (
npm ci) - Executa
astro build - Publica os arquivos estáticos no GitHub Pages
Tip
Você não precisa configurar nada manualmente. O workflow já está pronto neste repositório!
Passo 3: Configurar o domínio personalizado
Para usar um domínio como blog.ft.ia.br:
- No seu provedor DNS, crie um registro CNAME apontando para
fabricioctelles.github.io - No GitHub, vá em Settings → Pages → Custom domain e configure
blog.ft.ia.br - No repositório, o arquivo
public/CNAMEjá contém o domínio
Passo 4: Ativar GitHub Pages
No repositório do GitHub:
- Vá em Settings → Pages
- Em Source, selecione GitHub Actions
- Pronto! O deploy acontecerá automaticamente
Fluxo de trabalho diário
Para publicar um novo post, o processo é simples:
# 1. Criar a pasta do postmkdir -p src/content/blog/nome-do-post
# 2. Criar o arquivo do post# (edite o index.mdx com seu conteúdo)
# 3. Testar localmentenpm run dev# Acesse http://localhost:1234
# 4. Publicargit add .git commit -m "novo post: Nome do Post"git push# Deploy automático em ~2 minutos!Warning
Para testar localmente, use npm run dev — o site estará disponível em http://localhost:1234. Verifique sempre antes de publicar!
Funcionalidades do template
Este template já vem com:
- Syntax highlighting — blocos de código com tema, numeração de linhas e seções colapsáveis
- KaTeX — renderização de fórmulas matemáticas ()
- Table of Contents — índice lateral automático baseado nos headings
- Tags — categorização de posts com navegação por tag
- RSS — feed RSS automático em
/rss.xml - Sitemap — mapa do site em
/sitemap-index.xml - SEO — meta tags, Open Graph e canonical URLs
- Dark mode — tema claro/escuro automático
- Responsivo — funciona perfeitamente em mobile
- Subposts — posts hierárquicos (parent/child)
- Múltiplos autores — suporte a vários autores por post
Próximos passos
Agora que você entende a estrutura, é hora de criar conteúdo! Nos próximos posts, vou explorar mais funcionalidades avançadas do Astro e como personalizar ainda mais o blog.