Rebuilding a client's whole site, 972 photographs, in 4 days.
A working cake studio's Squarespace site rebuilt from scratch: 38 routes, nine years of photography sorted into named collections, and a brand voice with rules its owner wrote herself.
The problem
Marin Cake Studio has been designing cakes in San Rafael since 2016, under a different name for the first few years. Nine years of work sat on a Squarespace site that cost $348 a year, ranked poorly, and displayed her cakes as numbered plates.
The renewal date was the deadline. Rebuild before it, or pay for another year of the thing we were replacing.
What I owned
Extraction, information architecture, design, build, SEO, and the content pipeline. Lindsay owned the voice, and she was specific about it: no scarcity, no ingredient claims, and the word artisan is retired.
That last part mattered more than it sounds. I wrote a build-time gate that fails the build on retired vocabulary, because a rule nobody enforces is a preference. It stopped the build twice, correctly.
How it actually went
- 01
Extract nine years in one commit
723 gallery images pulled off Squarespace along with the existing SEO metadata, so nothing that already ranked would be lost in the move.
- 02
Give every cake a name
232 birthday cakes went from Plate 01 through Plate 232 into 12 named collections. Floral, Sculpted, Video Game, Animal, and so on. A customer searching for a unicorn cake can now find one.
- 03
Import a year of Instagram
Another 249 photographs came across from Instagram and were sorted into the same collections, taking the gallery to 972. Nothing was retired to make room.
- 04
Build the pipeline, not just the pages
Python scripts generate the site data and thumbnails, verify every URL, and check color contrast and heading order. The gallery is data, so adding next month's cakes is an import rather than a redesign.
What I would do differently
I built the entire site before touching the infrastructure it needed to go live. DNS is at Squarespace, and her Google Workspace mailbox rides the same zone, so the cutover is not a switch, it is a migration that has to not break her email.
The result is a finished site sitting behind a noindex flag while the domain still serves the old one. The build was the easy half and I did it first because it was the fun half. Next time the cutover path gets resolved before the first page is designed.
Status
In final cutover. The site is built and the old one is still serving until DNS and email move together.