Skip to main content

Screenshots

Weekly snapshots of every public surface across the ChurchWiseAI portfolio, captured at desktop (1280x800) and mobile (390x844) viewports.

What's here​

Each public page has two files:

  • <slug>-desktop.png — 1280x800
  • <slug>-mobile.png — 390x844 (iPhone 14 Pro approx, device scale 2x)

The capture-summary.json file records when the last capture ran, how many surfaces succeeded, and any that failed.

Scope​

MVP covers 19 public surfaces:

SiteSurfaces
churchwiseai.comhome, /voice, /chatbot, /pricing, /onboard
FuneralWiseAIhome, /pricing
SermonWisehome, /pricing
ShareWiseAIhome (Coming Soon)
pewsearch.comhome, /directory, /pricing
illustratetheword.comhome, /pricing
docs.churchwiseai.comhome, /journeys/, /architecture/system-overview, /journeys/voice/crisis-call-escalation

Out of scope (for now): authenticated admin dashboard surfaces, widget-open chatbot state, checkout-embedded state. These need either seeded demo tokens or a test account and can be added in a follow-up once those flows are stable enough to screenshot without flakes.

How it runs​

Automated (default): .github/workflows/refresh-screenshots.yml fires Sundays 02:00 UTC. If the capture produces any diffs vs. the committed state, the workflow opens a PR against master for founder review. If nothing changed, no PR.

Manual: From this repo root:

pnpm install --frozen-lockfile
pnpm exec playwright install --with-deps chromium
pnpm tsx scripts/capture-screenshots.ts

Runs against production URLs, not localhost. Takes ~60-90 seconds for all 38 captures (19 surfaces × 2 viewports).

How to use the screenshots​

  • Visual regression baseline. If a marketing change lands and the next weekly capture shows a surprise delta on an unrelated page, that's a regression.
  • Onboarding context. When explaining the portfolio to a new hire or investor, link them a relevant screenshot here instead of asking them to click through each property.
  • Journey docs. Any user journey in knowledge/journeys/ can embed the relevant screenshot inline — e.g., the crisis-call journey embeds docs-voice-journey-desktop.png.

Adding a new surface​

Edit scripts/capture-screenshots.ts, append an entry to the SURFACES array with:

  • slug — kebab-case, used as the filename prefix
  • url — full HTTPS URL
  • description — one-line explainer for the capture-summary JSON
  • optional waitFor — CSS selector to wait for before snapping
  • optional settleMs — extra milliseconds to settle (animations, lazy rendering)

No config file; the script is the source of truth.

When a capture fails​

The script keeps going even if a single URL times out or returns 4xx. Failures are recorded in capture-summary.json under failures[]. The workflow still opens a PR so the reviewer can see both the successful deltas and the failure list.

A capture that fails every week on the same URL usually means: (a) the URL changed, (b) the page is behind auth now, (c) the production build is broken. Open a ticket, don't silently remove the surface.