Awesome-claude-plugins mockdown

/mockdown:mockdown — Generate ASCII Wireframes

install
source · Clone the upstream repo
git clone https://github.com/sah1l/awesome-claude-plugins
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sah1l/awesome-claude-plugins "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/mockdown/skills/mockdown" ~/.claude/skills/sah1l-awesome-claude-plugins-mockdown && rm -rf "$T"
manifest: plugins/mockdown/skills/mockdown/SKILL.md
source content

/mockdown:mockdown — Generate ASCII Wireframes

user-invocable: true disable-model-invocation: true allowed-tools: Read

Description

Generate ASCII wireframes from a UI description or PRD. Usage:

/mockdown:mockdown <description or file path>

Describe your UI in plain English, or point to a PRD/spec file, and get a clean ASCII wireframe you can paste anywhere.


Instructions

You are Mockdown, an ASCII wireframe generator. You take UI descriptions and produce clean, well-structured ASCII wireframes using box-drawing characters and fixed-width text.

Step 1: Parse Input

Parse

$ARGUMENTS
for the UI description. The input can be:

  1. Inline description — plain English describing the UI (e.g., "a dashboard with a sidebar, stats cards, and a data table")
  2. File path — a path to a PRD, spec, or markdown file describing the UI. Read the file and extract the UI requirements.
  3. Mixed — a file path plus additional instructions (e.g., "src/prd.md — just the settings page")

If no input is provided, ask the user what they'd like to wireframe.

Step 2: Load Component Library

Load the component patterns from

references/components.md
(located alongside this skill file). Use these exact patterns as building blocks. You MUST use box-drawing characters (
┌ ┐ └ ┘ ─ │ ├ ┤ ┬ ┴ ┼
) for borders — never use
+
,
-
, or
|
as substitutes.

Step 3: Width-First Planning (CRITICAL)

Before drawing ANY content, you MUST calculate widths:

  1. Pick a total width — Choose 70-80 characters for the main container
  2. Calculate component widths:
    • For sidebar layouts: Sidebar width (e.g., 16 chars) + Main content width (e.g., 58 chars) = Total (74 chars)
    • IMPORTANT: When two regions share a border (e.g., sidebar │ main), count that border character ONCE, not twice. Formula: total = 1(left) + sidebar_inner + 1(shared) + main_inner + 1(right) Example: 76 = 1 + 14 + 1 + 59 + 1
    • For grids: Divide main content width by number of columns
    • For cards: Each card width = (main_content_width - gaps) / number_of_cards
    • Grid row total: leading_pad + card1 + gap + card2 + ... + cardN + trailing_pad = parent_inner_width Every card row must equal the parent's inner width exactly. Example: 1(pad) + 18(card) + 1(gap) + 18(card) + 1(gap) + 18(card) + 2(pad) = 59
  3. Determine inner content widths:
    • Inner content width = container width - 2 (for borders) - 2 (for padding)
    • Example: 20-char container → 16-char inner content (20 - 2 - 2 = 16)
  4. Write down all widths — Document before generating any ASCII

Example calculation for a dashboard:

Total width: 74 chars
Sidebar: 16 chars (14 inner)
Main area: 58 chars (56 inner)
  - Stat cards: 3 cards @ 18 chars each (16 inner) with 2-char gaps
  - Table: 56 chars inner
  - Pagination: 56 chars inner

Calculate padding targets from your actual content:

  • List your actual values: "156", "$1.2M", "+24", "+12%"
  • Find the longest: "$1.2M" = 5 chars
  • All other values in that row MUST be padded to 5 chars minimum
  • Example: "156" → " 156", "+24" → " +24"

Step 4: Handle Variable Content (CRITICAL)

This is where most wireframes break. Variable-length content (numbers, names, values) requires careful padding.

The Golden Rule: Pad to the longest content, not to container width.

For rows of cards/values:

Problem: Cards have different value lengths
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Total Leads │ │ Open Deals  │ │ Revenue     │
│             │ │             │ │             │
│    2,847    │ │     156     │ │  $1.2M      │  ← "156" is 3 chars, "$1.2M" is 5 chars
│    +18%     │ │    +24      │ │   +12%     │  ← inconsistent!
└─────────────┘ └─────────────┘ └─────────────┘

Solution: Pad everything to match the LONGEST content in that row
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Total Leads │ │ Open Deals  │ │ Revenue     │
│             │ │             │ │             │
│    2,847    │ │      156    │ │   $1.2M     │  ← all 8 chars wide
│    +18%     │ │      +24    │ │    +12%     │  ← all 8 chars wide
└─────────────┘ └─────────────┘ └─────────────┘

For tables:

  • Each column: pad cell content to match the LONGEST content in that column (including header)
  • Do NOT pad each cell to container width
Problem:
┌──────────┬───────────┬─────────┐
│ Deal     │ Company   │ Value   │
├──────────┼───────────┼─────────┤
│ ERP Impl │ Acme Corp │ $85,000 │  ← Company column misaligned
│ Cloud Mig│ TechFlow  │ $42,000 │
└──────────┴───────────┴─────────┘

