My blog has been through a lot. Eleventy 1.x, Eleventy 2.x, Astro, and then a recent redesign I did one weekend because I was bored and got inspired by a The Verge unique post layout (that I can’t find now!?) Each migration touched whatever pages I was focused on at the time and left everything else alone. The homepage had one vibe, the posts page had another, the database pages (movies, books, games) looked like they were built in a completely separate weekend (yes).

So I tried something: I used Claude Code’s design skill toolkit, specifically the impeccable skill, to bring it all together.

Teaching the Tool Who I Am

The first step was running /impeccable teach, which is basically a design intake interview. It asks about your audience, your brand personality, your aesthetic direction. Who visits your site? What do you want them to feel? What sites do you admire?

I’ll admit it felt silly at first. I’m sitting here describing my blog’s ā€œbrand personalityā€ to an AI. But it turned out to be useful, and not for the reason I expected. The AI could figure out I like bold colors and geometric shapes just by reading the CSS. The useful part was that I had to articulate what ties all these pages together. I’d never actually done that in a structured way for my personal blog. It forced my hand, which is cool!

The answer, roughly: playful but not juvenile, technically grounded, personality-forward. The pop-art borders and bright colors were intentional. The inconsistency was not.

The Design Brief

Next came /impeccable craft and /shape to build a design brief before touching any code. Planning before implementation. Same philosophy I use for everything else with agents.1 I wrote about this approach in You Are The Driver. Plan first, break things into small pieces, review everything. Same rules whether you’re writing application code or CSS.

The big idea: a content type color system. Every type of content on the site gets its own color. Posts are yellow. Movies are teal. Books are orange. Games are violet. Links are blue. The colors show up in headers, card accents, and page backgrounds. Enough to create a visual thread without being overwhelming.

The other guiding light was GT Maru’s emoji font. These are hand-drawn, colorful, and they scale to any size without looking weird. I’d been using them for headings already, but the brief pushed them further: use the emoji as the site’s illustration system. No stock illustrations, no generic icons, no character avatar. Just these goofy little hand-drawn emoji composed at different scales, floating around with subtle animations. They ended up replacing the avatar I’d had on the homepage, and honestly the site has more personality for it. A šŸ‘‹ at hero scale just works.

On paper, this all sounded perfect. In practice, it took a few tries.

Finding the Right Volume

The first implementation was full-flood neon backgrounds. Every page drenched in its type color at 100% saturation. It looked like a rave flyer. Fun for about three seconds, then headache.

I told Claude ā€œthis is too loudā€ and it overcorrected hard. Stripped everything back to bare borders and text color accents. Clean? Sure. Also sterile and boring. All the personality had been sucked out. I could’ve gotten the same result from a Tailwind template.

Third attempt found the middle ground: tinted backgrounds at low opacity, stronger color on the hero sections, full-saturation stuff reserved for small accents like tags and active states. This is what stuck.

This is the part AI can’t do alone. It’ll generate variations all day. It’ll implement whatever direction you point it in. But it can’t look at a yellow background and feel that it’s too aggressive. That’s taste. I had to look at each version and say ā€œno, not thatā€ until we landed somewhere good. Taste is still a human job.

Working in a Real Codebase

My blog has years of CSS archaeology. There was a hero.css file from a previous redesign that was still being loaded globally and overriding the scoped styles in my new Hero component. Multiple CSS files had competing selectors targeting the same elements. You know the type: change one thing and something unrelated breaks on a page you haven’t looked at in six months.

The worst bug was on db.astro, my database pages layout. There was a named slot that just… didn’t work. We spent way too long debugging it, trying different slot names, different component structures, checking the Astro docs. Eventually the fix was rewriting the file from scratch. I still don’t fully understand why the original broke. Something about how Astro handles named slots in layouts with certain nesting patterns. Sometimes ā€œI don’t know why this was brokenā€ is the honest answer, and I’m at peace with that šŸ™.

What Worked

The type color system was the win. Having movies pages feel teal and book pages feel orange creates exactly the cohesion the site was missing. You can navigate between sections and it feels like one site with different rooms, not seven sites stitched together.

Unifying the Hero component helped a lot too. Every page type now uses the same Hero with the same props interface. Each page’s hero has different content, but they all share the same structure, spacing, and animation patterns. Before this, each page type had its own hero implementation, or didn’t have one at all.

I also leaned on rodney (Claude Code’s browser automation tool) for visual verification. After making CSS changes, we’d screenshot every page type to check for regressions. This caught text contrast problems on certain color backgrounds, spacing that looked fine on the posts page but broke on the games page. Stuff that would’ve shipped otherwise.

And when we needed to update the Hero component and fix the posts listing page and adjust the tag styles, those ran as parallel agents. Each task was independent enough that three agents could work without stepping on each other. That part still feels like magic.

Where I Still Had to Drive

Almost every aesthetic decision.

Color intensity was the biggest one. The AI had no sense of ā€œthis yellow is too aggressive for a backgroundā€ until I told it. It would happily generate perfectly valid CSS that looked terrible. Whether to keep the avatar on the homepage, whether the hover animations were too much, whether a particular shade of teal felt right for movies or if it was too close to the games color. All judgment calls that require looking at the screen and having an opinion.

The AI is great at implementing design decisions. It’s fast, it’s thorough, it remembers to update every instance of a color variable. But the decisions themselves are mine.

The Part I Didn’t Expect

The real payoff wasn’t just that the site looks better. It’s that the CSS is finally organized. All those competing selectors, ghost stylesheets from previous redesigns, inline overrides that nobody remembered writing? Gone. The type color system forced us to consolidate everything into a sane set of variables and shared components. For the first time in years, I can open a stylesheet and understand what it does without doing archaeology first.

That matters because it changes what I’m willing to touch.

Right after finishing the redesign, I went and fixed the dark mode toggle in the nav. There had been this annoying border around it for months that I’d been ignoring because the navigation CSS was a minefield. I also rewrote the hover animation on the header bar, something I’d wanted to do forever but kept putting off because any change to the nav meant risking breakage somewhere else. With the styles cleaned up, both fixes took maybe ten minutes. I wouldn’t have done either if the redesign hadn’t happened first.

That’s the thing about cleaning up a codebase. The value isn’t just the cleanup itself. It’s all the small improvements you make afterward because the friction is finally low enough to bother.

So Was It Worth It?

The cycle of ā€œtry this, no that’s wrong, try this instead, closer, a little more, yes thatā€ is where AI speed matters. Each round took minutes instead of the hour it would’ve taken me to hand-edit fifteen CSS files. The site finally feels like one thing, and new page types get consistency for free because of the unified Hero.

Would I have gotten here without AI tools? Eventually, probably. But it would’ve been a weekend project where I’d do 60% of the work and then abandon it because the remaining 40% was tedious CSS cleanup. Having an agent handle the tedious parts meant I actually finished. And finishing is what unlocks everything else.