web-prototype — Claude Code skill: what it does, how to install
Builds one self-contained HTML prototype from a seed template and eight section skeletons. Handy for a landing page, a pricing page or a docs index.
npx skills add nexu-io/open-design --skill web-prototype -a claude-codeWhat web-prototype does
The skill produces a single self-contained HTML page from a seed file: it copies assets/template.html, drops the design system's tokens into the six :root variables, and pastes section blocks from references/layouts.md. Inside are eight paste-ready layouts, a P0/P1/P2 self-review checklist, and the SKILL.md instructions. You don't write CSS from scratch, and that is also the catch: with no active DESIGN.md covering color, typography, layout and components there is nothing to put into those variables.
The order is fixed. The agent reads the seed and its class inventory first, then states the section list in one sentence before writing any HTML — that sentence is the cheapest moment to redirect it. Then comes pasting, replacing [REPLACE] strings with real copy, and the checklist pass. Output lands in index.html; the source never goes into chat, only a short summary.
Some rules are non-negotiable. One accent color, used at most twice per screen. Serif for display, mono for numerics and eyebrows. No remote image hotlinks: fetch the image into the project and reference it relatively. Mobile reflow relies on the seed's 920px media query, so fixed widths break it.
What it helps with
- assemble a landing page from ready-made section blocks
- map design tokens into the seed instead of rewriting CSS
- run the P0 pass before showing the page to anyone
- build a docs index or pricing page on a known section rhythm
Example prompts for the agent
- Prototype a homepage as a single HTML file, taking sections from
references/layouts.md - Mock up a pricing page: hero-center, comparison table, CTA
- Build the landing page with the web-prototype skill and write it to
index.html
How to install web-prototype
1Skills CLI (Vercel)
npx skills add nexu-io/open-design --skill web-prototype -a claude-code2Manually: put the files in place
~/.claude/skills/web-prototype/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/web-prototype/
1Skills CLI (Vercel)
npx skills add nexu-io/open-design --skill web-prototype -a codex2Manually: put the files in place
.agents/skills/web-prototype/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add nexu-io/open-design --skill web-prototype -a cursor2Manually: put the files in place
.cursor/skills/web-prototype/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install nexu-io/open-design web-prototype2Manually: put the files in place
.github/skills/web-prototype/SKILL.md1Skills CLI (Vercel)
npx skills add nexu-io/open-design --skill web-prototype -a gemini-cli2Platform CLI
gemini skills install https://github.com/nexu-io/open-design --path design-templates/web-prototypeManually: put the files in place
.devin/skills/web-prototype/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add nexu-io/open-design --skill web-prototype -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about web-prototype
How do I install web-prototype in Claude Code?
Run npx skills add nexu-io/open-design --skill web-prototype -a claude-code. The skill lands at ~/.claude/skills/web-prototype/SKILL.md.
What does web-prototype do?
It builds one self-contained HTML prototype from the seed template and the section library, maps design tokens onto the six :root variables, and writes the result to index.html.
Do I need a DESIGN.md before running it?
Yes. The skill expects an active design system with color, typography, layout and components sections, and moves its colors into the seed's :root variables.
Source text
SKILL.md · Apache-2.0
---
name: web-prototype
description: |
General-purpose desktop web prototype. Single self-contained HTML file built
by copying the seed `assets/template.html` and pasting section layouts from
`references/layouts.md`. Default for any landing / marketing / docs / SaaS
page when no more specific skill matches.
triggers:
- "prototype"
- "mockup"
- "landing"
- "single page"
- "marketing page"
- "homepage"
od:
mode: prototype
platform: desktop
scenario: design
preview:
type: html
entry: index.html
design_system:
requires: true
sections: [color, typography, layout, components]
---
# Web Prototype Skill
Produce a single, self-contained HTML prototype using the bundled seed and layout library — **not** by writing CSS from scratch. The seed already encodes good defaults (typography, spacing, accent budget). Your job is to compose it.
## Resource map
```
web-prototype/
├── SKILL.md ← you're reading this
├── assets/
│ └── template.html ← seed: tokens + class system + chrome (READ FIRST)
└── references/
├── layouts.md ← 8 paste-ready section skeletons
└── checklist.md ← P0/P1/P2 self-review
```
## Workflow
### Step 0 — Pre-flight (do this once before writing anything)
1. **Read `assets/template.html` end-to-end** — at minimum through the `<style>` block. The class inventory at the top of `references/layouts.md` lists every class that must be defined there; if one is missing, add it to `<style>` rather than re-defining it inline on every section.
2. **Read `references/layouts.md`** so you know which section skeletons exist. Don't write a section type that isn't covered — pick the closest layout and adapt.
3. **Read the active DESIGN.md** (already injected into your system prompt). Map its colors to the six `:root` variables in the seed; don't introduce new tokens.
### Step 1 — Prepare `index.html` from the seed
Use `assets/template.html` as the seed for the canonical project file, normally `index.html`.
Replace the six `:root` variables with the active design system's tokens. Replace the page `<title>` and the topnav brand.
### Step 2 — Plan the section list
**Pick layouts before writing copy.** Default rhythms (from `layouts.md`):
| Page kind | Default rhythm |
|---|---|
| Landing | 1 hero → 3 features → 4 stats *or* 5 quote → custom split → 6 cta |
| Marketing / editorial | 1 hero-center → 7 log list → 6 cta |
| Pricing | 1 hero-center → 8 comparison table → 6 cta |
| Docs index | 1 hero-center → 7 log list (sections of docs) → 6 cta |
State the chosen list in one sentence to the user *before* writing — they can redirect cheaply now and not after 200 lines of HTML.
### Step 3 — Paste and fill
For each chosen layout, copy the `<section>` block from `layouts.md` into `<main id="content">` of the project HTML. Replace bracketed `[REPLACE]` strings with real, specific copy from the user's brief. **No filler** — if a slot is empty, the section is the wrong choice; pick a different layout. Treat every `.ph-img` block as layout scaffolding and replace it when the section requires imagery, following the real-first rule below before self-checking.
### Step 4 — Self-check
Run through `references/checklist.md` top to bottom. Every P0 item must pass before you move on. P1 items should pass; P2 are bonus.
### Step 5 — Write the project file
Write the completed HTML to the canonical project file, normally `index.html`. Then send one short ordinary assistant summary naming the file and describing what's there. Do not output the full HTML source in chat.
## Hard rules (the seed protects most of these — don't fight it)
- **Single accent, used at most twice per screen.** Eyebrow + primary CTA is the default budget.
- **Display font is serif** (Iowan Old Style / Charter / Georgia in the seed). Sans for body. Mono for numerics, captions, eyebrows.
- **Real imagery, never remote hotlinks.** `.ph-img` is temporary layout scaffolding, not the default final treatment. For a named real-world referent, search/fetch the correct real image, copy it into the project, and reference it relatively; never generate, draw, or invent a substitute. For illustrative or atmospheric subjects, prefer suitable fetched real photography and use image generation only as a fallback. If no compliant asset can be acquired, keep an intentional labeled `.ph-img` and disclose the limitation in the delivery summary.
- **Preserve real-image geometry.** Inspect each acquired image's intrinsic width and height, replace the entire `.ph-img` scaffold with an `<img class="content-img">`, and set matching `width` and `height` attributes. Never copy `.ph-img`, `.wide`, `.portrait`, or `.square` onto a real image. Content images must show the full frame; `object-fit: cover` is only for intentionally croppable decorative fills. The seed's `.content-img` rule bounds unusually tall or wide images to the viewport while keeping the other axis automatic.
- **Mobile reflow already works** via the seed's media query at 920px. Don't break it by adding fixed widths.
- **`data-od-id` on every `<section>`** so comment mode can target it.
## Output contract
Filesystem runs use project files as the source of truth:
```
index.html
```
OpenDesign derives the preview from the written project file. Do not also emit a source-code `<artifact>` block for the same generation turn.
One short summary after writing the file. Nothing after.
© nexu-io · Apache-2.0 · nexu-io/open-design