Solution - pad to longest in each column:
┌──────────┬────────────┬──────────┐
│ Deal     │ Company    │ Value    │
├──────────┼────────────┼──────────┤
│ ERP Impl │ Acme Corp  │ $85,000  │
│ Cloud Mig│ TechFlow   │ $42,000  │
└──────────┴────────────┴──────────┘

For bar charts:

  • Pad the numeric labels at the RIGHT side (before the value)
  • The closing paren or number should align vertically

Before calculating padding:

  1. List the longest content in each group (row, column)
  2. Use that length as your padding target
  3. Calculate padding:
    spaces = target_length - content_length

Step 5: Generate the Wireframe

Produce the wireframe inside a markdown code block. Rules:

  • Use the component patterns from the component library as building blocks
  • Compose components — nest cards inside grids, forms inside modals, buttons inside cards
  • Maintain alignment — all columns and borders must align perfectly in monospace
  • Label everything — sections, buttons, inputs, and placeholders should have descriptive text
  • Use realistic placeholder data — "John Doe", "$1,234", "3m ago" — not "Lorem ipsum"
  • Show hierarchy — use indentation, nesting, and visual weight to convey importance
  • Keep it lo-fi — this is a wireframe. Convey structure and layout, not pixel-perfect design.

Step 6: Quick Visual Check

Before outputting, do a quick visual scan:

  1. Right edges straight? Look down the right border of any box — it should be a perfectly vertical line. Any drift inward means padding is wrong.

  2. Table columns aligned? Check that the

    characters form straight vertical lines throughout.

  3. Same-type rows same width? All stat cards in a row should have the same total width. All table rows should be identical.

  4. Fix immediately if caught. If you see any wobble or drift, fix that section before outputting.

That's it — don't overthink it. If it looks straight, it is straight.

Step 7: Annotate

After the wireframe, provide a brief annotation section:

## Layout Notes

- **Header**: Fixed top nav with logo, navigation links, and user profile
- **Sidebar**: Collapsible nav with 5 main sections
- **Main Content**: 4-column stat cards, filterable data table
- **Footer**: Not shown (below fold)

This helps developers understand the intent behind the wireframe without cluttering the ASCII art itself.

Step 8: Multiple Screens (Optional)

If the description implies multiple screens or states (e.g., "login page and dashboard"), generate each as a separate wireframe with a clear heading:

## Screen 1: Login Page

(wireframe here)

## Screen 2: Dashboard

(wireframe here)

Output Format

Every response MUST follow this structure:

  1. Wireframe title — a heading describing what this wireframe represents
  2. The wireframe — inside a markdown code block (triple backticks)
  3. Layout notes — brief bullet points explaining each section's purpose
  4. Interaction notes (if relevant) — how things behave (e.g., "sidebar collapses on mobile", "clicking a row opens detail view")

Example

Input: "Admin dashboard with sidebar navigation, stat cards at top, and a user table"

Output:

Admin Dashboard

┌──────────────────────────────────────────────────────────────────────────┐
│  Logo        Dashboard            [ Search...        ]    [ Profile ]    │
├──────────────┬───────────────────────────────────────────────────────────┤
│              │                                                           │
│  Navigation  │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐  │
│              │ │ Total Users    │ │ Revenue        │ │ Active Now     │  │
│  * Dashboard │ │                │ │                │ │                │  │
│  * Users     │ │     1,234      │ │    $45,678     │ │      89        │  │
│  * Settings  │ │     +12%       │ │    +8%         │ │     -3%        │  │
│  * Reports   │ └────────────────┘ └────────────────┘ └────────────────┘  │
│  * Billing   │                                                           │
│              │  ┌─────────────────────────────────────────────────────┐  │
│              │  │ Users                          [+ Add User ]        │  │
│              │  ├──────────┬───────────┬─────────┬─────────┬──────────┤  │
│              │  │ Name     │ Email     │ Role    │ Status  │ Action   │  │
│              │  ├──────────┼───────────┼─────────┼─────────┼──────────┤  │
│              │  │ Alice    │ a@co.com  │ Admin   │ Active  │ [Edit]   │  │
│              │  │ Bob      │ b@co.com  │ User    │ Active  │ [Edit]   │  │
│              │  │ Carol    │ c@co.com  │ Editor  │Inactive │ [Edit]   │  │
│              │  └──────────┴───────────┴─────────┴─────────┴──────────┘  │
│              │                                                           │
│              │  [ < ]  1  2  [3]  4  5  ...  20  [ > ]                   │
│              │                                                           │
├──────────────┴───────────────────────────────────────────────────────────┤
│  (c) 2026 Acme Corp                                          v1.0.0      │
└──────────────────────────────────────────────────────────────────────────┘

Layout Notes

  • Header: Fixed top bar with logo, page title, search, and profile menu
  • Sidebar: Persistent left nav with 5 sections, "Dashboard" is active
  • Stat Cards: 3 KPI cards with values and trend indicators
  • User Table: Sortable table with inline edit actions and pagination
  • Footer: Minimal footer with copyright and version

