SPA with theme switching and Firebase Functions.
Production site: rosenau.info
web/: Vite + React 19 + TypeScript SPAfunctions/: Firebase Functions (TypeScript)- Hosting rewrites:
/resume,/resume.pdf,/sitemap.xml, then SPA fallback
- Replace IDs in
.firebasercandfirebase.json. cd web && npm i && npm run buildcd ../functions && nvm use && npm i && npm run build- At repo root:
firebase deploy
The root
.nvmrcpins Node 24 for the Vite app.functions/.nvmrcpins Node 22 to match the Firebase Functions runtime infirebase.jsonandfunctions/package.json. Runnvm useaftercdinto each directory so installs/builds use the expected engine and avoidEBADENGINEwarnings.
- Enable Email/Password sign-in in Firebase Authentication and create an admin user.
- Visit
/adminin the deployed site (orhttp://localhost:5173/adminduring development) and log in with that account. - From there you can edit the site name, homepage blurb, manage projects, and update the resume URLs.
- Every admin form now supports English and Japanese fields. Populate both so the language switcher (US / Japan flags) on the public site can render a complete experience in either language.
- Lock down writes by setting an admin UID or custom claim in
firestore.rulesandstorage.rules(replaceREPLACE_WITH_ADMIN_UID).
- Canonical HTML resume endpoint:
/resume(also available at/resume.html). - Canonical PDF endpoint:
/resume.pdf(stable URL that redirects to the current uploaded file). - Both endpoints are server-rendered/function-backed so they work without client-side JavaScript.
- Portfolio homepage: Jaron Rosenau
- Case studies: Implementation and integration case studies
- Sitemap: sitemap.xml