A world-class personal portfolio website for Matt Haitana, a senior software engineer based in Melbourne, Australia.
- Next.js 15 with App Router
- React 19 + TypeScript
- Tailwind CSS v4
- shadcn/ui (base-nova style)
- Framer Motion for subtle animations
- Lucide Icons
- next-themes for light/dark mode
- Responsive, accessible design with WCAG AA target
- Light/dark theme toggle
- Static site generation for performance
- SEO metadata, OpenGraph, Twitter cards, JSON-LD structured data
- Sitemap and robots.txt generation
- Multi-page architecture: Home, About, GitHub, Contact, Resume
- Expandable experience timeline on the About page
- Integrated GitHub Activity summary on the Home page (contribution graph + top languages)
- Dedicated GitHub dashboard with public repos, languages, and activity
- Direct contact links layout (no form) on the Contact page
npm install
npm run dev# Public data only
node scripts/fetch-github.mjs
# Include private contributions (languages + contribution graph)
GITHUB_TOKEN=ghp_xxx node scripts/fetch-github.mjsThis updates lib/github-data.json. Private repository names are never written to the file or shown on the site. To see private activity in the contribution graph, also enable "Include private contributions on my profile" in your GitHub profile settings.
Copy .env.example to .env.local if you want to store the token locally during development.
npm run buildnpm run lintSee Deployment.md.
app/— Next.js App Router pagescomponents/— Reusable UI components and sectionslib/— Data, utilities, and helper functionspublic/— Static assets