# From a stalled deck to a course outline

Web page: https://academy.memberpress.ai/courses/slides-to-course/l1/

Lesson 1 of 3 in [From Slides to a Course](https://academy.memberpress.ai/courses/slides-to-course/), 10 min.

A slide deck holds real expertise, but it was built for one hour in a room, with you there to fill the gaps out loud. A course has to work when you're not there. Every lesson needs one thing the learner can do by the end of it, in an order that builds. So the job isn't rewriting your content. It's restructuring it.

**Get the words out**

Take the slides and the speaker notes together. The notes matter: they hold what you only ever said out loud. You can copy them by hand, or, for a PowerPoint file, let a short script read them. This one uses `python-pptx` and the Anthropic Python SDK:

```bash
pip install python-pptx anthropic
export ANTHROPIC_API_KEY="..."   # your key, from console.anthropic.com
```

```python
"""Turn a slide deck into a course outline with Claude.

Reads every slide's text and speaker notes from a .pptx,
then gives Claude the brief: who the course is for, what
they'll be able to do, modules, one outcome per lesson,
and the gaps the deck left for the speaker to fill.

    python3 outline.py workshop.pptx          # the outline
    python3 outline.py workshop.pptx --text   # deck text
"""
import sys

import anthropic
from pptx import Presentation

BRIEF = """Here is the text of a one-hour workshop deck, with the speaker notes.
Turn it into the outline of a short paid online course.

Who it's for: people who use Claude at work but get uneven results.
By the end they can: write a prompt that gets a usable answer the first time.

1. Group the material into 3 or 4 modules, in the order a learner needs it.
2. Under each module, list its lessons. Give every lesson one outcome, starting "You can".
3. Then list GAPS: places the deck relies on the speaker being in the room.
Use only what the deck covers. Plain text, no markdown, under 30 lines."""


def deck_text(path):
    lines = []
    for n, slide in enumerate(Presentation(path).slides, 1):
        text = [s.text_frame.text for s in slide.shapes
                if s.has_text_frame and s.text_frame.text]
        notes = ""
        if slide.has_notes_slide:
            notes = slide.notes_slide.notes_text_frame.text
        line = f"Slide {n}: " + " / ".join(text)
        lines.append(line + (f"\nNotes: {notes}" if notes else ""))
    return "\n".join(lines)


if __name__ == "__main__":
    text = deck_text(sys.argv[1])
    if "--text" in sys.argv:
        sys.exit(print(text))
    slides = text.count("Slide ")
    print(f"Read {slides} slides with their speaker notes. Asking Claude...\n")
    response = anthropic.Anthropic().messages.create(
        model="claude-sonnet-5-5",
        max_tokens=4000,
        messages=[{"role": "user", "content": f"{BRIEF}\n\n<deck>\n{text}\n</deck>"}],
    )
    print("".join(b.text for b in response.content if b.type == "text"))
```

`python3 outline.py yourdeck.pptx --text` prints just what it read, so you can check that the notes came through. Without `--text`, it sends that text to Claude with the brief.

**The brief**

The brief gives Claude three things: who the course is for, what they can do at the end, and the shape you want back. That shape is modules in the order a learner needs them, one outcome per lesson, and a list of gaps. Change the "Who it's for" and "By the end they can" lines to fit your own deck.

**Read what comes back**

The modules should follow what a learner needs first, not the order you gave the talk in. The gap list is often the most useful part: it marks the places where the deck relied on you being in the room. Those are the lessons you still have to write.

**The common mistakes**

- Treating each slide as a lesson. A slide is a talking point, and twenty slides don't make twenty lessons.
- Keeping everything Claude suggests. It can propose a lesson on something your deck never covered. Check every lesson against what you actually teach, and cut or rewrite any that aren't yours.

## Try these prompts

- Here is the text and speaker notes of a talk I gave. Group it into 3 or 4 modules in the order a learner needs it, give every lesson one outcome starting 'You can', and list the gaps where the deck relies on me being in the room.
- Which of these lessons covers something my deck never mentions? List them so I can cut or rewrite them.

Next: [A mini course in one weekend](https://academy.memberpress.ai/courses/slides-to-course/l2/)
