My personal portfolio β a minimal, dark-themed single-page site with dedicated project pages, scroll-driven animations, and a glassmorphism design language.
A hand-crafted portfolio built with React and Vite. No UI libraries, no templates β just clean CSS and vanilla React for full control over every detail.
| Section | Description |
|---|---|
| Hero | Animated intro with parallax figures and pointer-tracking effects |
| Work | Project grid with hover-reveal cards linking to detail pages |
| Experience | Scrollable timeline of professional and academic milestones |
| About | Personal introduction |
| Contact | Functional contact form |
- Project detail pages β each project has its own route (
/project/:slug) with hero banner, description, feature list, image gallery, and video embeds - Image lightbox β click any gallery image for a full-screen preview with keyboard dismiss
- Scroll reveal β sections animate in as they enter the viewport
- Scroll progress bar β thin indicator at the top of the page
- Back to top β floating button that appears on scroll
- Glassmorphism UI β frosted-glass cards, navbar, and overlays with consistent design tokens
- Dark theme β neutral warm-gray palette with no accent colors
- Fully responsive β optimized for desktop, tablet, and mobile
- React 18 β component architecture
- Vite 7 β bundler and dev server
- React Router β client-side routing for project pages
- CSS β custom properties,
clamp(), container queries, no preprocessors - PostCSS + Autoprefixer β vendor prefixing
src/
βββ app/ # Root App component + global layout CSS
βββ components/ # Navbar, ScrollProgress, BackToTopButton
βββ data/ # Home page data + project detail entries
βββ hooks/ # Custom hooks (scroll reveal)
βββ pages/ # ProjectDetail page + lightbox
βββ sections/ # Hero, Work, Experience, About, Contact
βββ styles/ # Global CSS, shared utilities, animations
# Clone
git clone https://github.com/hanmpark/portfolio.git
cd portfolio
# Install
npm install
# Dev server
npm run dev
# Production build
npm run build
npm run previewBuilt by Hanmin Park