~/selau.dev

1 min de leitura

Como construí este site

Um site pessoal estático em duas línguas com Astro, Tailwind e Cloudflare, sem JavaScript de framework e com formulário de contato rodando num Worker.

  • #astro
  • #tailwind
  • #cloudflare

Eu queria um lugar que dissesse mais do que um PDF: os projetos que mantenho, o trabalho por trás dos números do currículo e anotações que vou escrevendo pelo caminho. Aqui está como ele foi montado.

A stack

  • Astro gera todas as páginas como HTML estático no build. O único JavaScript que chega ao navegador é o botão de tema e o formulário de contato.
  • Tailwind CSS v4 para o estilo, com as cores definidas em variáveis CSS, então os temas claro e escuro usam as mesmas classes.
  • Cloudflare Workers serve os arquivos estáticos e cuida da única rota dinâmica, o formulário de contato.

Duas línguas a partir de uma fonte

Todo o conteúdo do currículo fica num único arquivo TypeScript, com inglês e português lado a lado. As páginas são só uma casca que passa o idioma para um componente compartilhado:

---
import Home from '../components/Home.astro';
---

<Home locale="pt-br" />

O inglês fica em / e o português em /pt-br/. Cada página declara a versão alternativa com hreflang, então os buscadores mostram a versão certa para cada leitor.

Formulário de contato sem servidor

O formulário envia para /api/contact, que roda num Worker. Ele valida o token do Cloudflare Turnstile, confere os campos e me manda um e-mail pelo binding do Email Service. Sem serviço de formulário de terceiros e sem chave de API no código.

O que vem por aí

Mais posts sobre o que faço no dia a dia: Laravel multi-tenant, nota fiscal eletrônica, apps em Flutter e lançar produtos pequenos sozinho.