Portfólio pessoal de José Fernando Gomes Marcial. Desenvolvedor Full Stack.
Stack:
- Next.js 14 (App Router)
- TypeScript
- Tailwind CSS v4
- Geist + Geist Mono via
geist - Motion (
motion/react) para microinterações - Phosphor Icons
npm install
npm run devAbre em http://localhost:3000.
app/
layout.tsx # raiz, fontes, metadata
page.tsx # composição das seções
globals.css # tokens Tailwind v4 + reset
components/
language-provider.tsx
nav.tsx
footer.tsx
reveal.tsx # wrapper de motion com prefers-reduced-motion
sections/
hero.tsx
about.tsx
experience.tsx
projects.tsx
outcomes.tsx
stack.tsx
systems.tsx
education.tsx
contact.tsx
content/
copy.ts # strings PT-BR + EN
Toggle PT / EN no canto direito do nav. Default: PT-BR. Estado vive em LanguageProvider (React Context).
Light mode travado para a página inteira. Accent: amber-700. Fundo: stone-50. Sem dark mode (decisão de Page Theme Lock).
npm run build
npm run startdocker compose -f docker-compose.dev.yml upSobe node:20-alpine com bind-mount do código. Acesse http://localhost:3000.
O docker-compose.yml sobe apenas o app Next.js em 127.0.0.1:3000. O nginx do host faz o proxy para HTTPS.
docker compose pull
docker compose up -dDeploy automático via GitHub Actions a cada push em master: build da imagem ghcr.io/xinnaider/portfolio:latest, push e docker compose pull && up -d na VPS.