website-qalisted
Install: claude install-skill karero/website-builder
# Website QA
The gate every page passes before launch, and the check re-run after any edit.
Two parts: the **automated basic tests**, then the **performance handoff**.
## 1. Basic tests (fix to green)
`npm test` runs the Playwright suite from the `new-website` skill's
`templates/astro/` overlay against a production build (`astro build && astro
preview` — the static output Cloudflare serves). Test the contract, not the
cosmetics; red → green → commit.
- `a11y.spec.ts` — axe WCAG 2 A/AA + best-practice on every page, **light AND
dark**; zero violations.
- `seo.spec.ts` — title ≤60 / description 120–160 (hard floor AND cap); og/twitter
mirror title/description; canonical == og:url == absolute URL; one `<h1>`; JSON-LD
parses; the sitemap matches `PAGES` exactly (drift alarm: a route missing from
`PAGES` fails here — the `website-seo-geo` contract).
- `navigation.spec.ts` — every `PAGES` route returns 200; internal links resolve
with no redirect hop (absolute URLs on the production host count as internal).
- `anchors.spec.ts` — the other half of internal-link integrity: every in-site
`#fragment` (same-page `#x`, cross-page `/page#x`, relative `about#x`, or `/?q#x`)
points at a real element id on its target page — links and shipped-page target ids
are read from the live DOM. Catches the dead-anchor bug navigation.spec can't see — a link
that 200s but scrolls nowhere because the id doesn't exist. Offline.
- `orphans.spec.ts` — the inverse of navigation.spec: ev