Static Astro migration of https://devtalents.com, preserving the public URL contract, page design, assets, forms and approved analytics without a WordPress runtime. The canonical production host is always the apex domain (devtalents.com, never www).
bin/setup
bin/devbin/setup installs Node 24 through mise when available, installs npm dependencies and creates an ignored .dev.vars from the example without overwriting local values. bin/dev works from any current directory, starts in the background on fixed port 4325, and listens on every network interface. Use http://localhost:4325 on this computer or http://<LAN-IP>:4325 from another device. The other sites use ports 4321–4324, so all five projects can run side by side.
npm run snapshot # refresh structured source data/assets from the owned live site
npm run check # Astro/TypeScript diagnostics
npm run build # static output, sitemaps, RSS and final CSP
npm test # contract + browser testsThe migration contains 187 sitemap-contract URLs and 19 working support pagination URLs. Support pages are noindex; search is served at the legacy /?s= URL and gets an X-Robots-Tag from the Pages middleware. Legacy sitemap filenames and a valid /feed/ are generated during build.
Thirteen stale unitedideas.co image references are repaired and self-hosted. Seven stock photos are restored from their original Pexels identifiers, the Ruby/Rails marks from Wikimedia Commons, and two unrecoverable quote cards are reconstructed as accessible SVG assets from their surrounding article copy.
npm run test:visual compares seven representative page types at desktop, tablet and mobile sizes against the live site. The checked-in qa/visual-report.json records 21/21 passing comparisons at a 0.5% pixel-difference threshold (maximum 0.1306%).
The migration preserves Cookiebot, GTM container GTM-NTNGF2H (including its GA4/Matomo configuration), the lazy Jivo widget and the original Calendly scheduling URL/event behaviour. The legacy Mautic bootstrap was intentionally removed because its configured tenant is gone and the live script only emits mt not defined warnings.
WordPress CF7 forms post to Cloudflare Pages Functions under /api/forms/cf7-* and display success/errors inline. Copy .dev.vars.example values into Cloudflare secrets before production use. Job applications accept up to two DOC, DOCX or PDF attachments, 5 MiB each.
The Cloudflare workflow is deliberately manual (workflow_dispatch) so pushing this migration cannot deploy it before DNS and Pages are ready. Configure the repository secrets listed in .github/workflows/deploy.yml, then run the workflow in the later deployment step.