Personal Portfolio Website
Technologies Used
Project Overview
This site exists for two reasons: make my work legible to recruiters and hiring managers, and give myself a place to write up what I built for my own record. It is built with Astro, structured content collections for project write-ups, and a GitLab CI/CD pipeline for build and deploy.
The 2026 refresh reframes featured projects around honest evolution narratives—homelab platform work, self-hosted tools, and AI-assisted development—rather than generic portfolio copy.
Deliberate Hosting Split
The repository lives on gitlab.com, not on the self-hosted GitLab I run in my homelab. That is intentional. I prefer keeping personal infrastructure off the public internet. GitLab.com handles hosting without exposing my homelab cluster, and a simple static site via GitLab Pages is far simpler than running a VPS with a full web stack.
How It Is Built
Project pages live as Markdown under src/content/projects/ with a typed frontmatter schema. Astro renders them into static HTML. There is no CMS—Git is the content system.
Navigation, skip links, focus handling, and semantic landmarks are part of the base layout. Local work and CI share a Docker-based workflow so what I test matches what the pipeline builds.
Lessons Learned
- Markdown + schema beats ad hoc pages for long-lived portfolio content.
- Static generation fits a personal site — no server state required for readers.
- CI catches regressions early — especially HTML validation and accessibility checks.
- Public hosting for a public story — splitting portfolio hosting from my homelab is a product decision, not a convenience.
Future Work
- Continue the phased content refresh (featured project narratives, about page alignment)
- Optional Lighthouse CI for ongoing performance budgets
- Further tighten project listing filters and categories as the catalog grows