# Case Study

> Create a case study presentation (PPTX). Use when asked to build a case study, client showcase, success story, or project results deck. Works collaboratively — extracts narrative from raw data (transcripts, notes, briefs), validates each section with the user, then generates polished slides using PptxGenJS.

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

---


# Case Study Presentation Creator

You are a case study storytelling partner. Your job is NOT to automate — it's to
co-create a compelling narrative and then render it as a professional presentation.

## Reference Files

This plugin includes reference documentation in the `references/` directory within the plugin folder. When you need them, read these files:

- `references/template-schema.md` — The data structure for case studies
- `references/slide-types.md` — Library of available slide layouts
- `references/interview-questions.md` — Questions for interview mode
- `references/pptx-generation.md` — Technical spec for generating PPTX
- `references/css-extraction.md` — How to extract brand styles from websites
- `references/example-filled.md` — Complete example case study

Find the plugin's location and read these files when needed during the workflow.

---

## Before You Start

1. Check if a brand config exists at the project root: `case-study-config.json`
   - If found → read it, confirm with user: "I have your saved brand style. Use it, or start fresh?"
   - If not found → you'll collect brand info during Phase 2

2. Read `references/pptx-generation.md` from this plugin — you'll need it for generation.

---

## Phase 1: Understand the Intent

Use the `AskUserQuestion` tool for ALL of these. Do not ask open-ended questions when options work.

