My personal site ran on Drupal 7 for about a decade. When Drupal 7 hit end of life in January 2025, I had a decision to make: migrate to modern Drupal, find another CMS, or ask a more honest question — does a personal site with no dynamic content actually need a CMS at all?
It doesn’t. The database was theater. So I rebuilt the whole thing in a weekend, using AI as a collaborator at every stage, design, build, and coordination. The result is a faster, simpler site that costs nothing to host and takes about 30 seconds to deploy.
Here’s what that process looked like.
Phase 1: Design with Claude
I started not with code, but with a conversation. Using Claude.ai, I described what I wanted the site to feel like: coastal, editorial, a little seaside craft mixed with technical credibility. We iterated through color palettes, type pairings, and spacing scales. I’d react to what came back, push on things that felt off, and steer toward what resonated.
The output wasn’t a Figma file. It was a shared vocabulary: a set of custom property names, accent colors keyed to each page section (harbor blue for the professional page, tide green for AI services, seafoam for the rentals), and a clear sense of what the site should feel like before I’d written a line of CSS.

That became the design system — a single living document with all the color tokens, type scale, spacing, components, and motifs. The “vibe design” phase took maybe two hours. A traditional design process would have produced something more polished on paper, and probably more cautious in practice.
Phase 2: Picking the right tools
Once I had a design direction, I needed a stack. The criteria were simple: static output (no server, no database), component-based templates, first-class Markdown support, and zero ongoing maintenance overhead.
Astro hit all of them. No JavaScript shipped to the browser by default, a build system that just works, and a component model that felt natural for a site structured around a handful of distinct pages. Cloudflare Pages handles hosting, push to the main branch, it deploys in 30 seconds, and it’s free at this scale.
These aren’t novel choices. They’re just the right tools for the need.
Phase 3: Build with Claude Code
With a design system and a stack, I handed the build to Claude Code. This is what people mean by “vibe coding”: describing what you want, reviewing what comes back, steering the direction rather than typing every line.
The Astro components, the CSS, the page layouts, the blog index pagination, the redirect map for 38 old blog posts that were downloaded as HTML using HTTrack, Claude Code wrote the first version of all of it. I reviewed every file, pushed back when something was over-engineered, and made the judgment calls. But pages that would have taken an afternoon to build from scratch came together in an hour.
The migration was the part I expected to be tedious. The old site had Drupal’s verbose path aliases, slugs like /i-would-nominate-kevin-thull-years-aaron-winborn-award. Rather than managing redirects in a separate config file or server layer, Claude Code mapped them directly into astro.config.mjs, versioned with the site:
redirects: {
'/web-development': '/professional',
'/i-would-nominate-kevin-thull-years-aaron-winborn-award': '/blog/kevin-thull-aaron-winborn-award',
// ...
}
Astro generates the right response headers at build time. Nothing to configure separately, nothing to maintain.
Phase 4: Coordination via Remote Control
The part I didn’t anticipate relying on as much: Claude Code’s Remote Control feature, used from my phone with voice-to-text.
When I was away from my desk, I could dictate a task or work through a plan out loud, and Claude Code would be running the next thing, or even done with it by the time I sat back down. The SEO audit, the Lighthouse improvement plan, the redirect mapping, those happened on my phone. The actual file changes happened in Claude Code.
It changed the shape of the project. Instead of needing an uninterrupted two-hour block to make meaningful progress, I could do 10 minutes of focused direction, step away, and pick it back up whenever. The whole rebuild happened across a weekend without ever feeling like a grind.
The outcome
Running Unlighthouse — a tool that runs Lighthouse across every page in a crawl — against the live site:
| Page | Perf | A11y | Best Practices | SEO |
|---|---|---|---|---|
| Home | 98 | 100 | 100 | 100 |
| Professional | 97 | 100 | 100 | 100 |
| Blog index | 92 | 100 | 100 | 100 |
| Blog posts (most) | 99–100 | 100 | 100 | 100 |
No server render time. No JavaScript bundle to parse. No third-party scripts. Self-hosted fonts. The CMS is gone and so is everything that came with it.
The bigger point
The AI tools didn’t make decisions for me. Claude shaped the design direction when I could only describe what I wanted in words. Claude Code wrote the implementation while I reviewed and steered. Remote Control kept the project moving when I wasn’t at my desk.
What they collectively did was compress the distance between “I want to rebuild my site” and “the site is rebuilt.” That compression is real, and it’s what makes a weekend rebuild of a ten-year-old site feel achievable rather than daunting.
The stack, Astro, Cloudflare Pages, Markdown files, hand-written CSS, is just what made sense for the need. The interesting part was the process that got there.