Road to 10 — Wave 2 · PR-T3

Landing page Playwright E2E

8 specs · chromium desktop + mobile · catches what vitest cannot

Why E2E now

The landing redesign (#1399) ships JSX with custom CSS variables, dark-mode tokens, and responsive layout. vitest validates units; nothing validated that the rendered page works. PR-T3 fills that gap.

Coverage matrix

SpecProjectAsserts
hero renders with brand headline + CTAsdesktopheadline split, eyebrow, both CTAs
proof strip shows GitHub starsdesktopreal "Nk stars" or graceful "Star on GitHub"
three primitive cards render with countsdesktopbuilding-blocks heading + 3 h3s + tabular-nums
all 8 recipe cards + NEW badgedesktopeach cookbook title + /ork:design-ship
three persona value-prop cardsdesktop01/02/03 eyebrows + titles
hero foreground resolves to a real colordesktopcomputed color is rgb/oklch/lab/etc, not transparent
primary button uses emerald tokendesktopcomputed background is a real color
layout stacks without horizontal overflowmobilescrollWidth ≤ clientWidth + CTAs visible

Local run output

$ cd docs/site && npx playwright test --project=chromium-desktop

  ✓ 1 Landing — hero › hero renders with brand headline + CTAs
  ✓ 2 Landing — hero › proof strip shows GitHub stars
  ✓ 3 Landing — primitives › three primitive cards render with counts
  ✓ 4 Landing — cookbook recipes › all 8 recipe cards render
  ✓ 5 Landing — value-prop strip › three persona cards
  ✓ 6 Landing — design tokens › hero foreground resolves
  ✓ 7 Landing — design tokens › primary button uses emerald token
  - 8 Landing — mobile viewport (skipped on desktop project)

  7 passed, 1 skipped (8.3s)

Wired in

Wave 2 progress (3 of 5)

PR-T1   formatStars unit test                ✓ merged (#1412)
PR-T2   sync_versions round-trip             ✓ merged (#1414)
PR-T3   Playwright E2E for landing           ← THIS PR
PR-T4   handoff bundle schema validator      next
PR-T5   stub-fallback integration test