howzysolutions
o_problema
Meu próprio portfólio. A primeira versão era uma experiência 3D dirigida por scroll que parecia pronta e não dizia nada: a engenharia funcionava, o conteúdo não existia. Oito projetos reais estavam de fora de um site cujo trabalho inteiro era mostrá-los.
o_que_faz
- Um terminal interativo respondendo comandos reais sobre o autor e cada projeto, movido por um engine de comandos puro, sem import de framework.
- O engine de comandos é agnóstico de renderer por construção: um segundo renderer (uma apresentação WebGL/imersiva opt-in) foi construído, funcionou exatamente como especificado, e depois foi removido sem tocar no engine. Isso é prova de que a separação se sustenta, não só uma alegação sobre ela.
- Todo o conteúdo como registros tipados, então adicionar um projeto é edição só de dado e a lista, a página do projeto e o terminal não conseguem se contradizer.
- Inglês e português brasileiro em paridade, onde tradução faltando é erro de compilação e não fallback em runtime.
- Temas escuro e claro de um único conjunto de tokens, aplicados antes do primeiro paint, com contraste verificado por script em vez de afirmado.
- Atividade de código medida em tempo de build a partir do WakaTime, cada número carregando seu próprio período.
stack
frontend
React 19 · TypeScript · Vite
infra
Cloudflare Workers
outros
GitHub Spec Kit · Vitest
medido
- Bundle antes do rebranding
- 519.3 KBentry chunk gzipped, medido com npm run build
- Budget
- 120 KBconstituição do projeto, budgets de performance
- Requisitos funcionais
- 33specs/001-terminal-portfolio-rebrand/spec.md
como_foi_construido
O rebranding é spec-driven: uma constituição de projeto ratificada, uma spec com trinta e oito requisitos funcionais e quinze critérios de sucesso, um plano cujas decisões registram cada uma as alternativas rejeitadas, e uma lista de cento e seis tarefas ordenada por dependência.
A restrição organizadora foi medida, não presumida. O build anterior entregava 519,3 KB de JavaScript gzipped contra um budget de 120 KB, 4,3× acima. Cada grupo de dependência foi então empacotado isoladamente para achar onde estava o peso: React e react-dom em 58,7 KB, o grupo WebGL em 358,1 KB, e uma biblioteca de animação em 44,5 KB usada para três fades.
Toda decisão técnica decorre dessa medição. A biblioteca de animação saiu e foi substituída por CSS e um intersection observer. O grupo WebGL foi para trás de um import dinâmico opt-in. O roteamento foi resolvido prerenderizando um HTML por projeto, em vez de embarcar um router.
O trabalho 3D da primeira versão foi levado adiante uma vez, para um renderer imersivo opt-in, depois revisado ao lado do terminal DOM simples que ele envolvia, e cortado. As duas decisões ficam registradas com data, em vez de suavizadas numa narrativa de "sempre foi assim".
limitacoes_conhecidas
- Em construção. Esta entrada descreve um rebranding em andamento, e é o projeto menos acabado deste site, que é exatamente por que ela diz isso em vez de esperar para ser descrita no passado.
- Ainda não existem screenshots de nenhum projeto. Todo layout é construído para ler corretamente sem imagem, então podem ser adicionados depois sem mudança de layout, mas o site hoje não mostra telas.
- Um renderer 3D/WebGL opt-in foi construído e depois removido após revisão. Este site não demonstra essa capacidade como código rodando no momento, só como este relato de construir e depois cortar.
tempo de código rastreado
17 hrs 17 mins Fonte: WakaTime · rastreado desde 2026-03-17 até agora