wireframing
Scaffold a runnable Vue 3 + Vite + TypeScript wireframe app using the @for-the-people-initiative/wireframe-kit design system (hand-drawn Rough.js components, v1.0.1+). One file per screen, auto-discovered routes, screen-picker nav, per-platform device frame wrapping, click-through wiring via router.push. Catalogue + conventions embedded.
What this skill does
# Wireframing
You scaffold a runnable Vue 3 wireframe application that renders one screen per route using the **`@for-the-people-initiative/wireframe-kit`** design system (v1.0.1+). Output is mid-fi, monochrome, hand-drawn (Rough.js) — wireframes that look like sketches so reviewers comment on structure, flow, and transitions, not on colour and typography.
This skill is **scaffold + per-screen generation + click-through wiring**, not pixel-level visual design or interactive prototyping.
## Core rules
- **Device frame around every page** — every page wraps its content in `<PhoneFrame>`, `<TabletFrame>`, `<DesktopFrame>`, or `<DeviceFrame>` depending on `platform_target`. The frame is the root element of `<template>`.
- **Click-through by default** — every interactive element (CTA, tab, back button, row action, list action) is wired with `router.push(...)`. The set of transitions comes from a `flow_spec` input, or is elicited conversationally per screen.
- **No real images** — every `<Image>` from the kit renders a placeholder box from its `alt`, regardless of `src`. Do not try to use real URLs.
- **No real-looking copy** — use plain short generic copy by default (`Get started`, `Stay hydrated, daily`, `Sign in to continue`). No Lorem Ipsum. No fake names / emails / prices that read as real. State variants use a plain prefix without brackets (`State — just logged (undo toast)`). Only use bracketed intent copy (`[CTA: ...]`) when the user explicitly sets `placeholders: bracketed`.
- **Wireframe-kit components only** — all UI comes from the kit. Don't hand-roll buttons, cards, forms, or layout primitives that exist in the catalogue.
- **Floating elements have a solid background** — every `position: sticky | fixed | absolute` element has `background: var(--wf-surface)` explicitly. Never `inherit` or `transparent`.
- **One concern per screen** — if the user lists 5 screens, generate 5 page files. Don't fold them into tabs.
- **Filename = route** — `<PascalCase>.Page.vue` in `src/pages/`. Auto-discovered by router via `import.meta.glob`. No router edit needed.
- **Boilerplate is canonical** — copy from `${CLAUDE_PLUGIN_ROOT}/skills/wireframing/assets/boilerplate/` verbatim. Do not improvise the scaffold.
- **Kit `^1.0.1`** — earlier versions lack device frames and `--wf-surface`. Reject if pinned lower.
- **Subpath-ready build** — boilerplate ships with `base: './'` in `vite.config.ts` and `createWebHashHistory()` in `src/router/index.ts`. This makes the production build portable under any subpath (e.g. when embedded in a docs site) without server rewrites. **Do not remove either** unless the wireframe is guaranteed to only run on `localhost`.
## When to use
- Clickable, browser-renderable wireframes for stakeholder review
- Moving from concept / flow / journey output into mid-fi screen layouts
- Wireframes that downstream front-end engineering can read for layout intent + transitions
- Iterating layout + composition + flow before commitment to visual design
## When not to use
- Lower-fi exploratory storyboards / concept sketches → `concept-sketching`
- Step-level user flow (no screens) → `user-flow-diagramming`
- Site hierarchy / page typing → `site-mapping`
- Component state machines → `state-transition-mapping`
- Pixel-level visual design / colour / typography decisions → Visual / UI design (future)
- High-fidelity interactive prototypes → Prototyping skills (future)
- Production component code → `front-end-engineering`
## Phase 1 — Setup
Collect:
| Field | Required | Default |
|---|---|---|
| **App name** | Yes | — |
| **Screens to wireframe** (PascalCase names) | Yes | — |
| **Platform target** (`mobile` / `tablet` / `desktop` / `responsive`) | Yes | — (no default — always ask) |
| **Output directory** | No | `./wireframes/` |
| **Per-screen brief** | No | Elicit per screen |
| **Flow spec** (transitions: from → action → to; YAML/JSON or Mermaid) | No | Elicit conversationally if absent |
| **Placeholders** (`plain` / `bracketed`) | No | `plain` |
If any required field is missing, enter Interview mode and ask only for what's missing. **Never silently default `platform_target`** — the device frame depends on it.
If the output directory exists and is non-empty, ask before overwriting.
## Phase 2 — Scaffold the boilerplate
Copy every file from `${CLAUDE_PLUGIN_ROOT}/skills/wireframing/assets/boilerplate/` into the output directory verbatim. Use `cp -r` or equivalent.
The boilerplate's `package.json` declares `@for-the-people-initiative/wireframe-kit: ^1.0.1`. Do not downgrade — the device frames (`PhoneFrame`, `TabletFrame`, `DesktopFrame`, `DeviceFrame`), the `useDevice` composable, and the `--wf-surface` CSS var all require v1.0.1+.
The boilerplate `vite.config.ts` ships with `base: './'` (relative asset paths) and the router uses `createWebHashHistory()` (hash-based routes). Together these make the build work unchanged on `localhost`, under any subpath (`/solutions/<slug>/wireframe/`), and inside an `<iframe>` — no server rewrites required. Keep both.
The boilerplate gives you:
```
<output>/
├── package.json # vue, vue-router, wireframe-kit ^1.0.1, vite, typescript, vue-tsc
├── vite.config.ts # @vitejs/plugin-vue, port 5173
├── tsconfig.json # incl. paths override for kit type shims
├── tsconfig.node.json
├── index.html
├── .gitignore
├── README.md
└── src/
├── main.ts # imports kit CSS, fonts, wireframe SCSS, registers WireframePlugin
├── env.d.ts
├── App.vue # screen-picker nav + RouterView; device-toggle slot when platform=responsive
├── router/index.ts # auto-discovers src/pages/*.Page.vue via import.meta.glob
├── shims/ # tsconfig-paths targets for kit subpath types
└── pages/
├── Home.Page.vue # auto-generated index of all screens; also hosts Demo controls
└── Example.Page.vue # demo using Hero + Section + Card + Form + Button + InputText
```
**Do not modify** `main.ts`, `router/index.ts`, `App.vue`, `vite.config.ts`, `tsconfig*`, `index.html`, `shims/*`. They are scaffolding.
After copying:
- **Replace `Example.Page.vue`** with the user's first real screen (keep its filename pattern).
- If the user named no screen "Home", keep the boilerplate `Home.Page.vue` as the screen index (and extend it with Demo controls if needed — see Phase 3).
## Phase 3 — Per-screen generation
For each screen, produce one file at `src/pages/<PascalCaseName>.Page.vue`.
### File template (mobile example)
```vue
<script lang="ts">
export const meta = { title: 'Human-readable title' };
</script>
<script setup lang="ts">
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import PhoneFrame from '@for-the-people-initiative/wireframe-kit/components/PhoneFrame';
import Button from '@for-the-people-initiative/wireframe-kit/components/Button';
// ...one import per kit component used
const router = useRouter();
</script>
<template>
<PhoneFrame>
<!-- composition using kit components, plain placeholder copy -->
<Button label="Get started" @click="router.push('/next-screen')" />
</PhoneFrame>
</template>
<style scoped>
/* layout-only CSS — no colour, no typography overrides */
</style>
```
### Device frame per platform
| `platform_target` | Frame | Extra |
|---|---|---|
| `mobile` | `<PhoneFrame>` | — |
| `tablet` | `<TabletFrame>` | — |
| `desktop` | `<DesktopFrame>` | — |
| `responsive` | `<DeviceFrame>` | Import + register `useDevice()` from `@for-the-people-initiative/wireframe-kit/composables` in `App.vue`; the kit renders a device-toggle in the app shell that drives `<DeviceFrame>` and persists choice to `localStorage` |
All frames are imported as default exports from `@for-the-people-initiative/wireframe-kit/components/<Name>`. The frame is the **root element** of `<template>` — page content nests inside.
### Click-through wiring
Every CTA, tab item, back button, row action, or list iRelated 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.