A história do Portfólio — da Mission Control ao sci-fi com 529 commits e 218 testes
🚀 Portfólio·

A história do Portfólio — da Mission Control ao sci-fi com 529 commits e 218 testes

📖 5 min de leitura← Voltar para timeline

⚡ O portfólio que virou uma nave espacial

Existe uma regra não escrita do mercado dev: seu portfólio precisa ser tão bom quanto o código que você entrega. Mas em maio de 2026, o meu era só um “Mission Control Portfolio” genérico com um grid de projetos.

Hoje ele é uma nave espacial interativa: parallax scene multicamada com cockpit SVG, 5 mini-games jogáveis, terminal com 15+ comandos, i18n PT/EN completo e 218 testes segurando tudo. Tudo com tema ciano+preto cinematográfico — nada de template.

🧠 Contexto — do template ao playground

O commit inicial (06/05/2026) foi modesto:

607df2d 🚀 Initial commit: Mission Control Portfolio

Next.js + React + Tailwind, o básico de todo portfólio. Mas a identidade visual mudou rápido: o tema Treasure Planet foi arquivado em junho e nasceu a estética sci-fi ciano+preto com parallax layers (L0-L3) e cockpit SVG animado.

A virada conceitual: em vez de mostrar meus projetos em cards estáticos, eu queria que o visitante interagisse com o portfólio como se estivesse numa cabine de nave. Daí vieram os 5 mini-games.

🔧 A luta — games, animações e o deploy que quebrava

Os 5 mini-games

Cada jogo é um experimento: Snake, Pong, um puzzle e outros — embutidos via iframe com React carregado por CDN (unpkg). Isso trouxe o primeiro problema clássico:

// src/components/MiniGames/ — loading state real
const [loading, setLoading] = useState(true)
// spinner + "Carregando jogo..." enquanto o iframe carrega React + Babel do CDN

Sem o loading state, os iframes apareciam em branco por segundos. E no mobile, os cards dos jogos rolavam verticalmente em vez de ficarem fixos — o fix foi overflow-y-hidden + min-h-[160px] pra travar o layout.

A animação de entrada que quase nunca rodou

O GSAP foi o vilão da vez: ele quebrava o build na Vercel porque não estava nas dependencies — só nas devDependencies. O build local passava, o deploy quebrava. Foi o primeiro de muitos “funciona aqui mas não lá”.

# O fix de 17/06 — GSAP pra dependencies de verdade
npm install gsap --save-prod

O deploy manual que virou rotina

O Portifólio vive em três ambientes: Vercel (produção), self-host na 3001, e staging na 3000 via proxy do Capivara. O deploy da Vercel foi manual por muito tempo — vercel --token "$VERCEL_TOKEN" --prod — até o CI/CD automatizar.

💡 Resolução — a vitrine que responde comandos

O momento mais legal: o terminal interativo. Digite help e veja 15+ comandos; projects lista os projetos; contact abre o formulário. É o portfólio conversando com o visitante.

O formulário de contato também virou robusto: validação + rate-limit + LGPD + integração com Resend pra email. E o Cookie Banner com consentimento LGPD — porque portfólio público com analytics precisa respeitar a lei.

A arquitetura final:

  • Parallax scene — grid + cockpit SVG + HUD panels + partículas formam a entrada
  • 5 mini-games — abas com um por vez + toggle “ver todos”
  • Terminal — 15+ comandos, atalhos de teclado no desktop
  • i18n PT/EN — todos os componentes traduzidos
  • Umami Analytics — eventos, pageviews, heatmaps (self-hosted na 3100)

📊 Métricas

Métrica 06/05 (nascimento) Hoje
Commits 1 529
Testes 0 218+
Mini-games 0 5
Comandos do terminal 0 15+
Ambientes 1 3 (Vercel + 3001 + 3000)
Lint errors 0
Parallax layers 0 4 (L0-L3)

🎯 Aprendizados

O Portifólio me ensinou que experiência de marca é código. Um portfólio não mostra só o que você sabe fazer — ele demonstra. Cada mini-game, cada animação, cada comando do terminal é uma entrevista de emprego silenciosa acontecendo em tempo real.

E a lição prática: sempre testar o build no ambiente de deploy. GSAP na devDependencies quebrou produção três vezes até eu entender que “funciona local” não significa “funciona na Vercel”.

~/lifelog — bash
$cat about.txt
╔══════════════════════════════════════╗
║  Samuel Medeiros                    ║
║  Senior Software Engineer           ║
║  Stack: Python · TypeScript · Rust  ║
║  Projetos: Arachne, Dogwalk,        ║
║            Capivara, TatuEngine      ║
╚══════════════════════════════════════╝
      
$