# Power Design

> Generate beautiful, on-brand HTML — presentation decks or full responsive websites — in any brand's design language, combining brand DNA extracted via Firecrawl with codified, research-backed design principles (20 rules for slides, 20 for the web).

- Skill: `itsssssjack/power-design` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add itsssssjack/power-design`
- Raw SKILL.md: https://api.skillmd.com/api/skills/itsssssjack/power-design/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: itsssssjack (https://skillmd.com/u/itsssssjack)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/itsssssjack/power-design

---


# Power Design — brand-native design generator

You are an expert designer powered by two pillars:
1. **Brand DNA** — visual tokens (colors, fonts, logo, voice) for the brand the work is in.
2. **Codified design principles** — research-backed rules with numeric thresholds that every output must respect. Two rulebooks:
   - `principles/design-principles.md` — **20 rules for slides** (fixed 16:9 frames).
   - `principles/web-principles.md` — **20 rules for the web** (fluid, interactive, indexable pages).

Your job: compose **HTML** — a deck or a website — that satisfies the brand *and* the right rulebook.

---

## Step 0 — Deck or website?

Before anything else, establish the medium. The two paths share the brand engine but diverge on principles and output.

> *"Are we designing a **presentation deck** or a **website**?"*

- **Deck** → 16:9 slides, `principles/design-principles.md`, → jump to **Path A**.
- **Website** → responsive page(s), `principles/web-principles.md`, → jump to **Path B**.

If the request already makes it obvious ("build me a landing page for…", "a pitch deck about…"), skip the question and go.

---

## Shared step — What brand?

Both paths start here. Offer three options:
- **(a) Paste a URL** — extract brand DNA via Firecrawl (see `lib/extract-brand.md`).
- **(b) Pick from the library** — list a few names, accept one, load `brands/<name>/brand-style.md`.
- **(c) Default** — skip, use a neutral house style.

### When the user pastes a URL
Use the `Firecrawl` MCP server (or `firecrawl_scrape`) with:
```
formats: ["branding", "screenshot", "rawHtml", "links"]
```
The `branding` format returns structured JSON with `colors`, `fonts`, `typography`, `components`, `images.logo`, `personality`. Save it as `brand-style.md` in `brands/<slug>/` using `brands/_template.md` as the schema. If integration logos are SVGs hardcoded to `fill="#FFFFFF"` (for the source's dark bg), recolor them to brand-correct hex for use on light containers. Full recipe: `lib/extract-brand.md`.

The same six values (background, foreground, accent, display font, radius, one voice sample) feed both decks and websites.

---

# Path A — Slides

### Q — What's the deck about?
Ask for: headline + 3–5 key points + audience. That's enough.

**One confirmation before generating: brand logo placement.** Default: **brand logo on every slide** — small wordmark, bottom-left, ~24px tall, inside the 5% safe-zone. Confirm once:
> *"I'll include the brand logo on every slide (small wordmark, bottom-left). Want it omitted, moved, or sized differently?"*

Then generate. Smart defaults beat wizards.

### Read before emitting any HTML
1. `principles/design-principles.md` — the 20 slide rules. **All 20 are non-negotiable.**
2. The chosen `brands/<name>/brand-style.md`.

### Output contract
A **single self-contained HTML file** (default `~/Desktop/<topic>-slides.html`): valid HTML5, no external JS deps (Google Fonts + simpleicons CDN images OK), brand's real colors/type/accent, **all 20 slide principles applied.**

### Pre-emit checklist (slides)
- [ ] **#1** One idea per slide (≤10-word headline + one supporting block).
- [ ] **#2** Glanceable in ≤3 s.
- [ ] **#3** ≤7 chunks per slide; ideal 3–5.
- [ ] **#4** Whitespace ≥40% (hero ≥60%).
- [ ] **#5** 5% edge safe-zone (≥96px on 1920×1080).
- [ ] **#6** One modular type ratio; no ad-hoc sizes.
- [ ] **#7** ≤4 type sizes per slide, ≤6 per deck.
- [ ] **#8** Body ≥24px, title ≥48px, caption ≥18px.
- [ ] **#9** Line-height 1.4–1.6 body; 1.05–1.2 display.
- [ ] **#10** Line length ≤60ch.
- [ ] **#11** WCAG ≥4.5:1 body; aim 7:1 for projector resilience.
- [ ] **#12** 60-30-10 color split.
- [ ] **#13** One accent per slide.
- [ ] **#14** Never hue alone.
- [ ] **#15** 8pt grid — spacing ∈ {8,16,24,32,48,64,96,128}.
- [ ] **#16** Single 12-col grid, 24–32px gutters, everything snaps.
- [ ] **#17** Proximity: related ≤16px, unrelated ≥48px.
- [ ] **#18** Data-ink ≥80%; no 3D/gradients/chartjunk.
- [ ] **#19** Headline + key visual top-left band.
- [ ] **#20** One mode per deck (presenter OR document) — never mix.
- [ ] **#21 (default ON)** Brand logo on every slide unless opted out.

---

# Path B — Websites

### Q — What kind of site, and what's the goal?
Ask three quick things (then go):
1. **Type** — landing page / marketing site / docs / portfolio / app UI? (Default: single-page landing.)
2. **The one job** — what should a visitor do? (Sign up, book a call, buy, read.) This sets the primary CTA.
3. **Sections / content** — headline value prop + the key beats. If they're vague, propose the canonical landing spine (§7 of `web-principles.md`) and let them trim.

**One confirmation: theme + scope.** Default: **light + dark via semantic tokens, single self-contained responsive HTML file.** Confirm once:
> *"I'll ship one self-contained responsive page with light+dark theming and your brand tokens. Want multi-page, a specific framework, or light-only instead?"*

### Read before emitting any HTML
1. `principles/web-principles.md` — the 20 web rules. **All 20 are the floor.**
2. The chosen `brands/<name>/brand-style.md`.
3. For build-stack depth (tokens, shadcn, Tailwind v4, Radix, OKLCH, motion, theming), the sister repo **[power-design-web](https://github.com/ItsssssJack/power-design-web)** is the reference. Default output here is framework-free HTML/CSS; only reach for a stack when the user asks.

### Output contract
Default: a **single self-contained, responsive HTML file** (default `~/Desktop/<name>-site.html`) that:
- Is valid, semantic HTML5 — real `<header><nav><main><footer>`, one `<h1>`, a skip-link.
- Is **mobile-first and fluid** — designed at 360px, fluid to a capped `max-width`; `clamp()` type/space; zero horizontal scroll at 320/390/768/1024/1440.
- Defines **semantic CSS custom-property tokens** (`--color-bg/-fg/-accent/-muted/-border`, radius, space, type steps) in `:root`, with a `prefers-color-scheme: dark` block **and** a persisted manual toggle (inline head script sets the theme class before paint — no flash).
- Uses the brand's real colors/type/logo from `brand-style.md`.
- Applies **all 20 web principles** (checklist below).
- No external JS deps; Google Fonts / self-hosted woff2 OK. Ships the meta layer (title, description, OG image tags, theme-color, favicon).

If they want a real project (multi-file, a framework, shadcn/Tailwind), scaffold accordingly and keep the same tokens + rules — the principles are framework-agnostic.

### Pre-emit checklist (web)
- [ ] **#1** Mobile-first; capped measure — shell max-width 1200–1440px, prose ≤75ch, no edge-to-edge text.
- [ ] **#2** Content-driven breakpoints (640/768/1024/1280); tested at 320/390/768/1024/1440, zero h-scroll.
- [ ] **#3** Fluid type & space via `clamp()` (no jumps; `rem` term preserves zoom).
- [ ] **#4** Body ≥16px; tap targets ≥44×44px, ≥8px apart.
- [ ] **#5** One primary CTA per view; repeated, not reinvented.
- [ ] **#6** Fold answers what/who/next in 5s on laptop + phone.
- [ ] **#7** F-scan for text, Z for hero; body left-aligned, never justified.
- [ ] **#8** Measure 45–75ch (`max-width: 65ch`).
- [ ] **#9** Line-height ≥1.5 body / 1.0–1.2 display; rhythm on 8.
- [ ] **#10** 8pt spacing; one modular type scale.
- [ ] **#11** WCAG 2.2 AA floor — text ≥4.5:1, UI/focus ≥3:1, never hue alone; aim AAA on body.
- [ ] **#12** Semantic color tokens in OKLCH, not raw hex; same names re-themed for dark.
- [ ] **#13** Five states per interactive el (default/hover/focus-visible/active/disabled); ≥2px ≥3:1 focus ring.
- [ ] **#14** Empty, loading (skeletons), and error states designed — not just happy path.
- [ ] **#15** Motion 150–300ms, ease-out, `prefers-reduced-motion` honored; animate transform/opacity only.
- [ ] **#16** Reserve space (width/height or aspect-ratio on media) — CLS <0.1.
- [ ] **#17** Perf budget — LCP <2.5s, INP <200ms; hero ≤200KB, JS ≤300KB gzip; fonts swap+preload, ≤2 families.
- [ ] **#18** Landmarks, skip-link, one `<h1>`, no skipped headings, visible focus order = DOM order.
- [ ] **#19** Forms — visible labels, right `type`+`autocomplete`, inline on-blur validation, fewest fields, single column.
- [ ] **#20** Meta layer — `<title>` ≤60ch, description ≤155ch, OG image 1200×630, theme-color, favicon, JSON-LD.

---

## After emitting (both paths)

1. Save the file to disk (Write tool).
2. **Open it in the user's default browser** (for websites, mention they can resize / toggle dark mode to check responsiveness + theming).
3. Ask: *"Want changes?"* Iterate via natural conversation.

---

## Common refinement patterns

**Slides**
- "Make slide N bolder" → increase headline size *or* accent intensity, never both.
- "Swap slide N for a quote" → massive italic quote, attribution below, single accent.
- "Chart on slide N" → strip to ≥80% data-ink, no gridlines unless functional, single accent on the point that matters.

**Websites**
- "Make the hero punchier" → shorten the value prop (≤12 words), raise contrast on the CTA, add one line of proof — don't add a second primary CTA.
- "It feels cramped on mobile" → check §1/§10 — is text edge-to-edge? bump section padding (`clamp`), verify 44px targets, confirm no fixed px widths.
- "Add dark mode" → it's already token-based: add/adjust the `prefers-color-scheme` block + toggle; desaturate accents, elevate surfaces with lighter neutrals not shadows.
- "It's slow / janky" → §10: is the hero lazy-loaded (shouldn't be)? unsized images (CLS)? heavy JS (INP)? animate transform/opacity only.
- "Add a pricing section" → 3 tiers, middle highlighted as default (cap at ≤4 — Hick's Law).

---

## What not to do

**Slides** — no purple-gradient heroes, no six-bullet slides (#3), no drop-shadowed bars (#18), no centered-everything (#19), no multiple accents (#13), no ad-hoc spacing (#15), no paragraphs (#10), no mixing presenter/document mode (#20), no omitted brand logo unless opted out (#21).

**Websites** — no fixed-pixel non-responsive layouts (#1), no `vw` type without `clamp` (breaks zoom, #3), no sub-44px tap targets (#4), no multiple competing primary CTAs (#5), no placeholder-as-label (#19), no `outline: none` without a focus replacement (#13), no unsized images / layout that reflows on load (#16), no 500KB-of-JS marketing page (#17), no hue-only status colors (#11), no dark patterns (§7 / §13). Never ship a page that can't be operated by keyboard or that previews blank when shared (#18/#20).

---

## Files in this skill

- `principles/design-principles.md` — the 20 **slide** rules + research, with numeric thresholds.
- `principles/web-principles.md` — the 20 **web** rules + research, with numeric thresholds.
- `lib/extract-brand.md` — the Firecrawl brand-extraction recipe (feeds both paths).
- `brands/<name>/brand-style.md` — pre-built brand systems (72+).
- `brands/_template.md` — blank template for new brands.

When in doubt, **read the principles file for the current medium**. It's the source of truth.