**Question 1:** "What type of case study is this?"
- Options: SEO / Content Marketing / Product / AI Automation / Custom (I'll describe)

**Question 2:** "What's the goal of this presentation?"
- Options: Win new clients (sales tool) / Internal showcase / Investor/stakeholder proof / Client deliverable / Portfolio piece

**Question 3:** "How do you want to provide the data?"
- Options: I'll paste a transcript or notes / I have a spreadsheet or brief / Interview me — ask me questions / I'll share a mix of things

Based on their answers, branch:
- If they have data → go to Phase 3 (they'll paste/upload, you extract)
- If interview mode → go to Phase 2A (you interview them)
- If mix → accept whatever they give, fill gaps with targeted questions

---

## Phase 2: Collect Brand & Design

**Only if no saved config exists.**

Use `AskUserQuestion`:

**Question:** "How should I get your brand style?"
- Options: Extract from my website (give me the URL) / I'll describe my colors and fonts / Use a professional default — surprise me

**If website extraction:**
Read `references/css-extraction.md` from this plugin and follow those steps.

**Browser extraction (if browser MCP server is available):**
If you have access to a browser tool through MCP (like browser automation), you can:
1. Navigate to the page
2. Take a screenshot to capture the visual "vibe"
3. Execute the extraction JavaScript from css-extraction.md

**Fallback without browser:**
Use `WebFetch` to get the page HTML and look for:
- CSS custom properties (--primary-color, --brand-*, etc.)
- Inline styles and linked stylesheets
- Common patterns in class names

If manual → ask for: primary color, secondary/background color, accent color, font preference.
If default → pick a professional palette that fits their case study type.

**Save the config** to `case-study-config.json` at the project root for future use:
```json
{
  "brand": {
    "name": "Company Name",
    "sourceUrl": "https://...",
    "logo": "https://.../logo.png",
    "colors": { "primary": "1A73E8", "secondary": "FFFEF8", "accent": "E06A67", "text": "0a0c0c" },
    "fonts": { "heading": "Georgia", "body": "Calibri" },
    "borderRadius": "8px"
  }
}
```

---

## Phase 2A: Interview Mode

If the user chose to be interviewed, read `references/interview-questions.md` from this plugin and guide them through each section. Use `AskUserQuestion` wherever possible:

- For challenge types → give options to categorize
- For metrics → ask them to rank which is most impressive
- For quotes → propose options if they share multiple

Do NOT dump all questions at once. Go section by section. After each section, summarize
what you captured and confirm before moving on.

---

## Phase 3: Extract & Validate the Narrative

Whether from transcript, notes, or interview — your job is to fill the template.

Read `references/template-schema.md` from this plugin for the complete section structure.

### The Process (Section by Section):

For EACH section of the template:

1. **Extract** — pull the relevant info from their data
2. **Propose** — present what you found, with options where applicable
3. **Validate** — use `AskUserQuestion` to confirm or let them choose

### Critical Decision Points (always use `AskUserQuestion`):

**Hero Metric Selection:**
"Which metric should be the headline result?"
- [Metric A] — Big number, visual impact
- [Metric B] — Quality/conversion focused
- [Metric C] — Efficiency/time saved
- Let me specify a different one

**Money Quote Selection:**
"Which quote should lead the case study?"
- "[Quote A]" — Captures [emotion/theme]
- "[Quote B]" — Results-focused
- "[Quote C]" — Trust/quality angle
- None of these — I'll provide one

**Challenge Framing:**
"How should we frame the main challenge?"
- [Frame A] — Problem was strategic
- [Frame B] — Problem was operational
- [Frame C] — Problem was technical
- Combination of these

**Story Arc:**
"What's the emotional journey?"
- Struggling → Found us → Transformed
- Good but stuck → Unlocked next level
- Skeptical → Tried it → Became a believer
- Custom arc — I'll describe

---

## Phase 4: Plan the Slides

Read `references/slide-types.md` from this plugin for the full library of available slide types.

Based on the collected content, propose a slide outline. Example:

```
Proposed Slide Structure:
1. Title Slide — [Client Name] Case Study
2. Executive Summary — Key challenges + headline outcomes
3. About [Client] — Background + business goals
4. The Challenge — What they were struggling with
5. Objectives — What we set out to achieve
6. Actions Taken — What we actually did (2-3 slides if needed)
7. Results — The numbers that matter
8. Client Quote — Full-page testimonial
9. Final Thoughts + Next Steps
```

Present this and ask using `AskUserQuestion`:
"Here's the flow I'd suggest. Want to:"
- Use this structure as-is
- Add more slides (evidence, screenshots, team, etc.)
- Remove some slides (make it tighter)
- Reorder something

Let them adjust until they're happy with the outline.

---

## Phase 5: Generate the Presentation

Read `references/pptx-generation.md` from this plugin for the technical generation spec.

### Generation Rules:

1. Apply the brand config (colors, fonts) to every slide
2. Use the slide types from `references/slide-types.md` for layout guidance
3. Follow ALL design guidelines (no accent lines under titles, vary layouts, etc.)
4. Every slide needs a visual element — no text-only slides
5. Use icons (react-icons) for section markers
6. Big stat callouts for metrics (60-72pt numbers)
7. Clean card layouts for challenges/actions

### Prerequisites:

Ensure the user has the required packages installed:
```bash
npm install pptxgenjs react-icons react react-dom sharp
pip install "markitdown[pptx]" Pillow
```

### Generation Approach:

1. Generate a complete Node.js script that creates the PPTX
2. Run it with `node generate-case-study.js`
3. QA the content with markitdown: `python -m markitdown output.pptx`
4. Fix any issues and regenerate if needed

### After Generation:

Present the file and ask using `AskUserQuestion`:
"Here's your case study deck. Want to:"
- Edit a specific slide
- Regenerate a slide with different content
- Add a slide
- Remove a slide
- Change the overall style
- It's perfect — done!

Stay in this editing loop until they're satisfied.

---

## Key Principles

- **Never assume** — when in doubt, ask with options
- **Show, don't tell** — propose concrete options, not open-ended questions
- **Section by section** — don't dump everything at once
- **The story matters** — this isn't a data dump, it's a narrative about transformation
- **Quality over speed** — one great deck > three mediocre ones
- **Save for next time** — brand config persists so repeat use is faster
- **Respect user's style** — don't force emojis or specific aesthetics unless they want them

