Personal portfolio website built with React 19 and TypeScript. Features a full-width landing page with an interactive terminal, scroll-driven animations, light/dark theming, and a router-based multi-page layout for showcasing projects, apps, background, and contact information.
- React 19 with TypeScript
- Material UI + Emotion for the design system, driven by a single themed token set
- React Router framework mode for routing and build-time prerendering
- Light / Dark Mode via MUI color schemes, persisted and applied before first paint
- Scroll Animations powered by the
IntersectionObserverAPI - ESLint + Prettier + Husky for code quality
- Vitest + Testing Library for unit testing
The application is prerendered to static HTML by React Router in SPA mode — every route ships a real HTML file with its own title, description, and canonical, then hydrates into a client-routed app. Pages are lazy-loaded route chunks served behind a sticky header and full-width hero sections. Colors, spacing, and typography come from an MUI theme with light and dark color schemes emitted as CSS variables, so switching schemes repaints without re-rendering the tree.
This project uses pnpm (npm/yarn installs are blocked). Enable it with corepack enable.
- Install dependencies:
pnpm install - Start the development server:
pnpm dev - Open browser to
http://localhost:3000
Build the application for production deployment:
pnpm buildOutput is written to dist/client/, which is what the Docker image serves.
Released under the Apache License 2.0.