Generates textual or ASCII wireframes for screens, layouts, and information architecture. Pixel-free; focused on structure, hierarchy, and component placement. Output is reviewable in a PR diff and translates directly to component code.
Installs into .claude/skills of the current project.
Are you the author of Wireframe?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/viknesh20-20-wireframe)
---
name: wireframe
description: "Generates textual or ASCII wireframes for screens, layouts, and information architecture. Pixel-free; focused on structure, hierarchy, and component placement. Output is reviewable in a PR diff and translates directly to component code."
argument-hint: "<screen or layout to wireframe>"
---
# /wireframe
Produce wireframes that engineers can build from and reviewers can give feedback on without opening Figma. Pixel-free, structure-first, optimized for clarity over fidelity.
## When to use
- Spec'ing a new screen before any visual design work.
- Documenting an existing screen's structure for the team.
- Comparing 2–3 layout options without committing to visual design.
- Onboarding a new dev/designer to the product's IA.
- Working on a project where Figma isn't part of the workflow.
## When NOT to use
- After visual design has shipped and you need pixel-accurate review (use Figma / screenshots).
- For animations / interactions — those need a different artifact.
- For brand work — that's color, type, voice, not structure.
## Operating method
### 1. Confirm what you're wireframing
- **Single screen or whole flow?** Multi-screen flows belong to `/design-flow`; this skill is per-screen.
- **What states?** Default, loading, empty, error — pick the relevant ones. Don't wireframe states that don't matter for this screen.
- **What's the responsive context?** Desktop / tablet / mobile / all three?
- **What's the device?** Web / native iOS / native Android / TV / wearable. Conventions differ.
### 2. Pick a notation
Three notations the toolkit supports. Pick what serves the screen.
#### A. ASCII boxes — best for layouts with clear regions
```
┌─ Header ────────────────────────────────────────────┐
│ Logo | Search | ⚙ 👤 Avatar │
└─────────────────────────────────────────────────────┘
┌─ Sidebar ─┐ ┌─ Main ──────────────────────────────┐
│ Inbox 3 │ │ ┌─ Today ──────────────────────┐ │
│ Sent │ │ │ • Sarah — Re: Q4 plan │ │
│ Drafts │ │ │ • System — Backup OK │ │
│ Starred │ │ │ • Marcus — New designs │ │
│ + New │ │ └───────────────────────────────┘ │
└───────────┘ │ │
│ ┌─ Yesterday ───────────────────┐ │
│ │ ... │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
```
#### B. Mermaid flowchart — best for navigation / decision flows
```mermaid
flowchart TD
Home[Home] -->|click "New"| Picker{Picker modal}
Picker -->|"Project"| ProjectForm[Project form]
Picker -->|"Doc"| DocEditor[Doc editor]
Picker -->|"Cancel"| Home
ProjectForm -->|"Save"| ProjectDetail[Project detail]
ProjectForm -->|"Cancel"| Home
```
#### C. Outline + bullet — best for content-heavy or simple screens
```
[Page] /settings/billing
[Section 1] Current plan
- Plan name (e.g., "Pro")
- Price + billing period
- Renewal date
- [Action] "Change plan"
- [Action] "Cancel subscription"
[Section 2] Payment method
- Card brand + last 4
- Expiration
- [Action] "Update payment method"
[Section 3] Billing history
- Table: date, amount, status, [link] download invoice
- Pagination if > 12 invoices
```
### 3. Annotate states
For each wireframed screen, list the states needed and what changes between them:
```
States:
Default — see above.
Loading — sidebar visible, main shows skeleton rows (3 sections × 5 rows of skeleton text).
Empty — sidebar visible, main shows centered illustration + "No messages yet" + "Connect inbox" CTA.
Error — banner above main: "Couldn't load messages — retry?" with retry button. Main dimmed.
Long list — virtualize after 50 rows; pinned date headers.
```
### 4. Annotate components
Mark each component box with:
- The component name (so engineering knows what's reusable).
- States it needs (`hover`, `pressed`, `disabled`, `focus`).
- Notable interactions (`onClick → opens modal X`).
### 5. Annotate responsiveness (when relevant)
For each breakpoint, note what changes:
```
Desktop (1024px+): sidebar 240px wide, main fluid.
Tablet (768–1023px): sidebar collapsible, hamburger toggle.
Mobile (< 768px): sidebar replaced by bottom nav (Inbox / Sent / + / Search / Profile).
```
### 6. Engineering handoff
End with:
- Routes the screen lives at.
- Components needed (new vs reused).
- Data the screen needs.
- Empty-state CTA destination.
- Loading strategy (skeleton vs spinner vs optimistic).
## Output format
```
# Wireframe: <screen>
## Purpose
<one sentence>
## Layout (default state)
[ASCII / Mermaid / outline]
## States
[per-state summary]
## Components
| Box | Component name | Reused? | Notes |
|---|---|---|---|
| Sidebar | <SideNav> | yes | new active state needed |
| Main list | <MessageList> | new | virtualizes after 50 |
## Responsive
[per-breakpoint changes]
## Microcopy
[key strings — defer the rest to /microcopy]
## Engineering handoff
- Route: <path>
- Data: <fetched from where>
- New components: <list>
- Reused components: <list>
- Empty-state CTA destination: <route>
```
## Boundaries
- **No pixel-accurate rendering.** That's Figma's job, or `impeccable` skill on rendered HTML.
- **No color or font choice.** That's the design system + `impeccable`.
- **No motion.** That's a separate artifact (storyboard, prototype).
- **Don't wireframe past clarity.** If the layout is decided, jump to code.
- **Don't wireframe what doesn't exist yet.** If the data model isn't decided, design that first; the screen will fall out.
- Always include states (loading, empty, error) when relevant. A wireframe without them is incomplete.