Design scan
Claude Code skill: scan any live website into a replication-grade design.md — layout, typography, colors, and animations via a bundled Playwright crawler
npx -y skills add Shawnchee/design-scan --skill design-scanAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Scans a live website and produces design.md — a replication-grade spec of its look and motion. Runs a bundled Playwright crawler that template-dedupes and visits up to ~6 pages, captures screenshots at 3 breakpoints plus full-page and scroll frames, and extracts structured design data: CSS custom properties, fonts, computed typography, a color palette with usage counts, CSS @keyframes, Web Animations API animations with real keyframes/durations/easings, transitions, :hover rules, animation-library detection (GSAP, Framer Motion, Lottie, AOS, Lenis), layout metrics, and a component inventory. Claude then reads the screenshots plus JSON and writes design.md. Trigger on "design scan", "/design-scan <url>", "replicate this website's design", "scan <url> and make a design.md", "clone this site's look", or "extract the design system from <url>".
SKILL.md
7.6 KB, as published. Nobody here has run it
design-scan
Turn a live URL into design.md, a spec detailed enough to replicate the site's visual design and motion. Follow these steps exactly.
1. Parse the URL
Read the target URL from the user's args. If none is present, ask for it and stop. Accept bare hostnames and normalize to https:// if no scheme is given.
2. Dependency check (one-time)
Resolve the skill dir = the directory containing this SKILL.md. Do NOT assume it equals the current working directory; the user runs the skill from their own project.
If <skill-dir>/node_modules does not exist, install from the skill dir:
npm install --prefix <skill-dir>
npx --prefix <skill-dir> playwright install chromium
Tell the user this is a one-time setup and that the Chromium download is ~300MB, so it may take a minute. Skip this step entirely if node_modules already exists.
3. Run the scan
From the skill dir, run:
node <skill-dir>/scripts/scan.mjs <url> --out <cwd>/design-scan-output/<hostname>
<hostname> is the URL's host (e.g. linear.app). <cwd> is the user's project directory, not the skill dir — output belongs in the user's project. Relay progress to the user as it streams; typical runtime is 1–4 minutes.
If the script exits non-zero, show its one-line error and the likely fix:
- Bot-blocked / challenge page (Cloudflare, empty content, timeout on load): suggest trying a different URL or a specific subpage that isn't gated.
- Unreachable URL (DNS/connection error): confirm the URL is correct and public.
- Missing Chromium (Playwright error about a missing browser): run
npx --prefix <skill-dir> playwright install chromiumand retry.
4. Read the results — with token discipline
The scan writes a lot; do NOT read all of it. Read in this order and stop when you have enough:
<out>/scan.jsonfirst — always. It is the aggregate:pageslist,designTokens,fonts,typography(computed per-role type styles from the home page — use this for real rendered sizes; design tokens alone can understate viewport-scaled headings),colorPalette,animations(libraries,keyframes,waapi,transitions,hoverStyles,scrollEvidence),layout,components,meta. This is your primary source of truth for all numeric values. Reading notes:waapientries are deduped with acountfield — a high count means the animation is a repeated pattern, not a one-off.colorPaletteroles are mechanical (text/bg/border/accent-cta) — identify the brand/accent colors yourself from saturated values and the button signatures; don't transcribe roles blindly.- Screenshots, in priority order:
- Home page: read
desktop.png,tablet.png,mobile.png, andfullpage.png— always (the Responsive section needs all three breakpoints). - Every other page: read
desktop.pngonly. - Scroll frames (
scroll-01.png…): read 2–3 representative frames (early / middle / late), only for the home page, and only ifscan.jsonshows actual scroll-triggered motion:animations.scrollEvidencehasscrollTimeline/aosAttrstrue or ascrollLibrary, or a scroll library (AOS, GSAP, Lenis, Locomotive) appears inanimations.libraries. Non-emptykeyframes/waapialone is not evidence — most sites have hover/loader animations that never fire on scroll. When in doubt, skip.
- Home page: read
- Never read every screenshot of every page. Never open
pages/<slug>/data.jsonunlessscan.jsonis missing a specific detail you need for one section — then read only that page'sdata.json.
5. Write design.md
Write to <cwd>/design.md. If a design.md already exists there, ask before overwriting. Follow the template below verbatim in structure.
Quality bar (non-negotiable):
- Every animation entry cites real values from scan.json — duration, delay, easing, keyframe offsets. Never write "smooth fade" or "subtle slide" without the numbers behind it.
- The color palette uses exact hex values with usage roles and counts from
colorPalette. - Typography names exact families, weights, and sizes from
fontsand the computed type data. - Where
scan.jsonand the screenshots disagree, trustscan.jsonfor values (colors, sizes, timings) and the screenshots for hierarchy and feel (what's prominent, the overall mood).
design.md template
# Design Spec: <site>
## Overview
One paragraph: brand feel, visual density, dark vs light, overall personality.
## Layout System
Max content widths; grid vs flex patterns and column counts; header behavior
(sticky? transparent-to-solid on scroll?); vertical rhythm and the spacing scale
between sections.
## Typography
| Role | Family | Size | Weight | Line height | Letter spacing |
|------|--------|------|--------|-------------|----------------|
| Display / H1 | … | … | … | … | … |
| Heading / H2 | … | … | … | … | … |
| Body | … | … | … | … | … |
| Caption / small | … | … | … | … | … |
Font loading source (Google Fonts, self-hosted @font-face, system stack).
## Color Palette
| Swatch (hex) | Role | Usage count |
|--------------|------|-------------|
| #… | Background | … |
| #… | Text | … |
| #… | Accent / brand | … |
### Design tokens (CSS custom properties)
| Token | Value | Role |
|-------|-------|------|
| --… | … | … |
## Components
For each key component (nav, hero, buttons, cards, footer, …):
- **Name** — description; key computed styles (padding, radius, border, shadow,
background); which screenshot shows it (path).
## Animation & Motion
Libraries detected: <list from animations.libraries, or "none — CSS only">.
Per animation:
- **Name / target** — trigger (load | scroll | hover); duration; delay; easing;
keyframes summary with real offsets (e.g. `0%: opacity 0, translateY 24px →
100%: opacity 1, translateY 0`).
Hover states: what changes on :hover and the transition used.
Transition conventions: default duration/easing applied across interactive elements.
## Responsive Behavior
What changes at 768px (tablet) and 390px (mobile) based on the tablet/mobile
screenshots — nav collapse, column reflow, type scaling, hidden elements.
## Assets & References
- Screenshots: paths under `design-scan-output/<hostname>/pages/…`
- og:image, favicon (from meta).
## Implementation Notes
Suggested stack mapping — e.g. a Tailwind config snippet wiring the tokens above,
and which animation library best replicates the observed motion.
6. Report and offer next step
Tell the user:
design.mdwas written at<cwd>/design.md.- Screenshots and raw data live in
<cwd>/design-scan-output/<hostname>/for reference. - Offer: "Want me to scaffold a project that implements this design.md?"
Gives 0 of the 12 instructions most css styling skills give
Counted across 586 of the 596 authors here whose files we hold, read 2026-08-06
- avoid excessive centered layoutsin 55 of 586, across 12 files
- bundle code into single HTML filein 54 of 586, across 14 files
- Respect prefers-reduced-motion user settingsin 52 of 586, across 35 files
- avoid purple gradientsin 51 of 586, across 11 files
- avoid uniform rounded cornersin 51 of 586, across 11 files
- avoid Inter fontin 51 of 586, across 11 files
- edit generated files to develop artifactin 50 of 586, across 10 files
- animate only transform and opacity propertiesin 43 of 586
- Make touch targets at least 44x44 pixelsin 41 of 586, across 15 files
- Ensure minimum color contrast of 4.5:1in 39 of 586, across 10 files
- use tailwind cssin 39 of 586, across 24 files
- Use SVG icons instead of emojisin 38 of 586, across 11 files
Said here and by no other author read
- ask for a url if none is provided
- normalize bare hostnames to https
- install dependencies from skill dir if node_modules is absent
- run the scan from the skill directory
- output results to the current working directory
- relay scan progress to the user
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.