wireframe
Skill2 starsChanged 3 months agoMITView on GitHub
Turn a product idea, PRD, or existing codebase into a complete, buildable wireframe package - a screen inventory, low-fi HTML wireframes, a machine-readable screens.json contract, and a spec doc that a coding agent can build from 1:1. Use whenever someone asks to wireframe an app, mock up screens, plan a UI before building, produce a design spec for an AI to implement, or turn a feature request into screens. Also use before writing UI code for a feature that spans more than one screen.
14 other projects use a version of this.
Adopted by
Most recently taken up by
- instrument-org/skillstheir own version, first seen Oct 22, 2026
- Whatscheap/igly-canvas-plugintheir own version, first seen Oct 17, 2026
- stritar/skillstheir own version, first seen Sep 11, 2026
- Onevium/awesome-claude-skillstheir own version, first seen Sep 4, 2026
- Onevium/skillstheir own version, first seen Sep 4, 2026
- jpoindexter/wireframe-skillstheir own version, first seen Jul 26, 2026
Used with
Projects with it also use make-tweakable.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
bluzirSkillmake-tweakable
Add an in-artifact floating Tweaks panel that lets the user adjust colors, fonts, spacing, layout variants live in the preview. Persists via claude-pipe pattern (pending.yaml + apply-tweaks skill).
Also in 3 projects that use this
Other versions14 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 14
- bluzir/claude-code-design★ 102same name
- Magdoub/claude-wireframe-skill★ 71same name
- nbbaier/agent-skills★ 14same name
- viknesh20-20/claude-code-tool-kit★ 7same name
- digitaldreams/tuhin★ 3same name
- arkan/skills★ 1same name
- instrument-org/skills★ 1same name
- jpoindexter/wireframe-skills★ 1same name
- mkreindel/seo-toolkit-template★ 1same name
- Onevium/awesome-claude-skills★ 1same name
4 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- cold-emailSkill
- cro-auditSkill
- pitch-deckSkill
- seo-auditSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 7 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 11 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
screens.jsonis the source of truth: Write it before any HTML. Every HTML element that matters carries data-id equal to its node id in … - Distinctive: line 23
If they disagree, the JSON is right and the HTML is a bug.
- Very specific: line 24
Closed component vocabulary: Use only the primitives in references/component-vocabulary.md.
- Very specific: line 30
Four states per screen: default, empty, loading, error.
- Distinctive: line 41
Run these in order. Do not skip ahead to drawing — the expensive mistakes are all made in phase 1, and they are free to fix there.
- Distinctive: line 48
Existing codebase?: Read routes, models/schema, and any existing UI before asking the user anything.
- Distinctive: line 51
PRD or issue?: Read it and extract the same.
- Distinctive: line 52
Nothing but an idea?: Ask at most 5 questions, batched in one message: primary user and the one job they hire this app for.
- Very specific: line 57
Write brief.md. Keep it under a page.
- Very specific: line 79
Write screens.json per references/screens-schema.md.
- Very specific: line 101
Write spec.md per references/spec-format.md.
- Very specific: line 120
Write index.html (all screens on one scrollable board, grouped by flow) and BUILD.md — the instructions for the coding agent that picks …
- Very specific: line 123
read screens.json first, then spec.md.
- Distinctive: line 126
do not add screens, fields, or actions that are not in the contract.
- Distinctive: line 151
Never hand-edit an HTML file and leave the JSON behind — that is how the package starts lying, and a lying contract is worse than no …
“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Wireframe
Produce a wireframe package that a coding agent can implement without asking a single follow-up question.
The failure mode this skill exists to prevent: pretty mockups that look decided
but leave every real question open — what happens when the list is empty, where
does this button go, what is the validation message, what is this number called
in the database. A coding agent handed that will invent answers, and invent
different answers on every run. So the artifact of record here is not the
picture. It is screens.json, a contract. The HTML is a render of the contract
so a human can look at it and object.
Non-negotiables
screens.jsonis the source of truth. Write it before any HTML. Every HTML element that matters carriesdata-idequal to its node id in the JSON. If they disagree, the JSON is right and the HTML is a bug.- Closed component vocabulary. Use only the primitives in
references/component-vocabulary.md. Never invent one. Consistency across screens comes from the vocabulary being small, not from taste. - Greyscale. One accent color, used only on the single primary action per screen. A wireframe that looks like a visual design gets treated as one, and then nobody revisits the layout.
- Four states per screen. default, empty, loading, error. Each is either
rendered or explicitly marked
n/awith a one-line reason. No silent gaps. - Real copy, never lorem. Button labels, headings, validation messages, and empty-state text are product decisions. Decide them here.
- Consistent fixtures. The same fake people, orgs, and numbers appear on
every screen.
Dana Whitfieldon screen 3 is the sameDana Whitfieldon screen 7, with the same id. - Validate before handoff.
python3 scripts/validate.py <outdir>must exit 0.
Pipeline
Run these in order. Do not skip ahead to drawing — the expensive mistakes are all made in phase 1, and they are free to fix there.
Phase 0 — Brief
Establish, in this order of preference: read it, infer it, ask it.
- Existing codebase? Read routes, models/schema, and any existing UI before asking the user anything. Route files and DB schema give you the screen list and the data nouns for free.
- PRD or issue? Read it and extract the same.
- Nothing but an idea? Ask at most 5 questions, batched in one message: primary user and the one job they hire this app for; platform (responsive web / mobile / desktop); auth model (none / single user / teams+roles); the 3-6 core data nouns; anything explicitly out of scope for v1.
Write brief.md. Keep it under a page. Include a Non-goals section — it is
the highest-leverage section in the package, because it is the one that stops a
coding agent from building things nobody asked for.
Phase 1 — Inventory (stop and confirm here)
Write inventory.md:
- Entities — each data noun, its fields, and which screens touch it.
- Screens — a table of
id | route | purpose (one line) | entry points. Screen ids are kebab-case and stable forever; they are used as filenames, as JSON keys, and as action targets. - Flows — each primary flow as an ordered list of screen ids with the action that advances each step. Cover at minimum: first run, the core job, and the one destructive action (delete / cancel / leave).
Then stop and show the user the screen list and flows. Ask them to cut screens. Do not start rendering until they respond. A wrong screen list produces a whole package of consistent, well-validated, wrong wireframes.
Phase 2 — Contract
Write screens.json per references/screens-schema.md. For every screen:
regions, components drawn from the vocabulary, data bindings back to entity
fields, all four states, every action with a resolvable target, and acceptance
criteria written as observable assertions ("submitting with an empty title shows
the inline error Title is required and does not navigate").
This is the phase that takes the longest and the phase that pays. Fill it in completely — an unfilled field here becomes an invented decision downstream.
Phase 3 — Wireframes
Copy assets/wireframe.css into the output directory once. Render each screen
from the JSON into screens/<screen-id>.html using
assets/screen-template.html. Every component gets data-id. Every state that
is rendered gets its own file: screens/<screen-id>.empty.html, etc.
Render from the JSON mechanically. If you find yourself adding something to the HTML that is not in the JSON, that is a signal the JSON is incomplete — go back and add it there first.
Phase 4 — Spec
Write spec.md per references/spec-format.md. It is the human-readable
narrative over the same facts: flows, states matrix, copy deck, validation
rules, permissions, edge cases, open questions. It restates the JSON on purpose
— reviewers read prose, agents read JSON, and they must not drift.
Phase 5 — Validate
python3 scripts/validate.py design/wireframesIt checks that every HTML data-id exists in the JSON and vice versa, that
every action target resolves to a real screen, that every screen declares four
states, that every component is in the vocabulary, that no screen is orphaned
(unreachable from any flow), and that no lorem or TODO survived. Fix every
finding. Re-run until it exits 0, then paste the output for the user.
Phase 6 — Handoff
Write index.html (all screens on one scrollable board, grouped by flow) and
BUILD.md — the instructions for the coding agent that picks this up:
- read
screens.jsonfirst, thenspec.md; treat the HTML as reference only - build screens in flow order, not file order
- component ids map to component names in the target codebase
- do not add screens, fields, or actions that are not in the contract; if one seems necessary, stop and report it as a gap
Output layout
design/wireframes/
brief.md
inventory.md
screens.json <- the contract
spec.md
BUILD.md
index.html
wireframe.css
screens/
<screen-id>.html
<screen-id>.empty.html
<screen-id>.loading.html
<screen-id>.error.htmlRegenerating
Wireframes get revised more often than they get created. On a change request:
edit screens.json, re-render only the affected screens, re-run the validator.
Never hand-edit an HTML file and leave the JSON behind — that is how the package
starts lying, and a lying contract is worse than no contract.
References
references/component-vocabulary.md— the closed primitive set, with the markup for each. Read before phase 3.references/screens-schema.md—screens.jsonschema and a worked example. Read before phase 2.references/spec-format.md—spec.mdsection template. Read before phase 4.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

