Individual skill
convert-site
Convert a live website (WordPress first; Drupal, Webflow, Squarespace, Wix and static sites too) into a static Astro site with the same URLs, content, head tags, media, redirects and look, proven by parity gates and a pixel-level visual review, ending in one pull request, a noindexed staging deploy and a launch runbook. Use when asked to convert, rebuild, migrate or clone a site to Astro, when handed a site URL with this kit's link, to resume a conversion from .conversion/state.json, or with --apply <id> to apply one suggestion as a proposal.
skills/convert-site/SKILL.md
Source commit 8beb1de5099a2be1ddb1d98ffc7b3682343bc420
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 6, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 125
- Repository last updated
- Oct 31, 2026
- License
- MIT
Observed agent integration: codex
- agent-skills Repository topic
- ai-agents Repository topic
- astro Repository topic
- claude-code Repository topic
- cloudflare-pages Repository topic
- codex Repository topic
- jamstack Repository topic
- playwright Repository topic
- seo Repository topic
- site-migration Repository topic
- design Derived category
- writing Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 14,379 bytesSKILL.mdcore · 14,379 bytesSKILL.mdcore · 14,379 bytesSKILL.mdcore · 14,379 bytesSKILL.mdcore · 14,379 bytesSKILL.mdcore · 14,379 bytesreferences/apply-suggestion.mddoc · 4,820 bytesreferences/build-rules.mddoc · 18,222 bytesreferences/components-optional.mddoc · 2,541 bytesreferences/forms.mddoc · 6,639 bytesreferences/hosting-cloudflare.mddoc · 5,953 bytesreferences/hosting-vercel.mddoc · 14,097 bytesreferences/intake.mddoc · 9,701 bytesreferences/phases.mddoc · 30,799 bytesreferences/runbook.mddoc · 7,197 bytesreferences/third-party.mddoc · 2,570 bytesscripts/copy-assets.mjsruns · 10,908 bytesscripts/css-coverage.mjsruns · 14,717 bytesscripts/css-prune.mjsruns · 55,340 bytesscripts/init-site.mjsruns · 13,787 bytesscripts/lib/blocked-hosts.mjsruns · 2,825 bytesscripts/lib/excluded.mjsruns · 1,380 bytesscripts/lib/head-css.mjsruns · 1,804 bytesscripts/lib/inline-scope.mjsruns · 5,369 bytesscripts/lib/link-records.mjsruns · 2,574 bytesscripts/lib/node-version.mjsruns · 1,083 bytesscripts/lib/page-head.mjsruns · 1,605 bytesscripts/lib/review-routes.mjsruns · 7,607 bytesscripts/lib/state-selectors.mjsruns · 2,807 bytesscripts/lib/stores/blob.mjsruns · 3,952 bytesscripts/lib/stores/r2.mjsruns · 4,302 bytesscripts/lib/stores/retry.mjsruns · 645 bytesscripts/link-exceptions.mjsruns · 7,469 bytesscripts/media-plan.mjsruns · 13,108 bytesscripts/media-upload.mjsruns · 8,119 bytesscripts/preflight.mjsruns · 12,693 bytesscripts/prelaunch-reconcile.mjsruns · 38,338 bytesscripts/review-serve.mjsruns · 15,174 bytesscripts/state.mjsruns · 6,836 bytestemplates/cloudflare/r2-media-function.jsruns · 1,692 bytestemplates/site/.gitignoreasset · 361 bytestemplates/site/.nvmrcasset · 8 bytestemplates/site/.vercelignoreasset · 397 bytestemplates/site/AGENTS.mddoc · 3,669 bytestemplates/site/CLAUDE.mddoc · 3,669 bytestemplates/site/README.mddoc · 1,586 bytestemplates/site/astro.config.mjsruns · 286 bytestemplates/site/docs/LAUNCH.mddoc · 3,967 bytestemplates/site/docs/plan.mddoc · 1,293 bytestemplates/site/docs/third-party.mddoc · 397 bytestemplates/site/exceptions.jsonasset · 3 bytestemplates/site/package.jsonruns · 1,427 bytestemplates/site/proposals.jsonasset · 3 bytestemplates/site/public/_headersasset · 413 bytestemplates/site/src/layouts/Base.astroasset · 2,449 bytestemplates/site/src/lib/exceptions.mjsruns · 1,173 bytestemplates/site/src/lib/site.mjsruns · 304 bytestemplates/site/src/pages/404.astroasset · 330 bytestemplates/site/src/pages/robots.txt.jsruns · 492 bytestemplates/site/src/styles/site.cssasset · 91 bytestemplates/site/vercel.jsonasset · 433 bytes
Read excerpt
# convert-site
The orchestrator. It asks one message of questions, then runs every other skill in order without
stopping again, and ends with a pull request the person merges and a runbook they launch from.
## The golden rules
1. **One intake message, then no stops.** Every question carries a default. Anything that later
needs an account, a login or a token you do not have goes on the "needs you" list
(`state.needsYou` and `docs/LAUNCH.md` section A) and the run carries on.
2. **The live site is read-only.** Only these read it, paced: the capture scripts, `shoot.mjs`
and `styles.mjs` on live, `css-coverage.mjs`, `launch-audit --old-url` and `pre-launch
--predecessor-url`. Analytics are blocked on their live page loads, so no visit is counted.
Never submit a form on it, log in, or fetch a page by hand to fill a gap.