Self-Hosted Portfolio Website
Jul 2026 – Aug 2026I built this site by hand as a responsive static portfolio, with dedicated project pages, a downloadable resume, keyboard focus states, reduced-motion support, and social-sharing metadata. Keeping it static makes the site straightforward to maintain and minimizes the attack surface of the machine hosting it.
The site runs from an nginx container on my Ubuntu server. The container is bound only to
127.0.0.1, and a Cloudflare Tunnel publishes it without opening an inbound port on the home
router. That gives the public site a deliberately narrow path to the origin while keeping the hosting setup
understandable enough for me to operate myself.
I also wrote a deployment script that rebuilds and replaces the container in one command, configured nginx cache headers to prevent stale HTML after releases, and documented the architecture and operating constraints for future changes.
GitHub repo →