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:
build—npm ci && npm run build, output captured as a job artifact.deploy—wrangler pages deploypushesdist/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.