Migration plan
Sequential phases, each gating the next. Total 260–320 hours across 10–12 calendar weeks at visual parity. A design refresh layered on top runs 400–520 hours; that is a separate decision and should not be bundled into security remediation.
-
Security due diligence
Trust documentation to Allison and the BAA question answered, which fixes the build tier. File the vendor document-access requests immediately — they are the long-lead item.
~8 hrs
-
Foundation
Astro scaffold in SmartData's GitHub organisation with branch protection and required reviews. Design tokens harvested from live CSS. Navigation, mega-menu and footer as components. Sanity project with schemas for all nine collections. Vercel project with SSO-gated previews. Cloudflare zone with the WAF baseline in place from day one.
~55 hrs
-
Content migration
Export script from the current CMS API into Sanity: nine collections, 268 records, asset re-hosting, rich text conversion and reference wiring. Then an editorial QA pass across the 213 resource records — where this phase actually spends its hours.
~50 hrs
-
Templates and integrations
Eleven static pages, nine collection templates, two filtered listing pages, Pagefind search, the events map with build-time geocoding, HubSpot form embeds and the newsletter API, and the six WebGL heroes ported.
~105 hrs
-
Security hardening
Nonce CSP with no
'unsafe-inline'and no'unsafe-eval', verified route by route. Full header set. SRI hashes on remaining third-party scripts. Cloudflare WAF managed ruleset, rate limits and authenticated origin pull. Certificate policy through ACM. Header regression tests in CI so a future change cannot silently weaken the policy. Re-run the customer's scanner here — before launch, not after.~30 hrs
-
Launch
280-entry redirect map with parity checking, full PreQA sweep, Lighthouse, cross-browser and accessibility passes. DNS cutover with HSTS continuity preserved. The current site stays published and paid through a hold period so rollback stays available.
~40 hrs
-
Symposium site and handover
Smart Horizons 2027 into the same repository and behind the same controls. Editor training, plus a written runbook covering publishing, rollback, and how to change a security header safely.
~26 hrs
Sequencing traps
- HSTS is live today with
includeSubDomains; preload. The new stack must serve HSTS from its first request or Chrome drops the preload entry — slow and painful to reverse. Verify before cutover, not after. - Stand up headers before changing anything about the current hosting. Confirm parity with
curl -Ifirst. Reverse that order and the site serves bare in between. - Re-pull the home WebGL embed from live HTML. The source copy is intentionally stale — the homepage was hand-tuned after publish.
- Keep the current site live through the hold period. Decommissioning on launch day removes the rollback path.
- Enable authenticated origin pull at cutover, not later. Until it is on, the WAF can be routed around, and that is exactly the finding the rebuild exists to close.