Use this runbook when you are working on browser-level verification for the web app. The repository keeps Playwright smoke coverage, manual smoke tooling, and shared E2E bootstrap utilities in one dedicated location so the suite is easier to maintain.
apps/web/src/lib/load-root-env.mjs: shared repo-root env loader for Next.js and Playwright entrypointsapps/web/e2e/playwright.config.ts: Playwright smoke configurationapps/web/e2e/specs/: browser test specsapps/web/e2e/helpers.ts: shared workspace seeding, API setup, and flow helpersapps/web/e2e/scripts/playwright-env.mjs: Docker/bootstrap orchestration and shared environment setupapps/web/e2e/scripts/run-playwright-e2e.mjs: standard smoke runnerapps/web/e2e/scripts/run-playwright-manual-smoke.mjs: guided screenshot-and-download smoke runner
Create /.env from /.env.example at the repository root, then install dependencies:
pnpm install
pnpm --filter web exec playwright install --with-deps chromiumThis command prepares the demo workspace, ensures the required services are healthy, and executes the Playwright suite:
pnpm --filter web e2eIf you already started the full Docker stack yourself, skip the extra bootstrap step:
pnpm --filter web e2e -- --skip-dockerUse this when you want deterministic screenshots and a downloaded PDF artifact for README or release verification:
pnpm --filter web e2e:manual-smokeWith an already-running local stack:
pnpm --filter web e2e:manual-smoke -- --skip-dockeroutput/playwright/report/: HTML Playwright reportoutput/playwright/test-results/: traces, videos, and failure screenshotsoutput/playwright/downloads/: downloaded manual-smoke PDFsoutput/playwright/manual-smoke/: screenshot sequences and summary JSON
- Add new end-to-end coverage under
apps/web/e2e/specs/. - Reuse
helpers.tsfor workspace priming, seeded tenant context, and API-assisted setup before adding new ad hoc bootstrapping code. - Keep repo-root env loading in
apps/web/src/lib/load-root-env.mjsso Next.js and Playwright stay aligned. - Keep bootstrap logic in
apps/web/e2e/scripts/so package scripts and CI stay aligned. - Write Playwright outputs only to the repository-root
output/playwright/tree. Do not create app-local artifact folders such asapps/web/output/.
The CI workflow installs Chromium, runs the happy-path smoke subset through the web package script, and uploads output/playwright/ artifacts when the job fails.