# Cy UI Illustration

> Build a Cypress UI illustration — an abstracted, deliberately simplified picture of a product screen that pairs with marketing copy at 16:9 (or Browser-inset sizes like 800×425) without going stale when the product changes. Use when asked to create, resize, or adapt a product-UI illustration for any surface — blog, landing pages, product pages, docs, empty states, social media. Covers the source-first workflow (Figma geometry → tokens → assets → HTML → @2x render), the canonical reference set, and the delivery checklist.

- Skill: `cypress-io/cy-ui-illustration` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add cypress-io/cy-ui-illustration`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cypress-io/cy-ui-illustration/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: cypress-io (https://skillmd.com/u/cypress-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cypress-io/cy-ui-illustration

---


# cy-ui-illustration

Build UI illustrations the way the design team builds them: measured from the source Figma component, assembled from real assets, abstracted to gray shapes everywhere text isn't the story, rendered at @2x through headless Chrome, and verified with an element inventory.

The full ruleset lives in [ui-illustrations.md](https://design.cypress.io/agents/ui-illustrations.md) — fetch it first, every time. This skill is the procedure and the reference set.

## Canonical reference illustrations

These are the bar. Before building anything, **Read the bundled reference PNG closest to your target** and study how it abstracts, then open its Figma node for geometry and tokens. All are 16:9-family frames with base-4 spacing, whole-pixel values, and real text only where the feature's story needs it.

Bundled in `references/`. **Read at most the one or two closest to your task** — the table below exists so you can choose from text instead of loading every image:

| File                                | Source node                             | What it teaches                                                                                                            |
| ----------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `a11y-analytics-800x425.png`        | `BqeqqHqeczSnbLJZxdnaOO` / `1:3167`     | Chart + rules-list layout at the standard size: stat chips, severity tags, element counts                                  |
| `a11y-analytics-472x284.png`        | `BqeqqHqeczSnbLJZxdnaOO` / `1:4888`     | The same illustration compressed a second tier — what survives at Small                                                    |
| `a11y-inspect-element-1216x646.png` | `BqeqqHqeczSnbLJZxdnaOO` / `11:95347`   | Large-size source: injected-app surround, DOM highlights, dark tooltip, sidebar over canvas                                |
| `test-replay-800x425.png`           | `YmEYv6Nc5M16JenMpj3i0V` / `1829:32735` | **The team's own downsize of the 1286×680 Test Replay** — the answer key: what got deleted, what reflowed, what stayed 1:1 |
| `test-replay-devtools-800x425.png`  | `YmEYv6Nc5M16JenMpj3i0V` / `3482:20320` | Dark theme with devtools Network split at small size                                                                       |
| `ui-coverage-report-800x425.png`    | `SNNT319HHXs6N2qUpgZ9jD` / `1:510`      | Analytics-report layout: metric tiles, tables, link lists                                                                  |
| `app-studio-recording-800x425.svg`  | `enlqSvcI3ijlWRVmHtiAzG` / `1:3602`     | Cypress App / Studio recording — full vector source, inspectable construction                                              |

Comparing `a11y-analytics-800x425.png` against `a11y-analytics-472x284.png` is the fastest way to internalize the method: same story, two authored sizes, every delta a deliberate deletion or reflow.

## The full corpus

Every UI illustration the team has created (some authored as prototypes for fake product videos) lives in these files. Search here first — for any Cypress product surface, an illustration probably already exists in some size. `get_metadata` with the file key and no node id lists pages; drill from there.

| File                                 | Key                      | Pages / contents                                                                                                                                  |
| ------------------------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Illustrations — Accessibility (v1.x) | `BqeqqHqeczSnbLJZxdnaOO` | Analytics                                                                                                                                         |
| Illustrations — Cypress Cloud (v1.x) | `YmEYv6Nc5M16JenMpj3i0V` | Visual Reviews / Test Replay                                                                                                                      |
| Illustrations — Cypress App (v1.x)   | `enlqSvcI3ijlWRVmHtiAzG` | Studio :: Recording, **Components** (shared parts)                                                                                                |
| Illustrations — UI Coverage (v1.x)   | `SNNT319HHXs6N2qUpgZ9jD` | Analytics Report                                                                                                                                  |
| Illustrations — Social (v1.x)        | `WXRcsE7gOaNcDi1V8SvXH0` | 2026 / Q1 — 1200×630 composites: dark atmospheric background + UI illustration + headline/lockup layer (see ui-illustrations.md § composite mode) |
| Component — Windows (v1.0)           | `EVfe4zg4hZPqZses82RhfI` | `Window / Browser` chrome — `Downscaled` false/true = 40px/24px toolbar; spec in ui-illustrations.md § Frame                                      |

Many illustrations ship in multiple authored sizes (Large 1286×680, Medium/Static 800×425, animated step series). **Before downsizing anything, check whether the design team already authored the small size** — if it exists, it is the spec, not an input to reinterpret.

| Illustration                     | Figma file                                                                        | What it demonstrates                                                                                            |
| -------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Accessibility — inspect element  | `Illustrations - Accessibility (v1.x)` `BqeqqHqeczSnbLJZxdnaOO`, node `11:95347`  | Injected-app gray surround, DOM highlight 4-layer overlay, dark selector tooltip, sidebar overlaying app canvas |
| Cloud — Test Replay              | `Illustrations - Cypress Cloud (v1.x)` `YmEYv6Nc5M16JenMpj3i0V`, node `1148:7825` | Dark chrome, code panel with error state, replay timeline with progress dot, devtools split                     |
| Cloud — Branch Review            | same file — browse pages for the Branch Review symbols                            | Two-panel review layout, diff badges (▲2 ▼1), severity tags, selected-row treatment                             |
| Cloud — Test detail + Cypress AI | same file                                                                         | Overlay panel over dimmed content, action button row, AI attribution rows                                       |
| Cloud — integrations / settings  | same file                                                                         | Settings list patterns: toggles, tabs, locked inputs                                                            |
| Cloud — Run duration chart       | same file                                                                         | Rounded bar chart, commit dots on branch line, callout value pill                                               |
| Heroes App (demo content)        | `Heroes App (v1.1)` `nHuTFOXFgAfbS04LqPgK5v`, node `614:2927`                     | The canonical cy.heroes cast — portraits are exported from here, never regenerated                              |

What "human-made" looks like in these, beyond the written rules:

- **One story per frame, told left-to-right.** Sidebar states the finding; the canvas shows it. Nothing else competes.
- **Real text is scarce and always narrative** — branch names (`develop`, `feature/new-hero`), counts with deltas, test titles, statuses. Body copy never survives.
- **Numbers are art-directed, not random**: small counts for failures (2, 3), round totals for context (2.8k), believable pairs (55% / 87%). Deltas always have direction and color.
- **Theme accents carry warmth**: hero names, `guild.cy.ts`, `/new-hero/superpowers` — the cy.heroes universe threads through every surface so screens feel like one product being used, not lorem ipsum.
- **Depth is restrained**: 1px `#E1E3ED` borders, one soft shadow per floating card, flat fills everywhere else.

