skills/design-atelier/SKILL.md
End-to-end design pipeline from brief to coded prototypes. Gathers visual references, builds design systems, and produces HTML/CSS mockups via parallel sub-agents. Supports multi-prompt projects.
npx skillsauth add shaunandrews/agent-skills design-atelierInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A complete pipeline from design brief → visual references → design system → coded HTML/CSS prototypes. Handles the full creative process including research, mood boarding, design system creation, and parallel mockup production.
Brief → References → Design System → Parallel Mockups → Iterate
If no project exists yet, scaffold it:
PROJECT_DIR=~/Developer/Projects/{project-name}
mkdir -p "$PROJECT_DIR"/{prompts,docs,logs}
cd "$PROJECT_DIR"
git init
npm init -y
npm install express
Copy the gallery server template:
cp {skillDir}/templates/server.js "$PROJECT_DIR/server.js"
Update package.json:
npx -y json -I -f package.json -e 'this.scripts={start:"node server.js"}'
Reserve a port:
portman request 1 --name "{project-name}" --desc "Design atelier server"
Update the PORT constant in server.js with the assigned port.
If the project already exists:
server.js is present and workingprompts/mkdir -p prompts/{number}-{prompt-name}/{research,mockups}prompts/*/mockups/ — no manual index updates neededSave ALL prompts/briefs to docs/prompts.md, not just the one you're working on. Include:
Don't half-document. Save everything upfront. You will need it later.
Use the headless-browser skill for screenshots. This runs in Docker — no windows pop up on the user's screen.
# Ensure the headless browser is running
{headlessBrowserSkillDir}/scripts/ensure-running.sh
# Take screenshots
{headlessBrowserSkillDir}/scripts/browse.sh screenshot "https://example.com" /path/to/save.jpg
The headless browser automatically removes cookie banners, newsletter popups, GDPR overlays, chat widgets, and other noise before capturing screenshots. It also validates HTTP status codes — 404s, 403s, and server errors are skipped automatically. No extra steps needed.
For image search URLs (Google/Bing Images), set BROWSE_SKIP_VALIDATE=1 since these can return non-standard status codes.
For each prompt, gather 30-40 references across 4 categories. Quality and breadth matter — these references are the foundation that the design system and every mockup will be built from. Weak references = weak output.
This is your most important category. Screenshot actual live websites — real sites with real design decisions. These cover style references, industry references, and designer portfolios all in one category.
⚠️ CRITICAL: Screenshot DESTINATION sites, NOT gallery/aggregator pages.
Screenshotting Behance search results, Awwwards listing pages, or Dribbble grids gives you the PLATFORM'S UI over and over — not the actual design work. Those platforms are for discovering sites, not for screenshotting directly.
The two-step research process:
Step A — Discover site URLs using web_search:
# Find sites matching the aesthetic
web_search "{aesthetic} website design"
web_search "{design style} portfolio website"
web_search "site:awwwards.com {aesthetic}" # find NAMED sites on Awwwards
# Find sites in the industry
web_search "best {industry} website design 2025"
web_search "best {industry} websites"
web_search "site:awwwards.com {industry}"
# Find designer/studio portfolios working in the style
web_search "{designer name} portfolio website"
web_search "{design style} design studio website"
Step B — Screenshot the actual sites:
{headlessBrowserSkillDir}/scripts/browse.sh screenshot "https://the-actual-site.com" /path/to/references/site-01-name.jpg
Example workflow:
web_search "swiss grid typography website design" → finds links to actual sitesweb_search "site:awwwards.com swiss design" → Awwwards pages NAME the actual siteshttps://the-actual-site.com — NOT https://awwwards.com/sites/the-actual-siteWhat to cover across your 15-20 site screenshots:
If a site fails (blocks headless, times out):
web_search for 2-3 more alternativesSites known to FAIL in headless browser (avoid):
cargo.site) — times outbangbangnyc.com) — doesn't loadFile naming: site-01-sitename.jpg, site-02-sitename.jpg, etc.
Screenshot type specimen sites and typography archives. These ARE the content — OK to screenshot directly.
# Typographic Posters — richest visual density (50+ posters per screenshot)
https://www.typographicposters.com/
# Fonts in Use — real-world typography in context
https://fontsinuse.com/in/2/formats/1/web
# Typewolf — curated typography showcase
https://typewolf.com/
# Typography.com — professional specimens
https://www.typography.com/
Also use web_search to find specific type specimens relevant to the brief's typographic direction, and screenshot those pages.
File naming: type-01-source.jpg, type-02-source.jpg, etc.
Screenshot palette tools and pattern libraries. These are content pages — OK to screenshot directly.
# Color Hunt — palette grid with style categories
https://colorhunt.co/palettes/{style}
# Styles: pastel, vintage, retro, neon, gold, light, dark, warm, cold
# Coolors — palette generator
https://coolors.co/
# Hero Patterns — SVG pattern library
https://heropatterns.com/
For specific textures or patterns referenced in the brief, use web_search to find relevant examples.
File naming: color-01-source.jpg, pattern-01-source.jpg, etc.
Google Images and Bing Images for broad visual surveys. These are supplemental — they cover history, aesthetics, techniques, and everything else in a quick sweep.
BROWSE_SKIP_VALIDATE=1 {headlessBrowserSkillDir}/scripts/browse.sh screenshot \
"https://www.google.com/search?q=your+search+terms&tbm=isch" \
/path/to/references/search-01-google-description.jpg
BROWSE_SKIP_VALIDATE=1 {headlessBrowserSkillDir}/scripts/browse.sh screenshot \
"https://www.bing.com/images/search?q=your+search+terms" \
/path/to/references/search-02-bing-description.jpg
Run 8-12 searches covering these angles:
Swiss International Typographic Style poster)psychedelic gradient art 1960s)Müller-Brockmann poster design)brutalist tattoo studio branding)Swiss grid layout website)psychedelic neon color palette)moiré optical illusion pattern)Helvetica modernist poster)tattoo studio brand identity modern)CSS gradient text effect psychedelic)Run searches in parallel (& + wait) for speed.
File naming: search-01-google-description.jpg, search-02-bing-description.jpg, etc.
Before moving to the design system, verify:
prompts/{number}-{prompt-name}/
└── research/
├── references/ # Screenshot files (JPG/PNG)
│ ├── site-01-stripe.jpg
│ ├── site-02-linear.jpg
│ ├── type-01-typographic-posters.jpg
│ ├── color-01-colorhunt-neon.jpg
│ └── search-01-google-swiss-posters.jpg
├── references.html # Compiled mood board (use template)
└── design-direction.md # Written analysis of references
Copy and populate the mood board template:
cp {skillDir}/templates/references.html prompts/{number}-{prompt-name}/research/references.html
Edit the HTML to add each reference as a card with:
references/filename.jpg)Group references by category with section headers.
This is the critical step. The design system brief is the shared context that every mockup agent receives. It must be specific enough to produce consistent results.
Copy and fill in the template:
cp {skillDir}/templates/design-system.md prompts/{number}-{prompt-name}/design-system.md
Concept — 2-3 sentences capturing the mood, the reference points, and the brand name.
Palette — Exact CSS custom properties. Include:
Typography — Specific Google Fonts with exact weights. Define roles:
Include the Google Fonts <link> tag ready to copy.
Grid & Layout — Max width, base unit, section padding, column grid.
Pattern System — CSS code for any decorative patterns (gradients, repeating backgrounds, borders, SVG ornaments). Each pattern should have a "Use for" note.
Component Vocabulary — How key components look:
Provocative Design Moves — The specific things that make this design feel hand-crafted and un-AI-generated. These are the design decisions that matter most.
Page Assignments — Which pages to build, brief description of each, and any page-specific direction.
Technical Rules — Self-contained HTML, Google Fonts CDN, CSS-only interactions, no external images, responsive breakpoints.
Default to WHITE backgrounds with bold colored/black geometric forms and accent colors. Most design movements referenced in creative briefs (Werkstätte, Bauhaus, Secession, minimalism, etc.) use white space as a primary design element. Only go dark if the brief explicitly demands it (e.g., "cyberpunk," "dark mode," "noir").
The most common mistake is defaulting to dark/moody palettes when the reference material is actually white-dominant. Always check the references before choosing the palette.
⚠️ CRITICAL: Sub-agents cannot spawn their own sub-agents. The sessions_spawn tool is not available inside sub-agent sessions. This means you CANNOT use a single "orchestrator" agent that does research → design system → spawns mockup agents. That pattern fails silently — the orchestrator will fall back to building pages sequentially, losing the parallelism benefit.
The main session must be the orchestrator. Run the pipeline in two phases from the main session:
Main Session (you)
├── spawn: research + design system agent (wait for completion)
└── spawn (parallel, after Phase 1 completes):
├── home page agent
├── shop page agent
├── about page agent
└── ... (one per page)
Never delegate the spawning to a sub-agent. Always spawn from the main session.
You are building the {PAGE NAME} mockup for {brand name}.
**Output file:** {project}/prompts/{number}-{name}/mockups/{page}.html
**Read the design system brief:**
Read {project}/prompts/{number}-{name}/design-system.md
**Palette (repeated for clarity):**
{list key colors}
**Build these sections:**
{numbered list of sections with specific content}
**Provocative design moves to include:**
{list specific design choices}
**Technical:** Self-contained HTML, embedded CSS, Google Fonts CDN, CSS-only, no JS, no images, responsive.
Use sessions_spawn with labels for tracking:
sessions_spawn(task: "...", label: "{project}-{page}")
All agents can run simultaneously since they share the design system but write to separate files.
When feedback comes in:
design-system.md, then respawn affected agents with "CRITICAL CORRECTION" in the briefpageOrder array in server.jsThe gallery server has a pageOrder array that controls display order:
const pageOrder = ['home', 'collection', 'subscriptions', 'faq', 'contact'];
Add new page slugs (filename without .html) in the desired order. Unlisted pages appear at the end. Restart the server after changes.
When adding another design prompt to an existing project:
Create the prompt folder:
mkdir -p prompts/{number}-{new-prompt-name}/{research,mockups}
Gather references (Step 3) — save to the new prompt's research/ folder
Create a design system (Step 4) — each prompt gets its own design-system.md
Spawn mockup agents (Step 5) — they write to the new prompt's mockups/ folder
The gallery auto-discovers the new prompt section — no server changes needed
If the new prompt needs different page ordering, add a per-prompt pageOrder in the server (or update the default)
The included server.js template:
prompts/*/mockups/*.htmlresearch/references.html existscd {project-dir}
npm start
The gallery is a neutral review tool, not a branded experience. It uses system fonts, neutral grays, and minimal styling so the mockups are the focus. Features:
loading="lazy", sandbox="allow-same-origin", pointer-events: none). No screenshot pipeline needed.transform: scale() values — they leave gaps when card widths vary.prefers-color-scheme, plus a manual toggle persisted to localStorage.To deploy to Vercel or any static host:
# With the server running locally:
mkdir -p dist
curl -s http://localhost:PORT > dist/index.html
cp -r prompts dist/prompts
cd dist && vercel --prod --yes
The gallery HTML is self-contained — no build tools needed. Just capture the rendered page and copy the prompts folder alongside it.
Kill the running server process and restart. The server reads the filesystem on each request, so new mockup files appear automatically — but server.js code changes require a restart.
{project-name}/
├── server.js # Gallery server (auto-discovers)
├── package.json
├── README.md
├── docs/
│ ├── overview.md # Project overview
│ └── prompts.md # All prompts/briefs saved here
├── logs/
│ └── YYYY-MM-DD.md # Activity logs
└── prompts/
├── 01-hair-salon/
│ ├── research/
│ │ ├── references/ # Screenshot files
│ │ ├── references.html # Compiled mood board
│ │ └── design-direction.md # Written analysis
│ ├── design-system.md # Palette, type, patterns, components
│ └── mockups/
│ ├── home.html
│ ├── services.html
│ └── contact.html
├── 08-coffee-roastery/
│ ├── research/
│ │ └── ...
│ ├── design-system.md
│ └── mockups/
│ └── ...
└── {next-prompt}/
└── ...
sessions_spawn. Never delegate spawning to a sub-agent — it will silently fall back to sequential work, losing all parallelism. The main session is always the orchestrator.curl localhost:PORT > dist/index.html + copy prompts folder. No build tools needed for Vercel/static hosts.development
Build accurate WordPress/Gutenberg UI mockups using pre-extracted design tokens, icons, and components. Use when prototyping WordPress admin interfaces or Site Editor concepts.
data-ai
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
development
Set up a new project with standard structure, git, README, CLAUDE.md, and dev server config. Use when starting a new project or bootstrapping a workspace for a new initiative.
tools
Manage Pressable WordPress hosting via API. Use when creating/cloning sites, managing backups, purging cache, updating PHP versions, managing plugins, checking site status, or any Pressable hosting operations.