Modern portfolio site built with Next.js and deployed to GitHub Pages.
This site highlights:
- Professional experience
- Skills grouped by category
- Personal interests
- Contact and social links
- Next.js (App Router, TypeScript)
- React
- CSS (custom design tokens + responsive layout)
- Next Metadata routes (
robots,sitemap,manifest)
- Responsive hero section with profile image and impact metrics
- Timeline-style experience section with:
- Company logo + company name
- Current-role badge (
Present) - Per-role skills chips
- Collapsible impact highlights (for non-current roles)
- Visual skills cards and chips
- Updated favicon/brand mark and metadata for social sharing
- Accessibility support (focus states, skip link, reduced motion)
app/- routes, layout, global styles, metadata routescomponents/- UI sections and shared componentsdata/- typed content models and portfolio datapublic/- static assets (images, icons, resume).github/workflows/deploy-pages.yml- GitHub Pages CI/CD
- Node.js
>= 20.9.0 - npm
npm install
npm run devOpen http://localhost:3000.
npm run buildThis project uses static export via:
next.config.ts->output: "export"next.config.ts->images.unoptimized: true
Build output is generated in out/.
Deployment is configured through GitHub Actions:
- Workflow file:
.github/workflows/deploy-pages.yml - Trigger: pushes to
mainormaster - Artifact:
out/
In your repository settings:
- Go to Settings -> Pages
- Set Source to GitHub Actions
For compatibility with static export, these routes are configured with force-static:
app/robots.tsapp/sitemap.tsapp/manifest.ts
Edwin Do