This repo uses a small custom pipeline to make full-page Next.js renders show up as images inside Storybook, so Chromatic can review them alongside normal component stories.
- Generator:
tests/e2e/pages.visual.spec.ts - Output dir:
public/pages-renders/ - Output filenames:
{locale}-{variant}-{width}.png(example:en-home-320.png)
Those PNGs are consumed by Storybook stories like:
src/components/stories/Page.Home.stories.tsxsrc/components/stories/Page.Home.FR.stories.tsxsrc/components/stories/Page.Systems.stories.tsxsrc/components/stories/Page.Systems.FR.stories.tsx
Each story loads an <img> from the /pages/* URL space.
Storybook is configured to map the generated folder into /pages:
.storybook/main.tsmapspublic/pages-renders/→/pages
So if public/pages-renders/en-home-320.png exists on disk, Storybook can load
it from /pages/en-home-320.png.
CI builds page renders once, uploads them as an artifact, and Chromatic downloads them before building Storybook.
- CI workflow:
.github/workflows/ci.yml- Job
page-renders:- runs
yarn test:e2e pages.visual.spec.ts - uploads
public/pages-renders/as artifactpage-renders
- runs
- Job
chromatic:needs: page-renders- downloads artifact
page-rendersinto the workspace (sopublic/pages-renders/exists) - runs
yarn build-storybook - publishes Storybook to Chromatic
- Job
-
Generate page renders (writes into
public/pages-renders/):yarn test:e2e pages.visual.spec.ts
-
View them in Storybook:
yarn storybook- Open “Pages/Home/” or “Pages/Systems/”
If you already have Next running on http://localhost:3000, you can reuse it:
PLAYWRIGHT_REUSE_EXISTING=1 PLAYWRIGHT_BASE_URL=http://localhost:3000 PLAYWRIGHT_PORT=3000 yarn test:e2e pages.visual.spec.ts
- Locally: check that
public/pages-renders/contains the expected PNGs. - In CI: confirm
page-rendersran andchromaticdownloaded thepage-rendersartifact beforeyarn build-storybook.
The curl image is below the fold (in the footer). The Playwright render suite
scrolls to #contact before taking the full-page screenshot so lazy-loaded
footer assets are actually requested.