astrothreejsreacttypescript

Reconstruindo o portfólio com Astro

Reconstruindo o portfólio com Astro

O portfólio anterior era um único arquivo index.html — funcional, rápido e fácil de manter. Mas chegou a hora de evoluir: blog em Markdown, React para componentes interativos, Three.js para animação 3D e Tailwind para estilo.

Por que Astro?

Astro é um framework de geração estática que permite misturar componentes de diferentes frameworks (React, Svelte, Vue) sem enviar JavaScript desnecessário ao cliente. A filosofia de islands architecture significa que apenas os componentes que precisam de interatividade viram JavaScript no browser.

Para um portfólio, isso é ideal:

  • O conteúdo estático (texto, projetos, bio) é HTML puro — carrega rápido e indexa bem.
  • Componentes interativos (o carrossel, a cena Three.js) viram “ilhas” com client:load.

A animação Three.js

A cena 3D usa três grupos independentes que rotacionam em velocidades e direções diferentes:

  1. Core — icosaedro wireframe com anéis, representando a estrutura central de um sistema.
  2. Orbital — nós conectados por linhas, como um grafo de dependências.
  3. Satélites — pontos externos que orbitam no sentido oposto.

A interação com o mouse move levemente a câmera, criando paralaxe sem sobrecarregar o usuário de animação.

Markdown e blog

Com as content collections do Astro, qualquer arquivo .md em src/content/blog/ vira uma rota automática. Frontmatter tipado via Zod garante que cada post tenha título, descrição e data.

const blog = defineCollection({
  schema: z.object({
    title: z.string(),
    pubDate: z.coerce.date(),
    tags: z.array(z.string()).default([]),
  }),
});

JetBrains Mono

A fonte que o projeto pedia desde o início. Monospace, com ligaduras, legível em qualquer tamanho. Substitui as três fontes que o protótipo anterior usava por uma só família coesa.


Próximos passos: adicionar versão em inglês, currículos e mais projetos.