@staff0rd/assist 0.384.3 → 0.385.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/claude/commands/design.md +24 -0
- package/claude/skills/accessibility-audit.md +51 -0
- package/claude/skills/ai-slop-check.md +71 -0
- package/claude/skills/component-extract.md +52 -0
- package/claude/skills/design-system-extract.md +75 -0
- package/claude/skills/discovery-questions.md +60 -0
- package/claude/skills/frontend-aesthetic-direction.md +76 -0
- package/claude/skills/generate-variations.md +40 -0
- package/claude/skills/hierarchy-rhythm-review.md +50 -0
- package/claude/skills/interaction-states-pass.md +38 -0
- package/claude/skills/make-a-deck.md +43 -0
- package/claude/skills/make-a-prototype.md +56 -0
- package/claude/skills/make-tweakable.md +66 -0
- package/claude/skills/polish-pass.md +43 -0
- package/claude/skills/wireframe.md +48 -0
- package/claude/system-prompt.md +661 -0
- package/dist/commands/sessions/web/bundle.js +65 -65
- package/dist/index.js +466 -336
- package/package.json +1 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Make a Deck: Slide Presentation in HTML
|
|
2
|
+
|
|
3
|
+
Build a slide presentation as a single HTML file with fixed-size slides (typically 1920×1080, 16:9) that letterbox to any viewport. Use this when the user asks for a deck, presentation, slides, or pitch. Don't hand-roll the scaling — use the deck shell starter.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Discovery
|
|
6
|
+
|
|
7
|
+
Confirm before building: **audience** (determines tone and density); **format** (aspect ratio — 16:9 default — and slide count: a 10-minute deck is ~10 slides, a 30-minute one ~20–25); **tone** (formal corporate, casual internal, marketing-bold, technical); **source content** (read any PRD or existing material before sketching); **speaker notes** (off by default, only when explicitly requested); **brand / design system** (always confirm — if none, invoke `frontend-aesthetic-direction` before drawing).
|
|
8
|
+
|
|
9
|
+
If the user gave enough context (e.g., "make a 5-slide deck for engineering all-hands from this PRD"), skip the question round.
|
|
10
|
+
|
|
11
|
+
## Phase 2: Plan the layout system
|
|
12
|
+
|
|
13
|
+
Before building any slide, commit to a layout system and vocalize it in a comment block at the top of the file. A typical deck has 4–6 layout types: cover/title, section header (full-bleed color or image), content slide (headline + chart/image/list), quote/pull-out, comparison/two-column, closing/CTA. For each: background treatment, headline size and position, body content area, footer (page number, brand mark, none).
|
|
14
|
+
|
|
15
|
+
Limit the deck to **1–2 background colors**; section headers may break to a third, no more.
|
|
16
|
+
|
|
17
|
+
## Phase 3: Build the deck shell
|
|
18
|
+
|
|
19
|
+
Use the deck-shell starter (`copy_starter_component` with `kind: "deck_stage.js"`) — it handles scaling/letterboxing, keyboard and tap navigation, the slide counter, localStorage persistence, print-to-PDF, and `data-om-validate` tagging. Each slide is a direct child `<section>` of `<deck-stage>`.
|
|
20
|
+
|
|
21
|
+
Give each slide a `data-screen-label` so the user can reference it by name when commenting (`<section data-screen-label="01 Title">`). **Labels are 1-indexed** to match the slide counter the user sees.
|
|
22
|
+
|
|
23
|
+
## Phase 4: Build slide-by-slide
|
|
24
|
+
|
|
25
|
+
Build in order, and show the user the file after 1–2 slides — don't perfect 15 in private and then reveal. Per slide:
|
|
26
|
+
|
|
27
|
+
- **Type.** Body never under 24px on a 1920×1080 canvas, ideally 32px+; headlines 60–96px+.
|
|
28
|
+
- **Hierarchy.** One primary message per slide; supporting elements smaller and more muted.
|
|
29
|
+
- **Imagery.** From the design system, or honest placeholders (striped background, monospace label). No hand-drawn SVG filler.
|
|
30
|
+
- **No filler slides.** "Why choose us?" / "About this deck" cost the user attention — cut them.
|
|
31
|
+
- **Charts.** Show what matters; cut columns and data points that don't support the slide's point.
|
|
32
|
+
|
|
33
|
+
Use the design system's spacing and color tokens — no new values inline.
|
|
34
|
+
|
|
35
|
+
## Phase 5: Speaker notes (only if requested)
|
|
36
|
+
|
|
37
|
+
When asked: add a `<script type="application/json" id="speaker-notes">` array in the head, one entry per slide, written as full conversational scripts (not bullet outlines). Slides with notes can carry less on-screen text. The shell renders them automatically.
|
|
38
|
+
|
|
39
|
+
## Phase 6: Verify and deliver
|
|
40
|
+
|
|
41
|
+
Walk the deck top to bottom in the preview: scaling at multiple viewport sizes, counter increments correctly, keyboard nav (arrows, space) works, nothing overflows slide bounds, type meets the 24px+ minimum, contrast passes WCAG (invoke `accessibility-audit` for thoroughness).
|
|
42
|
+
|
|
43
|
+
For end-of-turn delivery, surface the final HTML file and call the verifier subagent for the thorough pass. Summarize briefly: caveats (e.g., placeholder imagery still needed), next steps (e.g., real charts to swap in), and decisions the user should sign off on.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Make a Prototype: Interactive Clickable Prototype
|
|
2
|
+
|
|
3
|
+
Build a working interactive prototype — clickable, navigable, with real state and feedback. Use this when the user asks for a prototype, mockup, demo, or "make it interactive." **Prototypes interact** — static screenshots strung together with `<a>` tags don't count; the point is to test the flow with real clicking, typing, validating, succeeding, failing.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Discovery
|
|
6
|
+
|
|
7
|
+
Confirm before building: **the flow** (screens, entry point, goal state — map it as a list); **fidelity** (hi-fi or mid-fi); **device frame** (desktop browser, iOS, Android, macOS window); **variations** (one flow or several to compare); **brand / design system** (always confirm — if none, invoke `frontend-aesthetic-direction` first); **sample data** (real-looking content, no Lorem ipsum).
|
|
8
|
+
|
|
9
|
+
## Phase 2: Map screens and state
|
|
10
|
+
|
|
11
|
+
Write the flow down before building, and drop it into the file as a comment block so the user can see the plan:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Screens:
|
|
15
|
+
1. Welcome — "Get started" CTA → 2
|
|
16
|
+
2. Email entry — validate format → 3 on valid, inline error on invalid
|
|
17
|
+
3. Profile — name, photo upload → 4
|
|
18
|
+
4. Success — "You're in" → 1 (loop demo)
|
|
19
|
+
|
|
20
|
+
State:
|
|
21
|
+
- currentScreen: 1
|
|
22
|
+
- email: ""
|
|
23
|
+
- emailError: null
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Phase 3: Build screen-by-screen
|
|
27
|
+
|
|
28
|
+
For each screen: mount it in the DOM (display toggling or React state within a single page); hi-fi visuals matching the design system — real components, not generic boxes; plausible real content (actual names, product copy, numbers); one primary CTA per screen, secondary actions smaller and de-emphasized.
|
|
29
|
+
|
|
30
|
+
Use the right device frame via `copy_starter_component`: `ios_frame.jsx`, `android_frame.jsx`, `macos_window.jsx`, or `browser_window.jsx`. The frame stays fixed; the prototype lives inside it.
|
|
31
|
+
|
|
32
|
+
## Phase 4: Wire up interactions
|
|
33
|
+
|
|
34
|
+
Every interaction wired, not just the happy path:
|
|
35
|
+
|
|
36
|
+
- **Navigation.** Primary CTAs advance, back moves backward, state persists across screens.
|
|
37
|
+
- **Form validation.** Empty submit → inline error; bad format → specific field-tied error; valid → proceed.
|
|
38
|
+
- **Loading states.** Async actions show a loading indicator and disable the button against double-submit. Fake the latency with `setTimeout` — don't skip the loading state because the work is fake; it's part of what's being tested.
|
|
39
|
+
- **Success and error feedback.** Toast, inline confirmation, or page transition; errors clear and tied to their field or action.
|
|
40
|
+
- **State changes.** Toggling, selecting, filtering all update the UI immediately.
|
|
41
|
+
|
|
42
|
+
## Phase 5: Sub-state and persistence
|
|
43
|
+
|
|
44
|
+
Make meaningful sub-state reactive: selection state, filter/sort state, modal/dropdown open-state (focus moves into the modal, Escape closes it), form values and errors.
|
|
45
|
+
|
|
46
|
+
Persist what matters across reload via `localStorage`: current screen, form drafts, tweak values (see `make-tweakable`). Refreshing mid-iteration is one of the most common user actions — state that doesn't survive makes the prototype feel broken.
|
|
47
|
+
|
|
48
|
+
## Phase 6: Verify
|
|
49
|
+
|
|
50
|
+
Walk the full flow in the preview: every CTA leads somewhere, every form validates, every error is clear and recoverable, every async action shows feedback, every state change is visible, keyboard navigation works (Tab through, Enter to submit, Escape to close), focus is visible. If you can't verify a behavior, say so in the summary rather than claiming success.
|
|
51
|
+
|
|
52
|
+
## Phase 7: Variations (if requested)
|
|
53
|
+
|
|
54
|
+
Expose variations as tweaks in a floating panel (`make-tweakable`), side-by-side on a canvas (`design_canvas.jsx` starter), or in-prototype toggles. **Don't scatter v1.html / v2.html / v3.html across the project — one file, many variants.**
|
|
55
|
+
|
|
56
|
+
Summarize briefly: what flows work, what's faked (e.g., "submit calls a setTimeout fake"), what's open for the user to decide.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Make Tweakable: Add In-Design Tweak Controls
|
|
2
|
+
|
|
3
|
+
Add a floating control panel to a finished design that lets the user adjust selected aspects live — colors, fonts, spacing, copy, layout variants, feature flags. Use this when the user wants to "play with options," "see different versions," or compare visual choices. **One file, many variants** — no v1.html / v2.html / v3.html scatter.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Identify what should be tweakable
|
|
6
|
+
|
|
7
|
+
Confirm with the user — or propose and check — which aspects to expose: color (primary, accent, background tone), typography (family, base size, scale ratio), density (tight / normal / loose), layout variant, component variants (filled/ghost buttons, card treatment), copy (headline, subhead, CTA text), feature flags (show/hide sections).
|
|
8
|
+
|
|
9
|
+
**Keep the tweak surface small** — 3–8 controls. A few meaningful axes to explore, not a Figma clone. If the user didn't ask for tweaks but the design has obvious axes of variation, add 1–2 by default to surface interesting possibilities.
|
|
10
|
+
|
|
11
|
+
## Phase 2: Design the tweak panel
|
|
12
|
+
|
|
13
|
+
The panel lives inside the prototype, floating (typically bottom-right), semi-transparent with a subtle border, titled **"Tweaks"** to match the toolbar toggle. Use the right control per value type: color picker for colors; dropdown or button group for fonts and variants; slider with sensible min/max for numbers; toggle for booleans; text input for copy. Keep controls compact — a narrow stacked column beats a sprawling panel.
|
|
14
|
+
|
|
15
|
+
## Phase 3: Wire up the live updates
|
|
16
|
+
|
|
17
|
+
Use CSS custom properties for visual tokens so everything referencing them updates:
|
|
18
|
+
|
|
19
|
+
```js
|
|
20
|
+
document.documentElement.style.setProperty("--tweak-primary", newColor);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For non-CSS values (copy, layout variants, feature flags), use JS state with re-render or DOM manipulation.
|
|
24
|
+
|
|
25
|
+
## Phase 4: Implement the host protocol
|
|
26
|
+
|
|
27
|
+
The host environment exposes a toolbar toggle for the tweak panel. **Order matters** — if you announce availability before the listener exists, the host's activate message lands on nothing and the toggle silently does nothing:
|
|
28
|
+
|
|
29
|
+
1. **Register a `message` listener on `window` first:**
|
|
30
|
+
- `{type: '__activate_edit_mode'}` → show the Tweaks panel
|
|
31
|
+
- `{type: '__deactivate_edit_mode'}` → hide it
|
|
32
|
+
2. **Then announce availability:**
|
|
33
|
+
```js
|
|
34
|
+
window.parent.postMessage({ type: "__edit_mode_available" }, "*");
|
|
35
|
+
```
|
|
36
|
+
3. **When a value changes, persist it** by posting back (partial updates are fine — only included keys are merged):
|
|
37
|
+
```js
|
|
38
|
+
window.parent.postMessage(
|
|
39
|
+
{ type: "__edit_mode_set_keys", edits: { primaryColor: "#FF6600" } },
|
|
40
|
+
"*",
|
|
41
|
+
);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Phase 5: Persist defaults on disk
|
|
45
|
+
|
|
46
|
+
Wrap tweakable defaults in comment markers so the host can rewrite them:
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/ {
|
|
50
|
+
primaryColor: "#D97757",
|
|
51
|
+
fontSize: 16,
|
|
52
|
+
dark: false,
|
|
53
|
+
}; /*EDITMODE-END*/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The block between markers **must be valid JSON** (double-quoted keys and strings), and there must be exactly one such block, inside an inline `<script>` in the root HTML file. The host merges edits into it and writes the file back, so changes survive reload.
|
|
57
|
+
|
|
58
|
+
## Phase 6: Hide the controls when off
|
|
59
|
+
|
|
60
|
+
With Tweaks toggled off, the panel is entirely hidden — not dimmed, not collapsed to a corner. This is non-negotiable: any visible edit-mode chrome makes the design look unfinished.
|
|
61
|
+
|
|
62
|
+
## Phase 7: Verify and summarize
|
|
63
|
+
|
|
64
|
+
In the preview: toggle the panel on/off via the toolbar; change each tweak and confirm it updates live; reload and confirm values persist; check the design reads as a finished artifact with the panel off.
|
|
65
|
+
|
|
66
|
+
Summarize: tweaks exposed and their value types, defaults, tweaks considered but excluded (and why), whether the set covers the user's exploration axes.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Polish Pass: End-of-Design Quality Gate
|
|
2
|
+
|
|
3
|
+
Run a comprehensive quality check before a design is shown to stakeholders or shipped. **A polished and an unpolished design are the same idea executed at different levels of care — and the gap is what people actually see.** This is the umbrella for the four narrower review skills; use it as the final gate before delivery.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Confirm scope
|
|
6
|
+
|
|
7
|
+
Polish the HTML file the user just finished or asked about; otherwise the project's main deliverable; if unclear, ask. Read it and note the medium (slide / page / mobile / dashboard), the deployment context (internal / customer-facing / marketing), and any stated constraints.
|
|
8
|
+
|
|
9
|
+
If the design is clearly mid-flight (broken layout, missing sections, placeholder content still being iterated), say so and ask whether to polish now or after the structure settles.
|
|
10
|
+
|
|
11
|
+
## Phase 2: Launch four review agents in parallel
|
|
12
|
+
|
|
13
|
+
Use the ${AGENT_TOOL_NAME} tool to launch all four agents concurrently in a single message. Each runs the equivalent of one standalone review skill, scoped to this file.
|
|
14
|
+
|
|
15
|
+
Instruct every agent explicitly: **report every issue found, including uncertain and low-severity ones, with a confidence and severity estimate for each.** Coverage is the agent's job; filtering and prioritization happen in Phase 3. An agent that self-censors "minor" findings silently lowers recall.
|
|
16
|
+
|
|
17
|
+
1. **Accessibility audit** (`accessibility-audit`): contrast and color (WCAG AA minimums, color-only signaling, pure white/black); semantic HTML and structure (headings, button vs div, labels, alt text, ARIA discipline); keyboard navigation and focus (reachability, tab order, visible focus); motion, forms, and hit-target size.
|
|
18
|
+
2. **AI slop check** (`ai-slop-check`): aggressive gradients; emoji decoration; default left-border cards; hand-drawn SVG; overused default fonts (Inter, Roboto, Arial, Fraunces, bare system stacks); the editorial-warm house style as a silent default (cream + serif display + terracotta, without a brand reason); pure white/black; invented colors; off-scale spacing.
|
|
19
|
+
3. **Hierarchy and rhythm review** (`hierarchy-rhythm-review`): primary/secondary/tertiary differentiation via size, color, weight, position, density, and the 5-second test; spacing and type scale discipline, repetition, strategic variation, palette discipline, section structure, alignment.
|
|
20
|
+
4. **Interaction states pass** (`interaction-states-pass`): per-element default/hover/active/disabled/focus/loading; transition timing (0.15–0.3s state changes, longer entry/exit); `prefers-reduced-motion`; action feedback and state visibility.
|
|
21
|
+
|
|
22
|
+
## Phase 3: Aggregate, deduplicate, prioritize
|
|
23
|
+
|
|
24
|
+
Wait for all four agents. Merge duplicate findings (e.g., "focus ring removed" from both accessibility and interaction-states). Group into:
|
|
25
|
+
|
|
26
|
+
1. **Blockers** — accessibility failures (contrast under WCAG, missing keyboard support, removed focus rings, missing labels). These break the design for real users; fix all.
|
|
27
|
+
2. **Quality issues** — AI slop tropes, broken hierarchy, missing interaction states. These cheapen the design; fix all.
|
|
28
|
+
3. **Polish recommendations** — subtler improvements (color tone shift, spacing-scale tightening). Apply when in scope; flag when out.
|
|
29
|
+
|
|
30
|
+
## Phase 4: Fix and re-verify
|
|
31
|
+
|
|
32
|
+
Fix every blocker and quality issue directly. For ambiguous fixes (e.g., the design uses Inter but no brand font is stated), pick a defensible default and note it so the user can override. Note and skip clear false positives (e.g., a third-party embed's contrast).
|
|
33
|
+
|
|
34
|
+
Then re-check the high-risk areas: did contrast fixes wash out a brand color? Do the new focus rings overlap neighboring content? Does the primary CTA now actually feel primary? Fix what looks off; flag what you're unsure about.
|
|
35
|
+
|
|
36
|
+
## Phase 5: Final summary
|
|
37
|
+
|
|
38
|
+
Report concisely — the user can ask for detail:
|
|
39
|
+
|
|
40
|
+
- **Verdict** — "Ready to ship" / "Ready after user reviews flagged decisions" / "Needs more iteration before polish makes sense"
|
|
41
|
+
- **Blockers fixed and polish applied** — counts by category
|
|
42
|
+
- **Open decisions** — judgment calls to sign off (font choice, color tone shift, emphasis level)
|
|
43
|
+
- **Out of scope** — noticed but untouched (copy edits, content additions, new features)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Wireframe: Explore Many Ideas Quickly
|
|
2
|
+
|
|
3
|
+
Produce low-fidelity wireframes or storyboards to explore a flow, layout, or idea before committing to hi-fi design. Use this when the user wants to "explore options," "sketch something out," or "see a few directions," or when the problem is open enough that hi-fi work would be wasted. **Wireframes are disposable** — their value is breadth of options, not the fidelity of any one.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Understand the goal
|
|
6
|
+
|
|
7
|
+
Confirm: **what's being explored** (a screen, a flow, a navigation pattern, an information hierarchy, an interaction model); **the user goal** on this screen or flow; **constraints** (mobile or desktop, existing context or greenfield, non-negotiable elements); **number of variations** (3 minimum, 5–6 ceiling per round); **axis of variation** (layout? density? step count? CTA placement?).
|
|
8
|
+
|
|
9
|
+
If the user just says "wireframe a sign-up flow," propose 2–3 axes (e.g., "single-page form vs multi-step wizard vs progressive disclosure") and ask which to explore.
|
|
10
|
+
|
|
11
|
+
## Phase 2: Establish wireframe conventions
|
|
12
|
+
|
|
13
|
+
Stick to the wireframe visual language so the user reads them as wireframes, not broken hi-fi:
|
|
14
|
+
|
|
15
|
+
- **Greyscale only** — black, white, 2–3 grays; no brand color
|
|
16
|
+
- **System sans-serif** — no type personality; the user shouldn't form font opinions yet
|
|
17
|
+
- **Boxes for content areas**, labeled ("headline", "image", "feature card")
|
|
18
|
+
- **Striped placeholders for imagery** with monospace labels (`product shot 1200×800`) — never real images; they pull focus
|
|
19
|
+
- **Ipsum or skeleton copy** — no final copy at this stage
|
|
20
|
+
- **Annotations welcome** — numbered callouts on key decisions
|
|
21
|
+
|
|
22
|
+
This is the one context where hand-drawn-feeling SVG (rectangles, lines, simple icons) is acceptable — everything is at the same low fidelity.
|
|
23
|
+
|
|
24
|
+
## Phase 3: Sketch variations
|
|
25
|
+
|
|
26
|
+
Produce **at least 3** variations differing on the established axis. Lay single-screen variations side-by-side with the `design_canvas.jsx` starter; build flow variations as small storyboards (3–5 screens each).
|
|
27
|
+
|
|
28
|
+
Vary across layout (centered / split-screen / grid), information density, flow structure (single page / multi-step / progressive disclosure), CTA placement, or navigation pattern. Order from most by-the-book to most novel — the user picks something interesting more readily when the safe option sits next to a riskier one.
|
|
29
|
+
|
|
30
|
+
Write down each variation's distinguishing structure before sketching it. Left unspecified, variations converge on near-identical layouts — make the differences deliberate, and make at least one genuinely off-distribution.
|
|
31
|
+
|
|
32
|
+
## Phase 4: Annotate
|
|
33
|
+
|
|
34
|
+
Add 2–4 annotation points per variation, placed next to it (not in a separate doc), so the user reads the variation and its rationale together:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
- Variation 1 (single-column wizard): simple, focused, but slow
|
|
38
|
+
- Variation 2 (single-page form): fastest path, heavy first impression
|
|
39
|
+
- Variation 3 (progressive disclosure): balances both, more JS state
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Phase 5: Capture decisions and hand off
|
|
43
|
+
|
|
44
|
+
After the user picks a direction, capture: the chosen variation (or hybrid), what attracted them to it, what they explicitly rejected, and any new constraints surfaced. This becomes the brief for the hi-fi follow-up.
|
|
45
|
+
|
|
46
|
+
Then suggest `make-a-prototype` (hi-fi interactive), `make-a-deck` (if the wireframe was for a presentation), or another low-fi round. Don't invest hi-fi polish in the wireframes themselves — they've served their purpose.
|
|
47
|
+
|
|
48
|
+
Summarize: variations produced, axis of variation, recommended next step, open questions surfaced.
|