frontend-mockup
Build interactive HTML mockups that match the project's actual theme for UX exploration and design review. Use when the user wants to visualize a UI concept, compare design options, or prototype a feature before implementing it in the real codebase.
What this skill does
# Frontend Mockup
Build self-contained HTML design review documents. One `.html` file, no dependencies, opens in a browser. The output is for **thinking through design** — comparing options, evaluating states, making decisions — before any real code is written.
## Before You Start
### Read the Real Theme
Extract actual CSS variables from the project's theme file (`globals.css`, `tailwind.config.*`, etc.). Map them into the mockup's `:root` block. Don't guess colors, don't use generic grays when the project has a real palette. Include brand/accent colors — even if used sparingly, they make the mockup feel like the real product.
### Understand the Context
Read 2-3 real components to absorb the project's visual personality — density, font scale, interaction patterns, border radius, depth strategy. The mockup should feel like it belongs to this project.
---
## Document Structure
The mockup is a scrollable design review document. It has its own chrome (navigation, section headers, callouts) that is visually distinct from the UI being mocked inside it.
### Sticky Navigation
A fixed nav bar at the top with anchor links to every section. Dark or inverted background to separate document chrome from content. Section names in the nav should describe the option or state, not just "Section 1."
```
[Option A: Slide Panel] [Option B: Drawer] [Option C: Inline] [Compare]
```
The reviewer can jump to any option in one click without scrolling. Highlight the current section on scroll via a small JS `IntersectionObserver` or scroll listener.
### Sections as Cards
Each section wraps in a rounded card on a tinted page background (`body` at off-white, sections at white). This creates natural separation without heavy dividers. Alternate section backgrounds between `#fff` and `#fafafa` for additional rhythm when sections are long.
### Three-Level Section Headers
Every section opens with:
1. **Tag** — Small-caps, 0.625rem, 600 weight, 0.08–0.1em letter spacing, colored by category (teal for recommended, amber for trade-off, red for problem). This is the chapter marker.
2. **Title** — 1.25rem, 600 weight, tight tracking. The actionable name.
3. **Description** — 0.8125rem, 400 weight, muted color, max-width ~42rem. One or two sentences stating what this section shows and the design tradeoff — not a feature explanation. Answer "why would I pick this?"
The prose appears above the mockup frame, so the reviewer is primed with intent before evaluating the visual.
---
## Mockup Frames
Each design option or state is rendered as a **full-fidelity app frame** — not a component in isolation. Include enough surrounding UI (navigation, header, content area) that the feature being designed is seen in context.
### App Shell Realism
- Render at realistic proportions inside a bordered, shadowed, rounded container
- Use real-looking content — plausible names, messages, timestamps. Never "Lorem ipsum" or "Item 1"
- Add macOS traffic-light dots (`.mock-titlebar`) on the frame to signal "this is an app window" — eliminates any "is this the mockup or the document?" confusion
### Show Every Meaningful State
Don't just show the happy path. Render:
- **Default/empty** — first-run, zero data, nothing configured yet (see below)
- **Loading** — skeletons or spinners where async data lands
- **Active** — the primary visible state
- **Edge cases** — urgency levels, error states, disabled items, overflow
- **Interaction states** — hover, selected, expanded (render these statically in parallel, not behind a click)
Label each state with a small-caps state label inside the mockup section ("State 1 — At Rest", "State 2 — Expanded"). The label answers "what triggered this view?" in one line.
### Default and Empty States
The default state is where users spend their first session and where the feature looks broken if you skip it. Always mock it. For every list, table, chart, panel, or container that holds data, show what renders when the data isn't there yet.
Cover these defaults as applicable:
- **First-run / zero-config** — the feature exists but the user hasn't set it up. Include a one-line explanation of what this feature does and a single primary CTA ("Connect a source", "Create your first workspace"). No pretend data, no ghost rows.
- **Empty after filter/search** — user actions produced no results. Echo the query ("No results for 'foo'") and offer a way out (clear filters, broaden search). Visually distinct from first-run empty — this is a dead end, not a starting line.
- **Loading / skeleton** — grey blocks at the exact shape of the real content. Same height, same column count, same rhythm. Never a centered spinner on an empty page unless the whole route is blocked.
- **Partial / degraded** — some data loaded, some failed. Show what you have, mark what you don't (inline "Unavailable" chip, not a full-page error).
- **Error** — request failed. Include the reason in plain language and a retry affordance. Not a stack trace, not a generic "Something went wrong."
- **Permission denied / locked** — the user can see the feature exists but can't use it. Show the locked state with the unlock path (upgrade, request access, log in).
- **End-of-list / all-done** — positive terminal state for inboxes, task lists, feeds ("You're caught up"). Cheerful but not noisy.
### Empty-State Anti-Patterns
- **Skipping the empty state entirely** — reviewers assume the feature ships broken on day one
- **Filler rows** — fake "Example item" placeholders that a user might mistake for real data or, worse, try to click
- **Giant illustrations with no next step** — a friendly mascot is not a substitute for a CTA
- **Same visual as error state** — empty ≠ broken; don't reuse a red/warning treatment for "no data yet"
- **Hiding the chrome** — the surrounding shell (header, nav, filters) should still render, so users understand where they are
### Disabled and Inactive States
Use `opacity: 0.45–0.5` as the single signal for paused/disabled items. Don't hide them — the reviewer needs to see how inactive items coexist with active ones. One CSS rule communicates the semantic without markup clutter.
---
## Comparison Patterns
### Option Columns
When comparing 2-4 options, place them in a horizontal grid at equal width. Hold content constant across options — same data, same names, same numbers — so the only variable is the design treatment. Comparison is spatially guaranteed, not left to chance.
Give each option a **color-coded tag** (blue for A, pink for B, green for C). The color becomes a mnemonic — reviewers can say "the blue one" without remembering names.
### Before/After
When showing a redesign, put the current state and the proposed state side-by-side in a two-column grid with a 1px border divider. The 1px divider is visually neutral — contrast comes from content, not chrome.
### Comparison Tables
For systematic evaluation, include a table at the end with rows for each criterion and columns for each option. Use semantic coloring: green text for strengths, red for weaknesses, muted for neutral. Keep cells to one phrase — the table is for scanning, not reading.
### Flow Diagrams
For multi-step journeys, use a horizontal row of numbered cards connected by arrows. Each card has: a numbered circle, a tag showing effort level, a title, and a 1-2 line description. The whole flow is glanceable in one row.
---
## Annotation Patterns
### Semantic Callout Boxes
Color-coded boxes with a small-caps label and body text:
- **Green/teal** — "Why this works" or "What already exists"
- **Red** — "Problem" or "Current failure"
- **Amber** — Trade-off or caveat
- **Blue** — Implementation notes or technical context
These let reviewers scan for problems vs. positives without reading every word.
### Inline Annotations
When annotating a specific part of a mockup, place prose flush to the right of the mock at a fixed width (~320px). The reviewer never has to switch between the UI and the rationale — they'rRelated in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.