@opendirectory.dev/skills 0.1.56 → 0.1.58
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 +18 -0
- package/skills/graphic-case-study/README.md +121 -0
- package/skills/graphic-case-study/SKILL.md +312 -0
- package/skills/graphic-case-study/evals/evals.json +35 -0
- package/skills/graphic-case-study/references/design-system.md +104 -0
- package/skills/graphic-case-study/references/page-library.md +333 -0
- package/skills/graphic-case-study/references/style-presets.md +346 -0
- package/skills/graphic-ebook/README.md +123 -0
- package/skills/graphic-ebook/SKILL.md +396 -0
- package/skills/graphic-ebook/assets/viewport-base.css +153 -0
- package/skills/graphic-ebook/evals/evals.json +35 -0
- package/skills/graphic-ebook/references/design-system.md +241 -0
- package/skills/graphic-ebook/references/page-library.md +461 -0
- package/skills/graphic-ebook/references/style-presets.md +346 -0
- package/skills/graphic-ebook/scripts/export-pdf.sh +361 -0
package/package.json
CHANGED
package/registry.json
CHANGED
|
@@ -116,6 +116,24 @@
|
|
|
116
116
|
"version": "2.0",
|
|
117
117
|
"path": "skills/google-trends-api-skills"
|
|
118
118
|
},
|
|
119
|
+
{
|
|
120
|
+
"name": "graphic-case-study",
|
|
121
|
+
"description": "Generates a professionally designed case study PDF for B2B SaaS sales and marketing.",
|
|
122
|
+
"tags": [
|
|
123
|
+
"Marketing"
|
|
124
|
+
],
|
|
125
|
+
"author": "OpenDirectory",
|
|
126
|
+
"version": "1.0.0",
|
|
127
|
+
"path": "skills/graphic-case-study"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "graphic-ebook",
|
|
131
|
+
"description": "Creates professionally designed B2B SaaS e-books in HTML + CSS, exported as print-ready PDF.",
|
|
132
|
+
"tags": [],
|
|
133
|
+
"author": "OpenDirectory",
|
|
134
|
+
"version": "1.0.0",
|
|
135
|
+
"path": "skills/graphic-ebook"
|
|
136
|
+
},
|
|
119
137
|
{
|
|
120
138
|
"name": "graphic-slide-deck",
|
|
121
139
|
"description": "Generates a professionally designed HTML slide deck from a brief or content.",
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# graphic-case-study
|
|
2
|
+
|
|
3
|
+
Generate a professionally designed case study PDF for B2B SaaS sales and marketing. Structured around the challenge → solution → results → testimonial arc. Outputs a browser-ready HTML file + print-ready PDF. Supports 7 page section layouts and 9 business style presets.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx "@opendirectory.dev/skills" install graphic-case-study --target claude
|
|
9
|
+
```
|
|
10
|
+
### Video Tutorial
|
|
11
|
+
Watch this quick video to see how it's done:
|
|
12
|
+
|
|
13
|
+
https://github.com/user-attachments/assets/ee98a1b5-ebc4-452f-bbfb-c434f2935067
|
|
14
|
+
|
|
15
|
+
### Step 1: Download the skill from GitHub
|
|
16
|
+
1. Copy the URL of this specific skill folder from your browser's address bar.
|
|
17
|
+
2. Go to [download-directory.github.io](https://download-directory.github.io/).
|
|
18
|
+
3. Paste the URL and click **Enter** to download.
|
|
19
|
+
|
|
20
|
+
### Step 2: Install the Skill in Claude
|
|
21
|
+
1. Open your **Claude desktop app**.
|
|
22
|
+
2. Go to the sidebar on the left side and click on the **Customize** section.
|
|
23
|
+
3. Click on the **Skills** tab, then click on the **+** (plus) icon button to create a new skill.
|
|
24
|
+
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).
|
|
25
|
+
|
|
26
|
+
> **Note:** Make sure you upload the folder that contains the `SKILL.md` file directly.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## What it does
|
|
31
|
+
|
|
32
|
+
- Asks the questions that determine how the case study should be structured
|
|
33
|
+
- Interviews you (or processes your notes) to extract customer story details
|
|
34
|
+
- Structures the narrative: customer context → challenge → solution → results → testimonial
|
|
35
|
+
- Generates a single self-contained HTML file -- opens in any browser, no build tools
|
|
36
|
+
- Splits into per-page HTML files for individual sharing or editing
|
|
37
|
+
- Exports a print-ready PDF via Playwright (A4 portrait, 1200×1697px)
|
|
38
|
+
- Supports 1-pager summary card, standard 2-pager, and detailed 4-pager formats
|
|
39
|
+
|
|
40
|
+
## Example
|
|
41
|
+
|
|
42
|
+
> "Create a 2-page case study for Acme Corp. They were spending 20 hrs/week on manual reporting. We automated it. They saved 80% of that time and reduced errors by 95%. Use midnight-editorial style."
|
|
43
|
+
|
|
44
|
+
Output: 2-page PDF with cover, challenge/solution spread, results stat page, and closing CTA.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Supported Styles
|
|
49
|
+
|
|
50
|
+
| Style | Best for |
|
|
51
|
+
|---|---|
|
|
52
|
+
| clean-slate | Enterprise B2B, sales teams, any audience that expects professionalism |
|
|
53
|
+
| midnight-editorial | Tech/AI companies, premium B2B, investor-grade materials |
|
|
54
|
+
| matt-gray | Board materials, internal reviews, professional mixed audiences |
|
|
55
|
+
| product-minimal | Product companies, design-forward B2B, design-savvy buyers |
|
|
56
|
+
| mint-pixel-corporate | SaaS sales, tech startups, growth-stage B2B |
|
|
57
|
+
| warm-earth | Agencies, consultancies, service businesses, health/education tech |
|
|
58
|
+
| brutalist | Standout sales materials, design-forward agencies, bold brands |
|
|
59
|
+
| magazine-red | Marketing agencies, brand-forward companies, editorial-style stories |
|
|
60
|
+
| soft-cloud | Onboarding materials, customer education, approachable SaaS |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Supported Page Layouts
|
|
65
|
+
|
|
66
|
+
| Layout | Purpose |
|
|
67
|
+
|---|---|
|
|
68
|
+
| cover | Opening page -- customer name, headline result, logos |
|
|
69
|
+
| overview | At-a-glance: company profile, industry, use case |
|
|
70
|
+
| challenge | The problem -- context paragraph + pain points |
|
|
71
|
+
| solution | How your product solved it -- feature callouts |
|
|
72
|
+
| results | Key metrics in large stat format + supporting narrative |
|
|
73
|
+
| testimonial | Full-width pull quote with attribution |
|
|
74
|
+
| closing-cta | Vendor logo + contact info + next step CTA |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Output
|
|
79
|
+
|
|
80
|
+
| File | What it is |
|
|
81
|
+
|---|---|
|
|
82
|
+
| `case-study/[slug]/index.html` | Full case study, browser-ready |
|
|
83
|
+
| `case-study/[slug]/page-01.html` ... | Per-page HTML files for individual sharing |
|
|
84
|
+
| `case-study/[slug].pdf` | Print-ready PDF (A4 portrait) |
|
|
85
|
+
|
|
86
|
+
Standard dimensions: 1200×1697px (A4 portrait). Landscape 4:3 (1200×900) available on request.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Parameters
|
|
91
|
+
|
|
92
|
+
| Param | Required | Notes |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| customer_name | Yes | Company name (or "Anonymous Fortune 500 Retailer" to anonymize) |
|
|
95
|
+
| challenge | Yes | Core problem in 2-5 sentences |
|
|
96
|
+
| solution | Yes | What your product did |
|
|
97
|
+
| results | Yes | Measurable outcomes -- ideally 3 stats |
|
|
98
|
+
| customer_context | No | Industry, size, location (for overview page) |
|
|
99
|
+
| testimonial | No | Customer quote + name + title |
|
|
100
|
+
| page_count | No | 1 / 2 / 4 (default: 2) |
|
|
101
|
+
| customer_logo | No | Logo URL for cover page |
|
|
102
|
+
| your_company_name | No | Vendor name + logo URL for CTA page |
|
|
103
|
+
| style | No | One of 9 named presets or "show me options" (default: clean-slate) |
|
|
104
|
+
| orientation | No | A4 portrait (default) or landscape 4:3 |
|
|
105
|
+
| anonymize | No | Keep name or replace with industry descriptor |
|
|
106
|
+
| slug | No | Filename slug (derived from customer name if omitted) |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Dependencies
|
|
111
|
+
|
|
112
|
+
This skill requires the `frontend-slides` skill files at:
|
|
113
|
+
`/Users/ksd/Desktop/Varnan_skills/frontend-slides/`
|
|
114
|
+
|
|
115
|
+
Specifically:
|
|
116
|
+
- `viewport-base.css` -- responsive page foundation (included verbatim in generated HTML)
|
|
117
|
+
- `scripts/export-pdf.sh` -- PDF export via Playwright (Node.js required, auto-installs; use `--portrait` flag for A4)
|
|
118
|
+
|
|
119
|
+
## No API keys required
|
|
120
|
+
|
|
121
|
+
Pure AI skill. No external services, no scraping, no dependencies beyond the above.
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: graphic-case-study
|
|
3
|
+
description: Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".
|
|
4
|
+
compatibility: [claude-code, gemini-cli, github-copilot]
|
|
5
|
+
author: OpenDirectory
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Graphic Case Study
|
|
10
|
+
|
|
11
|
+
Generate a professionally designed B2B case study PDF from customer story details. Output is a single self-contained HTML file (opens in any browser) plus a print-ready PDF. Supports 7 page section layouts and 9 style presets.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
**Critical rules -- non-negotiable:**
|
|
16
|
+
|
|
17
|
+
1. Every page MUST fit within the A4 canvas (1200×1697px). No content overflow.
|
|
18
|
+
2. ALL scalable font sizes use `clamp()`. Fixed px only for structural borders/lines.
|
|
19
|
+
3. Single self-contained HTML: all CSS inline. Zero external dependencies except font CDN link.
|
|
20
|
+
4. Never dump HTML in chat. Save to file, show summary only.
|
|
21
|
+
5. Results stat numbers MUST be visually dominant -- at least 3× body text size.
|
|
22
|
+
6. No generic AI slop: no Inter as display font, no purple gradient on white, no "Thank You" closing.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 1: Brief Intake
|
|
27
|
+
|
|
28
|
+
Need four things to start. If all four present in the message: skip to Step 2.
|
|
29
|
+
|
|
30
|
+
If any missing, ask exactly:
|
|
31
|
+
|
|
32
|
+
> "To create your case study, I need four things:
|
|
33
|
+
> 1. **Customer name** -- company name (or a descriptor to anonymize: "Fortune 500 Retailer")
|
|
34
|
+
> 2. **Challenge** -- what problem did they have before using your product? (2-5 sentences)
|
|
35
|
+
> 3. **Solution** -- what did your product do to solve it? (features, approach)
|
|
36
|
+
> 4. **Results** -- measurable outcomes: ideally 3 stats (%, time saved, revenue impact, etc.)"
|
|
37
|
+
|
|
38
|
+
Wait for all four before continuing.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 2: Complete Intake
|
|
43
|
+
|
|
44
|
+
Ask all questions in one message, grouped by category. User can skip any -- defaults apply.
|
|
45
|
+
|
|
46
|
+
> "A few questions before I start:
|
|
47
|
+
>
|
|
48
|
+
> **Content**
|
|
49
|
+
> 1. **Customer context** -- industry, company size, location? (optional, used for overview page)
|
|
50
|
+
> 2. **Testimonial** -- customer quote (40 words max) + speaker name + title? (or "I'll add later")
|
|
51
|
+
> 3. **Page count** -- 1-pager (summary card) / 2-pager (standard, default) / 4-pager (detailed)
|
|
52
|
+
> 4. **Customer logo** -- URL or "none"
|
|
53
|
+
>
|
|
54
|
+
> **Design**
|
|
55
|
+
> 5. **Your company name** -- vendor name for the CTA page (+ logo URL if available)
|
|
56
|
+
> 6. **Style** -- clean-slate / midnight-editorial / matt-gray / product-minimal / mint-pixel-corporate / warm-earth / brutalist / magazine-red / "show me options"
|
|
57
|
+
> 7. **Orientation** -- A4 portrait (default, 1200×1697) / landscape 4:3 (1200×900)
|
|
58
|
+
>
|
|
59
|
+
> **Output**
|
|
60
|
+
> 8. **Anonymize?** -- Keep company name / replace with industry descriptor
|
|
61
|
+
> 9. **Slug** -- filename slug (e.g. "acme-corp-2025"); I'll derive from customer name if skipped"
|
|
62
|
+
|
|
63
|
+
**Defaults if skipped:**
|
|
64
|
+
|
|
65
|
+
| Question | Default |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Customer context | none |
|
|
68
|
+
| Testimonial | none |
|
|
69
|
+
| Page count | 2 |
|
|
70
|
+
| Customer logo | none |
|
|
71
|
+
| Your company name | derived from context |
|
|
72
|
+
| Style | clean-slate |
|
|
73
|
+
| Orientation | A4 portrait |
|
|
74
|
+
| Anonymize | keep name |
|
|
75
|
+
| Slug | kebab-case of customer name |
|
|
76
|
+
|
|
77
|
+
**If style = "show me options":**
|
|
78
|
+
Generate 3 single-page HTML previews (cover page only). Save to `.claude-design/previews/style-a.html`, `style-b.html`, `style-c.html`. Open each: `open .claude-design/previews/style-a.html` etc. Choose 3 style presets that match the case study context. Ask user to pick before Step 3.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Step 2.5: Internal Page Architecture (not shown to user)
|
|
83
|
+
|
|
84
|
+
Derive internally before Step 3. Never ask the user.
|
|
85
|
+
|
|
86
|
+
**Hero metric identification:**
|
|
87
|
+
Scan results for the single most impressive number (largest %, biggest $, greatest multiplier). This metric gets accent-color treatment and maximum visual weight on the results page.
|
|
88
|
+
|
|
89
|
+
**Page count -> structure template:**
|
|
90
|
+
|
|
91
|
+
| Count | Page sequence |
|
|
92
|
+
|---|---|
|
|
93
|
+
| 1-pager | 1 page: [cover-compact] -- all content condensed into one page |
|
|
94
|
+
| 2-pager | Page 1: [cover] + [challenge-solution] stacked · Page 2: [results] + [testimonial-cta] stacked |
|
|
95
|
+
| 4-pager | Page 1: [cover] · Page 2: [overview] + [challenge] · Page 3: [solution] + [results] · Page 4: [testimonial] + [closing-cta] |
|
|
96
|
+
|
|
97
|
+
**Visual character** derived from style choice:
|
|
98
|
+
- clean-slate → professional authority, generous whitespace, enterprise-safe
|
|
99
|
+
- midnight-editorial → premium dark, editorial weight, tech/AI companies
|
|
100
|
+
- matt-gray → trusted neutral, operational, board-safe
|
|
101
|
+
- warm-earth → approachable warmth, consulting/agency/services
|
|
102
|
+
- brutalist → bold standout, design-forward, attention-commanding
|
|
103
|
+
- If not specified: default to clean-slate for B2B SaaS, midnight-editorial for technical companies.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Step 3: Page Structure
|
|
108
|
+
|
|
109
|
+
Read `references/page-library.md` before planning.
|
|
110
|
+
|
|
111
|
+
Plan the full page sequence. Assign section types from the 7 in `references/page-library.md` to each page section. Multiple sections can stack within one page.
|
|
112
|
+
|
|
113
|
+
Output as numbered list with `[section-type]` labels per page. Example for 2-pager:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Proposed structure (2 pages, clean-slate style):
|
|
117
|
+
|
|
118
|
+
Page 1:
|
|
119
|
+
[cover] -- Acme Corp cut reporting time by 80%
|
|
120
|
+
[challenge-solution] -- manual process / DataPulse automation
|
|
121
|
+
|
|
122
|
+
Page 2:
|
|
123
|
+
[results] -- 80% time saved, 95% error reduction, $200K saved
|
|
124
|
+
[closing-cta] -- Get in touch: hello@datapulse.io
|
|
125
|
+
|
|
126
|
+
Does this structure work, or should I adjust anything?
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Wait for confirmation before Step 4.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Step 4: Content Draft
|
|
134
|
+
|
|
135
|
+
Write per-page-section copy. Plain text only -- no HTML yet.
|
|
136
|
+
|
|
137
|
+
**Copy rules per section:**
|
|
138
|
+
|
|
139
|
+
- `cover`: company name + headline result (12 words max, MUST lead with the number: "Acme cut reporting time by 80%") + optional category label ("Customer Success Story")
|
|
140
|
+
- `overview`: 4 facts only -- Industry / Company size / Location / Use case -- each value 4 words max
|
|
141
|
+
- `challenge`: context paragraph (2-3 sentences) + 3 pain points (1 sentence each, no bullet filler)
|
|
142
|
+
- `solution`: 2-3 feature callouts -- feature name (3 words max) + 1-sentence outcome description each
|
|
143
|
+
- `results`: 3 metrics (number + short label + 1-line context). Optional: 2-sentence narrative. ZERO body copy at same weight as the numbers.
|
|
144
|
+
- `testimonial`: exact quote (40 words max) + speaker name + title + company
|
|
145
|
+
- `closing-cta`: headline (5 words max) + CTA action text (3 words) + email + URL (both required)
|
|
146
|
+
|
|
147
|
+
**Forbidden words** (no exceptions): "powerful", "seamless", "game-changing", "leverage", "innovative", "revolutionary", "transform", "cutting-edge", "robust", "unlock", "scalable" (as filler adjective).
|
|
148
|
+
|
|
149
|
+
**Copy philosophy:** Numbers beat adjectives. Lead every section with the outcome, not the feature. Fragments are fine.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Step 5: HTML Generation
|
|
154
|
+
|
|
155
|
+
Read ALL before generating any HTML:
|
|
156
|
+
|
|
157
|
+
**This skill's references:**
|
|
158
|
+
- `references/design-system.md`
|
|
159
|
+
- `references/page-library.md`
|
|
160
|
+
- `references/style-presets.md`
|
|
161
|
+
|
|
162
|
+
**frontend-slides cross-references (read this exact file):**
|
|
163
|
+
- `/Users/ksd/Desktop/Varnan_skills/frontend-slides/viewport-base.css` -- include FULL contents verbatim inside `<style>` block
|
|
164
|
+
|
|
165
|
+
**Generation rules:**
|
|
166
|
+
|
|
167
|
+
1. Single self-contained HTML. All CSS inline. Font CDN `<link>` is the only external reference.
|
|
168
|
+
2. Include the FULL verbatim contents of `viewport-base.css` inside the `<style>` block -- do not paraphrase or shorten it.
|
|
169
|
+
3. After pasting viewport-base.css, add portrait A4 overrides:
|
|
170
|
+
```css
|
|
171
|
+
/* A4 portrait overrides */
|
|
172
|
+
html { scroll-snap-type: none; scroll-behavior: auto; }
|
|
173
|
+
.slide {
|
|
174
|
+
width: 100vw;
|
|
175
|
+
height: 100vh;
|
|
176
|
+
height: 100dvh;
|
|
177
|
+
overflow: hidden;
|
|
178
|
+
display: flex;
|
|
179
|
+
flex-direction: column;
|
|
180
|
+
position: relative;
|
|
181
|
+
scroll-snap-align: none;
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
4. Every page section = `<section class="slide">` -- required for export-pdf.sh detection.
|
|
185
|
+
5. Comment each page: `/* === PAGE N: SECTION-TYPES === */`
|
|
186
|
+
6. Results stat numbers: `clamp(2.5rem, 7vw, 5rem)` minimum. Hero metric in accent color. Other metrics in secondary text color.
|
|
187
|
+
7. No images provided -> CSS-generated visuals (geometric shapes, gradient backgrounds, icon-like CSS constructs). Never output visible placeholder boxes.
|
|
188
|
+
8. No SlidePresentation JS. Include only a minimal IntersectionObserver for `.reveal` entrance animations (viewer experience; PDF export renders to final state automatically).
|
|
189
|
+
9. For landscape 4:3 (if requested): use `clamp()` values from graphic-slide-deck proportions -- landscape 1200×900 means 1vw=12px, similar to portrait.
|
|
190
|
+
|
|
191
|
+
**Typography discipline (all clamp-based, tuned for 1200px A4 portrait):**
|
|
192
|
+
- Cover headline: `clamp(2rem, 5vw, 3.5rem)`
|
|
193
|
+
- Section heading: `clamp(1.25rem, 2.5vw, 2rem)`
|
|
194
|
+
- Body: `clamp(0.875rem, 1.25vw, 1.1rem)`
|
|
195
|
+
- Stat number (hero): `clamp(3rem, 8vw, 5.5rem)` in accent color
|
|
196
|
+
- Stat number (secondary): `clamp(2.5rem, 7vw, 5rem)` in secondary color
|
|
197
|
+
- Quote: `clamp(1.1rem, 2vw, 1.5rem)` italic
|
|
198
|
+
- Label/caption: `clamp(0.65rem, 0.9vw, 0.8rem)` uppercase
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Step 6: Self-QA
|
|
203
|
+
|
|
204
|
+
Check every item. Fix every failure -- do not skip.
|
|
205
|
+
|
|
206
|
+
**Layout and rendering:**
|
|
207
|
+
- [ ] Every `.slide` has `height:100vh; height:100dvh; overflow:hidden`
|
|
208
|
+
- [ ] ALL scalable font sizes use `clamp()`
|
|
209
|
+
- [ ] No content overflows at 1200×1697 viewport -- check each page's density against `references/page-library.md` limits
|
|
210
|
+
- [ ] CSS-generated visuals present for all image placeholder spots
|
|
211
|
+
- [ ] No `-clamp()`, `-min()`, `-max()` in CSS -- wrap negatives in `calc(-1 * ...)`
|
|
212
|
+
|
|
213
|
+
**Structure:**
|
|
214
|
+
- [ ] Page count matches Step 3 plan
|
|
215
|
+
- [ ] Every page uses `class="slide"`
|
|
216
|
+
- [ ] All content sections from Step 3 are present
|
|
217
|
+
- [ ] `class="slide"` only on `<section>` elements, not inner divs
|
|
218
|
+
|
|
219
|
+
**Design quality:**
|
|
220
|
+
- [ ] Hero metric visually dominant on results section -- accent color, largest size, no competing elements at equal weight
|
|
221
|
+
- [ ] Style preset tokens applied consistently (colors, fonts from `references/style-presets.md`)
|
|
222
|
+
- [ ] No slop patterns (check DO NOT USE list in `references/style-presets.md`)
|
|
223
|
+
- [ ] Typography hierarchy clear: cover headline >> section heading >> body (at least 2:1 ratio)
|
|
224
|
+
|
|
225
|
+
**Content:**
|
|
226
|
+
- [ ] No forbidden words in any copy
|
|
227
|
+
- [ ] Cover headline leads with a number or measurable result
|
|
228
|
+
- [ ] Testimonial quote is 40 words or fewer
|
|
229
|
+
- [ ] Closing CTA has headline + action + email + URL (all four)
|
|
230
|
+
- [ ] All stats in results section have labels (no naked numbers)
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Step 7: Output
|
|
235
|
+
|
|
236
|
+
**Save the main HTML:**
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
mkdir -p case-study/[slug]
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Write to: `case-study/[slug]/index.html`
|
|
243
|
+
|
|
244
|
+
Open it: `open case-study/[slug]/index.html`
|
|
245
|
+
|
|
246
|
+
**Per-page HTML files (always generate these):**
|
|
247
|
+
|
|
248
|
+
Extract each `<section class="slide">` from the main HTML. For each one, create a standalone file with:
|
|
249
|
+
- The full `<style>` block from the main HTML (copied verbatim)
|
|
250
|
+
- The individual `<section class="slide">` wrapped in a minimal HTML shell
|
|
251
|
+
- No JS (static per-page viewing)
|
|
252
|
+
|
|
253
|
+
Write to: `case-study/[slug]/page-01.html`, `page-02.html`, etc.
|
|
254
|
+
|
|
255
|
+
**PDF export (always do this for A4 portrait):**
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
bash /Users/ksd/Desktop/Varnan_skills/frontend-slides/scripts/export-pdf.sh \
|
|
259
|
+
case-study/[slug]/index.html \
|
|
260
|
+
case-study/[slug].pdf --portrait
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
If landscape 4:3 was requested, omit `--portrait` and use `--compact` instead (1280×720).
|
|
264
|
+
|
|
265
|
+
Note: first run installs Playwright automatically (~30-60 seconds). Inform the user.
|
|
266
|
+
|
|
267
|
+
**Cleanup:** Delete `.claude-design/previews/` if style preview files were generated in Step 2.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Step 8: Summary (no HTML in chat)
|
|
272
|
+
|
|
273
|
+
Present in chat:
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
## Case Study: [customer name]
|
|
277
|
+
Date: [today] | Style: [style] | Pages: [N] | Format: A4 portrait
|
|
278
|
+
Vendor: [your company] | Customer: [customer name]
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
### Files
|
|
283
|
+
Main: case-study/[slug]/index.html
|
|
284
|
+
Per-page: case-study/[slug]/page-01.html -> page-0N.html
|
|
285
|
+
PDF: case-study/[slug].pdf
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
### Case Study Checklist
|
|
290
|
+
- [ ] Replace [IMAGE: logo] placeholder with real logo file
|
|
291
|
+
- [ ] Verify all stats are accurate (page [results page number])
|
|
292
|
+
- [ ] Confirm customer has approved quote usage
|
|
293
|
+
- [ ] Proof company name spelling, speaker title accuracy
|
|
294
|
+
- [ ] Test PDF page count = [N] and no content clips
|
|
295
|
+
- [ ] Share PDF at case-study/[slug].pdf
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Do not print HTML in chat.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Section Reference
|
|
303
|
+
|
|
304
|
+
| Section | Purpose |
|
|
305
|
+
|---|---|
|
|
306
|
+
| cover | Opening page -- customer name, headline result, logos |
|
|
307
|
+
| overview | At-a-glance profile -- industry, size, use case |
|
|
308
|
+
| challenge | The problem -- context + pain points |
|
|
309
|
+
| solution | How your product solved it -- feature callouts |
|
|
310
|
+
| results | Key metrics + supporting narrative |
|
|
311
|
+
| testimonial | Full-width pull quote from customer |
|
|
312
|
+
| closing-cta | Vendor logo + contact info + next step |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "graphic-case-study",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Create a 2-page case study for Acme Corp. They were spending 20 hours per week on manual reporting. We automated it. They saved 80% of that time and reduced reporting errors by 95%. Use midnight-editorial style.",
|
|
7
|
+
"expected_output": "All 4 required fields present -- skips Step 1. Asks 9 questions in Step 2. After answers: reads midnight-editorial tokens (Instrument Serif + Inter, #D8F90A accent, #111111 bg). Reads viewport-base.css verbatim, adds A4 portrait overrides. 2-page structure: Page 1 = [cover] + [challenge-solution]; Page 2 = [results] + [closing-cta]. Results page: hero stat '80%' in #D8F90A at clamp(3rem, 8vw, 5.5rem), '95%' as secondary stat at clamp(2.5rem, 7vw, 5rem) in secondary color. No forbidden words. IntersectionObserver for .reveal animations. Per-page HTML files written. PDF export called with --portrait flag. Summary shows file paths, page count, checklist.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "Make me some case study.",
|
|
13
|
+
"expected_output": "customer_name, challenge, solution, results all missing. Does NOT read any reference files. Does NOT generate any HTML, structure plan, or outline. Asks exactly: 'To create your case study, I need four things: 1. Customer name 2. Challenge 3. Solution 4. Results'. Stops and waits. After user provides all four, proceeds to Step 2 and asks all 9 grouped questions in one message.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "Create a 1-page case study summary card for Vertex IO. They had 3-day sales cycle delays due to manual qualification. DataPulse automated it. Result: 60% faster qualification, $1.2M additional pipeline closed in Q1. Style: clean-slate.",
|
|
19
|
+
"expected_output": "Skips Step 1. Asks 9 questions. 1-pager structure: single [cover-compact] page with all content condensed (headline + challenge 2 sentences + solution 2 sentences + 3 inline stats + CTA at bottom). clean-slate tokens: Plus Jakarta Sans 800, #0F172A accent, white bg, rounded cards 16px, badge pills (#E0F2FE). Hero stat '60%' in #0F172A at clamp(3rem, 8vw, 5.5rem). '$1.2M' as secondary stat. Viewport-base.css included verbatim. A4 portrait overrides applied. Per-page (just 1) HTML written. PDF export --portrait called. Summary shown with checklist.",
|
|
20
|
+
"files": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 4,
|
|
24
|
+
"prompt": "Build a 4-page detailed case study for Stride Labs. Industry: fintech. Challenge: manual compliance reporting took 40 hours/week. Solution: automated audit trail + real-time dashboards. Results: 40-hour reduction per week, 0 compliance failures in 18 months, 3x faster audits. Quote from their CFO: 'We went from dreading audits to sailing through them.' Style: warm-earth.",
|
|
25
|
+
"expected_output": "Skips Step 1. Asks 9 questions. Reads warm-earth preset tokens: Lora display font, Source Sans 3 body, #D4622A accent, #FDF6EF bg, #2C1A0E cover bg. 4-page structure: Page 1 [cover] | Page 2 [overview]+[challenge] | Page 3 [solution]+[results] | Page 4 [testimonial]+[closing-cta]. Challenge page has drop cap via ::first-letter on opening paragraph (Lora, clamp(3rem,7vw,5rem), #D4622A). Results: hero metric '40 hours/week' in #D4622A at hero stat size. '0 compliance failures' and '3x faster' as secondary stats. Testimonial: CFO quote quoted exactly, <=40 words. Closing CTA has email + URL. 4 per-page HTML files generated. PDF export --portrait called. Summary shown.",
|
|
26
|
+
"files": []
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": 5,
|
|
30
|
+
"prompt": "Create a 2-page case study. Anonymize the customer -- just say 'Global Logistics Provider'. Challenge: supply chain visibility gaps causing $500K/month in delays. Solution: real-time tracking integration. Results: $400K/month savings, 87% reduction in delay incidents. Style: show me options.",
|
|
31
|
+
"expected_output": "Skips Step 1. Asks 9 questions. User answers style='show me options': generates 3 cover-page-only HTML previews saved to .claude-design/previews/style-a.html, style-b.html, style-c.html, opens each automatically, asks user to pick. After pick: reads chosen preset tokens from references/style-presets.md. Customer name used as 'Global Logistics Provider' throughout (anonymized per request). 2-page structure: Page 1 = [cover]+[challenge-solution]; Page 2 = [results]+[closing-cta] (no testimonial -- not provided). Hero metric '$400K/month' in accent color at hero stat size. '87%' as secondary stat. No testimonial section since not provided. .claude-design/previews/ deleted after generation. PDF export --portrait called. Summary shown.",
|
|
32
|
+
"files": []
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Design System — graphic-case-study
|
|
2
|
+
|
|
3
|
+
Typography, spacing, and design rules for A4 portrait case study pages. All tokens tuned for 1200px viewport width (A4 portrait format via Playwright).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Typography Scale
|
|
8
|
+
|
|
9
|
+
All values use `clamp()`. At 1200px viewport: 1vw = 12px.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Cover headline: clamp(2rem, 5vw, 3.5rem) -- 60px at 1200px
|
|
13
|
+
Section heading (h2): clamp(1.25rem, 2.5vw, 2rem) -- 30px at 1200px
|
|
14
|
+
Body text: clamp(0.875rem, 1.25vw, 1.1rem) -- 15px at 1200px
|
|
15
|
+
Stat number (hero): clamp(3rem, 8vw, 5.5rem) -- 96px at 1200px | accent color
|
|
16
|
+
Stat number (support): clamp(2.5rem, 7vw, 5rem) -- 84px at 1200px | secondary color
|
|
17
|
+
Quote text: clamp(1.1rem, 2vw, 1.5rem) -- 24px at 1200px | italic, display font
|
|
18
|
+
Stat label: clamp(0.7rem, 1vw, 0.875rem) -- 12px | uppercase, 0.1em tracking
|
|
19
|
+
Caption / label: clamp(0.65rem, 0.9vw, 0.8rem) -- 10.8px | uppercase, 0.12em tracking
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Why these differ from graphic-slide-deck:**
|
|
23
|
+
- Viewport is 1200px not 1920px -- vw values resolve smaller
|
|
24
|
+
- A4 is a reading document, not a projector slide -- body text minimum is higher
|
|
25
|
+
- Stat numbers cap at 5.5rem not 9rem -- A4 proportions, not stadium-screen scale
|
|
26
|
+
- Generous minimum clamp values ensure readability in print PDF export
|
|
27
|
+
|
|
28
|
+
**Letter spacing:**
|
|
29
|
+
- Cover/display headlines: `-0.03em`
|
|
30
|
+
- Section headings: `-0.02em`
|
|
31
|
+
- Body: `0` (no letter spacing -- readability first)
|
|
32
|
+
- Labels/captions: `+0.1em` to `+0.14em`
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Spacing Rhythm
|
|
37
|
+
|
|
38
|
+
Valid values: 8 / 16 / 24 / 32 / 48 / 64 / 96px. No arbitrary values.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Page padding: clamp(2.5rem, 6%, 4.5rem) -- 40–72px
|
|
42
|
+
Section gap: clamp(1.5rem, 3%, 3rem) -- 24–48px
|
|
43
|
+
Content gap: clamp(0.875rem, 1.5%, 1.75rem) -- 14–28px
|
|
44
|
+
Element gap: clamp(0.5rem, 1%, 1rem) -- 8–16px
|
|
45
|
+
Column gap: clamp(1.5rem, 4%, 3rem) -- 24–48px
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## One Hero Metric Rule
|
|
51
|
+
|
|
52
|
+
Every results section has exactly ONE metric that is visually dominant:
|
|
53
|
+
- Hero metric: accent color, `clamp(3rem, 8vw, 5.5rem)`, full opacity
|
|
54
|
+
- Supporting metrics: secondary text color, `clamp(2.5rem, 7vw, 5rem)`, full opacity
|
|
55
|
+
- Context line below: body color, body size, max 12 words
|
|
56
|
+
|
|
57
|
+
**This is the single thing the reader remembers.** If two metrics fight for dominance, neither wins.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Page Density Guide
|
|
62
|
+
|
|
63
|
+
Each page section has a natural density:
|
|
64
|
+
|
|
65
|
+
| Section | Density | Key rule |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| cover | Very open | Headline + company name only. Breathe. |
|
|
68
|
+
| overview | Moderate | 4 fact cells in a 2×2 grid. No paragraphs. |
|
|
69
|
+
| challenge | Moderate-dense | Context paragraph + 3 pain points. |
|
|
70
|
+
| solution | Moderate | 2-3 feature callouts. CSS icon shapes. |
|
|
71
|
+
| results | Very open | Numbers need space. Nothing competes. |
|
|
72
|
+
| testimonial | Very open | The quote fills the section. Nothing else. |
|
|
73
|
+
| closing-cta | Open | One action. Contact info. Done. |
|
|
74
|
+
|
|
75
|
+
**Stacking rule for 1-pager and 2-pager:** When multiple sections share a page, alternate dense sections with open ones. Never stack two dense sections. Never stack two open sections unless one is tiny (e.g., a 2-line testimonial after a big results block).
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Background Depth
|
|
80
|
+
|
|
81
|
+
Use subtle background variation to create visual rhythm across pages:
|
|
82
|
+
- Cover: style preset's primary background (often dark or richly styled)
|
|
83
|
+
- Overview / Challenge: slightly lighter/alternate background from preset
|
|
84
|
+
- Solution: main slide background
|
|
85
|
+
- Results: main slide background (never alter -- numbers need neutral ground)
|
|
86
|
+
- Testimonial: accent color at 5-8% opacity OR preset's alternate section bg
|
|
87
|
+
- Closing CTA: dark or full-accent background (inversion for finality)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Slop Patterns to Avoid
|
|
92
|
+
|
|
93
|
+
| Pattern | Why it's wrong |
|
|
94
|
+
|---|---|
|
|
95
|
+
| Inter as display font | Generic -- no character at heading size |
|
|
96
|
+
| Every section same background | No visual rhythm across pages |
|
|
97
|
+
| Stat numbers at body text size | Defeats the results section entirely |
|
|
98
|
+
| Bullet list format for testimonial | A quote is a quote, not a list |
|
|
99
|
+
| "Thank You" as closing-cta headline | Wasted opportunity -- no action, no contact |
|
|
100
|
+
| Gradient on every section | Cheap depth signal, fights the editorial feel |
|
|
101
|
+
| Unstyled logo placeholder boxes | Looks unfinished -- use CSS initials or shape |
|
|
102
|
+
| Purple-to-blue gradient on white | Overused AI aesthetic -- signals no design thinking |
|
|
103
|
+
| Body text same color on every section | No hierarchy, no visual rhythm |
|
|
104
|
+
| Results stats smaller than section headings | Hierarchy inverted -- misses the point |
|