React + TypeScript portfolio deployed to GitHub Pages with gh-pages.
- Create React App (
react-scripts@5) - React 19 + TypeScript
- React Router
- Three.js / React Three Fiber
npm start: local dev servernpm run optimize-images: generate optimized image variants + manifestsnpm run build: production build (runs image optimization first)npm run deploy: publishbuild/to GitHub Pages
src/app/: route composition and app-level wiringsrc/pages/: page modules (home,portfolio,creative,project-detail,not-found)src/components/: shared UI and site componentssrc/components/ui/OptimizedImage.tsx: shared responsive image componentsrc/data/: project and artwork contentsrc/theme/: tokenized theme valuesscripts/optimize-images.js: build-time image optimizerpublic/optimized/images/: generated responsive assetssrc/generated/imageManifest.json: runtime manifest consumed byOptimizedImage
- Add originals to
public/images/...and keep URLs in content as/images/.... - Run
npm run optimize-images(or justnpm run build). - Use
OptimizedImagefor image rendering to reusesrcSet, intrinsic dimensions, lazy-loading. - For heavy GIF thumbnails in card grids, set
preferPosterForGifto use generated lightweight posters.