Skip to content
hubert.gunawan
All projects

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

  1. 01

    GitHub

    Source and pull requests

  2. 02

    GitHub Actions

    Lint, type-check, test, build

  3. 03

    S3

    Static export

  4. 04

    CloudFront

    CDN, TLS via ACM

  5. 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.