Personal portfolio rebuilt on Next.js App Router with GSAP + Lenis scroll choreography, pigmented cream/orange brand tokens, day/night wipe transition, and swappable aesthetic packs.
Live: portfolio-sooty-nu-bjae97llpm.vercel.app
The old GitHub Pages URL (alejosworkstuff.github.io/portfolio) redirects to Vercel. Pages must use GitHub Actions as the deploy source so .github/workflows/gh-pages-redirect.yml wins; a root index.html + .nojekyll is also kept as a fallback if Pages is ever left on branch/legacy mode.
| Layer | Tech |
|---|---|
| Framework | Next.js 15 (App Router), TypeScript, React 19 |
| Motion | GSAP + ScrollTrigger, Lenis |
| Theme | next-themes + View Transitions wipe + aesthetic packs |
| Fonts | Fraunces (display) + Outfit (sans) via next/font |
| Hosting | Vercel |
- Bilingual EN/ES UI (persisted)
- Edge-cascade scroll reveals for sections and project cards
- Video-ready project cards (WebP posters now; drop
.webmlater) - Case studies at
/projects/[slug] - Aesthetic switcher: Cream Amber (default), Sky Cream, Space Violet
- Day/night horizontal wipe (
prefers-reduced-motionrespected)
npm install
npm run devnpm run build
npm startapp/ # App Router pages + globals.css
components/ # sections, motion, theme, layout
lib/ # translations, projects, aesthetics, case studies
public/assets/ # images (and future videos)
public/resume/ # static resume / cover letter HTML
_legacy/ # archived static site (reference only)
When you record project loops, place files under public/assets/projects/ and set videoSrc on the matching entry in lib/projects.ts. Until then, posters are used.
Token packs live in lib/aesthetics/. Day/night is independent of the selected pack.
See LICENSE.