LAUNCH PROGRESS 100% · 32/32 STEPS · POST-LAUNCH 0/7

iexcel.co — Launch Runbook

Go-live night: July 20–21, 2026 · Next.js 16 on Cloudflare Pages · DNS migrates GoDaddy → Cloudflare

LAST UPDATED
Jul 21, 11:32 AM CTpage auto-refreshes every 2 min
🎉 IEXCEL.CO IS LIVE — new site serving worldwide with valid SSL since 10:45 AM CT 🎉
✓ Pre-Flight8/8 complete
✓ Phase 19/9 complete
✓ Phase 25/5 complete
✓ Phase 310/10 complete

Decisions — Locked FINAL

The sitehttps://iexcel.co — apex is canonical. All metadata, schema, and sitemap already ship apex URLs.
www behaviorwww.iexcel.co/* 301s to https://iexcel.co/$1 via one Cloudflare redirect rule.
HostingCloudflare Pages project iexcel-website, auto-deployed from GitHub main on every push.
DNS homeiexcel.co zone moves into the same Cloudflare account that owns the Pages project (required to attach an apex custom domain).

Activity Log LIVE

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 CTSlack live: kickoff posted in #team-iexcel — all step updates now mirror to the launch thread
Jul 20, 11:18 PM CTRunbook upgraded: animated launch progress bar pinned to top
Jul 20, 11:16 PM CTPre-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 CTRunbook went live — self-updating from launch ops, timestamps in US Central

0.Pre-Flight COMPLETE — July 20

Verified before anything touches production.

1.Phase 1 — Cloudflare Zone Prep ZERO LIVE IMPACT

Est. 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.

Email is the #1 launch risk. iexcel.co runs live email on Google Workspace, plus HubSpot and Mailgun sending. All of these records must exist in Cloudflare before the flip: Google MX ×5 · SPF TXT · google._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.

2.Phase 2 — The Nameserver Flip GO / NO-GO GATE

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.

Propagation reality check

The .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.

Rollback = one API call. GoDaddy keeps the zone file intact after the flip. For most failure modes there's an even faster path: edit the Cloudflare apex record back to 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).

3.Phase 3 — Verification LAUNCH NIGHT

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).

Copy-paste verification commands

# --- 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)

4.Post-Launch THIS WEEK

The week after go-live.

A.Appendix — DNS Record Disposition (GoDaddy export, July 20, 2026)

45 records total. KEEP = copy exactly. CHANGE = new value for the new site. SKIP = intentionally not migrated.

RecordTypeValueAction
@A89.116.190.222 (old WP)CHANGE → CNAME iexcel-website.pages.dev (flattened), proxied
wwwCNAME@CHANGE → CNAME iexcel-website.pages.dev, proxied
@ MX ×5MXaspmx.l.google.com (1), alt1/alt2 (5), alt3/alt4 (10)KEEP — exact copy, priorities included
@TXTv=spf1 a mx include:_spf.google.com include:spf.hubspotemail.net include:secureserver.net ~allKEEP
google._domainkeyTXTGoogle DKIM public key (rsa, 2048)KEEP
_dmarcTXTv=DMARC1; p=quarantine; rua/ruf=brendan@iexcel.co; adkim=s; aspf=sKEEP
hs1-23159503._domainkey / hs2-…CNAMEHubSpot DKIM (hs06a/hs06b)KEEP — DNS-only
mg MX ×2 · pic._domainkey.mg TXT · email.mg CNAMEmixedMailgun sending domainKEEP — DNS-only
@ TXT ×2TXTgoogle-site-verification (GSC ×2)KEEP — preserves Search Console verification
@ TXTTXTasv=4c44…KEEP
agents · internaltools · scrumA34.160.198.210 (Google Cloud LB — tools hub)KEEP — DNS-only
cleanpowerA8.232.142.62KEEP — DNS-only
admin · mail · oldA107.180.34.184 (legacy GoDaddy host)KEEP — DNS-only
stagingA89.116.190.222 (old WP)KEEP — DNS-only; revisit post-launch
internalCNAMEinternal.iexcel.coKEEP
autoconfig · autodiscover · webmail · cpanel · whm · webdisk (+ .admin variants) · SRV ×2CNAME/SRVcPanel mail plumbing → @KEEP for now — harmless; prune after 1 week stable
_3042…​.oldCNAMEComodo cert validation (old host)SKIP — stale
_domainconnectCNAMEGoDaddy Domain ConnectSKIP — GoDaddy-specific
@ NS ×2NSns09/ns10.domaincontrol.comSKIP — replaced by Cloudflare NS