Personal portfolio and résumé website built with Next.js, React, and TypeScript. Editorial, typography-led design with automatic light and dark themes and a responsive layout.
- Editorial Design: Instrument Serif display type, Geist body text, a single indigo accent, and light/dark themes that follow the system setting
- Fully Responsive: Mobile-first design that scales to all screen sizes
- Accessibility: WCAG compliant with skip links, focus states, and semantic HTML
- Performance Optimized: Next.js static generation with image optimization
- Type-Safe: Full TypeScript implementation
- Next.js - React framework
- TypeScript - Type safety
- React - UI library
- Tailwind CSS - Utility-first CSS framework (not currently used, but configured)
- Netlify - Deployment platform
- Node.js 18+ installed
- npm or yarn package manager
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm startnpm run dev- Start development servernpm run build- Build for productionnpm start- Start production servernpm run lint- Run ESLintnpm run format- Format code with Prettiernpm run types- Run TypeScript type checking
/
├── public/ # Static assets (images, favicon)
├── src/
│ ├── pages/ # Next.js pages
│ │ ├── index.tsx # Main portfolio page
│ │ ├── _app.tsx # App component
│ │ └── _document.tsx # HTML document structure
│ └── styles/ # Global styles
│ └── globals.css
├── package.json
├── tsconfig.json
└── next.config.js
All content is located in src/pages/index.tsx. Modify the data arrays to update:
achievements- Key statistics and highlightsskills- Technical expertise areasprojects- Personal projects with images and tagsfeatured- Featured work and professional projectsexperience- Work historyeducation- Certifications and coursesawards- Recognition and awardslinks- Social and professional links
Global styles are in src/styles/globals.css. Key CSS variables:
--bg/--surface- Page and image-well backgrounds--text/--muted/--faint- Primary, secondary and tertiary text--rule/--rule-strong- Hairline dividers--accent- The single accent color (indigo)--font-sans/--font-serif/--font-mono- Type families
Every color token is redefined under @media (prefers-color-scheme: dark).
This project is deployed on Netlify. Simply connect your Git repository to Netlify and it will automatically deploy on push.
MIT License - Feel free to use this as a template for your own portfolio.