feat(screenshots): Playwright capture pipeline (local-only, viewport-only)

This commit is contained in:
2026-05-17 10:36:32 -07:00
parent 748fcfeb6f
commit e3b113cc2f
5 changed files with 745 additions and 7 deletions

View File

@@ -0,0 +1,50 @@
# Screenshot pipeline
Captures real WHP screenshots into `src/assets/screenshots/whp/`.
**Local-only. Never runs in CI.** CI builds the static site; it never opens a browser or hits WHP.
## Prerequisites
1. A demo WHP account (prod recommended for accuracy; staging works internally).
2. Network access to that WHP host.
3. Node 20+ and Playwright Chromium installed: `npx playwright install chromium`.
## Configure
Create `tools/screenshots/.env` (gitignored):
```
WHP_BASE=https://whp01.cloud-hosting.io:8443
WHP_USER=demo-kb
WHP_PASS=…
```
The script reads these via `process.env`; pass them in your shell or use a `.env` loader like `dotenv-cli`.
## Run
```bash
# Load .env into your shell (one option):
set -a; source tools/screenshots/.env; set +a
npm run screenshots
```
Outputs one PNG per entry in `shots.config.ts` to `src/assets/screenshots/whp/<id>.png`. Existing files are overwritten.
## Capture rules
- **Viewport: 1440×900.** Locked. No `fullPage`. Playwright's viewport screenshots never include browser chrome — no address bar, no tab strip.
- **Mask list:** defaults (account ID, server hostname, user IP, billing column) plus per-shot additions.
- **No address bar in any image.** Multi-server fleet — we don't want a specific host in any screenshot.
- Use `selector` to clip to a region (e.g., just the sidebar) when the full viewport is noisier than useful.
## Refresh workflow
UI changed? → `npm run screenshots` locally → review the diffs (`git diff --stat` shows changed PNGs) → eyeball them for accidental leakage → commit → push.
## Adding a new shot
1. Add an entry to `shots.config.ts` with a stable `id`.
2. `npm run screenshots`.
3. Reference the new file in your `.mdx`: `![Alt text](~/assets/screenshots/whp/<id>.png)`.