Everything after this paragraph was written with AI. I had Claude Code generate this post since I was curious what it would come up with and to give me a summary of what was done to help redesign this blog.
Written by Claude:
Over the past three days Iāve been working with Claude Code to modernize this 20+ year old Jekyll blog. This post covers what we accomplished, the challenges we faced, and what itās like pairing with an AI on a real codebase. Claude wrote this post based on our work together.
Claude Code is Anthropicās CLI tool that brings their Claude AI directly into your terminal. Unlike browser-based AI assistants or IDE plugins, it works through conversation while having direct access to your filesystem, git, and development tools. You describe what you want to accomplish, and it can read files, make edits, run commands, and manage the entire workflow.
This blog has been around since 2004, accumulating 20+ years of technical debt: duplicate CSS, hardcoded colors, no progressive enhancement, bloated dependencies, and inconsistent patterns. I recently added support for small web protocols like Gopher and Gemini, but the main site needed attention.
The first priority was reducing page weight and improving load times. We tackled this systematically:
Removed animate.css - The 57KB library was only used for a subtle header animation. We replaced it with a few lines of CSS.
Lazy-loaded search - The 114KB search.json file was loading on every page load, even though search was rarely used. We moved it to load only when the search input is focused, cutting initial page weight significantly.
Optimized fonts - Added font-display: swap to prevent invisible text during font loading and reduce cumulative layout shift.
Consolidated CSS - This was a big one. The site had Terminal.css (908 lines) plus console.css (718 lines) with override conflicts and duplicate declarations. We merged them into a single consolidated stylesheet (~1150 lines), removing unused components like forms, buttons, progress bars, and timelines that were never used.
The results: ~60KB reduction in page weight and 30-40% faster initial load times.
A major oversight was the siteās complete dependency on JavaScript. If JS was disabled or blocked, the theme toggle was visible but broken, search was displayed but non-functional, and tables had hardcoded colors that didnāt respect system preferences.
We implemented proper progressive enhancement:
prefers-color-scheme media query respected for light mode.js-enabled class added via inline script for feature detectionNow the site works cleanly for users without JavaScript.
Getting social media previews right turned out to be more challenging than expected. The goal was compact, mobile-friendly link previews in apps like Signal and Slack.
After several iterations we settled on:
The challenge was Slackās aggressive caching - previews can take 24-48 hours to refresh. We learned to test with Signal and LinkedIn first, which update immediately.
We improved mobile readability, added proper semantic HTML, and fixed color contrast issues:
The site generates content for both Gopher and Gemini protocols. We refined the generation scripts significantly:
Gopher improvements:
Gemini enhancements:
The key difference: Gopher uses plaintext with line wrapping, while Gemini uses native gemtext format without wrapping (clients handle it).
We added security headers and improved SEO:
The development workflow was surprisingly natural. Iād describe what I wanted to accomplish, and Claude would:
The challenging parts:
Context matters - Claude needed to read files before editing them. When Iād describe a change without pointing to specific files, weād sometimes start down the wrong path. Learning to say ācheck the CSS firstā or āread the current implementationā helped.
Progressive iteration - Complex changes worked best when broken into steps. Rather than āredesign social media previews,ā it was better to iterate: create image, add meta tags, test, adjust size, optimize, test again.
Git workflow - Claude creates commits automatically with co-authored attribution, but never pushes or merges without explicit permission. This worked well for reviewing changes before they went live.
Tag management - The blog has ~78 canonical tags (lowercase, standardized names like 512ke, macos, smolweb). Claude learned to check the tag list and ask before creating new ones, preventing tag sprawl.
What impressed me most was Claudeās ability to maintain consistency. When we established patterns (like using CSS variables instead of hardcoded colors), it would apply them throughout without being reminded.
No time estimates - Claude deliberately avoids giving ETAs for tasks. This is probably good practice (time estimates are usually wrong), but it took adjustment.
Background knowledge gaps - Occasionally Claude would need reminders about project-specific patterns. We solved this by creating a CLAUDE.md file documenting project rules, which it references automatically.
Overly cautious - Sometimes Claude would ask for confirmation on straightforward changes. I preferred this to the opposite problem, but found myself saying āyes, go aheadā frequently.
Over three days we closed ~60 commits across multiple branches:
The blog is faster, more accessible, and works properly across a wider range of browsers and clients.
Working with Claude Code felt like pair programming with a detail-oriented colleague who has perfect recall and never gets tired. It excels at systematic refactoring, catching inconsistencies, and maintaining patterns across a codebase.
The experience changed how I think about AI-assisted development. Itās not about replacing programming knowledge - you still need to understand what you want to build and why. But for execution, maintaining consistency, and handling the tedious parts of refactoring, itās remarkably effective.
If youāre maintaining a blog, personal site, or any codebase that could use systematic cleanup, Claude Code is worth trying. The CLI approach feels natural for terminal-focused workflows, and having an AI that can read your entire codebase and maintain context across changes is powerful.
Now I need to figure out what to tackle next. Maybe those 37 HTML posts from 2006-2011 that still need converting to markdown, or implementing responsive images with WebP/AVIF support. Or perhaps Iāll just enjoy the faster, cleaner site for a while.