← all notes

How this site ships

A portfolio for a platform engineer is judged twice: once on what it says, and once on how it’s built. This is the second part.

the stack

Static Astro site — content lives as Markdown, the build ships zero JavaScript by default, and the whole thing is a directory of static files when it’s done. No server to run, nothing to patch.

how it deploys

Every push to the default branch runs a GitLab CI pipeline:

  1. buildnpm ci && npm run build, output captured as a job artifact.
  2. deploywrangler pages deploy pushes dist/ to Cloudflare Pages.
deploy:
  stage: deploy
  needs: ["build"]
  script:
    - npx wrangler@latest pages deploy dist --project-name="$CF_PAGES_PROJECT"
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'

Two CI variables (CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID) and that’s the entire deploy story. Cloudflare’s edge handles TLS, CDN, and unlimited bandwidth on the free tier.

why not just the homelab

The homelab gets a write-up, not the traffic. A portfolio has to be up when a recruiter clicks at 9pm — and uptime you control end-to-end is a different promise from uptime that survives a switch dropping off the network. The site lives on Cloudflare; the homelab stays the story it tells.

TODO: once this is live, replace this post with a real one — or keep it and add the parts you’d actually explain in an interview.