WordPress to static site migration: a case study covering the GitHub and Cloudflare Workers publishing pipeline, the Claude Code editing setup for three contributors, and the domain cutover ETTE delivered for Results One LLC, a DEIA and disability services consulting firm.

ETTE  ·  Case Study

Off WordPress and onto a site the client owns, in one month

Results One LLC is a DEIA and disability services consulting firm led by its two co-founders. In late July 2026 the firm engaged ETTE to move resultsonellc.com off WordPress on WP Engine hosting and onto static HTML, CSS, and JavaScript managed through GitHub, Cloudflare Workers, and Claude Code. The engagement closed on August 31, 2026, with the new site live on the production domain and three people at the firm editing it on their own branches. Every date and count comes from the project record.

Late July – August 31, 2026
37 pages · 3 contributors · 1 domain cutover
37
Pages transcribed from WordPress into the repository, every image hosted locally instead of hotlinked
3
Contributors editing through Claude Code, each on an isolated branch with its own preview URL
0
Email interruptions during the domain move; every MX, TXT, and DKIM record reproduced before the nameserver change
1
Live working session in the statement of work; later contributors needed no extra Cloudflare configuration

From WP Engine hosting to a repository and Worker the client owns

ETTE opened the accounts under the client's own name first, built a publishing pipeline that keeps production and preview apart, and only then connected editors and moved content. The domain moved last, after a full DNS snapshot.

  1. Accounts in the client's name
    A GitHub account and a free Cloudflare account created under Results One's name. The client owns both, as the statement of work required.
  2. Repository safeguards
    An .assetsignore file and a committed wrangler.jsonc in the first commit, before the first deploy
  3. Publishing pipeline
    The main branch deploys to production at 100 percent traffic; every other branch uploads a version to its own preview URL at zero percent
  4. Editors connected
    Each contributor's Claude Code cloud session bound to their own branch, with network access opened to the old site for reference content
  5. Content, then domain
    37 pages transcribed; DNS snapshotted; nameservers moved to Cloudflare; both hostnames verified live against the domain itself

Three editors, one production branch, no overwritten work

The statement of work named one client contact. By the end of the engagement three people were editing the site. The branch and access model was built for that kind of growth: each contributor works on a dedicated branch off main, and nothing reaches production until it has been reviewed and merged.

A branch and Write access per contributor

Two collaborators were added over the course of the project with Write access rather than Admin, enough for content work through Claude Code without repository administration rights. On a personal GitHub account only the repository owner can send collaborator invitations, whatever anyone else's permission level, so every invitation went out from the client's own account. That is a GitHub platform constraint, not a permissions setting.

Claude Code bound to each branch

Every contributor set up the same way in the Claude Desktop app's Code tab: a new session with the environment set to Cloud, GitHub authorized under their own login against the client's existing Claude GitHub App installation, the repository selected, and the branch set explicitly to their own, not the default main. Network access was set to Custom and opened to the client's domains, plus the WordPress CDN and Google Fonts hosts during transcription.

A preview URL per branch

The non-production deploy command was first set to a single hardcoded alias, which would have sent every contributor's branch to the same preview URL. ETTE changed the Workers Builds command to read the branch name from Cloudflare's own injected variable: npx wrangler versions upload --preview-alias $WORKERS_CI_BRANCH. Every branch, including one added in the project's last days, gets a distinct, stable preview with no per-contributor configuration.

A weekend merge freeze before the review

Ahead of the final meeting, both client contributors worked on their own branches over a weekend with no ETTE availability. Neither merged to main until both sets of changes had been reviewed together on August 31. One merge conflict came out of that weekend. It was resolved by reading both versions and hand-merging the intent of each edit rather than picking a side.

Project timeline

Late Jul 2026
Engagement opens
Statement of work: a client-owned GitHub repository, a Cloudflare pipeline with preview and production branches, and one live session on the edit, preview, publish loop. Content, design, photography, ongoing support, and domain fees excluded.
Setup
Accounts and repository
GitHub and Cloudflare accounts under the client's name; .assetsignore and wrangler.jsonc committed before the first deploy; Worker-versus-Pages preview behavior confirmed before the live session
Aug 2026
First Claude Code session
Structured migration prompt: preserve every page, bring every image local, follow accessibility practice, stop and ask at ambiguous decisions. Result: 37 pages, all images in the repository, every form scaffolded.
Aug 2026
Contributors two and three
Write access, dedicated branches, Claude Code cloud sessions bound to each branch; preview aliasing switched to the branch-name variable
Aug 2026
Forms and payments
Formspree connected to the contact and consultation forms and tested by the client; hosted checkout links added to the eBook pages at a newly onboarded contributor's request
Aug 29–30
Merge freeze
Both contributors edit on their own branches through the weekend; nothing merges to main until the joint review
Aug 31
Review, merge, cutover, handoff
Weekend work merged into main, one conflict hand-merged; registrar located by RDAP lookup; nameservers moved to Cloudflare; resultsonellc.com live on the new site. Last day of hands-on ETTE support.

