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 21, 11:32 AM CT | 🧹 www Pages binding removed as redundant: the edge www→apex 301 rule intercepts validation (catch-22) AND makes the binding unnecessary — www TLS uses the *.iexcel.co Universal cert, redirect verified over HTTPS. Pages domains now clean: iexcel.co active. |
| Jul 21, 11:21 AM CT | ✅ Pages domain binding for iexcel.co now ACTIVE (cosmetic pending cleared as predicted). www binding re-kicked; www traffic 301s to apex at the edge regardless. |
| Jul 21, 11:09 AM CT | ✅ DONE — Cookie banner + GTM behave (confirmed via California proxy — banner appears, consent-gated GTM behaves) |
| Jul 21, 11:07 AM CT | ✅ DONE — Cookie banner + GTM behave (confirmed via California proxy — banner appears, consent-gated GTM behaves) |
| Jul 21, 11:01 AM CT | 📈 Cloudflare analytics confirm live traffic: 479 requests through the edge in the first ~70 min — 173 in the cutover minute alone, steady 20-45/min since. Real visitors on the new site. (Also corrected go-live time: 10:45 AM CT.) |
| Jul 21, 10:56 AM CT | ✅ DONE — HubSpot form submits (confirmed by Micah — /chat form submits to HubSpot) |
| Jul 21, 10:56 AM CT | ✅ DONE — Inbound email test (confirmed by Micah — inbound delivers) |
| Jul 21, 10:56 AM CT | ✅ DONE — Outbound email test (confirmed by Micah — outbound delivers) |
| Jul 21, 10:53 AM CT | ✅ DONE — Site pages pass (desktop + mobile) (confirmed by Micah — homepage, case study, vertical, /what-weve-done hub on desktop + mobile) |
| Jul 21, 10:52 AM CT | ✅ DONE — Zone Active in Cloudflare (zone active 11:14 (3 min after registrar flip)) |
| Jul 21, 10:52 AM CT | ▶ STARTED — HubSpot form submits (awaiting Micah form submit (thread item 4)) |
| Jul 21, 10:52 AM CT | ▶ STARTED — Cookie banner + GTM behave (GTM verified in HTML; banner interaction test awaiting CA/VPN teammate (thread item 3)) |
| Jul 21, 10:52 AM CT | ▶ STARTED — Site pages pass (desktop + mobile) (awaiting team eyeball desktop+mobile (thread item 2)) |
| Jul 21, 10:52 AM CT | ▶ STARTED — Inbound email test (awaiting team test (thread item 1)) |
| Jul 21, 10:52 AM CT | ▶ STARTED — Outbound email test (awaiting team test (thread item 1)) |
| Jul 21, 10:50 AM CT | 📋 FINAL SCORECARD: 22/23 PASS. Only open item: Pages control-plane domain status 'pending' (cosmetic — traffic serves perfectly with valid SSL; auto-recheck in 30 min). Remaining human checks: send/receive email test, desktop+mobile eyeball, cookie banner interaction, HubSpot form submit. |
| Jul 21, 10:50 AM CT | ✅ DONE — robots.txt + sitemap.xml live (robots.txt new-site, sitemap.xml valid urlset, privacy-policy 200) |
| Jul 21, 10:50 AM CT | ✅ DONE — Subdomains resolve (agents/scrum/internaltools/old/staging all correct; agents serves 200) |
| Jul 21, 10:50 AM CT | ✅ DONE — Redirect spot-checks pass (7/7 rules 301 exact (both slash forms), all destinations 200) |
| Jul 21, 10:50 AM CT | ✅ DONE — Email DNS records identical (5/5 exact: MX, SPF, DMARC, DKIM, Mailgun) |
| Jul 21, 10:47 AM CT | 🎉 IEXCEL.CO IS LIVE — auto-cutover complete: cert active 11:45, DNS flipped, Pages domains re-validated, new site verified over HTTPS. Micah confirms serving. |
| Jul 21, 10:47 AM CT | ✅ DONE — DNS + SSL verified (apex → CF edge, HTTPS 200 valid cert, NEW site title through edge) |
| Jul 21, 10:47 AM CT | ✅ DONE — Team announcement (SITE IS LIVE posted to #team-iexcel thread) |
| Jul 21, 10:47 AM CT | ✅ DONE — SSL issued for apex + www (LE cert active 11:45 after pipeline hard-reset) |
| Jul 21, 10:47 AM CT | 🎉 IEXCEL.CO IS LIVE — new site serving on production domain with valid SSL (cert active 11:45, auto-cutover fired within 10s, verified through edge) |
| Jul 21, 10:47 AM CT | ✅ DONE — DNS + SSL verified (apex → CF edge, HTTPS 200 valid cert, NEW site title confirmed) |
| Jul 21, 10:47 AM CT | ✅ DONE — Team announcement (SITE IS LIVE posted to #team-iexcel thread) |
| Jul 21, 10:47 AM CT | ✅ DONE — SSL issued for apex + www (LE cert active 11:45 after pipeline hard-reset; issued <3min) |
| Jul 21, 10:45 AM CT | 🔧 Cert pipeline hard-reset: stalled Google order deleted, Universal SSL toggled off→on (fresh Let's Encrypt order placed). 10s watcher continues. ACM paid fast-lane offered as final lever. |
| Jul 21, 10:42 AM CT | 🔍 T+30min cert wait: no CF incident (checked status API). Found+fixed a stopgap side-effect: Pages custom domains auto-deactivated when DNS pointed away — cutover watcher v2 now re-activates them after the flip. 10s polling active. Cert queue remains the only blocker. |
| Jul 21, 10:32 AM CT | 🤖 Auto-cutover armed: watcher polls cert every 45s; on active it auto-flips apex+www to the new site and verifies HTTPS through the edge — zero human latency to go-live |
| Jul 21, 10:31 AM CT | 🔧 Cert accelerator: Universal SSL CA switched Google→Let's Encrypt to force reissue (GTS order stalled ~25min). Verification sweep meanwhile: email 5/5 PASS on new DNS, all subdomains PASS, stopgap serving old site globally, new site healthy on pages.dev. |
| Jul 21, 10:28 AM CT | ▶ STARTED — SSL issued for apex + www (cert slow (pending_validation, challenges live+correct) — STOPGAP: apex/www → old server DNS-only ttl300, site UP for all; re-cutover on cert active) |
| Jul 21, 10:20 AM CT | 📧 Email verified UP mid-propagation: MX identical on both Cloudflare and cached GoDaddy DNS (5 Google hosts), SPF+DKIM resolving on new NS, SMTP reachable. Site in SSL-issuance window (pending_validation) — HTTP serving, HTTPS cert minutes away. |
| Jul 21, 10:17 AM CT | ▶ STARTED — SSL issued for apex + www (Universal SSL issuing; HTTP already 301s at edge; HTTPS pending cert) |
| Jul 21, 10:17 AM CT | ✅ DONE — Zone Active in Cloudflare (active — 1.1.1.1 already on CF; new site serving) |
| Jul 21, 10:16 AM CT | 🟢 ZONE ACTIVE in Cloudflare — verification battery starting, big update incoming |
| Jul 21, 10:12 AM CT | ⏳ LIVE: propagation in progress — registrar flip done; Cloudflare zone still pending; public resolvers (1.1.1.1 / 8.8.8.8) still on cached GoDaddy NS (up to 1h TTL). Old site still serving during the window — expected, no broken state. |
| Jul 21, 10:10 AM CT | ▶ STARTED — Zone Active in Cloudflare (activation check queued; polling) |
| Jul 21, 10:10 AM CT | ✅ DONE — Nameservers flipped at GoDaddy (flipped manually in GoDaddy UI (API path blocked by connector bug) → eve/peter.ns.cloudflare.com) |
| Jul 21, 10:10 AM CT | ✅ DONE — GO decision from Micah (GO given — Chris's authorization overriding the Micah gate) |
| Jul 21, 9:57 AM CT | ✅ DONE — Zone diff + sign-off (independent API spot-check: MX/SPF/DKIM/DMARC exact, count 39 — READY FOR GO/NO-GO) |
| Jul 21, 9:57 AM CT | ✅ DONE — Proxy-status audit (gray clouds) (verified: only apex+www proxied, all 37 others DNS-only) |
| Jul 21, 9:57 AM CT | ✅ DONE — www → apex 301 rule (301 rule live in http_request_dynamic_redirect phase) |
| Jul 21, 9:57 AM CT | ✅ DONE — Attach custom domains to Pages (both attached, status initializing until NS flip) |
| Jul 21, 9:57 AM CT | ✅ DONE — Point apex + www at Pages (apex + www → iexcel-website.pages.dev, proxied) |
| Jul 21, 9:57 AM CT | ✅ DONE — Replicate all DNS records (39/39 viable records staged (self-ref internal CNAME dead on GoDaddy, CF rejected as expected)) |
| Jul 21, 9:55 AM CT | ▶ STARTED — Replicate all DNS records (agent staging all 45 records) |
| Jul 21, 9:55 AM CT | ✅ DONE — Create iexcel.co zone in Cloudflare (zone pending; CF nameservers: eve + peter.ns.cloudflare.com) |
| Jul 21, 9:55 AM CT | ✅ DONE — CF token upgraded (zone create + DNS edit) (Micah created claude-launch-ops token; all access verified) |
| 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 |