Portfolio Website Project

Overview
This project was about building a personal portfolio website with a focus on both simplicity and security. The goal was to have a professional site that is fast, easy to maintain, and safe to run on a public server.
Key choices made:
- Used Caddy for the web server because it handles HTTPS automatically and has a simple config format.
- Hardened the VPS with minimal services, firewall rules, and regular updates.
- Kept the site to plain HTML and CSS with no JavaScript to reduce attack surface.
- Automated deployment with GitHub Actions so code changes are pushed live quickly without manual steps.
Skills Gained
- Server hardening: firewall rules, disabling unnecessary services, and managing updates.
- Secure hosting: learning how Caddy manages certificates and redirects.
- Automation: writing GitHub Actions workflows for deployment.
- Minimalist web design: fast pages with fewer attack vectors.
- DNS & reverse proxy: how Cloudflare and Caddy complement each other.
Walkthrough
1. Preparing the VPS
- Deployed a minimal Linux image.
- Patched and updated all packages.
- Installed only Caddy and rsync.
- Configured
ufw
to allow only SSH and HTTP/HTTPS. - Disabled root login, required SSH keys.
2. Configuring Caddy
- Automatic HTTPS certificate management.
- Redirected
www
→ root domain. - Served static files from
/var/www/site
. - Enabled gzip/zstd compression.
3. Building the Site
- Static HTML & CSS only.
- No JavaScript for simplicity and security.
- Lightweight navigation across pages.
4. Automating Deployment
- GitHub Actions workflow deploys on push to
main
. - Rsync syncs files to the VPS.
- Caddy reloads config without downtime.
5. Cloudflare Integration
- DNS + caching.
- DDoS protection.
- Traffic analytics.
Closing Thoughts
The portfolio site is more than static HTML it became an exercise in secure hosting, automation, and clean design. By combining Caddy, GitHub Actions, and a hardened VPS, the result is a fast, reliable site with reduced risks and simple upkeep. I will be expanding the site and including more details in the writeups soon. I just wanted to get something out there to encourage me to add more.