npx claudepluginhub wunki/amplify --plugin ask-questions-if-underspecifiedThis skill uses the workspace's default tool permissions.
Create zero-dependency HTML presentations that run entirely in the browser. All CSS and JS
Generates zero-dependency, animation-rich HTML presentations from scratch, PPT/PPTX conversions, or existing slides. For talks, pitches, workshops via visual style exploration.
Creates zero-dependency, animation-rich HTML presentations from scratch or by converting PPT/PPTX files into self-contained slides for talks, pitches, or tutorials.
Creates zero-dependency, animation-rich HTML presentations from scratch or by converting PPT/PPTX files. Ensures viewport-fitting slides with distinctive typography, colors, and motion.
Share bugs, ideas, or general feedback.
Create zero-dependency HTML presentations that run entirely in the browser. All CSS and JS are inlined — no npm, no build step, no external runtime.
Read references/html-architecture.md when generating any presentation HTML.
Read references/style-presets.md when selecting or describing visual styles or when
asked about fonts, colors, or animation approaches. Skip if the user provides a complete
custom design spec with no style questions.
Determine what the user wants before proceeding:
.ppt or .pptx to convert → Phase 4Ask via AskUserQuestion (the built-in interactive question tool):
Question 1 — Purpose (single-select)
Question 2 — Length (single-select)
Question 3 — Content readiness (single-select)
If content is ready or rough, ask the user to share it now.
This is the "show, don't tell" phase. Do not ask abstract style questions.
Ask via AskUserQuestion (multi-select, up to 2):
Based on mood, pick 3 presets from references/style-presets.md and generate
mini HTML preview files — one title slide each, self-contained, 50–100 lines.
Place them in .claude-design/slide-previews/:
.claude-design/slide-previews/
├── style-a.html
├── style-b.html
└── style-c.html
Create the .claude-design/slide-previews/ directory if it does not exist.
Each preview must show typography, color palette, and an entrance animation.
Present to the user:
I've created 3 style previews for you to compare:
**Style A: [Name]** — [1 sentence]
**Style B: [Name]** — [1 sentence]
**Style C: [Name]** — [1 sentence]
Open each to see them in action:
- .claude-design/slide-previews/style-a.html
- .claude-design/slide-previews/style-b.html
- .claude-design/slide-previews/style-c.html
Which resonates? What do you like or want changed?
Ask via AskUserQuestion (single-select):
If "Mix elements", ask for specifics before proceeding.
Generate the full presentation using the content from Phase 1 and the style from Phase 2 (or the chosen enhancement changes for Mode C).
Read references/html-architecture.md now for the full HTML template, JS class,
accessibility requirements, and performance rules.
Single presentation:
presentation.html
assets/ (images, if any)
Multiple presentations in one project:
[presentation-name].html
[presentation-name]-assets/
Before extracting, verify python-pptx is available:
python3 -c "import pptx; print('ok')" 2>/dev/null || echo "missing"
If missing, run:
pip install python-pptx
If pip fails (permission error, no network), inform the user and stop:
python-pptx is required to read .pptx files. Install it with:
pip install python-pptx
or activate a virtual environment that has it installed.
Run the bundled extraction script:
python3 skills/frontend-slides/scripts/extract_pptx.py <input.pptx> <output_dir>
The script outputs a JSON summary (slide count, image count, unsupported shape count) and
writes <output_dir>/slides.json plus <output_dir>/assets/.
If the script exits non-zero, show the stderr message and stop.
Unsupported shapes: Charts, grouped shapes, and embedded video are logged in
slides.json under "unsupported" per slide. After extraction, check each slide's
unsupported array. If any are found, tell the user:
Note: [N] shape(s) could not be extracted automatically (e.g. charts, grouped shapes).
Slides affected: [list]. I'll add placeholder sections for these — let me know
what content to put there.
Read <output_dir>/slides.json and present a summary:
Extracted from [filename]:
Slides: [count]
Images: [count] (saved to assets/)
Unsupported shapes: [count] (noted above if any)
Slide list:
1. [title] — [content preview]
2. [title] — [content preview]
...
Does this look right? Proceed with style selection?
Proceed to Phase 2 (Style Discovery) with the extracted content in mind, then Phase 3.
Preserve: all text, all images (referenced from assets/), slide order, speaker notes
(as HTML comments at the end of each <section>).
.claude-design/slide-previews/ if it exists.open [filename].htmlYour presentation is ready!
File: [filename].html
Style: [Style Name]
Slides: [count]
Navigation:
- Arrow keys or Space to advance; scroll/swipe also works
- Click the dots on the right to jump to a slide
To customize:
- Colors: edit :root CSS variables at the top
- Fonts: swap the Fontshare/Google Fonts link
- Animations: adjust .reveal class timings
Want any adjustments?
Use this to pick 3 presets for Step 2.2. Full specs in references/style-presets.md.
| Mood | Preset options |
|---|---|
| Impressed/Confident | Midnight Executive, Paper & Ink, Swiss Modern |
| Excited/Energized | Neon Cyber, Gradient Wave, Terminal Green |
| Calm/Focused | Paper & Ink, Swiss Modern, Soft Pastel |
| Inspired/Moved | Deep Space, Warm Editorial, Neon Cyber |
Fonts not loading: Check Fontshare/Google Fonts URL; ensure font names in CSS match.
Animations not triggering: Verify IntersectionObserver is running and .visible is
being added to slides.
Scroll snap not working: scroll-snap-type: y mandatory must be on html; each slide
needs scroll-snap-align: start.
Mobile layout broken: Disable heavy effects at max-width: 768px; test touch events.
Performance issues: Use will-change sparingly; prefer transform/opacity
animations; throttle scroll/mousemove handlers.
python-pptx missing: See Phase 4, Step 4.1.
PPTX charts or tables not extracted: Charts are unsupported by python-pptx's shape extractor. Tables are extracted as row arrays. Add manual content for chart slides.