OK. I need to tell you what just happened. Because I’m still a little dizzy from it.
This past Thursday I woke up with a familiar itch. You know that feeling — the one where you look at your personal website and think “I should really rebuild this thing”. I’ve had that thought about once a year for the past decade. I usually spend a weekend researching frameworks, open seventeen tabs, get overwhelmed, and close everything to watch Netflix instead.
This time was different.
The beginning: a question I already knew the answer to
It started simple enough. I opened Claude Code — Anthropic’s AI agent CLI — and asked something I had been wondering about: should I use Astro or Next.js for a new version of my blog? I knew Astro was probably the right answer, but I wanted a second opinion.
Claude didn’t just say “use Astro.” It walked me through the tradeoffs. Static output, no backend, content collections, React islands for interactivity where actually needed. We talked through the stack: Astro 6, Tailwind 4, TypeScript, maybe Shadcn UI for components.
Twenty minutes in, I had a direction. Thirty minutes in, we were already scaffolding.
The migration
Here’s the thing about oanderson.net — it had been sitting on WordPress for years. The kind of WordPress setup where you remember what plugins you installed approximately never. I had posts, images, pages, a Hello, World! post I wrote years ago that I actually care about.
So I gave Claude a task: download everything from the WordPress site, organize it into Astro content collections, and preserve all the media.
What happened next still amazes me a little. Claude systematically scraped the site, organized posts and pages into the right folders, pulled down images, set up the content config with proper Zod schemas, and started wiring the layouts. I wasn’t writing content migration scripts. I wasn’t Googling “how to export WordPress to markdown.” I was just… reviewing output and making decisions.
Not everything worked on the first try. Nothing really does. But when something broke, Claude explained why and proposed a fix. We iterated fast.
The 3 AM stats counter
Somewhere around midnight into May 2nd — and yes, I was still at it — I wanted to add an animated stats counter to the homepage. Six numbers that scroll up when you land on the page: years of experience, companies, countries, revenue protected… you know, the kind of thing that makes your portfolio look like you actually did things.
Claude built StatsCounter.tsx with react-countup and Intersection Observer. Scroll-triggered, client-side only, hydrated with client:visible so Astro doesn’t send React to every visitor who never scrolls that far. It took maybe one focused session. It works beautifully.
That was 3 in the morning.
The deployment saga
Here is the part where I confess I changed my deployment strategy three times.
First I thought GitHub Pages. Then I remembered I have Hostinger. Then Claude helped me write a GitHub Actions workflow to SFTP deploy the dist/ folder directly on every push to main. Then I realized there were path issues with images on the deployed site — absolute paths that worked locally but broke in production.
We fixed it. Then I realized SFTP wasn’t quite right for my Hostinger setup and we switched to FTP. Each time, the fix was a conversation. Not an hour of Googling Stack Overflow, not reading docs I half-understood — a conversation.
By May 2nd, oanderson.net was live. Built from scratch, migrated from WordPress, deployed automatically.
”You know what, let me do another one”
This is where it gets a little ridiculous.
I’m part of DeMolay — a youth organization I’ve been involved with for many years. We have a chapter called Capítulo Grande Rio in Rio de Janeiro, and their website was still on an old WordPress installation that nobody was actively maintaining. I had been meaning to do something about it for… a while.
It was already May 3rd. I had just finished building my own site in about 36 hours. And I thought: I wonder if I can do this again.
So I started a new session. Told Claude: “New Astro site, Brazilian Portuguese, this is for a DeMolay chapter. Here’s the inspiration folder.” And we went again.
The scaffolding happened fast — because I’d just been through it once. The patterns were familiar. When Claude hit a styling question or layout decision, I had opinions ready. I wasn’t figuring out how Astro’s content collections work for the first time anymore.
We handled accessibility right away — footer link contrast, responsive layout at tablet sizes, even a weird issue with the Brazilian flag emoji not rendering correctly on Windows. Little things that matter.
By that evening, a second site existed that hadn’t existed in the morning.
What actually changed here
Look — AI has been around for a while, and I’ve used it plenty. I’ve pasted code into ChatGPT and gotten suggestions back. I’ve used Copilot for completions. But Claude Code inside a real project is a different experience.
The difference is context. Claude isn’t just completing a line of code. It’s reading your files, understanding your structure, running builds, checking errors, proposing approaches. When I said “fix the images in the deploy,” it didn’t ask me which images or where the deploy was. It found the workflow file, read it, identified the base path mismatch, and fixed it.
There were sessions where I opened a conversation at 3 AM barely knowing what the problem was, and by the time I closed it the thing worked. That’s not “AI autocomplete.” That’s closer to pairing with a very fast, very patient engineer who never needs a break.
And here’s the part I keep thinking about: I understood everything that was built. I wasn’t handed a black box. Every component, every config file, every GitHub Actions workflow — I know what it does and why it’s there. Because we built it together, with explanations along the way.
The numbers, if you care about those
- 15 sessions across 3 days
- 2 websites rebuilt from scratch
- ~48 hours start to finish
- 0 weekends lost to framework paralysis
What’s next
I already created a /new-astro-site Claude Code command — a reusable skill I can invoke to scaffold the next Astro project with the same setup. Because apparently that’s the kind of thing you can do now: if you just solved a repeatable problem, you can just… teach the AI to do it again.
The tooling is genuinely changing what one person can ship in a weekend. Not because the AI is writing your whole codebase for you and you’re just watching — but because the friction is gone. The “go look that up,” the “write the boilerplate,” the “debug this config thing for an hour” friction. You spend that time on the decisions that actually matter.
I’m going to think about that for a while.