| name | site-craft |
| description | A phased, user-gated workflow for designing and building a marketing site with an AI agent โ brand brief, divergent hero comps, type audition, full build, four quality gates, ship prep. Use when starting a marketing/landing site from scratch, redesigning one, or replacing a placeholder splash page. Triggers on "marketing site", "landing page", "brand the site", "redesign our homepage", "replace the splash page". |
site-craft
Design and build a marketing site the way a small studio would: a written brief before pixels, divergent exploration before commitment, a screenshot loop so the agent sees what it ships, quality gates before "done" โ and the human as art director at every decision that is theirs to make.
This skill encodes process, not taste. Every aesthetic decision lands in the project's own PRODUCT.md / DESIGN.md, decided by the user. The skill's job is to make sure those decisions get made deliberately, get written down, and get enforced.
Why this exists
AI-built marketing sites fail in predictable ways: the model designs blind (never sees its output), taste evaporates between sessions (nothing written down), one-shot generation converges to the category's median, and "done" is declared without verification. This workflow attacks each failure directly. It was extracted from a real build; the phases below are the ones that survived contact.
Setup (run once, before Phase 0)
-
Install missing skill dependencies. Check the available-skills list for each of these; install only what's absent, and tell the user in one line what you installed:
npx skills add pbakaus/impeccable -g -y
npx skills add vercel-labs/agent-skills --skill web-design-guidelines -g -y
npx skills add jakubkrehel/make-interfaces-feel-better -g -y
npx skills add vercel-labs/agent-skills --skill writing-guidelines -g -y
Drop -g if the user prefers project-level installs. If an install fails, say so and continue โ each gate degrades to "skipped, reason stated", never to silent omission.
-
Establish the screenshot loop. Detect a browser tool in this order: agent-browser CLI โ Playwright (npx playwright) โ Chrome MCP tools (mcp__claude-in-chrome__* or similar). If none exists, suggest npm i -g agent-browser and wait โ do not proceed past Phase 1 without a working screenshot loop. Designing blind is the failure mode this skill exists to prevent.
-
Find the serving path. Identify where preview files will be served from (a static dir + python3 -m http.server <port> is fine). Pick a port that collides with nothing the project already runs. If the user reviews from another machine, arrange a reachable URL (tunnel, tailnet bind, dev host) before comps exist, not after.
Iron rules (apply to every phase)
- The user is the art director. Hard-stop at every checkpoint marked โธ and wait for their pick. Never substitute your own taste for a decision the user has reserved. When they overrule a recommendation, that's data, not friction โ follow it and don't re-litigate.
- Screenshot everything you build, before showing it. Every artifact gets rendered at desktop (~1440px) and mobile (~390px), and you look at the screenshots yourself and fix what's broken before presenting. Wait for
document.fonts.status === 'loaded' before shooting, or you'll review fallback fonts (this will happen; check letterforms, not just text presence).
- Real content only. Copy comes from the product's actual docs/API/voice; code samples and payloads are contract-faithful shapes from the real system. If the project has a canonical voice/messaging doc, it outranks anything you'd write. No lorem, no invented API responses, no fake testimonials.
- Claims stay checkable. Anything load-bearing (pricing, limits, features) must be verifiable against the real product. Wit and voice live wherever the project's own brief says they live.
- Commit at every phase boundary with a message that says what was decided, not just what changed. Update the project changelog if one exists.
- Present decisions, not surveys. Each checkpoint offers a small set of genuinely different options with a recommendation and the reasoning โ then stops.
- Review artifacts for every round. Assemble screenshots into a comparison page (publish via the Artifact tool when available; otherwise write an HTML gallery to disk and give the path). The user should never have to reconstruct your work from prose.
Phase 0 โ Brief (no code)
Understand the product and the brand direction before any pixels.
- Crawl the repo/docs for product truth: what it does, who it's for, existing voice or strategy docs, current site/splash if any, existing brand assets.
- Interview the user for what the crawl can't answer โ one focused round using the structured-question tool when available. Cover: brand personality and its boundaries (e.g. playful vs. understated, and where each applies), aesthetic kin (2โ3 named references, not adjectives), anti-references (what this must NOT look like), the conversion primitive (what the hero asks a visitor to do), and any locked constraints.
- โธ Play back the direction in a few sentences and get explicit agreement.
Output: a confirmed direction. Nothing written to disk yet except notes.
Phase 1 โ Encode the brief
Run $impeccable init (interview mode, seeded with Phase 0's answers) to produce:
- PRODUCT.md โ register, audiences, positioning, conversion & proof, personality, anti-references, design principles, accessibility bar.
- DESIGN.md (seed) โ north star metaphor, color strategy with named rules, typography direction (not fonts yet), elevation/motion posture. Mark judgment calls you made so the user can veto them.
โธ Present both files' key decisions and the judgment calls. Commit.
Phase 2 โ Divergent exploration
Never bet the brand on one comp.
- Round 1 โ direction comps. Build 3โ4 standalone, self-contained HTML hero comps interpreting the brief in genuinely different ways (different composition, voice, and information density โ not palette swaps). All comps share whatever the brief has locked. Screenshot desktop + mobile, self-critique, fix, assemble the review gallery with a per-comp thesis, strengths, risks, and your recommendation.
โธ User picks a direction (grafting organs across comps is normal โ offer it).
- Round 2 โ type audition. Freeze the winning comp's skeleton; vary ONLY the display typography across ~6 voices (include width/weight/case play, at least one wildcard). Build it as a single switchable page (tabs + arrow keys) so the user can feel each live; screenshot every variant. Verify each face actually loaded before shooting โ font CDNs silently serve fallbacks and error pages for malformed variable-font requests; measure (e.g. width deltas for stretch axes), don't assume.
โธ User picks the voice (and runner-up, worth recording).
Commit each round. Fonts must be license-compatible with the project (default to open catalogs unless the user owns licenses).
Phase 3 โ Lock and build
- Graduate DESIGN.md from seed to locked spec: real tokens (colors, type roles with exact values, spacing, components), named rules, motion posture, theme commitment (single-theme is valid if deliberate โ say so in the file).
- Build the full page in the winning voice: hero verbatim from the approved comp, below-fold sections composed in the same language. Signature motion earns its place or doesn't exist;
prefers-reduced-motion always gets a working alternative. Interactive elements (copy buttons, forms, tab switchers) are functional, not decorative โ wire them to the real endpoints and handle the error paths.
- Verify: desktop + mobile full-page screenshots, no horizontal scroll, every interactive behavior exercised in the live DOM (click it and read the DOM state back โ don't assume).
- โธ Present. Iterate on the user's changes (their copy edits are sacred โ build on them, never revert). Expect additions to be tried and rejected; remove cleanly and record the taste rule in memory so it sticks.
Commit. Repeat step 3 after every edit round.
Phase 4 โ The gates
Run all four, in this order, applying fixes as findings land. Where a gate's generic rule conflicts with the project's locked voice/design system, the project wins โ record the rule as "reviewed, overridden" rather than silently skipping it.
web-design-guidelines โ a11y/UX compliance. Expect real findings: skip links, aria-live on async status, autocomplete/spellcheck on inputs, translate="no" on copy-paste primitives and code, theme-color/color-scheme, touch-action, URL-synced stateful UI (tabs โ query params), loading-state labels.
$impeccable audit โ scored technical audit. Measure, don't assert: contrast ratios computed from the live DOM (rasterize via canvas to sRGB โ getComputedStyle returns non-RGB color spaces that naive parsers misread), touch targets measured, then fixed.
make-interfaces-feel-better โ micro-interactions: interruptible transitions with named properties (never transition: all), text-wrap polish, hit-area extensions. Respect the project's own doctrine where it conflicts (a flat design system legitimately refuses shadows).
writing-guidelines โ copy review, run after the user's copy edits land.
Verify after fixes (no h-scroll regression, behaviors still work). โธ Present the four reports compactly. Commit.
Phase 5 โ Ship prep
- Self-host fonts. Download the subset woff2 files (prefer one variable file per family over per-weight instances โ check sizes, the variable file is usually the same size as ONE instance), inline the
@font-face blocks with font-display: swap and correct unicode-range, add rel="preload" for the critical faces, delete the CDN <link>s.
- Zero external requests. Verify via the Performance API that every subresource loads from the site's own origin, and that the fonts still render as themselves (
document.fonts.check + a screenshot compared against Phase 3's).
- Brand assets. Favicon (SVG + apple-touch PNG) derived from the design system's smallest ownable unit; og-image (1200ร630) built as a checked-in HTML source file and rendered via the browser โ screenshot at exact viewport โ so it's regenerable after copy changes. Pin exact sRGB hex values for assets (rasterize the working color space via canvas).
- 404 page in the same system โ error surfaces are where the brand's voice gets its most room, and every real site needs one.
- Ship checklist for Phase 6 (deployment is deliberately out of scope โ it's infra-specific): where files go, what routes/fallbacks the server needs (including the 404 and static assets), what must be verified end-to-end in production (forms POST for real, links resolve, OG card renders), and what existing behavior must not break.
โธ Final review. Commit. Hand the user the ship checklist.
Failure modes this skill exists to catch
- Presenting work without having looked at its screenshot (fallback fonts, overflow, dead buttons).
- One comp presented as "the design" instead of a divergent set.
- Taste decisions made silently instead of at a โธ checkpoint โ or re-litigated after the user ruled.
- Fake content standing in for the product (invented payloads, placeholder copy that ships).
- Gates skipped, or gate findings "fixed" against the project's own locked system.
- "Done" declared with external requests still on the page, no 404, no og-image, or an unverified form.