make-slide 2.0.0 → 2.1.1
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.
|
@@ -74,6 +74,13 @@ Follow these steps in order:
|
|
|
74
74
|
- 30-min talk → 30–40 slides
|
|
75
75
|
- Identify the target audience and tone (technical, business, casual, academic)
|
|
76
76
|
- Detect the user's language from the conversation — generate content in that language
|
|
77
|
+
- Ask the user about the desired output format (always ask, do not skip):
|
|
78
|
+
> **Which output format would you like?**
|
|
79
|
+
> - **HTML** — Interactive single-file presentation you can open in a browser (navigation, animations, speaker notes built-in)
|
|
80
|
+
> - **PPTX** — PowerPoint file for Office, Google Slides, or Keynote
|
|
81
|
+
|
|
82
|
+
- If the user already mentioned "PowerPoint", "pptx", "PPT", ".pptx", "Google Slides", or "Keynote" in their request → skip the question and use PPTX mode
|
|
83
|
+
- Otherwise, always ask explicitly before proceeding
|
|
77
84
|
|
|
78
85
|
### Step 2: Choose a Theme
|
|
79
86
|
Present the user with the theme gallery link for browsing:
|
|
@@ -91,12 +98,28 @@ If the user doesn't choose a theme, recommend one based on context:
|
|
|
91
98
|
- Product launch → `keynote-apple`
|
|
92
99
|
- Casual/team event → `playful`
|
|
93
100
|
|
|
94
|
-
### Step 3:
|
|
95
|
-
Ask the user:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
### Step 3: Image Options
|
|
102
|
+
Ask the user which image approach they prefer:
|
|
103
|
+
|
|
104
|
+
> **How would you like to handle images in your slides?**
|
|
105
|
+
>
|
|
106
|
+
> **A) No images** — Use styled CSS placeholders (emoji, icons, shapes) that match the theme. Clean and lightweight.
|
|
107
|
+
>
|
|
108
|
+
> **B) I'll provide URLs** — I'll mark image positions in the outline, and you provide the image URLs.
|
|
109
|
+
>
|
|
110
|
+
> **C) Auto-search** — I'll search the web for relevant, high-quality images and place them automatically.
|
|
111
|
+
|
|
112
|
+
- **Option A** → Use CSS placeholders matching the theme (emoji, SVG icons, CSS shapes)
|
|
113
|
+
- **Option B** → Mark image positions in the outline, ask user for URLs, use `<img src>` with `loading="lazy"` and descriptive `alt` text
|
|
114
|
+
- **Option C** → For each slide that would benefit from an image:
|
|
115
|
+
1. Determine a relevant English search keyword based on the slide content
|
|
116
|
+
2. Use Unsplash source URLs which are guaranteed to resolve: `https://source.unsplash.com/featured/1200x800/?{keyword}`
|
|
117
|
+
- Example: `https://source.unsplash.com/featured/1200x800/?technology,ai`
|
|
118
|
+
- Example: `https://source.unsplash.com/featured/1200x800/?teamwork,office`
|
|
119
|
+
3. Alternatively, search the web for images on Unsplash or Pexels and use the direct image URL (verify the URL returns 200 before inserting)
|
|
120
|
+
4. Insert as `<img src="URL" alt="description" loading="lazy">`
|
|
121
|
+
5. NEVER use AI-generated or guessed URLs — only use URLs from actual search results or the Unsplash source pattern above
|
|
122
|
+
6. Inform the user that auto-searched images are royalty-free from Unsplash (Unsplash License)
|
|
100
123
|
|
|
101
124
|
### Step 4: Generate Outline
|
|
102
125
|
Create a slide-by-slide outline with:
|
|
@@ -138,6 +161,8 @@ Add speaker notes as `data-notes` attributes on each slide's `<div>`:
|
|
|
138
161
|
- Expand on the slide text — don't just repeat it
|
|
139
162
|
- Include transitions between slides (e.g., "Now let's move on to...")
|
|
140
163
|
|
|
164
|
+
**Speaker Notes Panel must be a separate popup window** using `window.open()`. Do NOT render notes inline at the bottom of the slide — this breaks the slide layout. The `S` key should toggle a popup window that shows the current slide's notes and auto-updates on slide change. See `references/html-spec.md` for the implementation pattern.
|
|
165
|
+
|
|
141
166
|
### Step 8: Generate Script (Mode A and B only)
|
|
142
167
|
For Mode A and B, also generate a separate `script.md` file containing:
|
|
143
168
|
- Full speaking script organized by slide
|
|
@@ -150,13 +175,28 @@ For Mode C, the user already has a script — skip this step.
|
|
|
150
175
|
### Step 9: Save and Deliver
|
|
151
176
|
- Save the presentation as `index.html` (or user-specified filename)
|
|
152
177
|
- Save the script as `script.md` (if generated)
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
178
|
+
- Tell the user they can open `index.html` directly in their browser to view the presentation — no server needed
|
|
179
|
+
- The file is fully self-contained (all CSS/JS inlined), so it works by simply double-clicking the file or dragging it into a browser
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## PPTX Output Mode
|
|
184
|
+
|
|
185
|
+
When the user selects PPTX output, follow this modified workflow:
|
|
186
|
+
|
|
187
|
+
### PPTX Step 1: Generate HTML Slides (PPTX-Compatible)
|
|
188
|
+
Follow the standard HTML generation workflow (Steps 1-7) but with these constraints from the PPTX spec. Read `references/pptx-spec.md` for the complete PPTX conversion rules before generating HTML.
|
|
189
|
+
|
|
190
|
+
### PPTX Step 2: Convert HTML to PPTX
|
|
191
|
+
Use the html2pptx conversion pipeline:
|
|
192
|
+
1. Install dependencies if not present: `npm install pptxgenjs sharp puppeteer`
|
|
193
|
+
2. For each HTML slide, render and convert to PPTX using PptxGenJS
|
|
194
|
+
3. Combine all slides into a single `.pptx` file
|
|
195
|
+
|
|
196
|
+
### PPTX Step 3: Validate and Deliver
|
|
197
|
+
- Open the PPTX to verify content and formatting
|
|
198
|
+
- Save as `presentation.pptx` (or user-specified filename)
|
|
199
|
+
- Offer to also generate the HTML version for preview
|
|
160
200
|
|
|
161
201
|
---
|
|
162
202
|
|
|
@@ -47,10 +47,28 @@ Every generated presentation includes all of the following features. These ensur
|
|
|
47
47
|
|
|
48
48
|
### Speaker Notes Panel
|
|
49
49
|
- `S` key toggles the speaker notes panel
|
|
50
|
-
-
|
|
50
|
+
- Implementation: Open a **separate popup window** using `window.open()`, not an inline panel
|
|
51
|
+
- The popup window displays:
|
|
52
|
+
- Current slide number and total
|
|
51
53
|
- Current slide's notes (from `data-notes` attribute)
|
|
52
|
-
- Next slide preview (when possible)
|
|
53
|
-
-
|
|
54
|
+
- Next slide preview text (when possible)
|
|
55
|
+
- The popup auto-updates when the main presentation changes slides
|
|
56
|
+
- Popup styling should be clean and readable (large font, good contrast)
|
|
57
|
+
- The main slide view must NOT be affected by the notes panel
|
|
58
|
+
- Example implementation pattern:
|
|
59
|
+
```javascript
|
|
60
|
+
let notesWindow = null;
|
|
61
|
+
function toggleNotes() {
|
|
62
|
+
if (notesWindow && !notesWindow.closed) { notesWindow.close(); notesWindow = null; return; }
|
|
63
|
+
notesWindow = window.open('', 'SpeakerNotes', 'width=500,height=400');
|
|
64
|
+
// Write styled HTML to notesWindow.document
|
|
65
|
+
updateNotes();
|
|
66
|
+
}
|
|
67
|
+
function updateNotes() {
|
|
68
|
+
if (!notesWindow || notesWindow.closed) return;
|
|
69
|
+
// Update content with current slide's data-notes
|
|
70
|
+
}
|
|
71
|
+
```
|
|
54
72
|
|
|
55
73
|
### Touch/Swipe Navigation
|
|
56
74
|
- Swipe left → Next slide
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# PPTX Conversion Specification
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
When generating PPTX output, first create HTML slides following PPTX-compatible rules, then convert using PptxGenJS or python-pptx.
|
|
5
|
+
|
|
6
|
+
## HTML-to-PPTX Constraints
|
|
7
|
+
|
|
8
|
+
These rules ensure HTML slides convert cleanly to PowerPoint format.
|
|
9
|
+
|
|
10
|
+
### Text Rules (Critical)
|
|
11
|
+
- ALL text MUST be inside `<p>`, `<h1>`-`<h6>`, `<ul>`, or `<ol>` tags
|
|
12
|
+
- Text inside raw `<div>` or `<span>` without a text tag will be SILENTLY IGNORED in PPTX
|
|
13
|
+
- NEVER use `<br>` tags — use separate text elements for each line
|
|
14
|
+
- NEVER use manual bullet symbols (•, -, *) — use `<ul>` or `<ol>` lists
|
|
15
|
+
|
|
16
|
+
### Font Rules
|
|
17
|
+
- Use ONLY web-safe fonts that are universally available in PowerPoint:
|
|
18
|
+
- ✅ Arial, Helvetica, Verdana, Tahoma, Trebuchet MS, Georgia, Times New Roman, Courier New, Impact
|
|
19
|
+
- ❌ Pretendard, JetBrains Mono, SF Pro, Roboto, or any custom/CDN fonts
|
|
20
|
+
- For code blocks, use Courier New instead of JetBrains Mono
|
|
21
|
+
|
|
22
|
+
### Color and Gradient Rules
|
|
23
|
+
- NEVER use CSS gradients (`linear-gradient`, `radial-gradient`) — they don't convert to PowerPoint
|
|
24
|
+
- If gradients are needed, rasterize them as PNG images first using Sharp/Puppeteer, then reference as `<img>`
|
|
25
|
+
- Use solid colors with hex format (#RRGGBB)
|
|
26
|
+
- Ensure sufficient contrast for readability
|
|
27
|
+
|
|
28
|
+
### Layout Rules
|
|
29
|
+
- Slide dimensions: 720pt × 405pt (16:9 standard)
|
|
30
|
+
- Use `display: flex` on body to prevent margin collapse
|
|
31
|
+
- Use `margin` for spacing (padding is included in element size)
|
|
32
|
+
- Flexbox positioning works — positions calculated from rendered layout
|
|
33
|
+
- For slides with charts/tables, use either:
|
|
34
|
+
- Two-column layout (preferred): header spanning full width, text + content side by side
|
|
35
|
+
- Full-slide layout: let featured content take the entire slide
|
|
36
|
+
- NEVER vertically stack charts/tables below text in a single column
|
|
37
|
+
|
|
38
|
+
### Shape and Border Rules
|
|
39
|
+
- Backgrounds, borders, and shadows ONLY work on `<div>` elements, NOT on text elements
|
|
40
|
+
- Supported border styles: `border: 2px solid #333333`
|
|
41
|
+
- Partial borders supported: `border-left`, `border-right`, `border-top`, `border-bottom`
|
|
42
|
+
- `border-radius: 50%` creates circular shapes
|
|
43
|
+
- Box shadows convert to PowerPoint shadows (outer only, inset shadows ignored)
|
|
44
|
+
|
|
45
|
+
### Image Rules
|
|
46
|
+
- Use `<img>` tags with absolute URLs or local file paths
|
|
47
|
+
- Inline SVG is NOT supported — convert to PNG first
|
|
48
|
+
- Icons/emoji should be rasterized as PNG images
|
|
49
|
+
|
|
50
|
+
### Animation Rules
|
|
51
|
+
- CSS animations do NOT convert to PowerPoint
|
|
52
|
+
- PowerPoint animations must be added programmatically via PptxGenJS if needed
|
|
53
|
+
- For PPTX mode, skip stagger animations and transitions in HTML
|
|
54
|
+
|
|
55
|
+
## Conversion Methods
|
|
56
|
+
|
|
57
|
+
### Method 1: PptxGenJS (Recommended for Node.js)
|
|
58
|
+
```bash
|
|
59
|
+
npm install pptxgenjs sharp puppeteer
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Workflow:
|
|
63
|
+
1. Create HTML files for each slide (following rules above)
|
|
64
|
+
2. Use Puppeteer to render each HTML slide and extract element positions
|
|
65
|
+
3. Use PptxGenJS to create native PowerPoint elements at the extracted positions
|
|
66
|
+
4. Save as .pptx
|
|
67
|
+
|
|
68
|
+
### Method 2: python-pptx (Alternative for Python)
|
|
69
|
+
```bash
|
|
70
|
+
pip install python-pptx Pillow
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Workflow:
|
|
74
|
+
1. Create HTML slides following PPTX-compatible rules
|
|
75
|
+
2. Use python-pptx to create slides programmatically
|
|
76
|
+
3. Map HTML elements to python-pptx objects:
|
|
77
|
+
- `<p>`, `<h1>`-`<h6>` → `add_textbox()` with `TextFrame`
|
|
78
|
+
- `<ul>`, `<ol>` → `TextFrame` with `level` property for indentation
|
|
79
|
+
- `<div>` with background → `add_shape()` with fill
|
|
80
|
+
- `<img>` → `add_picture()`
|
|
81
|
+
4. Save as .pptx
|
|
82
|
+
|
|
83
|
+
### Method 3: Screenshot-based (Simplest but lowest quality)
|
|
84
|
+
```bash
|
|
85
|
+
npm install puppeteer pptxgenjs
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Workflow:
|
|
89
|
+
1. Generate full HTML presentation (standard mode, no PPTX constraints needed)
|
|
90
|
+
2. Use Puppeteer to screenshot each slide as high-resolution PNG
|
|
91
|
+
3. Insert each screenshot as a full-slide image in PPTX
|
|
92
|
+
4. Add text overlays for searchability (optional)
|
|
93
|
+
- Note: This produces image-based slides (no editable text) but preserves exact visual design
|
|
94
|
+
|
|
95
|
+
## Design Principles for PPTX
|
|
96
|
+
|
|
97
|
+
### Color Palette Selection
|
|
98
|
+
Choose 3-5 colors that work together:
|
|
99
|
+
- 1 dominant background color
|
|
100
|
+
- 1-2 supporting/accent colors
|
|
101
|
+
- 1 text color with strong contrast
|
|
102
|
+
- Use solid colors only (no gradients unless rasterized)
|
|
103
|
+
|
|
104
|
+
### Typography
|
|
105
|
+
- Use 2-3 font sizes max for clear hierarchy:
|
|
106
|
+
- Title: 36-44pt
|
|
107
|
+
- Subtitle/heading: 24-28pt
|
|
108
|
+
- Body: 16-20pt
|
|
109
|
+
- Caption: 12-14pt
|
|
110
|
+
- Bold for emphasis, avoid italic for body text
|
|
111
|
+
|
|
112
|
+
### Layout Tips
|
|
113
|
+
- Leave 10% margin on all sides (minimum)
|
|
114
|
+
- Align elements to a grid
|
|
115
|
+
- Use consistent spacing between elements
|
|
116
|
+
- Left-align body text (center-align only for titles)
|
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
**AI 코딩 에이전트가 단일 HTML 파일로 고품질 프레젠테이션을 생성하는 범용 스킬.**
|
|
5
5
|
|
|
6
6
|
[](https://make-slide.vercel.app)
|
|
7
|
+
[](https://www.npmjs.com/package/make-slide)
|
|
7
8
|
[](LICENSE)
|
|
8
9
|
|
|
9
10
|
---
|
|
@@ -41,59 +42,94 @@ Instead of crafting designs from scratch every time (wasting tokens and producin
|
|
|
41
42
|
|
|
42
43
|
## 🚀 Quick Start
|
|
43
44
|
|
|
44
|
-
|
|
45
|
+
### Install with npx (Recommended)
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
```bash
|
|
48
|
+
npx make-slide init
|
|
47
49
|
```
|
|
48
|
-
|
|
50
|
+
|
|
51
|
+
This will:
|
|
52
|
+
1. Copy the skill files into your project's `.claude/skills/make-slide/`
|
|
53
|
+
2. Auto-detect your AI config (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`) and inject the `/make-slide` command
|
|
54
|
+
3. You're ready! Type `/make-slide` in Claude Code to create presentations
|
|
55
|
+
|
|
56
|
+
### Other Commands
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx make-slide themes # View all 10 themes
|
|
60
|
+
npx make-slide gallery # Open theme gallery in browser
|
|
61
|
+
npx make-slide help # Show help
|
|
49
62
|
```
|
|
50
63
|
|
|
51
|
-
###
|
|
64
|
+
### Manual Setup (Any AI Tool)
|
|
65
|
+
|
|
66
|
+
Give your AI coding tool the following instruction:
|
|
67
|
+
|
|
52
68
|
```
|
|
53
|
-
|
|
69
|
+
Read SKILL.md from https://github.com/kuneosu/make-slide and create a presentation about [your topic] using the minimal-dark theme.
|
|
54
70
|
```
|
|
55
71
|
|
|
56
|
-
|
|
72
|
+
Or fetch it directly:
|
|
57
73
|
```
|
|
58
|
-
Fetch https://raw.githubusercontent.com/kuneosu/make-slide/main/SKILL.md and follow its instructions to create a presentation about [your topic].
|
|
74
|
+
Fetch https://raw.githubusercontent.com/kuneosu/make-slide/main/.claude/skills/make-slide/SKILL.md and follow its instructions to create a presentation about [your topic].
|
|
59
75
|
```
|
|
60
76
|
|
|
61
77
|
> **Tip:** Browse themes first at [make-slide.vercel.app](https://make-slide.vercel.app) and tell your AI which one you like!
|
|
62
78
|
|
|
63
79
|
---
|
|
64
80
|
|
|
65
|
-
##
|
|
81
|
+
## ⚙️ How It Works
|
|
66
82
|
|
|
67
|
-
|
|
83
|
+
### The `.claude/skills/` Convention
|
|
68
84
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
make-slide uses Claude Code's native skill system. After running `npx make-slide init`, your project gets:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
your-project/
|
|
89
|
+
├── .claude/
|
|
90
|
+
│ └── skills/
|
|
91
|
+
│ └── make-slide/
|
|
92
|
+
│ ├── SKILL.md ← Main instruction file
|
|
93
|
+
│ └── references/
|
|
94
|
+
│ ├── themes.md ← 10 themes with GitHub raw URLs
|
|
95
|
+
│ ├── slide-types.md ← 12 slide type patterns
|
|
96
|
+
│ └── html-spec.md ← HTML requirements
|
|
97
|
+
├── CLAUDE.md ← Auto-updated with /make-slide command
|
|
98
|
+
└── ... your project files
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
When you type `/make-slide` in Claude Code, it reads the skill and follows a 9-step workflow:
|
|
102
|
+
|
|
103
|
+
1. **Analyze your input** — determine mode (topic / content / script) and slide count
|
|
104
|
+
2. **Choose a theme** — you pick from the gallery or AI recommends one
|
|
105
|
+
3. **Check image needs** — real images or styled CSS placeholders
|
|
106
|
+
4. **Generate outline** — slide-by-slide plan for your approval
|
|
107
|
+
5. **Fetch theme reference** — downloads the theme template from GitHub
|
|
108
|
+
6. **Generate HTML** — builds your presentation matching the theme exactly
|
|
109
|
+
7. **Add speaker notes** — conversational notes with timing cues
|
|
110
|
+
8. **Generate script** — full speaking script (optional)
|
|
111
|
+
9. **Deliver** — saves `index.html` + offers local preview
|
|
112
|
+
|
|
113
|
+
Theme files are fetched from GitHub on demand — nothing heavy is stored locally.
|
|
81
114
|
|
|
82
115
|
---
|
|
83
116
|
|
|
84
|
-
##
|
|
117
|
+
## 🎨 Themes
|
|
85
118
|
|
|
86
|
-
|
|
87
|
-
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
88
|
-
│ 1. AI reads │────▶│ 2. User picks│────▶│ 3. AI fetches│────▶│ 4. AI builds │
|
|
89
|
-
│ SKILL.md │ │ theme │ │ reference │ │ your slides │
|
|
90
|
-
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
|
|
91
|
-
```
|
|
119
|
+
All 10 themes are live at **[make-slide.vercel.app](https://make-slide.vercel.app)**
|
|
92
120
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
121
|
+
| # | Theme | Style | Best For |
|
|
122
|
+
|:-:|-------|-------|----------|
|
|
123
|
+
| 1 | `minimal-dark` | Clean dark, white typography | Tech talks, conferences |
|
|
124
|
+
| 2 | `minimal-light` | Bright white, precise type | General, academic |
|
|
125
|
+
| 3 | `corporate` | Navy & gold, structured | Business, reports |
|
|
126
|
+
| 4 | `gradient-pop` | Vibrant gradients, glassmorphism | Startups, pitches |
|
|
127
|
+
| 5 | `neon-terminal` | Terminal green, scanlines | Dev talks, hackathons |
|
|
128
|
+
| 6 | `paper` | Kraft paper, serif type | Education, workshops |
|
|
129
|
+
| 7 | `keynote-apple` | Dramatic dark, Apple-inspired | Product launches, keynotes |
|
|
130
|
+
| 8 | `magazine` | Editorial, asymmetric layout | Design, creative |
|
|
131
|
+
| 9 | `data-focus` | Dashboard aesthetic, clean | Data analysis, KPIs |
|
|
132
|
+
| 10 | `playful` | Rounded, pastel, bouncy | Workshops, casual talks |
|
|
97
133
|
|
|
98
134
|
---
|
|
99
135
|
|
|
@@ -101,15 +137,22 @@ All 10 themes are live at **[make-slide.vercel.app](https://make-slide.vercel.ap
|
|
|
101
137
|
|
|
102
138
|
```
|
|
103
139
|
make-slide/
|
|
104
|
-
├──
|
|
105
|
-
├──
|
|
106
|
-
├──
|
|
140
|
+
├── package.json # npm package config
|
|
141
|
+
├── bin/cli.js # CLI (init, themes, gallery)
|
|
142
|
+
├── .claude/skills/make-slide/ # Skill template (copied by init)
|
|
143
|
+
│ ├── SKILL.md
|
|
144
|
+
│ └── references/
|
|
145
|
+
│ ├── themes.md
|
|
146
|
+
│ ├── slide-types.md
|
|
147
|
+
│ └── html-spec.md
|
|
148
|
+
├── SKILL.md # Legacy standalone skill file
|
|
149
|
+
├── README.md # This file
|
|
150
|
+
├── LICENSE # MIT License
|
|
107
151
|
│
|
|
108
|
-
├── themes/
|
|
152
|
+
├── themes/ # Theme references (10 themes)
|
|
109
153
|
│ ├── minimal-dark/
|
|
110
|
-
│ │ ├── README.md
|
|
111
|
-
│ │
|
|
112
|
-
│ │ └── preview.png # Theme thumbnail
|
|
154
|
+
│ │ ├── README.md # Design guidelines
|
|
155
|
+
│ │ └── reference.html # Full example presentation
|
|
113
156
|
│ ├── minimal-light/
|
|
114
157
|
│ ├── corporate/
|
|
115
158
|
│ ├── gradient-pop/
|
|
@@ -120,18 +163,17 @@ make-slide/
|
|
|
120
163
|
│ ├── data-focus/
|
|
121
164
|
│ └── playful/
|
|
122
165
|
│
|
|
123
|
-
├── gallery/
|
|
124
|
-
│
|
|
125
|
-
│ └── public/previews/ # Theme screenshots
|
|
166
|
+
├── gallery/ # Theme gallery website (Vercel)
|
|
167
|
+
│ └── index.html
|
|
126
168
|
│
|
|
127
|
-
├── core/
|
|
128
|
-
│ ├── navigation.js
|
|
129
|
-
│ ├── fullscreen.js
|
|
130
|
-
│ ├── speaker-notes.js
|
|
131
|
-
│ ├── pdf-export.css
|
|
132
|
-
│ └── base.css
|
|
169
|
+
├── core/ # Shared JS/CSS source
|
|
170
|
+
│ ├── navigation.js
|
|
171
|
+
│ ├── fullscreen.js
|
|
172
|
+
│ ├── speaker-notes.js
|
|
173
|
+
│ ├── pdf-export.css
|
|
174
|
+
│ └── base.css
|
|
133
175
|
│
|
|
134
|
-
└── examples/
|
|
176
|
+
└── examples/ # Example presentations
|
|
135
177
|
└── pineone-talk-reference.html
|
|
136
178
|
```
|
|
137
179
|
|
|
@@ -141,24 +183,23 @@ make-slide/
|
|
|
141
183
|
|
|
142
184
|
### Adding a New Theme
|
|
143
185
|
|
|
144
|
-
1.
|
|
186
|
+
1. Create a folder in `themes/` with your theme ID (kebab-case):
|
|
145
187
|
```
|
|
146
188
|
themes/your-theme-name/
|
|
147
189
|
```
|
|
148
190
|
|
|
149
|
-
2.
|
|
150
|
-
- `reference.html` —
|
|
151
|
-
- `README.md` — Design guidelines: color palette, typography, spacing,
|
|
152
|
-
- `preview.png` — A 1280×720 screenshot of the title slide
|
|
191
|
+
2. Add these files:
|
|
192
|
+
- `reference.html` — Complete 10-slide example with all slide types, navigation, fullscreen, speaker notes, and PDF export
|
|
193
|
+
- `README.md` — Design guidelines: color palette, typography, spacing, philosophy
|
|
153
194
|
|
|
154
|
-
3.
|
|
195
|
+
3. Follow the conventions in `core/` for navigation, fullscreen, speaker notes, and PDF export
|
|
155
196
|
|
|
156
|
-
4.
|
|
197
|
+
4. Submit a PR — your theme will appear in the gallery!
|
|
157
198
|
|
|
158
199
|
### Guidelines
|
|
159
200
|
- Output must be a single `.html` file — all CSS/JS inlined
|
|
160
|
-
- Only external dependencies
|
|
161
|
-
- All themes must support the full slide type set
|
|
201
|
+
- Only external dependencies: font CDNs (Pretendard required) + Prism.js (for code blocks)
|
|
202
|
+
- All themes must support the full slide type set
|
|
162
203
|
- Test keyboard navigation, fullscreen, speaker notes, and print export
|
|
163
204
|
|
|
164
205
|
---
|
|
@@ -177,6 +218,7 @@ make-slide/
|
|
|
177
218
|
**AI 코딩 에이전트가 단일 HTML 파일로 고품질 프레젠테이션을 생성하는 범용 스킬.**
|
|
178
219
|
|
|
179
220
|
[](https://make-slide.vercel.app)
|
|
221
|
+
[](https://www.npmjs.com/package/make-slide)
|
|
180
222
|
[](LICENSE)
|
|
181
223
|
|
|
182
224
|
---
|
|
@@ -195,139 +237,102 @@ make-slide/
|
|
|
195
237
|
|
|
196
238
|
---
|
|
197
239
|
|
|
198
|
-
## ✨ 주요 기능
|
|
199
|
-
|
|
200
|
-
| 기능 | 설명 |
|
|
201
|
-
|------|------|
|
|
202
|
-
| 🎨 **10개 테마** | 다크 미니멀부터 플레이풀 파스텔까지 — [갤러리 둘러보기](https://make-slide.vercel.app) |
|
|
203
|
-
| 📄 **단일 HTML 출력** | 파일 하나, 빌드 불필요, 프레임워크 없음 — 브라우저에서 바로 열기 |
|
|
204
|
-
| 🎤 **발표자 노트** | 슬라이드별 발표 노트 내장 (`S` 키로 토글) |
|
|
205
|
-
| 🖨️ **PDF 내보내기** | `Ctrl+P`로 깔끔하게 인쇄 (`@media print` 스타일 적용) |
|
|
206
|
-
| 🖥️ **전체화면** | `F` 키로 풀스크린 전환 |
|
|
207
|
-
| ⌨️ **키보드 네비게이션** | 방향키, 스페이스바, 터치/스와이프 지원 |
|
|
208
|
-
| 📥 **3가지 입력 모드** | 주제만 / 내용 제공 / 대본 제공 |
|
|
209
|
-
| 🤖 **모든 AI 도구 호환** | Claude Code, Gemini CLI, Codex, Cursor 등 |
|
|
210
|
-
| 🌍 **언어 무관** | 사용자의 언어로 콘텐츠 생성 |
|
|
211
|
-
| 📊 **CSS 전용 차트** | 바 차트, 프로그레스 링, KPI 카드 — 차트 라이브러리 불필요 |
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
240
|
## 🚀 빠른 시작
|
|
216
241
|
|
|
217
|
-
|
|
242
|
+
### npx로 설치 (권장)
|
|
218
243
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
https://github.com/kuneosu/make-slide 의 SKILL.md를 읽고 [주제]에 대한 프레젠테이션을 minimal-dark 테마로 만들어줘.
|
|
244
|
+
```bash
|
|
245
|
+
npx make-slide init
|
|
222
246
|
```
|
|
223
247
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
248
|
+
이 명령어는:
|
|
249
|
+
1. `.claude/skills/make-slide/`에 스킬 파일 복사
|
|
250
|
+
2. AI 설정 파일(`CLAUDE.md`, `AGENTS.md`, `.cursorrules`) 자동 감지 후 `/make-slide` 명령어 주입
|
|
251
|
+
3. 준비 완료! Claude Code에서 `/make-slide` 입력하면 프레젠테이션 생성
|
|
252
|
+
|
|
253
|
+
### 기타 명령어
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
npx make-slide themes # 10개 테마 보기
|
|
257
|
+
npx make-slide gallery # 테마 갤러리 열기
|
|
258
|
+
npx make-slide help # 도움말
|
|
227
259
|
```
|
|
228
260
|
|
|
229
|
-
###
|
|
261
|
+
### 수동 설정 (다른 AI 도구)
|
|
262
|
+
|
|
263
|
+
AI 코딩 도구에 다음과 같이 지시하세요:
|
|
264
|
+
|
|
230
265
|
```
|
|
231
|
-
https://
|
|
266
|
+
https://github.com/kuneosu/make-slide 의 SKILL.md를 읽고 [주제]에 대한 프레젠테이션을 minimal-dark 테마로 만들어줘.
|
|
232
267
|
```
|
|
233
268
|
|
|
234
269
|
> **팁:** [make-slide.vercel.app](https://make-slide.vercel.app)에서 테마를 먼저 둘러보고 마음에 드는 것을 AI에게 알려주세요!
|
|
235
270
|
|
|
236
271
|
---
|
|
237
272
|
|
|
238
|
-
##
|
|
239
|
-
|
|
240
|
-
10개 테마 모두 **[make-slide.vercel.app](https://make-slide.vercel.app)** 에서 확인할 수 있습니다.
|
|
273
|
+
## ⚙️ 작동 방식
|
|
241
274
|
|
|
242
|
-
|
|
243
|
-
|:-:|------|--------|-----------|
|
|
244
|
-
| 1 | [`minimal-dark`](https://make-slide.vercel.app) | 다크 배경, 화이트 타이포 | 테크 발표, 컨퍼런스 |
|
|
245
|
-
| 2 | [`minimal-light`](https://make-slide.vercel.app) | 화이트 배경, 클린 타이포 | 일반 발표, 세미나 |
|
|
246
|
-
| 3 | [`corporate`](https://make-slide.vercel.app) | 네이비 & 골드, 구조적 | 비즈니스, 보고 |
|
|
247
|
-
| 4 | [`gradient-pop`](https://make-slide.vercel.app) | 비비드 그라디언트, 글라스모피즘 | 스타트업, 피칭 |
|
|
248
|
-
| 5 | [`neon-terminal`](https://make-slide.vercel.app) | 터미널 그린, 스캔라인 | 개발자 발표, 해커톤 |
|
|
249
|
-
| 6 | [`paper`](https://make-slide.vercel.app) | 크래프트지, 세리프 타이포 | 교육, 워크숍 |
|
|
250
|
-
| 7 | [`keynote-apple`](https://make-slide.vercel.app) | 드라마틱 다크, Apple 스타일 | 제품 발표, 키노트 |
|
|
251
|
-
| 8 | [`magazine`](https://make-slide.vercel.app) | 에디토리얼, 비대칭 레이아웃 | 디자인, 크리에이티브 |
|
|
252
|
-
| 9 | [`data-focus`](https://make-slide.vercel.app) | 대시보드 스타일, 깔끔 | 데이터 분석, KPI |
|
|
253
|
-
| 10 | [`playful`](https://make-slide.vercel.app) | 둥근 모서리, 파스텔, 바운스 | 워크숍, 캐주얼 발표 |
|
|
275
|
+
### `.claude/skills/` 컨벤션
|
|
254
276
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
## ⚙️ 작동 방식
|
|
277
|
+
`npx make-slide init` 실행 후 프로젝트 구조:
|
|
258
278
|
|
|
259
279
|
```
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
│
|
|
263
|
-
|
|
280
|
+
your-project/
|
|
281
|
+
├── .claude/
|
|
282
|
+
│ └── skills/
|
|
283
|
+
│ └── make-slide/
|
|
284
|
+
│ ├── SKILL.md ← 메인 지침서
|
|
285
|
+
│ └── references/
|
|
286
|
+
│ ├── themes.md ← 10개 테마 + GitHub raw URL
|
|
287
|
+
│ ├── slide-types.md ← 12가지 슬라이드 타입
|
|
288
|
+
│ └── html-spec.md ← HTML 요구사항
|
|
289
|
+
├── CLAUDE.md ← /make-slide 명령어 자동 추가
|
|
290
|
+
└── ... 프로젝트 파일들
|
|
264
291
|
```
|
|
265
292
|
|
|
266
|
-
|
|
267
|
-
2. **사용자가 테마를 선택합니다** — [갤러리](https://make-slide.vercel.app)에서 선택하거나 AI가 추천
|
|
268
|
-
3. **AI가 테마 레퍼런스를 가져옵니다** — GitHub에서 `reference.html`(풀 예시) + `README.md`(디자인 가이드) fetch
|
|
269
|
-
4. **AI가 프레젠테이션을 생성합니다** — 테마에 맞는 단일 `index.html` 파일 + 발표자 노트
|
|
293
|
+
Claude Code에서 `/make-slide` 입력하면 9단계 워크플로우를 따릅니다:
|
|
270
294
|
|
|
271
|
-
|
|
295
|
+
1. **입력 분석** — 모드(주제/내용/대본) 및 슬라이드 수 결정
|
|
296
|
+
2. **테마 선택** — 갤러리에서 선택하거나 AI가 추천
|
|
297
|
+
3. **이미지 확인** — 실제 이미지 또는 CSS 플레이스홀더
|
|
298
|
+
4. **아웃라인 생성** — 슬라이드별 구성 승인
|
|
299
|
+
5. **테마 레퍼런스 가져오기** — GitHub에서 테마 템플릿 다운로드
|
|
300
|
+
6. **HTML 생성** — 테마에 맞는 프레젠테이션 빌드
|
|
301
|
+
7. **발표자 노트 추가** — 타이밍 큐 포함 노트
|
|
302
|
+
8. **대본 생성** — 전체 발표 대본 (선택)
|
|
303
|
+
9. **전달** — `index.html` 저장 + 로컬 프리뷰
|
|
272
304
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
```
|
|
276
|
-
make-slide/
|
|
277
|
-
├── README.md # 이 파일
|
|
278
|
-
├── SKILL.md # AI 에이전트 지침서 (스킬)
|
|
279
|
-
├── LICENSE # MIT 라이선스
|
|
280
|
-
│
|
|
281
|
-
├── themes/ # 테마 레퍼런스 (10개)
|
|
282
|
-
│ ├── minimal-dark/
|
|
283
|
-
│ │ ├── README.md # 디자인 가이드라인
|
|
284
|
-
│ │ ├── reference.html # 전체 예시 프레젠테이션
|
|
285
|
-
│ │ └── preview.png # 테마 썸네일
|
|
286
|
-
│ ├── minimal-light/
|
|
287
|
-
│ ├── corporate/
|
|
288
|
-
│ ├── ... (총 10개)
|
|
289
|
-
│ └── playful/
|
|
290
|
-
│
|
|
291
|
-
├── gallery/ # 테마 갤러리 웹사이트 (Vercel)
|
|
292
|
-
│ ├── index.html # 갤러리 페이지
|
|
293
|
-
│ └── public/previews/ # 테마 스크린샷
|
|
294
|
-
│
|
|
295
|
-
├── core/ # 공통 JS/CSS 소스
|
|
296
|
-
│ ├── navigation.js # 키보드 + 터치 네비게이션
|
|
297
|
-
│ ├── fullscreen.js # 전체화면 토글
|
|
298
|
-
│ ├── speaker-notes.js # 발표자 노트 패널
|
|
299
|
-
│ ├── pdf-export.css # 인쇄 스타일
|
|
300
|
-
│ └── base.css # 리셋 + 유틸리티
|
|
301
|
-
│
|
|
302
|
-
└── examples/ # 예시 프레젠테이션
|
|
303
|
-
└── pineone-talk-reference.html
|
|
304
|
-
```
|
|
305
|
+
테마 파일은 GitHub에서 온디맨드로 가져옵니다 — 로컬에 무거운 파일이 저장되지 않습니다.
|
|
305
306
|
|
|
306
307
|
---
|
|
307
308
|
|
|
308
|
-
##
|
|
309
|
+
## 🎨 테마
|
|
309
310
|
|
|
310
|
-
|
|
311
|
+
10개 테마 모두 **[make-slide.vercel.app](https://make-slide.vercel.app)** 에서 확인할 수 있습니다.
|
|
311
312
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
313
|
+
| # | 테마 | 스타일 | 추천 용도 |
|
|
314
|
+
|:-:|------|--------|-----------|
|
|
315
|
+
| 1 | `minimal-dark` | 다크 배경, 화이트 타이포 | 테크 발표, 컨퍼런스 |
|
|
316
|
+
| 2 | `minimal-light` | 화이트 배경, 클린 타이포 | 일반 발표, 세미나 |
|
|
317
|
+
| 3 | `corporate` | 네이비 & 골드, 구조적 | 비즈니스, 보고 |
|
|
318
|
+
| 4 | `gradient-pop` | 비비드 그라디언트, 글라스모피즘 | 스타트업, 피칭 |
|
|
319
|
+
| 5 | `neon-terminal` | 터미널 그린, 스캔라인 | 개발자 발표, 해커톤 |
|
|
320
|
+
| 6 | `paper` | 크래프트지, 세리프 타이포 | 교육, 워크숍 |
|
|
321
|
+
| 7 | `keynote-apple` | 드라마틱 다크, Apple 스타일 | 제품 발표, 키노트 |
|
|
322
|
+
| 8 | `magazine` | 에디토리얼, 비대칭 레이아웃 | 디자인, 크리에이티브 |
|
|
323
|
+
| 9 | `data-focus` | 대시보드 스타일, 깔끔 | 데이터 분석, KPI |
|
|
324
|
+
| 10 | `playful` | 둥근 모서리, 파스텔, 바운스 | 워크숍, 캐주얼 발표 |
|
|
316
325
|
|
|
317
|
-
|
|
318
|
-
- `reference.html` — 모든 슬라이드 타입(타이틀, 콘텐츠, 비교, 코드, 데이터, 인용, 클로징 등)을 포함하는 10장짜리 전체 예시 프레젠테이션. 네비게이션, 전체화면, 발표자 노트, PDF 내보내기 모두 동작해야 함
|
|
319
|
-
- `README.md` — 디자인 가이드라인: 컬러 팔레트, 타이포그래피, 간격, 디자인 철학, 용도
|
|
320
|
-
- `preview.png` — 타이틀 슬라이드의 1280×720 스크린샷
|
|
326
|
+
---
|
|
321
327
|
|
|
322
|
-
|
|
328
|
+
## 🤝 기여하기
|
|
323
329
|
|
|
324
|
-
|
|
330
|
+
### 새 테마 추가하기
|
|
325
331
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
- 키보드 네비게이션, 전체화면, 발표자 노트, 인쇄 내보내기 테스트 필수
|
|
332
|
+
1. `themes/` 안에 테마 ID로 폴더 생성 (케밥 케이스)
|
|
333
|
+
2. `reference.html` + `README.md` 추가
|
|
334
|
+
3. `core/`의 컨벤션을 따르기
|
|
335
|
+
4. PR 제출 — 갤러리에 자동 추가!
|
|
331
336
|
|
|
332
337
|
---
|
|
333
338
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "make-slide",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "AI presentation skill — generate single-file HTML slides with 10 themes",
|
|
5
5
|
"bin": {
|
|
6
6
|
"make-slide": "./bin/cli.js"
|
|
@@ -11,7 +11,14 @@
|
|
|
11
11
|
"README.md",
|
|
12
12
|
"LICENSE"
|
|
13
13
|
],
|
|
14
|
-
"keywords": [
|
|
14
|
+
"keywords": [
|
|
15
|
+
"slides",
|
|
16
|
+
"presentation",
|
|
17
|
+
"ai",
|
|
18
|
+
"claude",
|
|
19
|
+
"skill",
|
|
20
|
+
"html"
|
|
21
|
+
],
|
|
15
22
|
"author": "Kuneosu",
|
|
16
23
|
"license": "MIT",
|
|
17
24
|
"repository": {
|