Wire a new before/after use case into BOTH the marketplace screenshot carousel and the marketing site diptych — they share backdrops and must stay in sync. Use when the user asks to add a new comparison / demo / before-after example to the extension screenshots, the marketing site's "See it in action" section, or both. Also use when the user mentions adding a new "use case", "scenario", "pair", or "diptych" to the screenshots pipeline. Do NOT use for: tweaking existing screenshots, generating...
Scanned 9/10/2026
Install to Claude Code
npx -y skills add rejifald/movar --skill add-before-after-case --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Add Before After Case?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/rejifald-add-before-after-case)More formats (shields.io, HTML) on the badges page.
---
name: add-before-after-case
description: |
Wire a new before/after use case into BOTH the marketplace screenshot
carousel and the marketing site diptych — they share backdrops and
must stay in sync. Use when the user asks to add a new comparison /
demo / before-after example to the extension screenshots, the
marketing site's "See it in action" section, or both. Also use when
the user mentions adding a new "use case", "scenario", "pair", or
"diptych" to the screenshots pipeline. Do NOT use for: tweaking
existing screenshots, generating per-locale variants of an existing
scene, or marketing copy changes that don't touch the screenshots.
---
# Add a before/after use case (marketplace + marketing)
Both surfaces narrate the same "what Movar fixes" stories — they just
deliver them in different shapes:
- **Marketplace** ships one composed 1280×800 diptych PNG per scene
(the diptych frame is in the PNG). One numbered file per locale lands
in `apps/extension/store-assets/screenshots/{en,uk}/NN-<slug>.png`.
- **Marketing** ships two single-half PNGs per pair — each captured
light **and** `-dark`, at natural content height — and the Astro
layer at `apps/marketing/src/components/ExampleDrum.astro` composes
them at runtime inside the homepage hero's tabbed drum, one pair
visible at a time, swapping light↔dark with `<picture>` +
`prefers-color-scheme`.
Both share backdrop components and the same Playwright capture script
at `apps/extension/scripts/capture-storybook-assets.mts`. Story title
prefix routes the output:
| Prefix | Output root | Story dir |
| --------------------------- | ------------------------------------ | ------------------------ |
| `Marketplace/Screenshots/*` | `store-assets/screenshots/{en,uk}/` | `storyboards/stories/` |
| `Marketing/Screenshots/*` | `apps/marketing/public/screenshots/` | `storyboards/marketing/` |
## Procedure
**Rule of thumb: every new use case ships in BOTH surfaces** unless the
demo's premise excludes one (e.g. scene #5 / Knowledge Panel is UK-only
because Google falls back to English without an `hl` hint — there's no
observable EN before/after). When you must skip a locale, document why
in the story file header.
### 1. Shared backdrops
Build the React backdrop(s) under
`apps/extension/store-assets/storyboards/backdrops/`. Make them accept
`hideChrome?: boolean` (default `false`) and forward it to the inner
frame component. The marketplace diptych supplies its own browser
chrome at the half level; the marketing single-half does not.
Existing backdrop frames to reuse / mirror:
- `before-after-frame.tsx` — diptych composition (`BeforeAfterFrameWithFrame`).
- `google-serp-frame.tsx` — Google SERP illustration (used by scene #3).
- `google-knowledge-frame.tsx` — Google entity Knowledge Panel (used by scene #5).
- `news-{en,uk}.tsx`, `site-{en,uk,ru}.tsx`, `voya-*.tsx` — fictitious-site backdrops.
If you build a new fictitious brand, follow §5 of
`apps/extension/store-assets/REQUIREMENTS.md`: invented name, `.example`
TLD, no real third-party logos, no real personal context.
### 2. Marketing single-half stories
Add two stories under
`apps/extension/store-assets/storyboards/marketing/`:
- `<name>-without.stories.tsx` — title
`Marketing/Screenshots/<Name>Without`, output
`<name>-without-movar.png`.
- `<name>-with.stories.tsx` — title
`Marketing/Screenshots/<Name>With`, output
`<name>-with-movar.png`.
Each story sets `parameters: { layout: 'fullscreen', viewport: { width: <content-width>, height: 800 }, captureOutput: { path: '<file>.png' }, naturalHeight: true, darkVariant: true }`
and renders the backdrop with its built-in chrome (no `hideChrome`). Set
`viewport.width` to the scene's **natural content width** (the width at
which the page content fills the frame edge-to-edge without being
stretched — e.g. a Google SERP's ~680px column + padding) so the
marketing layout can scale it to fit; `naturalHeight` then captures the
full height (not an 800px crop); `darkVariant` emits the `-dark` sibling
under `prefers-color-scheme: dark` (give the backdrop a dark `@media`
block over its scoped CSS vars).
### 3. Marketplace diptych story
Add one story under
`apps/extension/store-assets/storyboards/stories/<scene>.stories.tsx`
titled `Marketplace/Screenshots/<Scene>` with the next free
`screenshotIndex`. Compose the two backdrops inside
`BeforeAfterFrameWithFrame`, passing `hideChrome` on each. Export
`English` and `Ukrainian` story functions — or, if a locale is
intentionally skipped, document the reason in the file header and omit
that export (the capture script throws on stories named anything other
than `English` / `Ukrainian`, so omitting is cleaner than a renamed
export).
Caption bodies live inline in the story render functions (search-rewrite
is the canonical template) — keep them under three lines at the diptych's
caption width (~540px @ 18px body).
### 4. Marketing site integration
The marketing pairs render in
`apps/marketing/src/components/ExampleDrum.astro` — the homepage hero's
tabbed drum — keyed by the index of the matching entry in
`strings.examples.entries` (`apps/marketing/src/i18n.ts`):
- Add (or confirm) the `examples.entries` entry for the scene in both
`en` and `uk` — each has `site`, `scenario`, `without`, `withMovar`,
and `alt` (`{ without, withMovar }`). **`alt` is required**: the drum
drops a slide's images without it, so a pair whose PNGs are on disk
but whose `alt` is missing silently renders as caption-only.
- Add the matching `examples.captions` line in both locales. The drum
shows it under the card and falls back to `scenario` when absent.
- Add an `imagePairs[<index>]` record in `ExampleDrum.astro` with the
`without`/`with` light `src`. The `-dark` siblings and the `existsSync`
gate are handled automatically: a slide shows images only when both
light PNGs are on disk, and the dark `<picture>` source is added when
the `-dark` PNG exists. A slide with missing PNGs still renders its tab
and its caption.
- The drum builds exactly four slides from a hardcoded `[0, 1, 2, 3]`.
A fifth scene needs that list widened too — adding a pair alone will
not surface it.
### 5. Docs
Update three docs in lockstep:
- `apps/extension/store-assets/README.md` — add a row to the
"Required shots" table (file, locales, backdrop, layout).
- `apps/extension/store-assets/REQUIREMENTS.md` §5 — add a row to the
screenshot-set table; mention any locale skips with the reason.
- `apps/extension/store-assets/REQUIREMENTS.md` §6 — add asset rows
for each per-locale PNG ("Screenshot #N <slug> (UK)", etc.).
- `apps/marketing/public/screenshots/README.md` — add a row to the
filename table.
### 6. Capture and commit
```
pnpm capture:storybook-assets
```
Or from a sub-package directory:
```
pnpm --filter @movar/extension capture:storybook-assets
```
Commit the resulting PNGs in the same change as the source so PR
review surfaces the visual diff.
## Concrete example
Scene #5 (Knowledge Panel) is the canonical example of this convention
applied:
- Backdrops: `apps/extension/store-assets/storyboards/backdrops/google-{god-of-war-with-movar,god-of-war-without-movar,knowledge-frame}.tsx`
- Marketing stories: `apps/extension/store-assets/storyboards/marketing/google-god-of-war-{with,without}.stories.tsx`
- Marketplace diptych story: `apps/extension/store-assets/storyboards/stories/knowledge-panel.stories.tsx` (UK-only — see header)
- Marketing PNGs: `apps/marketing/public/screenshots/google-god-of-war-{with,without}-movar.png`
- Marketplace PNG: `apps/extension/store-assets/screenshots/uk/05-knowledge-panel.png`
When in doubt, mirror the structure of scene #3 (search-rewrite —
fully bilingual) or scene #5 (knowledge-panel — UK-only with a
documented skip).
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!