Email kept working through the nameserver change

Results One runs its mail on Google Workspace, and third-party services authenticate against the domain. Before any change, ETTE took a full live DNS snapshot, reproduced every record in the client's new Cloudflare zone, and re-verified each one live after the client updated the nameservers to the pair Cloudflare assigned.

DNS records preserved through the nameserver cutover
TypeHostPurpose
MX (5 records)@ (apex)Google Workspace mail routing, priorities 10 to 50
TXT@ (apex)Google Workspace domain verification
TXT@ (apex)Legacy Microsoft domain verification
CNAMEs1._domainkey, s2._domainkeyThird-party DKIM signing (SendGrid-pattern selectors), preserved as CNAMEs exactly as Cloudflare imported them

Final verification went against the live domain, not the dashboard. resultsonellc.com returned a clean HTTP 200 from the new static site. www.resultsonellc.com returned a Cloudflare-native 301 redirect to the apex. Neither response carried any trace of WP Engine.

What shipped by August 31

A 37-page static site on both hostnames

Fully migrated from WordPress and live on resultsonellc.com and www.resultsonellc.com, with every image stored in the repository instead of hotlinked from the old CDN.

Three editors on isolated branches

Each contributor edits through Claude Code on their own branch with their own preview URL. The prompts used for ongoing edits carry a WCAG 2.1 Level AA confirmation step before any change and a branch-safety confirmation before any commit.

Working forms with no server behind them

The contact and consultation forms submit through Formspree: a form endpoint pasted into the site's existing JavaScript, spam filtering included, 50 submissions a month free and a $10-a-month Personal tier at 200 a month, billed annually, if the firm outgrows it. The client tested the integration before it went live.

eBook sales without a storefront

A late addition for a newly onboarded contributor: hosted checkout links on the eBook pages, embeddable as a buy button, instead of a cart and inventory system for a handful of individual products.

A domain cutover with zero email downtime

No lost MX, DKIM, or verification records. The registrar was located by RDAP lookup and the nameservers changed by the client from an account only they control.

Everything in the client's name

The GitHub repository, the Cloudflare account, and the domain all belong to Results One. The statement of work excluded ongoing maintenance, and the handoff left nothing that needs ETTE to keep running.

Who did what

A small group on both sides. The client held every account and sent every invitation; ETTE built the pipeline and handled the parts that go wrong.

Account Lead
ETTE · Pipeline, Onboarding & Cutover
Project lead

Built the publishing pipeline and its safeguards, confirmed the Worker-versus-Pages preview behavior before the live session, onboarded each contributor's Claude Code session, ran the RDAP lookup and the DNS snapshot, and handled the same-day fixes during the domain cutover.

Co-founder and CEO
Client · Project Contact & Repository Owner

Created the GitHub and Cloudflare accounts under the firm's name, owns the repository, and sent every collaborator invitation, since only the owner of a personal GitHub account can. Tested the Formspree integration before it took real submissions.

Two Additional Contributors
Client · Content Editors

Added with Write access over the course of the project, each on a dedicated branch and a Claude Code cloud session. One joined in the project's last days and brought the eBook payment-link request. Both edited over the final weekend under the merge freeze.

Domain Account Holder
Client · Registrar Access

A different contact at the firm than first assumed held the Squarespace account, most likely from handling renewals over the years. They updated the domain's nameservers to the pair Cloudflare assigned to the new zone.

If your site is on WordPress and more than one person needs to edit it

Static sites for firms that want to own their web presence

Consulting firms and nonprofits on WordPress pay for hosting, plugins, and updates, and still depend on whoever holds the admin login. This engagement moved a 37-page site to plain HTML in a repository the client owns, on a free Cloudflare account, with a pipeline that lets three people edit safely through Claude Code and a preview URL for every change before it goes live.

ETTE now offers this as a standard service, Static Website Migration, at a $750 flat fee with one-week delivery: accounts in your name, the pipeline and its safeguards, and a live session on the edit, preview, publish loop. Content, design, and domain fees stay with you, and so does everything ETTE builds. For how the same accessibility standard was applied to a nonprofit's site, see the website accessibility case study.