My corner of the internet! 🌱
Personal portfolio built with React, TypeScript, and Three.js. The site is deployed to GitHub Pages with gh-pages.
- Create React App /
react-scripts - React 19 + TypeScript
- React Router
- Three.js, React Three Fiber, and Drei
- GSAP for the bunny scene animation
- Plain CSS per page (namespaced by prefix) plus shared card styles, with theme tokens in TypeScript
Every image is served as pre-generated AVIF/WebP variants from public/optimized/images/. GIFs get a still poster plus animated WebP tiers, so no page ships a raw GIF.
scripts/generate-image-manifest.jsscans the variants and records widths and intrinsic dimensions intosrc/generated/imageManifest.json- The manifest regenerates automatically before
startandbuild(or runnpm run generate:images) src/components/ui/OptimizedImage.tsxreads the manifest and renders<picture>/srcSetmarkup, falling back to the original file for anything without variants
npm start: run the local development servernpm run build: create a production build inbuild/npm run deploy: publishbuild/to GitHub Pagesnpm run generate:images: regenerate the optimized image manifestnpm run lint: run ESLint onsrcnpm run lint:fix: run ESLint with autofixnpm run format: format source and root JSON/Markdown filesnpm run format:check: check formatting without writing changes
src/App.tsx: app shell, nav, theme setup, scroll reset, and route outletsrc/app/routes.tsx: route definitionssrc/pages/home/: home page, featured grids, 3D flower layer, and home-specific hookssrc/pages/home/homeFlowerControls.ts: all home flower model camera, scale, rotation, and layout controlssrc/pages/portfolio/: work grid pagesrc/pages/creative/: art grid page and artwork modalsrc/pages/project-detail/: project detail layout, embeds, progressive detail images, and link parsingsrc/pages/about/: about page layoutsrc/features/bunny/: bunny modal and runtime scene logicsrc/components/: shared site components such as the footer, dog companion, gradient background, and image wrappersrc/components/ui/card.css: card styles shared by the home, work, and art gridssrc/hooks/: viewport, media query, intersection, modal accessibility, and page title hooksscripts/generate-image-manifest.js: image variant manifest generator
