Generate brand-aligned presentation slides using Claude with 20 codified design principles and 72+ pre-built brand systems
Scanned 9/8/2026
Install to Claude Code
npx -y skills add Aradotso/design-skills --skill power-design-slides --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Power Design Slides?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aradotso-power-design-slides)More formats (shields.io, HTML) on the badges page.
---
name: power-design-slides
description: Generate brand-aligned presentation slides using Claude with 20 codified design principles and 72+ pre-built brand systems
triggers:
- create a slide deck with power design
- make slides that look professional
- generate presentation using brand DNA
- build a deck with design principles
- create slides for my brand
- make a presentation that follows design rules
- generate branded slides in HTML
- use power design to create a deck
---
# Power Design Slides
> Skill by [ara.so](https://ara.so) — Design Skills collection
Power Design is a Claude Code skill that generates presentation slides combining **brand DNA** (extracted from URLs or 72+ pre-built brand systems) with **20 codified design principles** from Tufte, Reynolds, Duarte, Williams, Refactoring UI, and WCAG 2.2. Output is beautiful HTML decks that don't look AI-generated.
## What It Does
- Extracts brand identity (colors, typography, voice) from any URL via Firecrawl
- Applies 20 research-backed design rules to every slide
- Generates self-contained HTML presentation files
- Includes 72+ pre-built brand systems (Stripe, Apple, Linear, Spotify, Tesla, etc.)
- Enforces WCAG contrast ratios, modular scales, data-ink ratios, and F-pattern layouts
## Installation
```bash
# Clone into Claude skills directory
git clone https://github.com/ItsssssJack/power-design ~/.claude/skills/power-design
# Or manually:
cd ~/.claude/skills
git clone https://github.com/ItsssssJack/power-design power-design
```
Verify installation:
```bash
ls ~/.claude/skills/power-design/SKILL.md
```
## Project Structure
```
power-design/
├── SKILL.md # Skill runbook (this file)
├── principles/
│ ├── design-principles.md # All 20 rules with citations
│ └── images/ # Rule illustrations
├── brands/
│ ├── _template.md # Template for new brands
│ ├── anthropic-claude.md # Pre-built brand system
│ ├── stripe.md
│ └── ... (72+ brands)
└── examples/
└── sample-deck.html # Reference output
```
## Basic Usage
### 1. Generate a Deck with Pre-Built Brand
```
> use power-design — make me a deck for stripe.com about our new product launch
```
The skill will:
1. Load Stripe's brand DNA from `brands/stripe.md`
2. Ask for content brief (headline + 3-5 key points)
3. Generate `slides.html` applying brand × 20 rules
4. Open in browser
### 2. Extract Brand from URL
```
> use power-design — create slides using the brand from example.com
```
Requires Firecrawl API key:
```bash
export FIRECRAWL_API_KEY=your_key_here
```
The skill extracts:
- Primary/secondary/accent colors
- Typography (font families, weights, sizes)
- Voice/tone
- Component patterns
- Layout principles
### 3. Use Default Design System
```
> use power-design — make a deck about AI safety (no brand)
```
Falls back to a neutral, high-contrast design system.
## The 20 Design Rules
Every slide passes these checks:
| # | Rule | Threshold |
|---:|---|---|
| 1 | One idea per slide | 1 main message |
| 2 | Glanceable in ≤3 seconds | ≤50 words |
| 3 | 3–5 visual chunks | Max 7 |
| 4 | ≥40% whitespace ratio | Measured |
| 5 | 5% edge safe-zone | All sides |
| 6 | Modular scale 1.25–1.618 | Type sizes |
| 7 | Max 4 type sizes per slide | Counted |
| 8 | Body ≥24px, title ≥48px | Enforced |
| 9 | Line-height 1.4–1.6 body | CSS |
| 10 | Line length ≤60 chars | Measured |
| 11 | WCAG contrast ≥4.5:1 | 7:1 aim |
| 12 | 60-30-10 color split | Measured |
| 13 | One accent per slide | Max 1 |
| 14 | Never hue-only encoding | Patterns/icons |
| 15 | 8pt grid spacing | All margins |
| 16 | Single grid alignment | Consistent |
| 17 | Proximity ≤16px related | ≥48px unrelated |
| 18 | Data-ink ratio ≥80% | Charts only |
| 19 | F-pattern layout | Headline top-left |
| 20 | Pick one mode (minimal/rich) | Consistent |
Full documentation with sources: `principles/design-principles.md`
## Code Examples
### Create a Custom Brand System
Create `brands/my-company.md`:
```markdown
# My Company Brand System
**Source URL:** https://mycompany.com
**Last updated:** 2025-01-15
## Colors
### Primary
- **Brand Blue:** `#0066FF` (rgb(0, 102, 255))
- **Dark Navy:** `#001133` (rgb(0, 17, 51))
### Secondary
- **Warm Gray:** `#F5F5F0` (rgb(245, 245, 240))
- **Cool Gray:** `#E8EBF0` (rgb(232, 235, 240))
### Accent
- **Action Orange:** `#FF6B35` (rgb(255, 107, 53))
### Semantic
- **Success:** `#00CC66`
- **Warning:** `#FFAA00`
- **Error:** `#FF3333`
## Typography
### Font Families
- **Sans:** "Inter", system-ui, sans-serif
- **Mono:** "JetBrains Mono", monospace
### Scale (1.25 ratio)
- **Display:** 64px / 700
- **H1:** 48px / 700
- **H2:** 36px / 600
- **Body:** 24px / 400
- **Caption:** 18px / 400
### Line Heights
- Display/Headings: 1.1
- Body: 1.5
## Voice & Tone
- **Personality:** Technical but approachable
- **Formality:** Professional casual
- **Key phrases:** "Ship fast", "Build trust", "Stay nimble"
## Layout Principles
- 8pt grid system
- 5% minimum edge margins
- Max content width: 1200px
- Card-based components with subtle shadows
```
### Generate Slides Programmatically
If you want to script deck generation:
```python
# deck_generator.py
import subprocess
import os
def generate_deck(brand_name, content_brief, output_path="slides.html"):
"""
Generate a Power Design deck via Claude CLI
"""
prompt = f"""
use power-design
Brand: {brand_name}
Content:
{content_brief}
Generate slides.html and save to {output_path}
"""
result = subprocess.run(
["claude", "code", "--prompt", prompt],
capture_output=True,
text=True
)
if os.path.exists(output_path):
print(f"✓ Deck generated: {output_path}")
return True
else:
print(f"✗ Generation failed: {result.stderr}")
return False
# Usage
content = """
Headline: Introducing Data Pipeline v2
Points:
- 10x faster ingestion
- Real-time validation
- Zero-downtime migrations
- Built-in observability
"""
generate_deck("stripe", content, "pipeline-v2-deck.html")
```
### Extract Brand DNA via Firecrawl
```python
# brand_extractor.py
import os
import json
from firecrawl import FirecrawlApp
def extract_brand_dna(url):
"""
Extract brand identity from website using Firecrawl
"""
api_key = os.environ.get("FIRECRAWL_API_KEY")
if not api_key:
raise ValueError("FIRECRAWL_API_KEY not set")
app = FirecrawlApp(api_key=api_key)
# Scrape with structured extraction
result = app.scrape_url(url, params={
"formats": ["markdown", "html"],
"extract": {
"colors": "array of hex color codes used prominently",
"typography": "font families and key sizes",
"tone": "brand voice description"
}
})
return {
"url": url,
"colors": result.get("extract", {}).get("colors", []),
"typography": result.get("extract", {}).get("typography", ""),
"tone": result.get("extract", {}).get("tone", ""),
"raw_markdown": result.get("markdown", "")
}
# Usage
brand_data = extract_brand_dna("https://stripe.com")
print(json.dumps(brand_data, indent=2))
```
### HTML Deck Structure
Generated decks follow this pattern:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Deck Title</title>
<style>
/* Reset */
* { margin: 0; padding: 0; box-sizing: border-box; }
/* Base (follows Rule 15: 8pt grid) */
body {
font-family: 'Inter', system-ui, sans-serif;
font-size: 24px; /* Rule 8: body ≥24px */
line-height: 1.5; /* Rule 9: 1.4-1.6 */
background: #FFFFFF;
color: #1A1A1A; /* Rule 11: 7:1 contrast */
}
/* Slide container */
.slide {
width: 100vw;
height: 100vh;
padding: 5%; /* Rule 5: 5% safe-zone */
display: flex;
flex-direction: column;
justify-content: center;
scroll-snap-align: start;
}
/* Typography (Rule 6: modular scale 1.25) */
h1 {
font-size: 64px; /* 24 × 1.25³ */
font-weight: 700;
line-height: 1.1; /* Rule 9: display 1.05-1.2 */
margin-bottom: 48px; /* Rule 17: ≥48px unrelated */
}
h2 {
font-size: 48px; /* Rule 8: title ≥48px */
font-weight: 600;
margin-bottom: 32px;
}
/* Max line length (Rule 10: ≤60 chars) */
p, ul {
max-width: 40em; /* ~60 chars at 24px */
margin-bottom: 16px; /* Rule 17: ≤16px related */
}
/* Accent (Rule 13: one per slide) */
.accent {
color: #0066FF;
font-weight: 600;
}
/* Navigation */
.nav {
position: fixed;
bottom: 5%;
right: 5%;
font-size: 18px;
opacity: 0.5;
}
</style>
</head>
<body>
<!-- Slide 1: Title (Rule 1: one idea) -->
<section class="slide">
<h1>Introducing<br><span class="accent">Data Pipeline v2</span></h1>
<p style="font-size: 32px; opacity: 0.7;">Ship faster. Scale smarter.</p>
</section>
<!-- Slide 2: Key point (Rule 3: 3-5 chunks) -->
<section class="slide">
<h2>10× Faster Ingestion</h2>
<ul style="font-size: 28px; line-height: 1.6;">
<li>Parallel processing across 16 workers</li>
<li>Smart batching with adaptive backpressure</li>
<li>Zero data loss guarantees</li>
</ul>
</section>
<!-- More slides... -->
<div class="nav">Use ← → to navigate</div>
<script>
// Arrow key navigation
let currentSlide = 0;
const slides = document.querySelectorAll('.slide');
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowRight' && currentSlide < slides.length - 1) {
currentSlide++;
slides[currentSlide].scrollIntoView({ behavior: 'smooth' });
} else if (e.key === 'ArrowLeft' && currentSlide > 0) {
currentSlide--;
slides[currentSlide].scrollIntoView({ behavior: 'smooth' });
}
});
</script>
</body>
</html>
```
## Common Patterns
### Refining Generated Decks
After initial generation, refine via natural language:
```
> make the title slide more dramatic
> add a chart showing adoption growth
> use more whitespace on slide 3
> change accent color to match our new brand
> add a closing slide with call-to-action
```
The skill maintains context and applies all 20 rules to changes.
### Data Visualization Slides
When generating charts:
```
> add a slide with a bar chart showing revenue by quarter
```
The skill will:
- Apply Rule 18 (data-ink ratio ≥80%): remove gridlines, borders, fills
- Use brand accent color for key data point
- Add direct labels (no legend)
- Ensure WCAG contrast on labels
### Multi-Section Decks
For longer presentations:
```
> create a 15-slide deck with 3 sections: Problem, Solution, Results
```
The skill adds section dividers with distinct visual treatment while maintaining consistency.
### Dark Mode Decks
```
> generate the deck in dark mode
```
Applies Rule 20 (two valid modes) by:
- Inverting background/foreground
- Maintaining 7:1+ contrast
- Adjusting accent colors for dark backgrounds
## Configuration
### Environment Variables
```bash
# Required for URL-based brand extraction
export FIRECRAWL_API_KEY=your_firecrawl_api_key
# Optional: default brand when none specified
export POWER_DESIGN_DEFAULT_BRAND=stripe
# Optional: output directory
export POWER_DESIGN_OUTPUT_DIR=~/presentations
```
### Custom Brand Library Location
```bash
# Use a custom brand directory
export POWER_DESIGN_BRANDS_DIR=~/my-brands
```
Then structure as:
```
~/my-brands/
├── company-a.md
├── company-b.md
└── _template.md
```
## Troubleshooting
### "Brand not found in library"
**Problem:** Requested brand doesn't exist in `brands/` directory
**Solution:**
1. Check spelling: `ls ~/.claude/skills/power-design/brands/ | grep -i "brandname"`
2. Use URL extraction instead: `use brand from https://example.com`
3. Create custom brand using `brands/_template.md`
### Low Contrast Warnings
**Problem:** Generated slides fail WCAG contrast checks
**Solution:**
The skill auto-corrects to 4.5:1 minimum. If you see warnings:
```
> increase contrast between text and background
> use darker text color
```
Or manually edit the generated HTML `<style>` section.
### Firecrawl Extraction Fails
**Problem:** Brand DNA extraction times out or returns empty
**Solution:**
1. Verify API key: `echo $FIRECRAWL_API_KEY`
2. Check URL is publicly accessible
3. Try alternative pages: `/about`, `/brand`, `/press`
4. Fall back to manual brand creation
### Slides Too Text-Heavy
**Problem:** Generated slides violate Rule 2 (glanceable in ≤3 seconds)
**Solution:**
```
> split slide 4 into two slides
> use bullet points instead of paragraphs
> add an icon to represent this concept visually
```
The skill will redistribute content across more slides.
### Typography Not Loading
**Problem:** Custom fonts in brand system don't render
**Solution:**
Ensure brand `.md` file includes web-safe fallbacks:
```markdown
**Sans:** "CustomFont", "Inter", system-ui, sans-serif
```
Or add `@import` in generated HTML:
```html
<style>
@import url('https://fonts.googleapis.com/css2?family=CustomFont:wght@400;600;700&display=swap');
/* ... rest of styles ... */
</style>
```
### Chart Data-Ink Issues
**Problem:** Generated charts have too much decoration
**Solution:**
```
> remove the chart gridlines
> use direct labels instead of a legend
> make the bars thinner with more space between
```
Or manually edit SVG/canvas code following Tufte's guidelines in `principles/design-principles.md` Rule 18.
## Advanced Usage
### Batch Generation
```bash
# Generate multiple decks from a list
for brand in stripe linear vercel; do
claude code --prompt "use power-design; create a product launch deck for ${brand}; content: New AI features - 3x faster, smarter autocomplete, team collaboration; save as ${brand}-launch.html"
done
```
### CI/CD Integration
```yaml
# .github/workflows/generate-decks.yml
name: Generate Presentation Decks
on:
push:
paths:
- 'presentations/*.txt'
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Power Design
run: |
git clone https://github.com/ItsssssJack/power-design ~/.claude/skills/power-design
- name: Generate Decks
env:
FIRECRAWL_API_KEY: ${{ secrets.FIRECRAWL_API_KEY }}
run: |
for brief in presentations/*.txt; do
claude code --prompt "use power-design; brand: our-company; content from ${brief}; output: ${brief%.txt}.html"
done
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./presentations
```
### API Integration (Python)
```python
# power_design_api.py
import subprocess
import tempfile
import os
class PowerDesignAPI:
def __init__(self, brands_dir=None):
self.brands_dir = brands_dir or os.path.expanduser(
"~/.claude/skills/power-design/brands"
)
def list_brands(self):
"""Return list of available pre-built brands"""
brands = []
for f in os.listdir(self.brands_dir):
if f.endswith('.md') and f != '_template.md':
brands.append(f.replace('.md', ''))
return sorted(brands)
def generate(self, brand, content, output_path=None):
"""
Generate deck with Power Design
Args:
brand: Brand name from library or URL
content: Dict with 'headline' and 'points' list
output_path: Where to save HTML (temp file if None)
Returns:
Path to generated HTML file
"""
if output_path is None:
fd, output_path = tempfile.mkstemp(suffix='.html')
os.close(fd)
headline = content.get('headline', 'Untitled')
points = content.get('points', [])
points_text = '\n'.join(f"- {p}" for p in points)
prompt = f"""
use power-design
Brand: {brand}
Headline: {headline}
Key points:
{points_text}
Generate slides and save to: {output_path}
"""
result = subprocess.run(
["claude", "code", "--prompt", prompt],
capture_output=True,
text=True,
timeout=120
)
if os.path.exists(output_path):
return output_path
else:
raise RuntimeError(f"Generation failed: {result.stderr}")
# Usage
api = PowerDesignAPI()
print("Available brands:", api.list_brands()[:5])
deck_path = api.generate(
brand="stripe",
content={
"headline": "Introducing Stripe Tax",
"points": [
"Automate sales tax calculation",
"150+ jurisdictions supported",
"Real-time rate updates",
"One-click integration"
]
}
)
print(f"Deck generated: {deck_path}")
```
## Resources
- **Full principles with citations:** `principles/design-principles.md`
- **Brand library:** `brands/` (72+ pre-built systems)
- **Example deck:** `examples/sample-deck.html`
- **Community:** https://bit.ly/3PATPoL
- **Showcase site:** https://power-design.vercel.app
## Key Takeaways for Agents
1. **Always apply all 20 rules** — they're non-negotiable and research-backed
2. **Brand DNA comes first** — extract or load before generating content
3. **One idea per slide** — split complex topics across multiple slides
4. **Contrast is critical** — aim for WCAG AAA (7:1), minimum AA (4.5:1)
5. **Whitespace is content** — 40%+ ratio makes slides glanceable
6. **Grid everything** — 8pt spacing, single alignment system
7. **Modular type scale** — use 1.25–1.618 ratio, max 4 sizes per slide
8. **Data-ink ratio for charts** — remove all non-essential decoration
9. **F-pattern layout** — headline and key visual top-left
10. **Consistent mode** — pick minimal or rich, stay there
When in doubt, refer to `principles/design-principles.md` for specific thresholds and research citations.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!