Go-live night: July 20–21, 2026 · Next.js 16 on Cloudflare Pages · DNS migrates GoDaddy → Cloudflare
https://iexcel.co — apex is canonical. All metadata, schema, and sitemap already ship apex URLs.www.iexcel.co/* 301s to https://iexcel.co/$1 via one Cloudflare redirect rule.iexcel-website, auto-deployed from GitHub main on every push.iexcel.co zone moves into the same Cloudflare account that owns the Pages project (required to attach an apex custom domain).Newest first. Every state change lands here with a timestamp (US Central — Chicago).
| Time (CT) | Event |
|---|---|
| Jul 20, 11:50 PM CT | 🔑 Token request sent to Chris in #team-iexcel (broadcast + @mention) — exact upgrade steps included; DM token to Micah when ready |
| Jul 20, 11:48 PM CT | ✅ DONE — Trailing-slash redirect fix (launch blocker) (PR #121 merged; verified on production pages.dev (10/10 paths)) |
| Jul 20, 11:44 PM CT | ⛔ Zone creation blocked: iExcel CF token lacks zone.create permission — token upgrade needed from Micah (tracked as phase1.token-upgrade) |
| Jul 20, 11:44 PM CT | 🚨 Launch blocker caught pre-flip: trailing-slash WordPress URLs 404'd on Pages — fix shipped as PR #121, verifying on branch preview |
| Jul 20, 11:39 PM CT | Slack live: kickoff posted in #team-iexcel — all step updates now mirror to the launch thread |
| Jul 20, 11:18 PM CT | Runbook upgraded: animated launch progress bar pinned to top |
| Jul 20, 11:16 PM CT | Pre-flight complete: builds green, CI deploy 864b3934 live on iexcel-website.pages.dev, DNS exported. Next: Phase 1 (Cloudflare zone prep). |
| Jul 20, 11:16 PM CT | ⚠ flagged — Lint: 1 known error (accepted) |
| Jul 20, 11:16 PM CT | ✅ DONE — DNS inventory exported |
| Jul 20, 11:16 PM CT | ✅ DONE — GTM + consent verified |
| Jul 20, 11:16 PM CT | ✅ DONE — Redirect map shipped |
| Jul 20, 11:16 PM CT | ✅ DONE — CI/CD healthy |
| Jul 20, 11:16 PM CT | ✅ DONE — Static export build green |
| Jul 20, 11:16 PM CT | ✅ DONE — Server build green |
| Jul 20, 11:16 PM CT | ✅ DONE — Repo synced |
| Jul 20, 11:16 PM CT | Runbook went live — self-updating from launch ops, timestamps in US Central |
Verified before anything touches production.
main = origin/main @ 864b393 (Merge PR #120, WordPress 301 redirects)Claude opsnpm run build (server variant) — 428 pages generated, TypeScript cleanClaude opsSTATIC_EXPORT=1 npm run build — the exact build CI runs — greenClaude ops864b3934 (identical to HEAD)Claude opspublic/_redirects (static/Pages) + next.config.ts (server) — 40 audited rules from the WordPress mappingDevGTM-W6VSMZG confirmed in the live deploy HTML; loads consent-gated (CCPA/CPRA banner, GPC honored)Claude opsCookieBanner.tsx:49, setState-in-effect) — CI does not lint, build unaffected. Post-launch fix.DevEst. 20–30 min. GoDaddy keeps answering all DNS queries until Phase 2 — nothing here is visible to visitors. Everything is staged, then diffed, then we flip.
/about-us/) and Cloudflare Pages matches _redirects exactly — slashed variants 404'd. Fix: trailing-slash twins for all 40 rules (PR #121). Verify on branch preview, merge, re-verify on production pages.dev.Claude opszone.create (verified by attempted zone creation). Micah must upgrade the token in the Cloudflare dashboard (Account → Zone: Edit + Zone → DNS: Edit, all zones in account) or create the iexcel.co zone manually in the dashboard.Micahiexcel.co zone in the iExcel Cloudflare account (the account that owns the iexcel-website Pages project — apex custom domains require zone + project in the same account). Zone will sit in pending nameserver state. Record the two assigned Cloudflare nameservers.Claude ops@ CNAME → iexcel-website.pages.dev (Cloudflare flattens at apex), proxied 🟠; www CNAME → iexcel-website.pages.dev, proxied 🟠.Claude opsiexcel.co and www.iexcel.co to the Pages project.Claude opswww.iexcel.co/* → https://iexcel.co/$1, 301.Claude opsagents, internaltools, scrum (Google Cloud LB), cleanpower, admin, mail, old, staging (legacy hosts), plus all DKIM/Mailgun CNAMEs.Claude opsgoogle._domainkey DKIM · _dmarc (p=quarantine — strict alignment, so a missing DKIM record means quarantined mail) · HubSpot DKIM ×2 · Mailgun mg.* MX/TXT/CNAME. Staging them in advance = zero mail gap at any point.Est. 5 min to execute; minutes-to-~1 hour to propagate. This is the go-live moment. Requires explicit go from Micah after the Phase 1 diff sign-off.
ns09/ns10.domaincontrol.com → the two Cloudflare-assigned nameservers (single GoDaddy API call).Claude opsiexcel.co + www issues automatically once active (typically < 15 min).AutomaticThe .co registry publishes NS changes within minutes. Resolvers that cached the old NS records can hold them up to the NS TTL (1 hour). During that window some visitors still get GoDaddy DNS — which is fine, because the GoDaddy zone still answers with the old site. There is no broken state: old-DNS visitors see the old site, new-DNS visitors see the new site, and email records are identical on both sides.
89.116.190.222 (old WordPress) — takes effect in seconds, no nameserver change needed. If anything goes sideways, we point the nameservers back to ns09/ns10.domaincontrol.com and we're back on the old site within the same propagation window. Nothing is deleted at GoDaddy until the migration is confirmed stable (keep ≥ 1 week).Run top-to-bottom as soon as the zone is Active. Anyone on the team can run these — commands are copy-paste (see command blocks below the list).
*.ns.cloudflare.com; https://iexcel.co loads with valid cert; https://www.iexcel.co 301s to apex.Claude ops/about-us → /the-iexcel-team · /shop → /services · /legal-tech-marketing → /what-weve-done/legal-tech-marketing · /product/organic-search-strategy-2 → /services/organic-search-strategy · catch-all /product/* → /services/*.Anyoneagents.iexcel.co loads the tools hub; scrum, internaltools resolve to 34.160.198.210; old.iexcel.co still reaches the old WP host.Anyone/what-weve-done hub — desktop + mobile.Anyone/robots.txt and /sitemap.xml load on https://iexcel.co.Anyone/chat submits → contact appears in HubSpot (portal 23159503).Micah# --- DNS & SSL --- dig +short NS iexcel.co @1.1.1.1 # expect *.ns.cloudflare.com curl -sI https://iexcel.co | head -3 curl -sI https://www.iexcel.co | head -3 # expect 301 → https://iexcel.co/ # --- Email records (must match Appendix A exactly) --- dig +short MX iexcel.co @1.1.1.1 # 5 Google MX hosts dig +short TXT iexcel.co @1.1.1.1 # SPF + site verifications dig +short TXT _dmarc.iexcel.co @1.1.1.1 # v=DMARC1; p=quarantine… dig +short TXT google._domainkey.iexcel.co @1.1.1.1 # DKIM key # --- Redirects --- curl -sI https://iexcel.co/about-us | grep -i location # → /the-iexcel-team curl -sI https://iexcel.co/shop | grep -i location # → /services curl -sI https://iexcel.co/legal-tech-marketing | grep -i location # → /what-weve-done/legal-tech-marketing curl -sI https://iexcel.co/product/organic-search-strategy-2 | grep -i location # → /services/organic-search-strategy # --- Subdomains --- dig +short agents.iexcel.co @1.1.1.1 # 34.160.198.210 dig +short old.iexcel.co @1.1.1.1 # 107.180.34.184 (old WP reachable)
The week after go-live.
google-site-verification TXT records carried over) — submit https://iexcel.co/sitemap.xml.Micahpublic/_redirects and next.config.ts (they must stay in sync).TeamCookieBanner.tsx:49 lint error (setState-in-effect).Devstaging.iexcel.co (still points at the old WP host); keep old.iexcel.co until content parity is confirmed, then plan old-host decommission.Micah45 records total. KEEP = copy exactly. CHANGE = new value for the new site. SKIP = intentionally not migrated.
| Record | Type | Value | Action |
|---|---|---|---|
@ | A | 89.116.190.222 (old WP) | CHANGE → CNAME iexcel-website.pages.dev (flattened), proxied |
www | CNAME | @ | CHANGE → CNAME iexcel-website.pages.dev, proxied |
@ MX ×5 | MX | aspmx.l.google.com (1), alt1/alt2 (5), alt3/alt4 (10) | KEEP — exact copy, priorities included |
@ | TXT | v=spf1 a mx include:_spf.google.com include:spf.hubspotemail.net include:secureserver.net ~all | KEEP |
google._domainkey | TXT | Google DKIM public key (rsa, 2048) | KEEP |
_dmarc | TXT | v=DMARC1; p=quarantine; rua/ruf=brendan@iexcel.co; adkim=s; aspf=s | KEEP |
hs1-23159503._domainkey / hs2-… | CNAME | HubSpot DKIM (hs06a/hs06b) | KEEP — DNS-only |
mg MX ×2 · pic._domainkey.mg TXT · email.mg CNAME | mixed | Mailgun sending domain | KEEP — DNS-only |
@ TXT ×2 | TXT | google-site-verification (GSC ×2) | KEEP — preserves Search Console verification |
@ TXT | TXT | asv=4c44… | KEEP |
agents · internaltools · scrum | A | 34.160.198.210 (Google Cloud LB — tools hub) | KEEP — DNS-only |
cleanpower | A | 8.232.142.62 | KEEP — DNS-only |
admin · mail · old | A | 107.180.34.184 (legacy GoDaddy host) | KEEP — DNS-only |
staging | A | 89.116.190.222 (old WP) | KEEP — DNS-only; revisit post-launch |
internal | CNAME | internal.iexcel.co | KEEP |
autoconfig · autodiscover · webmail · cpanel · whm · webdisk (+ .admin variants) · SRV ×2 | CNAME/SRV | cPanel mail plumbing → @ | KEEP for now — harmless; prune after 1 week stable |
_3042….old | CNAME | Comodo cert validation (old host) | SKIP — stale |
_domainconnect | CNAME | GoDaddy Domain Connect | SKIP — GoDaddy-specific |
@ NS ×2 | NS | ns09/ns10.domaincontrol.com | SKIP — replaced by Cloudflare NS |