Portfólio pessoal em React + TypeScript + Tailwind CSS v4 + GSAP + lucide-react, construído com Vite.
npm install
npm run devBuild de produção:
npm run build
npm run previewO projeto que enviaste (gerado via Lovable) já usava exatamente as tecnologias pedidas — React, Tailwind CSS, GSAP e lucide-react — mas vinha embrulhado em TanStack Start (SSR, router de ficheiros, React Query) e trazia ~45 componentes UI do shadcn/Radix (accordion, carousel, sidebar, chart, etc.) que o portfólio nunca chega a usar. Não havia nada para "converter" — estava tudo lá — por isso troquei o meu esforço por limpar e afinar:
- Estrutura simplificada: Vite puro em vez de TanStack Start. Continua 100% React + Tailwind + GSAP + Lucide, só que sem SSR, sem router e sem React Query — coisas que um site de uma página não precisa.
npm installenpm run devchegam. - Dependências: removidos todos os pacotes Radix/shadcn não usados (
@radix-ui/*,cmdk,embla-carousel,recharts,sonner,vaul,zod,react-hook-form, etc.). Ficam só as que o portfólio de facto usa.
- Hero: entrada suave e orquestrada (fade + slide em cascata) ao carregar a página, em vez de tudo aparecer estático; paralaxe muito subtil na grelha de fundo ao mover o rato (desativado em touch); indicador "Available for work" com pulso animado; máquina de escrever com pequenas variações de velocidade (jitter) para parecer menos mecânica e cursor com fade suave em vez de blink abrupto.
- Navbar: agora com menu mobile funcional (o original só tinha um botão de Contact em mobile — não dava para chegar a Work/About/Skills sem fazer scroll manual) e scroll-spy: o link da secção atual fica destacado com um sublinhado animado.
- Projetos: a imagem revela-se com
clip-path+ leve zoom-out de brilho/saturação em vez de um simples fade, o que dá mais sensação de profundidade; timing entre texto/botões/imagem ligeiramente mais orgânico; pequeno zoom na imagem ao passar o rato; indicador lateral (01–04) ganhou uma barra de progresso equivalente em mobile (o original só existia em desktop); painel de "stack" abre com uma transição de altura suave em vez de aparecer/desaparecer bruscamente. - About/Skills/Contact: ganharam um fade-in subtil ao entrarem na viewport (o original aparecia tudo instantaneamente), para dar continuidade ao ritmo de scroll criado na secção de projetos.
- Acessibilidade/detalhe:
prefers-reduced-motionrespeitado em todas as animações,:focus-visiblevisível em todo o site,aria-expandednos botões toggle,scroll-margin-topnas secções para não ficarem escondidas atrás da navbar fixa.
Paleta e tokens mantidos exatamente como definiste:
| Token | Cor |
|---|---|
| Background | #09090B |
| Surface | #111113 |
| Border | #27272A |
| Text | #FAFAFA |
| Muted text | #A1A1AA |
| Accent | #3B82F6 |
| Accent hover | #2563EB |
src/
components/
Hero.tsx
Nav.tsx
Projects.tsx
Sections.tsx # About, Skills, Contact
data/
projects.ts # edita aqui os teus projetos reais
hooks/
useTypewriter.ts
lib/
utils.ts
assets/ # screenshots dos projetos (placeholders)
styles.css
App.tsx
main.tsx
- Substituir os projetos placeholder em
src/data/projects.tspelos teus projetos reais e trocar as imagens emsrc/assets/. - Trocar o email/links de GitHub/LinkedIn (procura por
hugo@example.com,github.com,linkedin.com). - Ajustar o texto de "About" em
Sections.tsxpara a tua história real.