Personal portfolio site for Noah Sun, built with React, TypeScript, and Tailwind CSS. Deployed on GitHub Pages at sunnoah.ca.
- Frontend: React 19 + React Router, Vite, Tailwind CSS 4, TypeScript
- Contact form backend: Cloudflare Worker (
worker/) that validates submissions and sends email via Resend
src/
components/ UI sections (Hero, Experience, Projects, Contact, ...)
pages/ Route-level views (Home, Projects, Detail)
data/ Content — profile info, experience, projects, education, skills
hooks/ Shared React hooks
lib/ Utilities
worker/ Cloudflare Worker for the contact form's email backend
npm install
npm run dev # start the Vite dev server
npm run build # type-check and build for production
npm run lint # run oxlint
npm run preview # preview the production build locallyTo work on the contact form backend locally:
cd worker
npm install
npm run dev # run the worker locally with wranglerThe frontend is built and published to GitHub Pages. The contact form worker is deployed separately to Cloudflare with:
cd worker
npm run deploy