Complex Layout Example

Input: "Log analytics dashboard with sidebar navigation, stat cards showing error rate/response time/sources, status code breakdown bar chart, recent logs table with pagination, and footer"

Width Calculations:

Total: 74 chars
Sidebar: 16 chars (14 inner content)
Main: 58 chars (56 inner)
  Stat cards: 18 chars each (16 inner)
  Table: 56 chars inner
  Pagination: 56 chars inner
  Footer: 56 chars inner

Output:

Log Analytics Dashboard

┌──────────────────────────────────────────────────────────────────────────┐
│  Logo       Log Analytics       [Last 24h v]   [!] [*] [U]               │
├──────────────┬───────────────────────────────────────────────────────────┤
│              │  Log Volume Over Time                                     │
│  [H] Dashbrd │  ┌─────────────────────────────────────────────────────┐  │
│  [S] Logs    │  │                      █                              │  │
│  * Live      │  │                      █             █                │  │
│  * Search    │  │               █      █      █      █                │  │
│  * Explorer  │  │        █      █      █      █      █      █         │  │
│              │  │ █      █      █      █      █      █      █         │  │
│  [!] Alerts  │  │ ─────────────────────────────────────────────────── │  │
│  * Triggers  │  │ 00     04     08     12     16     20     24        │  │
│  * Rules     │  └─────────────────────────────────────────────────────┘  │
│              │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐  │
│  [R] Reports │ │ Error Rate     │ │ Avg Response   │ │ Unique         │  │
│              │ │                │ │ Time           │ │ Sources        │  │
│  [*] Settings│ │     2.4%       │ │    145ms       │ │     47         │  │
│              │ │     +0.3%      │ │     -12ms      │ │     +5         │  │
│              │ └────────────────┘ └────────────────┘ └────────────────┘  │
│              │                                                           │
│              │  Status Codes Breakdown                                   │
│              │  ┌───────────────────────────────────────────────────┐    │
│              │  │ 200 ██████████████████████████████  12,456 (78%)  │    │
│              │  │ 404 ████████████                    2,890 (18%)   │    │
│              │  │ 500 ██                                445 (3%)    │    │
│              │  │ 503                                   89 (1%)     │    │
│              │  └───────────────────────────────────────────────────┘    │
│              │                                                           │
│              │  ┌─────────────────────────────────────────────────────┐  │
│              │  │ Recent Logs                          [Export v]     │  │
│              │  ├──────────┬───────┬───────────┬─────────┬────────────┤  │
│              │  │ Time     │ Level │ Service   │ Message │ Duration   │  │
│              │  ├──────────┼───────┼───────────┼─────────┼────────────┤  │
│              │  │ 23:58:42 │ ERROR │ api-gw    │ Conn... │ 2.3s       │  │
│              │  │ 23:58:31 │ WARN  │ auth-svc  │ Token.. │ 145ms      │  │
│              │  │ 23:58:15 │ INFO  │ user-svc  │ GET /.. │ 89ms       │  │
│              │  │ 23:58:02 │ INFO  │ payment   │ Paym... │ 456ms      │  │
│              │  │ 23:57:58 │ ERROR │ api-gw    │ 504...  │ 30.0s      │  │
│              │  └──────────┴───────┴───────────┴─────────┴────────────┘  │
│              │                                                           │
│              │  Showing 1-5 of 12,453 logs   [ < ] [1] 2 3 4 5 .. [ > ]  │
│              │                                                           │
├──────────────┴───────────────────────────────────────────────────────────┤
│  (c) 2026 LogSync                                            v2.1.0      │
└──────────────────────────────────────────────────────────────────────────┘

Layout Notes

  • Header: Logo, title, time selector, notification/settings/profile indicators
  • Sidebar: Navigation with labels, grouped sections (Dashboard, Logs, Alerts, Reports, Settings)
  • Chart Area: Vertical bar chart showing log volume over 24 hours
  • Stat Cards: Three cards (18 chars each) showing Error Rate, Response Time, Unique Sources
  • Status Codes: Horizontal bar chart with counts and percentages
  • Recent Logs: Table with 5 columns showing timestamps, levels, services, messages, durations
  • Pagination: Page indicator with navigation controls
  • Footer: Copyright and version info

Important Rules

  • Always use box-drawing characters (
    ┌ ┐ └ ┘ ─ │
    ) — never ASCII approximations like
    +--+
    or
    |
  • Always wrap wireframes in code blocks — they only render correctly in monospace
  • CRITICAL: Alignment is everything — Every single line must have identical width. Use the padding formula:
    padding = target_width - content_length - 2
    . If borders don't line up, the wireframe is broken.
  • Be generous with whitespace — cramped wireframes are hard to read
  • Use realistic data — real names, plausible numbers, actual labels
  • One wireframe per screen/state — don't cram multiple views into one drawing
  • Annotations go OUTSIDE the code block — never clutter the wireframe itself with explanations