For two weeks, Maya and I coordinated a website rebuild over WhatsApp.
She runs Remote Work Europe — country guides, news reports, resources for people working remotely across the continent. I’m handling the technical rebuild, she’s handling content and editorial. We both use Claude Code as a copilot. And for the first couple of weeks, our coordination looked like this: sharing Claude outputs back and forth as markdown file attachments over WhatsApp. She’d send what her Claude had produced, I’d send what mine had done, and I’d end up extracting her files from WhatsApp’s SQLite database because that was genuinely the fastest way to get them into my workflow.
It worked. It also meant that every conversation was about logistics — what changed, what broke, what format something needed to be in — instead of the things that actually shape a website.
What a copilot actually does
Here’s what Claude actually handles in a project like this. Not “write me a blog post” — the infrastructure work that would take weeks by hand.
The Squarespace migration alone involved XML parsing, HTML-to-Markdown conversion with Turndown, and downloading every image over HTTPS. A content audit standardised 86 categories down to 15, dropped six thin posts, redirected three overlapping ones, and removed ten inactive promotions. Image optimisation batch-converted 175 images from PNG and JPG to WebP — 295 megabytes down to 30. A deployment pipeline built around rsync with MD5 manifest checksums so only changed files sync to production. Twenty-nine Squarespace affiliate URLs migrated to .htaccess 301 redirects for LiteSpeed. DNS switchover — deleting the old Squarespace CNAME, adding new A records, managing propagation. Navigation restructured from fourteen items to seven with a new pillar page. A visual brand pass establishing CSS tokens and a purple accent system. JSON-LD structured data, Wikidata entries, and an llms.txt file for AI visibility.
That’s one project, one copilot — most of it happening while I was making decisions about something else entirely.
While the humans argued about purple
Because here’s what Maya and I were actually talking about during those WhatsApp exchanges — colour schemes. Which seven nav items to keep. Whether the about page team section needed headshots or just names. What voice the country guide intros should use. Editorial strategy for which posts to refresh, which to drop, which to leave alone. Product integration decisions around ThriveCart.
The ratio inverted. Instead of spending most of my time on mechanical execution with occasional creative decisions, I was spending most of my time on creative decisions with occasional check-ins on execution. The copilot handled the 29 redirect rules and the 175 image conversions. I argued about whether the accent colour should be magenta or violet.
Two copilots, no shared session
The coordination problem surfaced around week two. Two people, two machines, two separate Claude instances — none of which can see each other’s sessions. My Claude restructures the navigation and builds a news feed infrastructure. Maya’s Claude, on a completely different machine, needs to know all of that before it starts writing content against a codebase that’s already moved.
We’d been solving this over WhatsApp — sending each other markdown files of what our respective Claudes had produced, annotating what changed and what still needed doing. It worked, but every exchange was another manual handoff. The copilots were doing the heavy lifting on execution, but we were still doing all the coordination ourselves.
My first instinct was to build something. An RSS feed baked into the site — structured data, automatically updated, queryable by either Claude via WebFetch. It felt elegant right up until I realised I was building a mailbox to leave a note for someone who lives in the same house.
The channel nobody was using
The repo is right there. Both Claudes already read it at session start. Git already tracks who changed what and when. The communication channel existed — I just hadn’t put anything in it.
So I created a file called COLLAB.md in the repo root. Three rules: read this at session start, update your section when you finish work, use the ops manual for technical reference. Four sections: current state, waiting on Maya, waiting on Jim, and format references for upcoming content.
On Sunday I restructured the nav, built a news feed collection, ran a visual brand pass, and updated COLLAB.md with everything I’d done. On Monday, Maya’s Claude pulled the repo, read COLLAB.md, and produced 26 country guide intros, an overhauled about page, a full editorial refresh, and a news report — two sessions, zero phone calls. A second session dropped eight stale posts, fixed migration artefacts, and synced content that existed on the live site but was missing from the repo. The “Waiting on Maya” list went from six items to one, and that one was a headshot — a camera problem, not a code problem.
The channel was already there
The COLLAB.md pattern is simple enough that it barely counts as engineering. A markdown file, a commit habit, and the understanding that both Claudes will read the repo root before doing anything else.
But it only exists because of a conversation I had with Claude about its own capabilities. I described the coordination problem. Claude pointed out that it already reads the repo at session start — that the communication channel was sitting there unused. The fix wasn’t technical. It was noticing what was already possible and actually using it.
That keeps happening. The LLO audit that reshaped our search visibility started because Maya shared a reference document over WhatsApp, and Claude — which had context on all three of our sites — spotted gaps across them that neither of us had considered individually.
LLO — Large Language Model Optimisation. The same idea as SEO, but for how AI models find and reference your content. Think structured data,
llms.txtfiles, and making sure your site’s entities are machine-readable. The deployment pipeline exists because Claude connected a VPS pricing conversation with a domain registration conversation and found an angle I’d missed.
I don’t go looking for these. They show up when I describe what I’m trying to do instead of just issuing a task. The distinction matters more than I expected it to.
Until next time,
Jim