tldr: https://www.allysonmellbergtaylor.com/ runs on Kirby now instead of Squarespace
Seven and a half years ago, I helped an artist friend set up a Squarespace site back when those ran about $10/month and I've paid for it ever since. (In the credit card sense, not the suffering sense.) This month I noticed an email from Squarespace that the rate's going to nearly double that. That's not their fault, but it reminded me that the site we put up right away instead of spending a weekend together building something on Kirby is still more of a rental than a home.
Now, Kirby's a great system and I really enjoy using on small, free projects. Over the years, it's also ballooned from its origins as a PHP script that stitches flat text files into web pages into something more complicated to set up. It requires Composer to build, and probably node. It’s also got a Vue control panel for editing the flat files that runs afoul of security scans (that spot PHP editing text files) and needs hand-written YAML configuration that's honestly awful to write.
But this year I've had relatively good success getting Claude Code to write that YAML, set up some basic ddev + Vite local hosting, and figure out the state of rsync deploys and GitHub actions for this site, so while I'm not mad I gave Squarespace so much money over the years — they did what they promised — it’s time to cut bait and finally make Allyson an actual website.
Allyson's site has always been simple: a landing cover page (retired), galleries of images, index pages of those galleries, and a contact page that just links out to Instagram. Squarespace offers more, but it wasn't being used. Self-hosting also means the administration falls to me, which is no small part of what their service offers.
I couldn't find any kind of export from Squarespace (hmm) so I used Integrity Plusto scrape the site. (It’s quicker for me than trying to remember wget commands, but Claude Code probably could have done the wget)
From that archive, Claude Code figured out the URLs for the original resolution assets, made the flat-file Kirby content tree, defined the Kirby content model, and reverse engineered a similar front-end build.
I figured it’s worth a post about the phases of the process, not as a "hey you can clone your Squarespace and save money" but because the intent of signing up for the Squarespace in the first place was to get something up immediately and then work on the "real" site — in this case that took years to get to and a sea change in how to do the work.
It’s not vibe coded or one-shotted; the chat approach helped me write plans and chip away over a week or two in very small pockets of free time. Setting up tasks I understand, coming back to find Claude had failed spectacularly, then setting it on a better path. Could I have written the plan? Done the steps? Absolutely. Would I have put it off until the week before Squarespace wanted $200 more? Very likely.
The content model took some back-and-forth and it went down a lot of stupid rabbitholes and mistakes. It organized the site by the navigation, misunderstood the concept of galleries, dropped titles, etc. It wasted as much time as it saved, but I was also able to set it off to a task in very small bits of my time, chastise it for mistakes when I came back to see what it had done, repeat. It made an absolute mess in the final steps of htaccess, inventing whole areas of Dreamhost or Cloudflare's admin panel I should be looking for even when I gave it the two exact support URLs as reference.
But it’s up and it’s done and it runs locally on my little Mac Mini. I can screenshare over to that machine and run the updates. I can pull content changes from production and commit them to the private git repo, push them up to staging to sync. I skipped the GitHub Actions deploy on this one, but I'll add it to the half-dozen or so Kirby sites I've set up the same way(s) this year with Claude's help and make its maintenance part of my regular routines.
I tried intentionally not to wholesale copy the work of Squarespace's theme designers. Menu's on the left on larger screens and the index is masonry and there's a hamburger button. But I improved the accessibilty, replaced the interactions with Alpine, swapped out the fonts. I'll do another pass later to really tighten the whitespace and professionalize it more, but that's something I'd rather do with Allyson, hopefully sooner than seven years from now.
Anyway, here's the phases and the bin scripts (build, deploy, deploy-staging, push/pull-content, push/pull-accounts, pull-all, warm-cache): https://gist.github.com/maxfenton/cef7843392459a3ee9a5d67cead689c4
