Início
VA.
Voltar para Projetos

Este site

Portfólio, estudos, documentação e newsletter num lugar só — bilíngue, sem CMS e com todo o conteúdo versionado no Git.

2 min de leitura

Stack

  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • next-intl
  • MDX
  • Vercel

O problema

Eu tinha quatro coisas espalhadas: um portfólio desatualizado, anotações de estudo num app de notas, documentação técnica em arquivos soltos e vontade de escrever uma newsletter. Nenhuma delas conversava com as outras, e manter quatro lugares vivos é a maneira mais rápida de não manter nenhum.

A ideia aqui foi simples: uma base, quatro seções, um único fluxo de publicação.

Como funciona

Não existe banco de dados nem CMS. Cada texto é um arquivo .mdx dentro de content/{idioma}/{coleção}/. Publicar é criar um arquivo e dar git push — a Vercel faz o resto.

content/
├─ pt/
│  ├─ projects/     ← portfólio
│  ├─ blog/         ← estudos
│  ├─ docs/         ← documentação
│  └─ newsletter/   ← edições
└─ en/              ← mesma estrutura

Uma única camada de leitura (src/lib/content.ts) atende as quatro coleções. Ela lê o frontmatter com gray-matter, ordena, filtra rascunhos e alimenta o generateStaticParams de cada rota — o que significa que tudo é gerado estaticamente no build.

Decisões que valeram a pena

Conteúdo bilíngue com URLs traduzidas

As pastas de rota ficam em inglês, mas as URLs em português são traduzidas pelo next-intl. O leitor em PT vê /estudos, o leitor em EN vê /blog, e existe um arquivo de rota só para os dois. Escrevi sobre isso em detalhe nos estudos.

Tema escuro com toggle de verdade

Toda cor do site resolve para uma de seis variáveis CSS. Trocar a identidade visual inteira é editar um bloco só, e o tema claro sai de graça no mesmo movimento.

Tradução parcial não vira 404

Se um texto existe em português mas ainda não em inglês, trocar o idioma leva o leitor para o índice daquela seção em vez de bater numa página de erro. É uma condição de três linhas em cada rota, e resolve o problema mais chato de site bilíngue mantido por uma pessoa só.

O que ficou de fora

Captura de e-mail, comentários, busca e analytics. Nenhum deles resolve um problema que eu tenha hoje — e cada um deles é um serviço externo a mais para manter vivo. Quando a newsletter tiver gente esperando, a inscrição entra.

Tags

  • Next.js
  • MDX
  • i18n