How i used an ai agent to make this website

· #ai · #ai-assisted-development · #django · #homelab · #htmx · #python · #self-hosting

tldr

i sat down on a sunday evening and by monday night i had a full personal website running on k3s in my proxmox homelab, with a photo gallery, a blog (wagtail), a cv page, ci/cd with github actions, and a password-protected calendar tool. the whole thing was built in conversation with an ai agent (kiro). i told it what i wanted, it wrote the code, i reviewed, we iterated. the website you're reading this on is the result.

some context

this project has been sitting around for months. the v1 was a next.js thing i made back in 2020 — just a hello world page with some links. i kept meaning to redo it properly but never got around to it. i had started a django version (v2) a while back, added photologue for photos, a basic cv page with bootstrap, but it was half-done and collecting dust.

then i got kiro cli and decided to just... go for it. in one session.

how it actually went

i started by telling the agent what i wanted: a personal website, photos with raw support (i shoot with a canon eos rp), a blog, and some small tools. i also said i wanted to use this as an excuse to learn k8s better since i use k3s at work.

the agent asked me the right questions — what stack, what style, what hosting. i said django, minimal html, no frameworks, foss everything, deploy on proxmox at home.

from there it was basically a conversation. i'd say something like "redesign the homepage, clean minimal html, no bootstrap" and it would write the templates, update the urls, build the container, test it. when something broke it would debug it. when i didn't like something i'd say so and it would change it.

some examples of how the back and forth went:

the k8s/proxmox adventure

this was the fun part. setting up the proxmox vm was... an adventure. the community script hung because of a stuck zfs operation on my proxmox host. we had to reboot proxmox, clean up leftover zfs datasets, resize the filesystem inside the vm (the cloud image was only 3gb), install ssh manually because the debian nocloud image doesn't come with it, and fix the root password by mounting the disk from the proxmox host.

then deploying to k3s had its own set of issues — the container image name wasn't resolving correctly in containerd, there was disk pressure because podman's build cache filled the vm, and the traefik ingress was redirecting in a loop because cloudflare was already handling https.

all of these were solved in the conversation. the agent would try something, it would fail, we'd debug together, try a different approach. it felt like pair programming with someone who types really fast.

what i actually built

by the end of the session:

the whole thing runs on a debian 13 vm in proxmox, k3s single node, behind a cloudflare tunnel. deploy is just ./deploy.sh which pulls the pre-built image from ghcr.io.

what i learned

the agent is really good at the mechanical parts — writing boilerplate, setting up k8s manifests, debugging deployment issues, writing tests. it's fast and it doesn't get tired. it wrote 21 passing tests for the photo gallery in one go.

where it needed me was for decisions. what style do i want? what third party to use? should the calendar be public or private? how should the photo workflow work? the agent would lay out options and i'd pick. sometimes it would suggest something and i'd push back — like when it wanted to use whitenoise and i initially said no (i later agreed it was the right call).

the biggest value was momentum. instead of spending an evening setting up k8s manifests and getting frustrated with yaml indentation, i just said "write the k8s manifests" and reviewed what came out. instead of googling "django wagtail setup", i said "replace the custom blog with wagtail" and it did the migration in minutes.

what's next

the code is all on github if you want to look at it. the commit history tells the story pretty well.

← all posts