Story · interactive timeline
How I got here
From PHP files in /var/www to automated, per-client cloud infrastructure
Nobody handed me a platform. I started with one Ubuntu box serving PHP sites out of /var/www, and each step on this timeline came from hitting the limits of the step before it: too many manual edits, too many sites, too many things that only worked on one machine.
Scroll through the eras, or open any event for the details. Links go to the case studies and stories where I explain the decisions properly.
First jobs, first automation
Before I worked in IT, I kept finding ways to make the computer do the repetitive part of the job.
Remote troubleshooting of customer equipment. It was my first taste of fixing systems I couldn't touch.
At Neola I wrote software that converted source documents into data: 12,000+ documents a day, about 40 times what one person did by hand.
Graduated from Zane State College.
IT work and game servers
I started in IT at the library, and at home I was running game servers for a community of players.
One box, bare metal
One Ubuntu server with nginx serving PHP sites straight out of /var/www, across three domains.
Every site was a folder; every change was an SSH session. Helper scripts for permissions, MySQL and nginx restarts.
My first self-hosted source control. Later replaced by Gitea.
Self-hosting a Stable Diffusion web UI, which is where my GPU host started.
Proxying to containers
More and more subdomains became nginx proxy_pass rules in front of Docker containers instead of folders on disk.
A reusable ProxyPassTemplate vhost standardized how every new service got its subdomain and TLS.
vouch-proxy in front of internal tools, using nginx auth_request.
A modular bootstrap script for new servers. My first infrastructure-as-code instinct, and I still use it.
Moving sites to a new server, NAS mounts in fstab, a Portainer agent.
A real platform
Every project became its own Compose stack behind a dedicated reverse-proxy VM on an XCP-ng hypervisor, with shared storage from a NAS I built.
App, nginx and database per project, with their own volumes, behind the proxy VM. It grew to about 90 services.
Read moreReplaced TrueNAS with a Kubuntu VM serving Samba and NFS.
Read moreSend2Email for the microfilm machines, and phishing-report automation in Apps Script.
Read moreOne .env file generates a complete stack. It became the base for most of my sites.
Read moreOne form creates the DNS record, proxy vhost, TLS certificate and the Compose stack. It launched 11+ sites.
Read moreProduction, for other people
A new job running a school district's systems and a business with real cloud infrastructure.
Started as an IT Assistant and began building WM.Tools a week later.
Read morePer-client Vultr VPSes with Cloudflare Origin CA, GHCR image deploys and GitHub Actions CI.
Read moreA runaway automation took down WM.Tools. The fix was concurrency slots and fail-fast rejection.
Read moreNo database, no login, no cookies.
Read moreWhere this leads
The case studies go deep on the latest stages of this timeline.