05
Scope, measured from the sitemap
280 URLs sounds like a large migration. It is roughly 14 unique templates rendering 268 CMS records, and the hardest visual assets are already portable.
| Collection or group | URLs | Migration note |
|---|---|---|
/resources/ | 213 | Rich text to Portable Text via bulk API import. The long tail here is editorial QA, not code. |
/events/ | 15 | The listing page geocodes against a third-party service at runtime today. Moving that to build time removes a live external call from the CSP. |
/topics/ | 14 | Taxonomy — reference field on resources. |
/resources-solutions/ | 8 | Taxonomy. |
/categories/ | 7 | Taxonomy. |
/solutions/ | 5 | Five of the six WebGL hero pages. |
/who-we-serve/ | 4 | Straight port. |
/webinars/, /landing-page/ | 2 | Single-item collections. Consolidation candidates during the rebuild. |
| Static pages | 11 | /, /about, /platform, /contact, /careers, /csr, /smart-council, /search, /who-we-serve, and two /all-resources/ listing pages. |
/home---with-window | 1 | Stray development page, publicly indexed today. Do not migrate — and remove it from the live sitemap this week regardless. |
| Total | 280 | Every URL needs a redirect-map entry and a post-launch parity check. |
Assets already in hand
- Six WebGL hero fields. Each is a self-contained custom element carrying its own renderer, with no build step and no shared script, so they drop into Astro components essentially unchanged. Re-pull the home hero from live HTML at migration time — it was hand-tuned after publishing and the source copy is deliberately stale.
- The Smart Horizons 2027 symposium site. Already a single self-contained static build. Landing it in the same repository puts it behind the same headers and WAF for roughly three days of work, instead of standing up a second host with a second security posture to maintain.
- The tested third-party host inventory. See Security target — the new policy starts from verified data.
- The existing design system. Visual parity is the goal, not a redesign; tokens get harvested from the live CSS.