@opendirectory.dev/skills 0.1.53 → 0.1.55
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/package.json +1 -1
- package/registry.json +10 -0
- package/skills/brand-alchemy/README.md +1 -1
- package/skills/graphic-slide-deck/README.md +129 -0
- package/skills/graphic-slide-deck/SKILL.md +364 -0
- package/skills/graphic-slide-deck/evals/evals.json +35 -0
- package/skills/graphic-slide-deck/references/animation-guide.md +100 -0
- package/skills/graphic-slide-deck/references/design-system.md +165 -0
- package/skills/graphic-slide-deck/references/layout-library.md +446 -0
- package/skills/graphic-slide-deck/references/style-presets.md +314 -0
package/package.json
CHANGED
package/registry.json
CHANGED
|
@@ -117,6 +117,16 @@
|
|
|
117
117
|
"version": "2.0",
|
|
118
118
|
"path": "skills/google-trends-api-skills"
|
|
119
119
|
},
|
|
120
|
+
{
|
|
121
|
+
"name": "graphic-slide-deck",
|
|
122
|
+
"description": "Generates a professionally designed HTML slide deck from a brief or content.",
|
|
123
|
+
"tags": [
|
|
124
|
+
"Copywriting"
|
|
125
|
+
],
|
|
126
|
+
"author": "OpenDirectory",
|
|
127
|
+
"version": "1.0.0",
|
|
128
|
+
"path": "skills/graphic-slide-deck"
|
|
129
|
+
},
|
|
120
130
|
{
|
|
121
131
|
"name": "hackernews-intel",
|
|
122
132
|
"description": "Monitors Hacker News for user-configured keywords, deduplicates against a local SQLite cache, and sends Slack alerts for new matching posts.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Brand Alchemy
|
|
2
2
|
|
|
3
|
-
<img src="https://
|
|
3
|
+
<img width="1920" height="1072" alt="brand-alchemy-skill-cover-image" src="https://github.com/user-attachments/assets/15d90c97-9eef-4eed-abb3-7ce58438adf0" />
|
|
4
4
|
|
|
5
5
|
World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.
|
|
6
6
|
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# graphic-slide-deck
|
|
2
|
+
|
|
3
|
+
Generate a professionally designed HTML slide deck from a brief, content notes, or an existing PowerPoint. Outputs a browser-ready presentation + optional PDF. Supports 13 named layout types and 8 business style presets.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx "@opendirectory.dev/skills" install graphic-slide-deck --target claude
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### Video Tutorial
|
|
12
|
+
Watch this quick video to see how it's done:
|
|
13
|
+
|
|
14
|
+
https://github.com/user-attachments/assets/ee98a1b5-ebc4-452f-bbfb-c434f2935067
|
|
15
|
+
|
|
16
|
+
### Step 1: Download the skill from GitHub
|
|
17
|
+
1. Copy the URL of this specific skill folder from your browser's address bar.
|
|
18
|
+
2. Go to [download-directory.github.io](https://download-directory.github.io/).
|
|
19
|
+
3. Paste the URL and click **Enter** to download.
|
|
20
|
+
|
|
21
|
+
### Step 2: Install the Skill in Claude
|
|
22
|
+
1. Open your **Claude desktop app**.
|
|
23
|
+
2. Go to the sidebar on the left side and click on the **Customize** section.
|
|
24
|
+
3. Click on the **Skills** tab, then click on the **+** (plus) icon button to create a new skill.
|
|
25
|
+
4. Choose the option to **Upload a skill**, and drag and drop the `.zip` file (or you can extract it and drop the folder, both work).
|
|
26
|
+
|
|
27
|
+
> **Note:** Make sure you upload the folder that contains the `SKILL.md` file directly.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## What it does
|
|
32
|
+
|
|
33
|
+
- Asks the questions that determine how a deck should be structured
|
|
34
|
+
- Plans the slide sequence with named layout types for each slide
|
|
35
|
+
- Generates a single self-contained HTML file -- opens in any browser, no build tools
|
|
36
|
+
- Splits into per-slide HTML files for individual sharing or editing
|
|
37
|
+
- Exports a PDF via Playwright (renders animations to final state)
|
|
38
|
+
- Optionally deploys to a live URL via Vercel for phone/tablet sharing
|
|
39
|
+
- Converts existing PowerPoint files to HTML
|
|
40
|
+
|
|
41
|
+
## Example
|
|
42
|
+
|
|
43
|
+
> "Create a 12-slide Series A investor deck for DataPulse. Audience: Series A VCs. Style: midnight-editorial."
|
|
44
|
+
|
|
45
|
+
Output: 12-slide HTML presentation, per-slide HTML files, and a PDF -- covering problem/solution/traction/team/market/ask.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Supported Styles
|
|
50
|
+
|
|
51
|
+
| Style | Best for |
|
|
52
|
+
|---|---|
|
|
53
|
+
| midnight-editorial | Investor decks, premium B2B, thought leadership |
|
|
54
|
+
| matt-gray | Internal decks, operational reviews, mixed audiences |
|
|
55
|
+
| clean-slate | Sales decks, customer-facing, enterprise-safe |
|
|
56
|
+
| brutalist | Startup pitches, design-forward, tech conferences |
|
|
57
|
+
| mint-pixel-corporate | SaaS sales, product demos, growth-stage pitches |
|
|
58
|
+
| product-minimal | Product demos, feature showcases, design audiences |
|
|
59
|
+
| magazine-red | Marketing reports, campaign reviews, bold internal |
|
|
60
|
+
| soft-cloud | Onboarding, customer education, approachable SaaS |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Supported Layouts
|
|
65
|
+
|
|
66
|
+
| Layout | Use case |
|
|
67
|
+
|---|---|
|
|
68
|
+
| title-hero | Opening slide -- large headline + subtext |
|
|
69
|
+
| section-divider | Section break -- bold label, minimal design |
|
|
70
|
+
| text-full | Headers + bullet points or paragraphs |
|
|
71
|
+
| text-left-image-right | Side-by-side: text column + visual |
|
|
72
|
+
| image-left-text-right | Side-by-side: image first, text second |
|
|
73
|
+
| two-column-text | Comparisons, pros/cons, before/after |
|
|
74
|
+
| image-full | Full-bleed image with optional caption overlay |
|
|
75
|
+
| image-grid | 2x2 or 3x2 grid of images or screenshots |
|
|
76
|
+
| stat-highlight | 2-4 large KPI metrics (the unmissable slide) |
|
|
77
|
+
| quote-callout | Pull quote with attribution |
|
|
78
|
+
| comparison-table | Feature or option comparison grid |
|
|
79
|
+
| timeline | Horizontal or vertical milestones |
|
|
80
|
+
| closing-cta | Final slide -- CTA, contact info, next steps |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Output
|
|
85
|
+
|
|
86
|
+
| File | What it is |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `deck/[name]-slides/index.html` | Full presentation, browser-ready |
|
|
89
|
+
| `deck/[name]-slides/slide-001.html` ... | Per-slide HTML files for individual sharing |
|
|
90
|
+
| `deck/[name].pdf` | PDF export (if requested) |
|
|
91
|
+
| Live URL | Deployed Vercel URL (if requested) |
|
|
92
|
+
|
|
93
|
+
Slides are 1920x1080px (16:9) by default. 1:1 (1080x1080) available for LinkedIn.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Parameters
|
|
98
|
+
|
|
99
|
+
| Param | Required | Notes |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| purpose | Yes | investor pitch / sales call / conference talk / internal / onboarding |
|
|
102
|
+
| audience | Yes | VCs, prospects, your team, executives, conference room |
|
|
103
|
+
| topic_or_content | Yes | Freeform brief, notes, URL, or uploaded file |
|
|
104
|
+
| key_message | No | Single sentence the audience must remember |
|
|
105
|
+
| slide_count | No | Default: 12 |
|
|
106
|
+
| style | No | One of 8 named presets or "show me options" (default: clean-slate) |
|
|
107
|
+
| aspect_ratio | No | 16:9 or 1:1 (default: 16:9) |
|
|
108
|
+
| inline_editing | No | Yes/No -- editable in-browser (default: No) |
|
|
109
|
+
| output_format | No | HTML only / HTML+PDF / HTML+PDF+deploy (default: HTML+PDF) |
|
|
110
|
+
| deck_name | No | Slug for file/folder naming (derived from topic if omitted) |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Dependencies
|
|
115
|
+
|
|
116
|
+
This skill requires the `frontend-slides` skill files at:
|
|
117
|
+
`/Users/ksd/Desktop/Varnan_skills/frontend-slides/`
|
|
118
|
+
|
|
119
|
+
Specifically:
|
|
120
|
+
- `viewport-base.css` -- responsive slide foundation (included verbatim in generated HTML)
|
|
121
|
+
- `html-template.md` -- SlidePresentation class and inline editing system
|
|
122
|
+
- `animation-patterns.md` -- entrance animations and background effects
|
|
123
|
+
- `scripts/export-pdf.sh` -- PDF export via Playwright (Node.js required, auto-installs)
|
|
124
|
+
- `scripts/deploy.sh` -- Vercel deployment (Node.js required)
|
|
125
|
+
- `scripts/extract-pptx.py` -- PowerPoint content extraction (Python + `python-pptx` required)
|
|
126
|
+
|
|
127
|
+
## No API keys required
|
|
128
|
+
|
|
129
|
+
Pure AI skill. No external services, no scraping, no dependencies to install beyond the above.
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: graphic-slide-deck
|
|
3
|
+
description: Generates a professionally designed HTML slide deck from a brief or content. Outputs a single-file presentation + optional PDF. Supports 13 layout types and 8 style presets. Trigger when user says "create a slide deck", "make a presentation", "build a pitch deck", "make slides", "convert my notes to slides".
|
|
4
|
+
compatibility: [claude-code, gemini-cli, github-copilot]
|
|
5
|
+
author: OpenDirectory
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Graphic Slide Deck
|
|
10
|
+
|
|
11
|
+
Generate a professionally designed HTML slide deck from a brief, content notes, or an existing file. Output is a single self-contained HTML file -- opens in any browser, no build tools.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
**Critical rules -- non-negotiable:**
|
|
16
|
+
|
|
17
|
+
1. Every slide MUST fit within 100vh. No scrolling inside slides. Content overflows → split into two slides.
|
|
18
|
+
2. ALL font sizes and spacing MUST use `clamp()`. Never fixed px/rem on anything that scales.
|
|
19
|
+
3. Single self-contained HTML: all CSS/JS inline. Zero external dependencies except font CDN link.
|
|
20
|
+
4. Never dump HTML in chat. Save to file, show summary only.
|
|
21
|
+
5. No generic AI slop aesthetics -- check against the DO NOT USE list in `references/style-presets.md`.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Brief Intake
|
|
26
|
+
|
|
27
|
+
Need three things to start. If all three present in the message: skip to Step 2.
|
|
28
|
+
|
|
29
|
+
If any missing, ask exactly:
|
|
30
|
+
|
|
31
|
+
> "To get started, I need three things:
|
|
32
|
+
> 1. **Purpose** -- what is this deck for? (investor pitch / sales call / conference talk / internal presentation / onboarding / other)
|
|
33
|
+
> 2. **Audience** -- who will see it? (VCs, prospects, your team, executives, conference room, LinkedIn)
|
|
34
|
+
> 3. **Topic or content** -- paste notes, a URL, a brief description, or upload a file"
|
|
35
|
+
|
|
36
|
+
Wait for all three before continuing.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Step 2: Complete Intake
|
|
41
|
+
|
|
42
|
+
Ask all questions in one message, grouped by category. User can skip any -- defaults apply.
|
|
43
|
+
|
|
44
|
+
> "A few questions before I start:
|
|
45
|
+
>
|
|
46
|
+
> **Content**
|
|
47
|
+
> 1. **Key message** -- single sentence the audience must remember after leaving
|
|
48
|
+
> 2. **Slide count** -- Short (5-10) / Medium (10-20) / Long (20+)?
|
|
49
|
+
> 3. **Content source** -- All content ready / Rough notes (I'll structure) / Topic only (I'll draft)?
|
|
50
|
+
> 4. **Existing assets** -- Any images, screenshots, or logos to include? (yes + paths / no)
|
|
51
|
+
>
|
|
52
|
+
> **Design**
|
|
53
|
+
> 5. **Style** -- midnight-editorial / matt-gray / clean-slate / brutalist / mint-pixel-corporate / product-minimal / magazine-red / soft-cloud / "show me options"
|
|
54
|
+
> 6. **Aspect ratio** -- 16:9 (1920×1080, default) / 1:1 (1080×1080, LinkedIn)
|
|
55
|
+
> 7. **Inline editing** -- should text be editable in-browser after export? (Yes / No)
|
|
56
|
+
>
|
|
57
|
+
> **Output**
|
|
58
|
+
> 8. **Output format** -- HTML only / HTML + PDF / HTML + PDF + deploy to URL
|
|
59
|
+
> 9. **Deck name** -- slug for file/folder naming (e.g. "q2-investor-pitch"); I'll derive if skipped"
|
|
60
|
+
|
|
61
|
+
**Defaults if skipped:**
|
|
62
|
+
|
|
63
|
+
| Question | Default |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Key message | derived from purpose + topic |
|
|
66
|
+
| Slide count | 12 |
|
|
67
|
+
| Content source | topic only |
|
|
68
|
+
| Existing assets | none |
|
|
69
|
+
| Style | clean-slate |
|
|
70
|
+
| Aspect ratio | 16:9 |
|
|
71
|
+
| Inline editing | No |
|
|
72
|
+
| Output format | HTML + PDF |
|
|
73
|
+
| Deck name | derived from topic slug |
|
|
74
|
+
|
|
75
|
+
**If style = "show me options":**
|
|
76
|
+
Generate 3 single-slide HTML previews (one for each of 3 different style presets that fit the deck's purpose). Save to `.claude-design/previews/style-a.html`, `style-b.html`, `style-c.html`. Open each: `open .claude-design/previews/style-a.html` etc. Ask user to pick before Step 3.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Step 2.5: Internal Design Direction (not shown to user)
|
|
81
|
+
|
|
82
|
+
From Step 2 answers, determine before Step 3:
|
|
83
|
+
|
|
84
|
+
**Visual character** (derived from style, or inferred if not specified):
|
|
85
|
+
- midnight-editorial or magazine-red → `dark-editorial`
|
|
86
|
+
- clean-slate or product-minimal → `light-minimal`
|
|
87
|
+
- matt-gray → `neutral-professional`
|
|
88
|
+
- brutalist → `bold-expressive`
|
|
89
|
+
- mint-pixel-corporate or soft-cloud → `fresh-corporate`
|
|
90
|
+
- Style not specified: investor pitch → midnight-editorial; sales → clean-slate; conference → brutalist or midnight-editorial; internal → matt-gray
|
|
91
|
+
|
|
92
|
+
**ONE unmissable slide** -- identify before Step 3:
|
|
93
|
+
- Investor pitch → stat-highlight (traction/metrics slide)
|
|
94
|
+
- Sales deck → stat-highlight (ROI/results slide)
|
|
95
|
+
- Conference talk → quote-callout or stat-highlight (key insight)
|
|
96
|
+
- Internal presentation → closing-cta (decision/recommendation slide)
|
|
97
|
+
|
|
98
|
+
**Layout selection bias** -- note the 2-3 most relevant layouts for this deck type to prioritize in Step 3.
|
|
99
|
+
|
|
100
|
+
Never ask the user for design direction -- derive it entirely from their answers.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step 3: Structure Design
|
|
105
|
+
|
|
106
|
+
Read `references/layout-library.md` before planning.
|
|
107
|
+
|
|
108
|
+
Plan the full slide sequence. Assign a layout type from the 13 in `references/layout-library.md` to each slide.
|
|
109
|
+
|
|
110
|
+
**Deck type → typical structure:**
|
|
111
|
+
|
|
112
|
+
**Investor pitch (12 slides):**
|
|
113
|
+
1. [title-hero] Company + tagline
|
|
114
|
+
2. [section-divider] The Problem
|
|
115
|
+
3. [text-full] Problem detail
|
|
116
|
+
4. [text-left-image-right] Solution overview
|
|
117
|
+
5. [image-full] Product screenshot
|
|
118
|
+
6. **[stat-highlight] Traction -- unmissable slide**
|
|
119
|
+
7. [comparison-table] vs. competitors
|
|
120
|
+
8. [timeline] Roadmap
|
|
121
|
+
9. [text-full] Team
|
|
122
|
+
10. [stat-highlight] Market size
|
|
123
|
+
11. [text-left-image-right] Business model
|
|
124
|
+
12. [closing-cta] The ask
|
|
125
|
+
|
|
126
|
+
**Sales deck (8-10 slides):**
|
|
127
|
+
1. [title-hero]
|
|
128
|
+
2. [quote-callout] Prospect pain point
|
|
129
|
+
3. [text-left-image-right] Solution
|
|
130
|
+
4. [image-grid] Product screenshots
|
|
131
|
+
5. **[stat-highlight] ROI/results -- unmissable**
|
|
132
|
+
6. [comparison-table] vs. alternatives
|
|
133
|
+
7. [text-full] Implementation / next steps
|
|
134
|
+
8. [closing-cta]
|
|
135
|
+
|
|
136
|
+
**Conference talk (15-20 slides):**
|
|
137
|
+
title-hero → section-dividers → text-full slides → image-full → **stat-highlight or quote-callout (unmissable)** → timeline → closing-cta
|
|
138
|
+
|
|
139
|
+
**Internal presentation (8-12 slides):**
|
|
140
|
+
title-hero → text-full (context) → stat-highlight (current state) → two-column-text (options) → comparison-table → text-full (recommendation) → **closing-cta (the decision -- unmissable)**
|
|
141
|
+
|
|
142
|
+
Output the proposed structure as a numbered list with `[layout-type]` in brackets. Example:
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
Proposed structure (12 slides, midnight-editorial style):
|
|
146
|
+
|
|
147
|
+
1. [title-hero] DataPulse -- Revenue decisions in 5 minutes
|
|
148
|
+
2. [section-divider] The Problem
|
|
149
|
+
...
|
|
150
|
+
12. [closing-cta] The ask + team@datapulse.io
|
|
151
|
+
|
|
152
|
+
Does this structure work, or should I adjust any slides?
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Wait for confirmation before Step 4.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Step 4: Content Draft
|
|
160
|
+
|
|
161
|
+
Write per-slide copy in sequence. Plain text only -- no HTML yet.
|
|
162
|
+
|
|
163
|
+
**Copy rules per layout:**
|
|
164
|
+
|
|
165
|
+
- `title-hero`: headline (6 words max) + subtitle (1 sentence) + optional pill badge text
|
|
166
|
+
- `section-divider`: 2-4 word section label only
|
|
167
|
+
- `text-full`: heading (5 words max) + 4-6 bullets OR 2 paragraphs (never both on same slide)
|
|
168
|
+
- `text-left-image-right` / `image-left-text-right`: heading + 3-4 bullets + `[IMAGE: description]`
|
|
169
|
+
- `two-column-text`: 2 column headings + max 3 bullets each
|
|
170
|
+
- `image-full`: `[IMAGE: description]` + optional caption (10 words max)
|
|
171
|
+
- `image-grid`: up to 6 `[IMAGE: description]` placeholders with short captions
|
|
172
|
+
- `stat-highlight`: 2-4 metrics written as `NUMBER | label` (e.g. `3× | faster close`). ZERO body copy.
|
|
173
|
+
- `quote-callout`: quote (30 words max) + attribution (name, title)
|
|
174
|
+
- `comparison-table`: column headers (3 max) + 4-6 row labels + cell content (1-3 words each)
|
|
175
|
+
- `timeline`: 3-6 milestones (label + date + 1-line description)
|
|
176
|
+
- `closing-cta`: headline (5 words max) + CTA action text + contact info (email + URL -- both required)
|
|
177
|
+
|
|
178
|
+
**Forbidden words** (in all copy, no exceptions):
|
|
179
|
+
"powerful", "seamless", "game-changing", "leverage", "innovative", "revolutionary", "transform", "cutting-edge", "robust", "unlock", "scalable" (as filler adjective).
|
|
180
|
+
|
|
181
|
+
**Copy philosophy:** Fragments are fine. Numbers beat adjectives. Every word earns its place.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Step 5: HTML Generation
|
|
186
|
+
|
|
187
|
+
Read ALL before generating any HTML:
|
|
188
|
+
|
|
189
|
+
**This skill's references:**
|
|
190
|
+
- `references/design-system.md`
|
|
191
|
+
- `references/layout-library.md`
|
|
192
|
+
- `references/style-presets.md`
|
|
193
|
+
- `references/animation-guide.md`
|
|
194
|
+
|
|
195
|
+
**frontend-slides cross-references (read these exact files):**
|
|
196
|
+
- `/Users/ksd/Desktop/Varnan_skills/frontend-slides/viewport-base.css` -- include FULL contents verbatim inside `<style>` block
|
|
197
|
+
- `/Users/ksd/Desktop/Varnan_skills/frontend-slides/html-template.md` -- SlidePresentation class, keyboard nav, inline editing system
|
|
198
|
+
- `/Users/ksd/Desktop/Varnan_skills/frontend-slides/animation-patterns.md` -- entrance animations, background effects, interactive effects
|
|
199
|
+
|
|
200
|
+
**Generation rules:**
|
|
201
|
+
|
|
202
|
+
1. Single self-contained HTML. All CSS and JS inline. Font CDN `<link>` is the only external reference.
|
|
203
|
+
2. Include the FULL verbatim contents of `viewport-base.css` inside the `<style>` block -- do not paraphrase or shorten it.
|
|
204
|
+
3. Fonts from Google Fonts or Fontshare only. Font choices come from the chosen preset in `references/style-presets.md`.
|
|
205
|
+
4. Use the SlidePresentation class from `html-template.md`. Implement full keyboard navigation (arrows, space, page up/down), touch/swipe, progress bar, and nav dots. `navDotsContainer.innerHTML = ""` before building nav dots -- never skip this.
|
|
206
|
+
5. If inline editing opted-in: implement the full inline editing system from `html-template.md` including `exportFile()`. The `exportFile()` function MUST strip `contenteditable`, `body.edit-active`, and `.active`/`.show` classes before capturing `outerHTML`.
|
|
207
|
+
6. Aspect ratio:
|
|
208
|
+
- 16:9 (default): slides are `width: 100vw; height: 100vh`
|
|
209
|
+
- 1:1 (LinkedIn): add `--slide-height: min(100vh, 100vw)` CSS custom property and use it on `.slide`
|
|
210
|
+
7. Every slide section MUST use `class="slide"` -- required for export-pdf.sh's slide detection.
|
|
211
|
+
8. Add a comment before each slide: `/* === SLIDE N: LAYOUT-TYPE === */`
|
|
212
|
+
9. Apply the ONE unmissable slide from Step 2.5 with maximum visual weight -- largest typography, most animation, the style preset's signature element at full intensity. All other slides are compositionally quieter.
|
|
213
|
+
10. No images provided → use CSS-generated visuals (gradient meshes, geometric shapes, grid patterns from `animation-patterns.md`). This is a first-class path, not a fallback.
|
|
214
|
+
|
|
215
|
+
**Typography discipline:**
|
|
216
|
+
- Stat numbers: `clamp(3.5rem, 12vw, 9rem)` -- a metric that fills a third of the slide reads authoritative
|
|
217
|
+
- Hero headline: `clamp(2.5rem, 8vw, 6rem)` at minimum. Never size down for safety.
|
|
218
|
+
- Never use fixed px/rem on any element the user will see. Clamp everything.
|
|
219
|
+
|
|
220
|
+
**CSS gotcha from viewport-base.css:** Never write `-clamp()`, `-min()`, `-max()` directly in CSS. Wrap in `calc(-1 * clamp(...))`.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Step 6: Self-QA
|
|
225
|
+
|
|
226
|
+
Check every item. Fix every failure -- do not skip.
|
|
227
|
+
|
|
228
|
+
**Viewport and rendering:**
|
|
229
|
+
- [ ] Every `.slide` has `height:100vh; height:100dvh; overflow:hidden`
|
|
230
|
+
- [ ] ALL font sizes and spacing use `clamp()` -- no fixed px on scaling elements
|
|
231
|
+
- [ ] No slide overflows at 1280×720 viewport (check against density limits from `layout-library.md`)
|
|
232
|
+
- [ ] Images use `max-height: min(50vh, 400px)`
|
|
233
|
+
- [ ] Breakpoints for 700px, 600px, 500px viewport heights present (from viewport-base.css)
|
|
234
|
+
- [ ] `prefers-reduced-motion` media query present
|
|
235
|
+
- [ ] No `-clamp()`, `-min()`, `-max()` in CSS -- wrapped in `calc(-1 * ...)` if negative needed
|
|
236
|
+
|
|
237
|
+
**Structure:**
|
|
238
|
+
- [ ] Slide count matches Step 3 plan
|
|
239
|
+
- [ ] Every slide uses `class="slide"`
|
|
240
|
+
- [ ] Each layout type correctly implemented per `references/layout-library.md`
|
|
241
|
+
- [ ] SlidePresentation class present with keyboard nav, touch, progress bar, nav dots
|
|
242
|
+
- [ ] `navDotsContainer.innerHTML = ""` before building nav dots
|
|
243
|
+
- [ ] If inline editing opted-in: `exportFile()` strips edit-state before capturing `outerHTML`
|
|
244
|
+
|
|
245
|
+
**Design quality:**
|
|
246
|
+
- [ ] ONE unmissable slide visually dominant -- not buried among equal-weight slides
|
|
247
|
+
- [ ] Typography hierarchy clear: display >> heading >> body (at least 2:1 size ratio between levels)
|
|
248
|
+
- [ ] Style preset tokens applied consistently (colors, fonts from `references/style-presets.md`)
|
|
249
|
+
- [ ] No slop patterns (check against DO NOT USE list in `references/style-presets.md`)
|
|
250
|
+
|
|
251
|
+
**Content:**
|
|
252
|
+
- [ ] No forbidden words in any slide copy
|
|
253
|
+
- [ ] title-hero headline is 6 words or fewer
|
|
254
|
+
- [ ] stat-highlight has ZERO body copy competing with the numbers
|
|
255
|
+
- [ ] closing-cta has specific action + contact info (not just "Thank You")
|
|
256
|
+
|
|
257
|
+
If any check fails: fix inline, then re-run the checklist mentally before proceeding.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Step 7: Output
|
|
262
|
+
|
|
263
|
+
**Save the main HTML first:**
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
mkdir -p deck/[name]-slides
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Write to: `deck/[name]-slides/index.html`
|
|
270
|
+
|
|
271
|
+
Open it: `open deck/[name]-slides/index.html`
|
|
272
|
+
|
|
273
|
+
**Per-slide HTML files (always generate these):**
|
|
274
|
+
|
|
275
|
+
Extract each `<section class="slide">` from the main HTML. For each one, create a standalone file with:
|
|
276
|
+
- The full `<style>` block from the main HTML (copied verbatim)
|
|
277
|
+
- The individual `<section class="slide">` wrapped in a minimal HTML shell
|
|
278
|
+
- No SlidePresentation JS (static per-slide viewing, no navigation needed)
|
|
279
|
+
|
|
280
|
+
Write to: `deck/[name]-slides/slide-001.html`, `slide-002.html`, etc. (zero-padded to 3 digits).
|
|
281
|
+
|
|
282
|
+
**If PDF requested:**
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/export-pdf.sh \
|
|
286
|
+
deck/[name]-slides/index.html \
|
|
287
|
+
deck/[name].pdf
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Note: first run installs Playwright automatically (~30-60 seconds). Inform the user.
|
|
291
|
+
|
|
292
|
+
**If deploy requested:**
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/deploy.sh \
|
|
296
|
+
deck/[name]-slides/
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Cleanup:** Delete `.claude-design/previews/` if style preview files were generated in Step 2.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Step 8: Summary (no HTML in chat)
|
|
304
|
+
|
|
305
|
+
Present in chat:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
## Slide Deck: [deck name]
|
|
309
|
+
Date: [today] | Style: [style] | Slides: [N] | Aspect: [16:9 or 1:1]
|
|
310
|
+
Purpose: [purpose] | Audience: [audience]
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### Files
|
|
315
|
+
Main: deck/[name]-slides/index.html
|
|
316
|
+
Per-slide: deck/[name]-slides/slide-001.html → slide-0NN.html
|
|
317
|
+
PDF: deck/[name].pdf [if generated]
|
|
318
|
+
Live URL: [url] [if deployed]
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
### Navigation
|
|
323
|
+
Arrow keys / Space / Page Up/Down -- advance slides
|
|
324
|
+
Click nav dots -- jump to any slide
|
|
325
|
+
Touch / swipe -- works on mobile
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
### Customize
|
|
330
|
+
Edit :root CSS variables at the top of the file to change colors
|
|
331
|
+
Swap the @import font URL to change typography
|
|
332
|
+
Remove .reveal class from elements to disable entrance animations
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
### Deck Checklist
|
|
337
|
+
- [ ] Replace [IMAGE: description] placeholders with real images
|
|
338
|
+
- [ ] Verify the metric/quote on slide [N] is accurate (the unmissable slide)
|
|
339
|
+
- [ ] Test on your target display size ([1920×1080 or 1080×1080])
|
|
340
|
+
- [ ] If presenting live: test keyboard nav in fullscreen mode (F11 / Cmd+Ctrl+F)
|
|
341
|
+
- [ ] Replace [QR: url] on closing slide with an actual QR code image
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
Do not print the HTML in the chat.
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## Section Reference
|
|
349
|
+
|
|
350
|
+
| Layout | Use case |
|
|
351
|
+
|---|---|
|
|
352
|
+
| title-hero | Opening slide -- large headline + subtext |
|
|
353
|
+
| section-divider | Section break -- bold label, minimal |
|
|
354
|
+
| text-full | Headers + bullets or paragraphs |
|
|
355
|
+
| text-left-image-right | Side-by-side: text + image |
|
|
356
|
+
| image-left-text-right | Side-by-side: image first |
|
|
357
|
+
| two-column-text | Comparisons, pros/cons, before/after |
|
|
358
|
+
| image-full | Full-bleed image + optional caption |
|
|
359
|
+
| image-grid | 2×2 or 3×2 image gallery |
|
|
360
|
+
| stat-highlight | 2-4 large KPI metrics |
|
|
361
|
+
| quote-callout | Pull quote with attribution |
|
|
362
|
+
| comparison-table | Feature/option comparison grid |
|
|
363
|
+
| timeline | Horizontal or vertical milestones |
|
|
364
|
+
| closing-cta | Final slide -- CTA + contact info |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "graphic-slide-deck",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Create a 12-slide Series A investor deck for a B2B analytics SaaS called DataPulse. Audience: Series A VCs. Key message: we turn warehouse data into revenue decisions in under 5 minutes. Style: midnight-editorial. Output: HTML + PDF.",
|
|
7
|
+
"expected_output": "All 3 required fields present -- skips Step 1. Asks all 9 questions in Step 2 grouped into Content / Design / Output categories. After answers: reads style-presets.md midnight-editorial tokens (Instrument Serif + Inter, #D8F90A accent, #111111 bg). Reads viewport-base.css from frontend-slides exact path -- includes FULL verbatim contents in style block. Reads html-template.md -- uses SlidePresentation class with navDotsContainer.innerHTML='' before nav dot loop. Reads animation-patterns.md. Generates single HTML, 12 slides, all using class='slide'. Structure plan includes stat-highlight as unmissable slide (traction metrics) -- confirmed with user before generating. Step 4 drafts per-slide copy first: stat-highlight has ZERO body copy, only number+label pairs. HTML generation: all font sizes use clamp(), midnight-editorial tokens applied consistently, stat numbers at clamp(3.5rem, 12vw, 9rem) in #D8F90A. Self-QA passes all 18 checklist items. Writes deck/datapulse-slides/index.html. Per-slide files written: deck/datapulse-slides/slide-001.html through slide-012.html, each with full style block + individual slide section + no SlidePresentation JS. PDF export called: bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/export-pdf.sh deck/datapulse-slides/index.html deck/datapulse.pdf. No HTML in chat. Summary shown with file paths, navigation instructions, and deck checklist.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "Make me a sales deck for our project management tool. Audience: operations directors at 50-200 person companies. Key message: cut project reporting time by 80%.",
|
|
13
|
+
"expected_output": "All 3 required fields present -- skips Step 1. Asks 9 questions in Step 2. User answers style='show me options'. Generates 3 single-slide HTML previews (style-a.html clean-slate, style-b.html mint-pixel-corporate, style-c.html matt-gray for sales context), saves to .claude-design/previews/, opens each automatically. Asks user to pick. After pick: reads chosen style preset tokens. Step 3: sales deck structure -- title-hero, quote-callout (pain), text-left-image-right (solution), image-grid (screenshots), stat-highlight (80% time reduction -- unmissable), comparison-table, text-full (next steps), closing-cta. Confirms structure with user. Step 4: per-slide copy with no forbidden words. stat-highlight copy: '80%' metric with 'Reporting time cut' label -- nothing else. Step 5 HTML: stat-highlight slide uses clamp(3.5rem, 12vw, 9rem) for the 80% number, ZERO body copy competing with it, counter animation applied (one dramatic moment). Default output=HTML+PDF so PDF export runs. .claude-design/previews/ deleted after generation. Summary shown with slide count, file paths, and deck checklist.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "Make me some slides.",
|
|
19
|
+
"expected_output": "Purpose, audience, and topic all missing. Does NOT read any reference files. Does NOT generate any HTML, structure plan, or outline. Asks exactly: 'To get started, I need three things: 1. Purpose -- what is this deck for? (investor pitch / sales call / conference talk / internal presentation / onboarding / other) 2. Audience -- who will see it? (VCs, prospects, your team, executives, conference room, LinkedIn) 3. Topic or content -- paste notes, a URL, a brief description, or upload a file'. Stops and waits. After user provides all three, proceeds to Step 2 and asks all 9 grouped questions in one message.",
|
|
20
|
+
"files": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 4,
|
|
24
|
+
"prompt": "Build a 15-slide conference talk about LLM evaluation frameworks. Audience: ML engineers at a NeurIPS workshop. Key message: evals are product decisions, not research artifacts. Style: brutalist. Aspect ratio: 1:1. Output: HTML + PDF + deploy.",
|
|
25
|
+
"expected_output": "Skips Step 1. Asks 9 questions in Step 2. After answers: reads brutalist style preset tokens -- Archivo Black 900, #FF3300 accent, #FFFFFF bg, zero border-radius everywhere, heavy 3px solid black borders. Aspect ratio 1:1: CSS custom property --slide-height: min(100vh, 100vw) applied on .slide, not default 100vh. Structure: 15 slides including section-dividers for talk chapters, quote-callout for key insight, stat-highlight as unmissable slide. Confirms structure with user before content draft. Step 5 HTML: Archivo Black confirmed loaded via Google Fonts @import. All borders are 3px solid #000000. Zero border-radius anywhere in the HTML. stat-highlight in #FF3300 accent. Animation: blur-in (400ms) as default entrance for conference talk; ONE slide uses gradient mesh background (dramatic moment). Per-slide HTML files generated (slide-001 through slide-015). PDF export called: bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/export-pdf.sh deck/llm-evals-slides/index.html deck/llm-evals.pdf. Deploy called: bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/deploy.sh deck/llm-evals-slides/. Summary shows live URL, file paths, all navigation instructions.",
|
|
26
|
+
"files": []
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": 5,
|
|
30
|
+
"prompt": "Convert my existing PowerPoint to a beautiful slide deck. File: quarterly-review.pptx. Style: matt-gray. Board presentation.",
|
|
31
|
+
"expected_output": "Purpose=internal/board, audience=board, content=from file. Skips Step 1 (all 3 fields derivable). Asks 9 questions in Step 2. Runs python /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/extract-pptx.py quarterly-review.pptx /tmp/extracted-pptx/ to extract content. Presents extracted slide titles and content for user confirmation. After confirmation: skips Step 3-4 content planning (extracted content drives the structure). Assigns layout types to extracted slides based on content type (slides with bullet lists → text-full, slides with single large numbers → stat-highlight, title slide → title-hero, etc.). Reads matt-gray preset tokens: DM Sans 700/400, #2563EB accent, white bg, 4px left border signature element. Step 5 HTML: all slides from extracted content, class='slide' on each, DM Sans loaded via @import, all font sizes clamp()-based. Per-slide files generated. No PDF requested in original prompt -- Step 8 summary asks: 'Want a PDF export as well?' before showing final checklist.",
|
|
32
|
+
"files": []
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Animation Guide
|
|
2
|
+
|
|
3
|
+
Decision rules for when and where to apply animations. For CSS/JS implementation snippets, read `/Users/ksd/Desktop/Varnan_skills/frontend-slides/animation-patterns.md` directly. This guide tells you WHICH snippets to use -- that file tells you HOW.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The One Dramatic Moment Rule
|
|
8
|
+
|
|
9
|
+
Every deck has exactly ONE slide with maximum animation intensity. All other slides use the same minimal entrance animation.
|
|
10
|
+
|
|
11
|
+
This is not a suggestion. A deck where every slide has elaborate animation trains the audience to ignore animation as filler. The one dramatic slide lands because every other slide was quiet.
|
|
12
|
+
|
|
13
|
+
**What counts as maximum intensity:**
|
|
14
|
+
- Counter animation on stat numbers (counting up to the final value)
|
|
15
|
+
- Staggered multi-element entrance (each stat/bullet appears with a slight delay)
|
|
16
|
+
- Background effect (gradient mesh, grid pattern, particle-like CSS animation)
|
|
17
|
+
- Combined: dramatic entrance + background effect on the same slide
|
|
18
|
+
|
|
19
|
+
**What counts as minimal (the default for all other slides):**
|
|
20
|
+
- Single fade + slide-up on the slide content block (the `.reveal` class)
|
|
21
|
+
- 200-400ms duration, `ease-out` or `ease-out-expo` easing
|
|
22
|
+
- No staggering on regular slides
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Animation Budget by Deck Type
|
|
27
|
+
|
|
28
|
+
### Investor pitch
|
|
29
|
+
- **Default entrance:** Fade + slide-up on `.slide-content` (300ms ease-out)
|
|
30
|
+
- **Unmissable slide (stat-highlight):** Counter animation on each stat number + staggered entrance (each stat appears 150ms after the previous)
|
|
31
|
+
- **Avoid:** Particle systems, glitch effects, 3D tilt on hover, parallax scrolling
|
|
32
|
+
|
|
33
|
+
### Sales deck
|
|
34
|
+
- **Default entrance:** Scale-in on `.slide-content` (`transform: scale(0.97)` → `scale(1)`, 300ms)
|
|
35
|
+
- **Unmissable slide (stat-highlight):** Counter animation on the ROI number + brief background flash
|
|
36
|
+
- **Avoid:** Bouncy easing (`cubic-bezier` with values > 1), script/handwritten fonts on animated text, anything > 500ms
|
|
37
|
+
|
|
38
|
+
### Conference talk
|
|
39
|
+
- **Default entrance:** Blur-in (blur from 8px to 0, 400ms ease-out) on main content block
|
|
40
|
+
- **Unmissable slide:** Staggered text reveals + ONE background effect (gradient mesh or grid pattern CSS animation)
|
|
41
|
+
- **Background effect:** Subtle animated gradient or grid on section-divider slides only -- not on content slides
|
|
42
|
+
- **Avoid:** Corporate navy as the dominant color (defeats the conference aesthetic), same entrance on every single element
|
|
43
|
+
|
|
44
|
+
### Internal presentation
|
|
45
|
+
- **Default entrance:** Simple fade (opacity 0 → 1, 150ms ease)
|
|
46
|
+
- **Unmissable slide:** Same fade -- no dramatic animation for internal decks
|
|
47
|
+
- **Avoid:** Any animation that could be perceived as distracting in a board meeting
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Which Snippets to Use from animation-patterns.md
|
|
52
|
+
|
|
53
|
+
Reference these specific sections from `/Users/ksd/Desktop/Varnan_skills/frontend-slides/animation-patterns.md`:
|
|
54
|
+
|
|
55
|
+
**For investor/sales decks → Core Entrance Animations section:**
|
|
56
|
+
- "Fade + Slide Up" -- most versatile, use for default slide entrance
|
|
57
|
+
- "Scale In" -- good for sales decks, slightly warmer feeling
|
|
58
|
+
|
|
59
|
+
**For conference talks → Core Entrance Animations + Background Effects:**
|
|
60
|
+
- "Blur In" -- for headline entrances
|
|
61
|
+
- "Gradient Mesh" -- for section-divider backgrounds
|
|
62
|
+
- "Grid Pattern" -- for technical/developer conference decks
|
|
63
|
+
|
|
64
|
+
**For the one dramatic slide → Interactive Effects:**
|
|
65
|
+
- Counter animation for stat numbers -- in the Optional Enhancements section of html-template.md
|
|
66
|
+
|
|
67
|
+
**For ALL decks → Intersection Observer setup:**
|
|
68
|
+
The `.reveal` class + Intersection Observer pattern from html-template.md. This is the backbone of all entrance animations. Every slide's content block gets `class="reveal"` and becomes visible when scrolled into view.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Animation Reference Table
|
|
73
|
+
|
|
74
|
+
| Deck type | Default slide | Unmissable slide | Background effects | Avoid |
|
|
75
|
+
|---|---|---|---|---|
|
|
76
|
+
| Investor pitch | Fade + slide-up (300ms) | Counter + staggered stats | None | Particles, glitch, 3D tilt |
|
|
77
|
+
| Sales deck | Scale-in (300ms) | Counter on ROI number | None | Bouncy easing, > 500ms |
|
|
78
|
+
| Conference talk | Blur-in (400ms) | Staggered + gradient mesh | Section dividers only | Corporate uniformity |
|
|
79
|
+
| Internal | Fade (150ms) | Fade only | None | Any elaborate animation |
|
|
80
|
+
| Onboarding (soft-cloud) | Fade + slide-up (250ms) | Staggered steps | Light gradients OK | Heavy or aggressive motion |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Technical Notes
|
|
85
|
+
|
|
86
|
+
**Stagger implementation:** Apply `animation-delay: calc(var(--i) * 0.15s)` to each stat or bullet element, where `--i` is set via inline style (`style="--i: 0"`, `style="--i: 1"`, etc.).
|
|
87
|
+
|
|
88
|
+
**Counter animation:** Target `.stat-number` elements. Read the full JS implementation from `html-template.md`'s Optional Enhancements section. Briefly: count from 0 to final value over ~1.2 seconds using `requestAnimationFrame`, applying `easeOutExpo` curve.
|
|
89
|
+
|
|
90
|
+
**`prefers-reduced-motion` is mandatory:** Every animation must have a corresponding reduced-motion override. The pattern from `viewport-base.css`:
|
|
91
|
+
```css
|
|
92
|
+
@media (prefers-reduced-motion: reduce) {
|
|
93
|
+
.reveal { opacity: 1; transform: none; transition: none; }
|
|
94
|
+
/* Disable all transforms and transitions */
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Do not animate layout properties:** Never animate `height`, `width`, `padding`, `margin`. Only animate `opacity`, `transform`, `filter`. Layout animations trigger expensive reflows.
|
|
99
|
+
|
|
100
|
+
**Performance check:** If a background effect uses CSS animation (like an animated gradient), add `will-change: transform` or `will-change: opacity` to the animated element -- but only for that one element, not globally.
|