## Procedure

1. **Fetch the rules.** `https://design.cypress.io/agents/ui-illustrations.md`. Non-negotiable rules live there: 16:9 / Browser math, design-system 1:1 (never scale), base-4 spacing, whole pixels, text-is-opt-in, bottom-only crop, element deletion order.
2. **Read the source before producing pixels.** `get_metadata` on the Figma node for geometry; `get_design_context` on key child components for exact tokens, type styles, and construction; `download_assets` for portraits, logos, and baked art. If the symbol is a flattened image, window regions out of the export at 1:1 with `background-position` — don't redraw them.
3. **Plan the reframe.** Most sources are already ~1.88:1, so 800×425 is a proportional reframe: delete navigation, reflow columns (3→2), keep panels at authored width, crop bottom only. Write the element budget down before building.
4. **Build a standalone HTML file** at logical size in the scratchpad. Inline every SVG (no webfonts, no external icon requests), use exact hex from the source tokens, whole pixels, base-4 spacing.
5. **Render @2x:**
   ```bash
   "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --headless --disable-gpu --hide-scrollbars --force-device-scale-factor=2 --window-size=800,425 --screenshot=out@2x.png "file://$PWD/illustration.html"
   ```
6. **Element inventory against the source.** Every source element: present, intentionally removed, or missing. Check icon constructions and colors against the Figma components, not memory. Fix and re-render until the inventory is clean.
7. **Deliver the PNG** with the inventory's intentional removals listed, and flag any judgment calls.

## Failure modes this skill exists to prevent

Each of these happened while developing the ruleset; the review round it cost is the reason it's listed.

- Measuring a screenshot instead of the Figma node → oversized type → cascading layout drift
- Hand-drawing substitutes (CSS avatars, generic icons, invented tooltips/highlights) when the real component or asset exists
- Killing the theme (placeholder avatars, dropped hero names) — abstraction applies to prose, not to the cy.heroes universe
- Missing structural elements that carry meaning: the gray injected-app surround, avatar rings, tooltip icons
- Fixed-width cards leaving remainder strips instead of stretching on the grid
- Fractional pixels, 6–8px radii where the system uses 4px, off-token grays and reds

