I Built This Site in an Evening. My AI Did the Coding.
I’ve wanted a personal site for years. I’d start one, lose momentum, let it sit. I built photography portfolios on WordPress, Smugmug, Flickr; platforms that handled the hosting but boxed me in on everything else. Eventually I stopped trying. I even let my domain name lapse. (I got lucky and got it back.)
Lately I’ve been working on AI music and video projects, and every time I show someone, the response is the same: “you need a website for this.” On Wednesday, a mentor I respect told me to stop talking about it and get it done. So I started thinking about how.
The plan that changed three times
My first thought was to ask a friend who self-hosts his own site if he could host mine too. That was still the plan when I got home around 5pm tonight. But I’d just finished swapping out an older Synology NAS for a newer one, and it hit me — I have a perfectly capable server sitting right here. Why not do it myself?
And if I’m doing it myself, I have something most people didn’t have a couple years ago: an AI that can write code. I’ve been using Claude for months on various projects. I knew it could handle the web development side. The question was just what stack to point it at.
Two Claudes, one site
Here’s something that might surprise people about how I work with AI: I don’t just open a terminal and start prompting. I start on claude.ai — the conversation interface — to brainstorm and plan. I treat it like a strategy session. We talk through the options, weigh tradeoffs, and build out a plan.
From that conversation, I generate a CLAUDE.md file - a document that gives Claude Code all the context it needs about the project: the goals, the tech stack, the design direction, the constraints. By the time I open the terminal, Claude Code isn’t starting from scratch. It has a brief.
For this site, that planning conversation is where we settled on Hugo as the static site generator. Simple, fast, no database, markdown-based. Perfect for a site that’s mostly content.
The stack nobody would recommend
Here’s where it gets interesting. I’m behind CGNAT — my ISP doesn’t give me a public IP address, and even if they did, it changes randomly. You can’t just point a domain at your home server the normal way.
The architecture fell into place one decision at a time:
- Synology NAS — I already had the hardware. It runs Docker.
- Caddy — a web server that runs in a Docker container on the NAS. Clean, simple, handles the static file serving.
- Cloudflare Tunnel — since I can’t accept inbound connections, the tunnel initiates from my NAS to Cloudflare’s edge. Cloudflare handles DNS and TLS. Traffic flows in through the tunnel. No port forwarding, no dynamic DNS, no exposed IP.
- Hugo — builds the site locally on my development machine. The built files get pushed via git, pulled on the NAS, and Caddy serves them immediately.
It’s unconventional. Nobody on a “how to make a personal website” tutorial is going to suggest this setup. But it works, it’s mine, and I understand every piece of it. I didn’t want a black-box website. I wanted a system I could reason about, debug, and rebuild from scratch in an afternoon.
Every piece of this stack exists because of a constraint. I didn’t design a system. The constraints designed it for me.
What Claude actually did
To be clear about the division of labor: I made every decision. The stack, the design direction, the content, the structure. That’s all me. Claude wrote the code.
Every CSS rule, every Hugo template, every configuration file came from a conversation where I described what I wanted and Claude implemented it. When the cards on the homepage looked cluttered, I said so, and Claude fixed the grid spacing. When Cloudflare cached a stale stylesheet and the live site looked wrong, we debugged it together and added cache-busting with fingerprinted assets.
My creative identity comes down to a few principles: atomic steps, reproducible pipelines, minimal ambiguity, and human-in-the-loop direction. That’s how I approach AI music production, and it’s exactly how I approached building this site. I didn’t hand Claude a vague prompt and hope for the best. I made each decision, described each change, reviewed each result. The AI executes. I direct.
This isn’t about AI replacing the human in the process. It’s about removing the barrier that kept me from shipping. I had the vision for years. I just didn’t have the time or energy to fight with CSS and config files. Now I don’t have to.
From 5pm to live
The site you’re reading this on went from “maybe I should host this myself” to live on the internet in a single evening. Two music videos embedded, a blog you’re reading right now, a dark theme with purple accents that actually looks like me, all running on hardware in my house, tunneled through Cloudflare, built by a human and an AI working together.
It felt good to finally see something with my name on it live on the internet again.
I’ll write more about what that collaboration actually feels like in a follow-up post. For now, I’ll just say this: the bottleneck was never skill. It was friction. AI didn’t remove the work — it removed the drag.