Personal portfolio for Diego Said — a single-page editorial site built with React, Vite, Tailwind, and GSAP, deployed on Cloudflare Pages.
Live: https://diegosaid.com
- React 19 + TypeScript
- Vite 7 for dev/build
- Tailwind CSS v3 + shadcn/ui primitives
- GSAP + Lenis for scroll-driven animation and smooth scrolling
- React Router v7
- Cloudflare Pages for hosting
npm install
npm run dev # http://localhost:5173| Script | Purpose |
|---|---|
npm run dev |
Start the Vite dev server with HMR. |
npm run build |
Type-check (tsc -b) and build for production into dist/. |
npm run lint |
Run ESLint over the codebase. |
npm run preview |
Preview the production build locally. |
npm run deploy |
Build and deploy dist/ to Cloudflare Pages via Wrangler. |
npm run deploy:prod |
Push to GitHub, then build and deploy to Cloudflare Pages. |
src/
components/ Layout chrome (Navbar, Footer) + reusable atoms
ui/ shadcn/ui primitives
hooks/ Reusable React hooks (matchMedia, lazy video, etc.)
lib/ Utilities and the Lenis scroll context
pages/ Route entry points (Home, Projects, Blog, blog posts)
sections/ Home/Projects page sections in render order
index.css Global styles, focus rings, texture utilities
main.tsx Application entry
public/ Static assets (videos, SVGs, _redirects)
docs/ Planning artifacts
output/ Phase-1 audit, redesign brief, swarm-voting outputs
Push code to GitHub and deploy to Cloudflare Pages in one step:
npm run deploy:prod # git push origin main + build + deploy via wranglerFor a build-and-deploy without pushing to Git:
npm run deploy # build and upload dist/ via wranglerAll rights reserved. Code is published for portfolio review; reuse of brand assets, copy, and videos requires permission.