From wireframe-audit
Audit HTML wireframes against PRD and/or UX Design System documents. Three modes: PRD-only, UX-only, Full (PRD+UX). Generates structured JSON, markdown report, interactive dashboard, and screenshot gallery with component-level finding markers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/wireframe-audit:wireframe-auditThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit HTML wireframe implementations against their source documents (PRD, UX Design System, or both). This skill answers:
Audit HTML wireframe implementations against their source documents (PRD, UX Design System, or both). This skill answers:
| Use wireframe-audit when... | Use reconciliation-audit when... |
|---|---|
| You have HTML wireframes and want to verify they match PRD and/or UX specs | You have 2-3 documents (PRD, UX, Mock descriptions) and need alignment before building |
| You want Puppeteer-powered visual evidence (screenshots, computed styles, DOM inspection) | Mock is markdown descriptions or screenshots, not HTML |
| You want to see exactly which component on-screen has an issue | You want document-level reconciliation with Excalidraw diagrams |
| Focus: implementation correctness of built wireframes | Focus: document alignment before implementation |
The two skills are complementary: run reconciliation-audit first to align documents, then wireframe-audit after HTML wireframes are built.
| # | Input | Required | Description |
|---|---|---|---|
| 1 | Wireframe HTML file(s) | Yes | Path(s) to HTML wireframe file(s) or directory |
| 2 | PRD file | No | Markdown file with product requirements |
| 3 | UX Design System file | No | Markdown file with design tokens, components, layout, states |
| 4 | Previous audit folder | No | Path to previous docs/audit/wireframe/{name}/ folder for delta mode |
Rules:
| Mode | Documents | Comparison Directions |
|---|---|---|
| PRD-only | Wireframe + PRD | PRD <-> Wireframe |
| UX-only | Wireframe + UX | UX <-> Wireframe |
| Full | Wireframe + PRD + UX | PRD <-> Wireframe, UX <-> Wireframe, PRD <-> UX cross-check |
All written to docs/audit/wireframe/{analysis_name}/ where {analysis_name} is kebab-case [project-name]-[YYYY-MM-DD].
docs/audit/wireframe/{analysis_name}/
├── wireframe-data.json # Structured data (single source of truth)
├── analysis.md # Markdown report
├── wireframe-dashboard.html # Interactive dashboard (findings + coverage)
├── wireframe-screenshots.html # Screenshot gallery with overlay markers
├── screenshots/ # Puppeteer full-page captures
│ └── {page-name}.png
└── delta-summary.md # Only in delta mode
Same pattern as reconciliation-audit. All visual outputs load wireframe-data.json via fetch(). HTML files are static templates that never grow with finding count.
fetch('./wireframe-data.json').All findings use descriptive names as primary labels. No code abbreviations.
| Category | Color | Hex | Description |
|---|---|---|---|
| Contradiction | Red | #ef4444 | Wireframe contradicts what the PRD defines |
| PRD Gap | Blue | #3b82f6 | PRD defines something the wireframe does not implement |
| Design Decision | Green | #10b981 | Wireframe implements something not defined in PRD |
| Accessibility Gap | Yellow | #f59e0b | PRD mentions accessibility requirements the wireframe doesn't meet (conditional) |
| Category | Color | Hex | Description |
|---|---|---|---|
| Token Drift | Rose | #f43f5e | Design token value in wireframe does not match UX spec |
| Typography Mismatch | Sky | #0ea5e9 | Font family, size, weight, line-height deviates from UX type scale |
| Component Fidelity | Orange | #f97316 | Component markup, anatomy, hierarchy, or variant deviates from UX spec |
| Layout Deviation | Purple | #8b5cf6 | Grid, dimensions, padding, alignment does not match UX layout |
| State Gap | Amber | #f59e0b | Interactive state defined in UX but absent or wrong in wireframe |
| Responsive Mismatch | Teal | #14b8a6 | Breakpoint behavior defined in UX not reflected in wireframe |
| Wireframe Extra | Lime | #84cc16 | Element in wireframe that is not defined in the UX design system |
| UX Unimplemented | Indigo | #6366f1 | Element defined in UX that is not present in wireframe |
| Category | Color | Hex | Description |
|---|---|---|---|
| Cross-Source Conflict | Pink | #ec4899 | PRD and UX contradict each other regarding the wireframe |
| Category | Color | Hex | Description |
|---|---|---|---|
| Scope Creep | Slate | #64748b | Element beyond the scope of all provided documents |
| Placeholder | Gray | #9ca3af | Lorem ipsum, stock photos, hardcoded sample data |
| Cross-Page Inconsistency | Violet | #7c3aed | Same component renders differently across wireframe pages |
| Level | Meaning |
|---|---|
| Blocker | Objectively wrong — blocks development |
| Major | Significant rework needed |
| Minor | Cosmetic or low-impact |
IDs use descriptive kebab-case names, sequential per category:
contradiction-1, contradiction-2, prd-gap-1, token-drift-1, component-fidelity-3, etc.
No single-letter codes. The finding ID itself tells you the category.
npx puppeteer). If not installed, attempt npm install --save-dev puppeteer. If install fails, continue without screenshots — note limitation in report.screenshots/{page-name}.pngwireframe-data.json for delta mode (Phase 10).Parse source documents into structured inventories. Only extract what each document defines.
| Inventory | Description |
|---|---|
| Functional Requirements | ID, title, description, page/view, priority |
| Page/View Registry | Name, purpose, requirement list |
| Component Mentions | Component name, context, requirements |
| State Requirements | State name, component/page, requirement |
| Flow Definitions | Flow name, steps, requirements |
| Business Rules | Rule, applies to, requirement |
| Page Sections | Page, section, contents, requirements (conditional — only if PRD describes page structure) |
| Inventory | Description |
|---|---|
| Design Tokens | CSS variables, colors, spacing, shadows, radii |
| Typography | Font families, sizes, weights, line-heights per element |
| Component Registry | Name, variants, sub-components, props, type (primitive/composite/layout/custom) |
| Component States | Component, state, trigger, visual change, transition |
| Page/View Definitions | Pages with component placement |
| Layout Specs | Grid, dimensions, spacing, responsive breakpoints |
| Interaction Patterns | Transitions, animations, gestures, keyboard behavior |
| Responsive Behavior | Breakpoints, what changes at each |
Extract what the wireframe actually implements. Combines HTML source analysis with Puppeteer runtime extraction (when available).
| Inventory | Puppeteer-enhanced | Description |
|---|---|---|
| Component Census | Yes — DOM queries | Component types, counts, locations, variants, selectors |
| Color Palette | Yes — getComputedStyle | Only if PRD or UX define colors |
| Typography Map | Yes — computed font properties | Only if PRD or UX define typography |
| Layout Patterns | Yes — getBoundingClientRect() | Only if PRD or UX define layout |
| Interactive Elements | Yes — state detection | All interactive elements with states shown/missing |
| Media & Assets | No | Images, icons, SVGs with alt text status |
For each requirement and component from Phase 1, search the wireframe DOM:
[role="table"], [role="search"])<nav>, <table>, <dialog>)aria-label, data-testid, placeholder){ x, y, width, height })See puppeteer-detection.md for the script template.
For each functional requirement:
| Check | Finding if failed |
|---|---|
| Is the feature/page present in the wireframe? | PRD Gap |
| Are required components visually present? (uses Puppeteer detection data) | PRD Gap |
| Are required states shown? | PRD Gap |
| Does wireframe show behavior contradicting PRD? | Contradiction |
| Do data fields match PRD requirements? | Contradiction |
Page compliance: verify wireframe pages match PRD page descriptions. Component check: only if PRD specifies components. Accessibility: only if PRD mentions accessibility/WCAG requirements.
For each wireframe element with no matching requirement:
| Check | Finding if failed |
|---|---|
| Does this component map to a PRD requirement? | Design Decision |
| Does this page map to a PRD page/view? | Design Decision |
| Are there data fields shown with no PRD requirement? | Design Decision |
Token Drift:
For each design token: compare UX spec value against wireframe's computed value (Puppeteer getComputedStyle). Flag hardcoded values where CSS variable was specified.
Typography Mismatch:
Verify font-family, size, weight, line-height for each element-type mapping. Use Puppeteer for actual rendered font verification (document.fonts.check()).
Component Fidelity:
page.hover(), page.focus())Layout Deviation:
Compare dimensions, grid definitions, padding/margin, z-index. Use Puppeteer getBoundingClientRect() for actual measurements.
State Gap: Check hover/active/focus/disabled implementation, transition specs, cursor styles, focus rings. Use Puppeteer to trigger and measure states.
Responsive Mismatch:
If UX defines breakpoints: resize viewport with page.setViewport(), re-measure elements, compare against UX spec. Take screenshots at each breakpoint if needed.
| Check | Finding if generated |
|---|---|
| Colors, components, patterns not in UX spec | Wireframe Extra |
| Decorative elements, animations beyond UX scope | Wireframe Extra |
| Check | Finding if generated |
|---|---|
| UX component not found in wireframe DOM | UX Unimplemented |
| UX state defined but not implemented | UX Unimplemented |
| UX layout spec not reflected in wireframe | UX Unimplemented |
For each requirement/component that appears in both PRD and UX:
| Check | Finding if detected |
|---|---|
| PRD says X, UX says Y about the same feature | Cross-Source Conflict |
| PRD requires component variant UX doesn't define | Cross-Source Conflict |
| UX defines behavior PRD contradicts | Cross-Source Conflict |
Scope Creep: Wireframe elements beyond the scope of all provided documents.
Placeholder: Lorem ipsum, stock photos, hardcoded data, missing/broken images, example.com links.
Cross-Page Inconsistency: Compare same-type components across all wireframe pages. Use Puppeteer to extract computed styles of same selectors across pages and diff them.
Build requirement-level scorecard:
| Status | Meaning |
|---|---|
| Implemented | Wireframe accurately implements the requirement/spec |
| Partial | Wireframe shows requirement incompletely |
| Missing | Wireframe does not address this requirement/spec |
| Contradicted | Wireframe actively contradicts the requirement/spec |
Coverage formula: (Implemented + 0.5 x Partial) / Total x 100
Build traceability matrix:
Each cell includes status + linked finding IDs + reason text explaining the status.
Single source of truth for all visual outputs. See data-schema.md for complete schema.
Must include:
meta — mode, date, document names, file pathsscores — overall coverage, per-document coveragestats — finding counts by category (full names) and severityrequirements — all items from traceability matrix with status, reason, per-document statusfindings — all findings with category (full name), severity, description, quotes, linked screenshotsinventories — extracted inventories from each documentscreenshots — paths to Puppeteer captureselementDetection — Puppeteer element detection results with bounding boxesMarkdown report. All data comes from wireframe-data.json.
Sections:
Static HTML shell that loads wireframe-data.json via fetch().
CRITICAL: Must match the reconciliation-audit reconciliation-matrix.html look & feel. Same design system, same dark hero, same component patterns. The wireframe dashboard is visually a sibling of the reconciliation-audit dashboard — users should recognize them as part of the same tool family.
linear-gradient(135deg, #0f172a, #1e293b) with white text#eab308, UX = blue #3b82f6)--n-50 through --n-900, --c-ok, --c-warn, --c-err, --c-info, etc.)Static HTML shell that loads wireframe-data.json via fetch(). Screenshot gallery with findings highlighted directly ON the screenshot images.
CRITICAL: Must match reconciliation-audit visual style. Same dark hero header, same font, same color tokens. This page is the visual evidence companion to the dashboard.
+------------------------------------------------------------------+
| DARK HERO: Title, subtitle, legend (severity dots + labels) |
| Filter pills: [All] [Blocker] [Major] [Minor] [No findings] |
+------------------------------------------------------------------+
| PAGE TABS: [Login] [Directory] [Profile] [Projects] ... |
+------------------------------------------------------------------+
| |
| +------------------------------------------------------------+ |
| | | |
| | SCREENSHOT IMAGE (full page) | |
| | | |
| | +--------+ <-- SVG rect overlay (red border, | |
| | | C | semi-transparent fill, finding ID | |
| | | o | label at top-left corner) | |
| | | m | | |
| | | p | | |
| | +--------+ | |
| | | |
| | +----------+ <-- Green border = no findings | |
| | | | (implemented OK) | |
| | +----------+ | |
| | | |
| +------------------------------------------------------------+ |
| |
| SIDE PANEL (slides in on click): |
| - Component identity + selector |
| - PRD quote + UX quote |
| - Finding cards with severity badges |
+------------------------------------------------------------------+
| BOTTOM: "Not Found" panel — components in PRD/UX but missing |
+------------------------------------------------------------------+
The core of this page. Each wireframe page screenshot is displayed as an <img> inside a position: relative container. An absolutely-positioned <svg> of the same dimensions sits on top, containing:
For each detected element (from elementDetection.checklist):
Bounding box rectangle — <rect> positioned using boundingBox.x, y, width, height from the Puppeteer detection data
#ef4444 = blocker, orange #f97316 = major, gray #9ca3af = minor). Semi-transparent fill (rgba at 0.08 opacity). Border width: 2px.#22c55e at 0.4 opacity. No fill. Border width: 1px. Subtle confirmation.Finding ID label — Small <text> or <foreignObject> at top-left corner of bounding box. Shows finding ID (e.g., "contradiction-1") in a colored pill matching the category. Font: 10px bold, white text on colored background with rounded corners.
Multiple findings on same element — Stack labels vertically at the corner. Or show count badge: "3 findings" and expand on click.
Interaction:
Slides in from the right (400px width, dark theme #18181b matching reconciliation-audit annotation panels). Contains:
Component Identity
PRD Reference (if PRD mode or Full)
UX Reference (if UX mode or Full)
Findings (all findings linked to this element)
Below the screenshot, a collapsible panel listing components from PRD/UX that Puppeteer could NOT find in the wireframe DOM:
wireframe-data.json is valid JSON and parseableanalysis.md exists in wireframe-data.jsonstats in JSONSame pattern as reconciliation-audit. Activated when input #4 (previous audit folder) is provided.
Load wireframe-data.json from previous folder. Extract requirements, findings, scores.
User specifies what changed (requirement IDs, sections, or "all"). If not specified, ask once.
For requirements NOT in change set: copy directly from previous data. Mark "deltaStatus": "carried_forward". Do NOT re-read documents or re-analyze.
Run Phases 1-7 only for changed requirements. Mark new findings as "deltaStatus": "new" or "changed".
Combine carried-forward + new results. Recalculate scores and stats.
Score trends, new/resolved/changed findings, carry-forward counts.
Proceed to Phases 8-12 with merged data.
wireframe-data.json before any visual output. HTML templates load data at runtime via fetch().wireframe-data.json is the checkpoint. If context runs out, resume from JSON.npx claudepluginhub andershalo/halo-ai-dev-tools --plugin wireframe-auditAudits UI screenshots, Figma designs, or live sites for visual quality, design consistency, brand alignment, design system compliance, and issues like WCAG contrast failures pre-launch.
Use when asked to audit UI for visual quality, check design consistency, review brand alignment, evaluate design system compliance, or find visual issues before a launch. Examples: "audit our UI", "check visual consistency", "review the design for issues", "is our UI on-brand", "find visual bugs", "design QA before launch".
Conducts 7-phase frontend design review with WCAG 2.1 AA accessibility checks, responsive testing, visual polish for PR reviews, UI audits, layout issues.