How this site works

This is a fully custom WordPress theme. Hand-written (by AI) PHP templates, plain CSS, plain JavaScript. What you’re looking at right now is served straight out of files like single.php and page-media.php.

Nearly all of it was built through conversation with Claude, iterating this way over dozens of sessions rather than starting from a design file and translating it into code by hand. The changelog is the session by session record of that process, warts and dead ends included. This page is the current state summary, kept up to date whenever something material changes rather than after every small fix.

Dark mode here is a real toggle, not just a media query. It remembers your choice and matches your system preference on first visit. The site is also built to be readable by AI agents, not just browsers: markdown versions of every page, a discoverable skills index, and MCP-based tools that let an agent (including the one that helped write this page) read and update the site directly, with every write staged and confirmed before it applies.

Elementor Hosting hosting, with Cloudflare CDN
v1.4.98 current theme version
0 third-party font requests
built with AI, session by session

This site's anatomy

14 entries
Writing

Blog posts and essays, including biweekly issues of The Diff - all regular WordPress posts, not a separate content type.

8 entries
Timeline

The story so far, milestone by milestone. Powers the timeline on the About page.

38 entries
Press & Talks

Every podcast, talk, webinar, and article, each with its own page for the embed or link out.

6 entries
Events

Upcoming conferences and appearances, shown on the homepage until the date passes.

23 entries
Changelog

Every shipped change to this site, drafted by Claude at the end of each build session.

6 entries
Plugins I built

The custom plugins running this site, each with its own page below.

What I built to get here

Custom plugins, purpose-built for this site rather than pulled off the shelf. Each one exists because a specific thing this site needed didn't have a simple version already.

Active

AI Site Chat

Ask my site anything, answered by Claude

Active

MS Security Headers

The headers.dev checklist, as a plugin

Active

Make My Site Agent-Ready

Markdown, discovery, and usage signals for AI agents

Active

Lighthouse Scanner

Performance scores, tracked without leaving wp-admin

Active

Admin Menu Manager

A tidier wp-admin sidebar

Active

MS WordPress Abilities

The tools that let an agent actually run this site

What I check, and why

specification.website
Foundations, accessibility, performance, security, resilience

It checks all of it, and it's caught real things: 38 images on the media page with no alt text, a missing header landmark, animations that ignored a visitor's reduced-motion preference, fonts pulling from Google's CDN instead of shipping with the site. All fixed. A few items it still flags, a Content Security Policy chief among them, are a deliberate not-yet rather than something I missed.

headers.dev
Does every response actually lock itself down

Elementor Hosting doesn't give me server config access, so when this flagged missing X-Frame-Options and Permissions-Policy headers, the fix had to be a plugin of my own: MS Security Headers, built for exactly this.

isitagentready.com
Whether an AI agent can actually use this site

A different question from "does a browser render it correctly." It's the reason two of the plugins on this page exist: Make My Site Agent-Ready serves markdown versions of every page and an llms.txt index, and MS WordPress Abilities is what actually lets an agent, including the one that helped build this page, read and write to the site directly.

None of these are one-time passes. The site gets rechecked on a schedule, and the changelog is where the fixes show up as they happen.

93 performance
100 accessibility
100 best practices
100 seo

Latest Lighthouse scan, Jul 7, 2026. Pulled live from this site's own scan history, not hand-updated.

I write and talk about WordPress for a living, and a personal site is a more honest place to show how something actually gets built than a case study ever is. This page is the parts of that story that don't change every week. The changelog is the parts that do, one shipped change at a time. Between the two, this is the whole thing, current as of the last time I touched it.