Software · 2026
This Portfolio — haheng.au
A static-first Next.js site, tested in CI and self-hosted on AWS S3 + CloudFront with infrastructure as code.
- Context
- Personal
- Areas
- Frontend, DevOps
- Next.js
- TypeScript
- Tailwind CSS
- AWS
- Docker
- GitHub Actions
Problem
A portfolio should prove skills, not just list them. I wanted this site to be built, tested, and deployed the same way I'd build a production system.
My role
Sole engineer: design, build, infrastructure, and deployment.
Architecture
01
GitHub
Source and pull requests
02
GitHub Actions
Lint, type-check, test, build
03
S3
Static export
04
CloudFront
CDN, TLS via ACM
05
Route 53
haheng.au
Key decisions
- Static first. Next.js static export keeps pages fast and keeps the site up even if any API is down.
- Content as data. Experience, skills, and projects live in typed data files; case studies are MDX. The web resume and the home page read from the same source.
- Self-hosted on AWS. S3 + CloudFront instead of a managed platform, with infrastructure as code for reproducible rebuilds.
- Build-time integrations. The latest blog posts are pulled from the blog's RSS feed at build time, with a fallback if the feed is unavailable.
Tech stack
Next.js · React · TypeScript · Tailwind CSS · MDX · Vitest · GitHub Actions · Docker · AWS (S3, CloudFront, Route 53, ACM)
Outcome
A fast, accessible portfolio that doubles as a public code sample.
Lessons
- Treating a small site like a production service (CI, tests, IaC, monitoring) is the best way to show how I work.