Skip to content
Work4 min read

Rebuilding my site and PaddockCMS, with an AI pair programmer

My portfolio was a page that search engines couldn't read, and my CMS was a pile of Firebase reads waiting to become a bill. Here's how I rebuilt both into a fast static blog and a local-first CMS, and what it was like doing it with Claude.

This site has been "almost done" for a long time. It had a nice-looking front page, a wireframe cube, and not much else. Behind it sat PaddockCMS, a little admin app I built to write posts for my sites, which worked, technically, but was built in a way I didn't love once I really looked at it. (Its internal name was FireCMS, because it was originally built for Firebase, before it became truly headless.) This post is about tearing both down and rebuilding them into something I actually want to use.

What was wrong

The site was invisible. Everything rendered in the browser, so search engines and link previews got an empty page. On top of that, a stray tag was telling Google the "real" version of my homepage was a PDF that didn't exist.

The CMS was built to cost money. The first version kept posts in Firestore, which bills per read. A blog where every visitor triggers database reads is a bad deal when the content changes once a week. It also leaned on a separate upload service I no longer want to maintain, and that's being retired.

There was nothing on it. Ten years of work, mostly on internal tools, and a portfolio that didn't show any of it.

The new site

The site is now a blog first. Everything I make is a post with a kind: projects, 3D, music, garage, or notes. Each section only shows up once it has something in it, so I don't have to launch with empty pages.

  • Every page is prerendered to plain HTML at build time, then becomes an interactive app in the browser. Search engines see real content, link previews work, and pages load fast.
  • Posts are Markdown files in my repo. Version history, drafts and backups come for free from git, and drafts never ship to the live site.
  • Media lives on a CDN, not in git. Images are converted to WebP, resized, and stripped of metadata before upload, which matters when half your photos come from a phone that records where you took them.
  • A contact form instead of a public email address. It's protected against bots and sends to my inbox without my address ever appearing on the site.
  • My resume got a makeover to match, and it's generated from the same kind of source files, so updating it is editing text instead of fighting Illustrator.

Cost was the whole point

My one rule for this project was that it shouldn't send me a surprise bill. So the site serves static files, which cost nothing at any traffic level, and media sits on storage with no bandwidth fees. Uploading the same image twice doesn't even count twice: files are named by their contents, so a duplicate is recognized and reused.

PaddockCMS: local-first

Instead of a hosted admin panel, PaddockCMS is now an app I run on my own machine. One command starts it:

  • A real editor with a live preview that renders through the exact same engine as the site build, styled with the site's own stylesheet. What I see while writing is what gets published.
  • Drag or paste images straight into a post. They're optimized, uploaded and dropped in where my cursor was.
  • A Publish button that commits and pushes only my content files, never anything else I happen to have lying around in the repo.
  • No database. No logins to manage, no reads to pay for.

It only listens on my own machine and refuses requests coming from any other website, so even a malicious page open in another tab can't talk to it. Next on the list is making it phone-friendly, so I can post from anywhere.

Working with Claude

I built this with Claude (Anthropic's AI, through Claude Code) as a pair programmer, and I want to be upfront about how that worked.

Claude did most of the typing. It audited the old site and CMS, proposed the architecture, wrote the code, and, the part that impressed me most, tested its own work: security checks against the CMS, end-to-end browser tests that click through the site, and before/after comparisons proving a big refactor didn't change what visitors see. When it found problems along the way, like drafts quietly leaking into the production build, it flagged them and fixed them instead of glossing over them.

My job was direction. I decided what the site should be, set the rules (cost first, stay true to the CMS's original idea, no surprises), reviewed the results, and did the parts that needed my accounts and judgment. It felt less like using a tool and more like working with a very fast, very thorough engineer who never got tired of my "actually, can we change this" messages.

I've been working with Claude for about a week now, and it's surprised me. It's the one AI that actually makes me think my job is cooked.

What's next

  • Moving the whole site onto Cloudflare so publishing a post deploys automatically.
  • PaddockCMS v3: content stored in the cloud and an editor that works from my phone.
  • Filling those empty sections: 3D work, music, and the drift car.

This post was written, previewed and published with the new PaddockCMS, which felt like the right first test.