Production-ready portfolio template for engineers who want a clean, recruiter-friendly site with fast setup and low maintenance.
- Built for quick recruiter scanning: clear sections, focused project cards, direct demo/repo links
- Data-driven content: update portfolio info in data files, not JSX
- Bilingual ready: English + Traditional Chinese UI and project content support
- Static deployment: optimized for GitHub Pages (HashRouter)
- Quality guardrails: Playwright E2E + CI workflows
- Review who you are and your engineering focus
- Filter projects by category, technology, and status
- Open project details in-page without losing filters/scroll state
- Switch language between English and Traditional Chinese
- Open live demos and source repositories directly
npm install
npm run devnpm run build
npm run test:e2e- Set
baseinvite.config.tsto"/<your-repo-name>/". - Build with your real site URL so sitemap is generated correctly:
SITE_URL=https://<username>.github.io/<repo> npm run build- this auto-generates both
public/sitemap.xmlandpublic/robots.txt - for security, only
http/httpsSITE_URL values are accepted
- Update placeholders in:
index.html(canonical/OG URL)
- Push to
main. - In repository settings, enable GitHub Pages with GitHub Actions.
- Route-level metadata is handled by
usePageSeoinsrc/utils/seo.ts. public/sitemap.xmlis auto-generated fromsrc/routes/routeConfig.jsonduring build.public/robots.txtis auto-generated fromSITE_URLduring build.- After deployment, submit:
https://<username>.github.io/<repo>/sitemap.xmlto Google Search Console- same URL to Bing Webmaster Tools
src/data/profile.tssrc/data/skills.ts
- Add/update project base data in
src/data/projects.ts. - Add/update Traditional Chinese project text in
src/data/projects.zh.ts. - Add preview image to
src/assets/images/projects/<id>.png(or.webp). - Optional preview capture:
node tools/capture-project-previews.mjsNotes:
- If
demoUrlis missing, the Live Demo button is hidden. - If
repoUrlis missing, the GitHub Repo button is hidden. - If image is missing, cards render a graceful placeholder.