| name | frontend-slides |
| description | Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices. |
Frontend Slides
Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.
Core Principles
- Zero Dependencies โ Single HTML files with inline CSS/JS. No npm, no build tools.
- Show, Don't Tell โ Generate visual previews, not abstract choices. People discover what they want by seeing it.
- Distinctive Design โ No generic "AI slop." Every presentation must feel custom-crafted.
- Viewport Fitting (NON-NEGOTIABLE) โ Every slide MUST fit exactly within 100vh. No scrolling within slides, ever. Content overflows? Split into multiple slides.
Design Aesthetics
Avoid generic, "on distribution" outputs โ the "AI slop" aesthetic. Commit to distinctive typography, a cohesive color theme, high-impact motion, and backgrounds with depth. The full do/don't checklist (fonts to avoid, cliched schemes, the convergence trap) is in references/design-aesthetics.md โ read it before generating any style.
Viewport Fitting Rules
These invariants apply to EVERY slide in EVERY presentation:
- Every
.slide must have height: 100vh; height: 100dvh; overflow: hidden;
- ALL font sizes and spacing must use
clamp(min, preferred, max) โ never fixed px/rem
- Content containers need
max-height constraints
- Images:
max-height: min(50vh, 400px)
- Breakpoints required for heights: 700px, 600px, 500px
- Include
prefers-reduced-motion support
- Never negate CSS functions directly (
-clamp(), -min(), -max() are silently ignored) โ use calc(-1 * clamp(...)) instead
When generating, read references/viewport-base.css and include its full contents in every presentation.
Content Density Limits Per Slide
| Slide Type | Maximum Content |
|---|
| Title slide | 1 heading + 1 subtitle + optional tagline |
| Content slide | 1 heading + 4-6 bullet points OR 1 heading + 2 paragraphs |
| Feature grid | 1 heading + 6 cards maximum (2x3 or 3x2) |
| Code slide | 1 heading + 8-10 lines of code |
| Quote slide | 1 quote (max 3 lines) + attribution |
| Image slide | 1 heading + 1 image (max 60vh height) |
Content exceeds limits? Split into multiple slides. Never cram, never scroll.
Phase 0: Detect Mode
Determine what the user wants:
- Mode A: New Presentation โ Create from scratch. Go to Phase 1.
- Mode B: PPT Conversion โ Convert a .pptx file. Go to Phase 4.
- Mode C: Enhancement โ Improve an existing HTML presentation. Read it, understand it, enhance. Follow Mode C modification rules below.
Mode C: Modification Rules
When enhancing existing presentations, viewport fitting is the biggest risk. Re-check every change against the Content Density Limits and Viewport Fitting Rules above: new elements use clamp(), images get max-height: min(50vh, 400px), .slide keeps overflow: hidden, content fits at 1280x720.
Proactively reorganize: if a change will overflow a slide, split the content across slides and tell the user โ don't wait to be asked. When adding an image to a full slide, move it to a new slide or cut other content first; never add images without checking the slide isn't already full.
Phase 1: Content Discovery (New Presentations)
Ask ALL questions in a single AskUserQuestion call so the user fills everything out at once:
Question 1 โ Purpose (header: "Purpose"):
What is this presentation for? Options: Pitch deck / Teaching-Tutorial / Conference talk / Internal presentation
Question 2 โ Length (header: "Length"):
Approximately how many slides? Options: Short 5-10 / Medium 10-20 / Long 20+
Question 3 โ Content (header: "Content"):
Do you have content ready? Options: All content ready / Rough notes / Topic only
Question 4 โ Inline Editing (header: "Editing"):
Do you need to edit text directly in the browser after generation? Options:
- "Yes (Recommended)" โ Can edit text in-browser, auto-save to localStorage, export file
- "No" โ Presentation only, keeps file smaller
Remember the user's editing choice โ it determines whether edit-related code is included in Phase 3.
If user has content, ask them to share it.
Step 1.2: Image Evaluation (if images provided)
If user selected "No images" โ skip to Phase 2.
If user provides an image folder:
- Scan โ List all image files (.png, .jpg, .svg, .webp, etc.)
- View each image โ Use the Read tool (Claude is multimodal)
- Evaluate โ For each: what it shows, USABLE or NOT USABLE (with reason), what concept it represents, dominant colors
- Co-design the outline โ Curated images inform slide structure alongside text. This is NOT "plan slides then add images" โ design around both from the start (e.g., 3 screenshots โ 3 feature slides, 1 logo โ title/closing slide)
- Confirm via AskUserQuestion (header: "Outline"): "Does this slide outline and image selection look right?" Options: Looks good / Adjust images / Adjust outline
Logo in previews: If a usable logo was identified, embed it (base64) into each style preview in Phase 2 โ the user sees their brand styled three different ways.
Phase 2: Style Discovery
This is the "show, don't tell" phase. Most people can't articulate design preferences in words.
Step 2.0: Style Path
Ask how they want to choose (header: "Style"):
- "Show me options" (recommended) โ Generate 3 previews based on mood
- "I know what I want" โ Pick from preset list directly
If direct selection: Show preset picker and skip to Phase 3. Available presets are defined in references/STYLE_PRESETS.md.
Step 2.1: Mood Selection (Guided Discovery)
Ask (header: "Vibe", multiSelect: true, max 2):
What feeling should the audience have? Options:
- Impressed/Confident โ Professional, trustworthy
- Excited/Energized โ Innovative, bold
- Calm/Focused โ Clear, thoughtful
- Inspired/Moved โ Emotional, memorable
Step 2.2: Generate 3 Style Previews
Based on mood, generate 3 distinct single-slide HTML previews showing typography, colors, animation, and overall aesthetic. Read references/STYLE_PRESETS.md for available presets and their specifications.
| Mood | Suggested Presets |
|---|
| Impressed/Confident | Bold Signal, Electric Studio, Dark Botanical |
| Excited/Energized | Creative Voltage, Neon Cyber, Split Pastel |
| Calm/Focused | Notebook Tabs, Paper & Ink, Swiss Modern |
| Inspired/Moved | Dark Botanical, Vintage Editorial, Pastel Geometry |
Save previews to .claude-design/slide-previews/ (style-a.html, style-b.html, style-c.html). Each should be self-contained, ~50-100 lines, showing one animated title slide.
Open each preview automatically for the user.
Step 2.3: User Picks
Ask (header: "Style"):
Which style preview do you prefer? Options: Style A: [Name] / Style B: [Name] / Style C: [Name] / Mix elements
If "Mix elements", ask for specifics.
Phase 3: Generate Presentation
Generate the full presentation using content from Phase 1 (text, or text + curated images) and style from Phase 2.
If images were provided, the slide outline already incorporates them from Step 1.2. If not, CSS-generated visuals (gradients, shapes, patterns) provide visual interest โ this is a fully supported first-class path.
Before generating, read these supporting files:
Key requirements:
- Single self-contained HTML file, all CSS/JS inline
- Include the FULL contents of viewport-base.css in the
<style> block
- Use fonts from Fontshare or Google Fonts โ never system fonts
- Add detailed comments explaining each section
- Every section needs a clear
/* === SECTION NAME === */ comment block
Phase 4: PPT Conversion
When converting PowerPoint files:
- Extract content โ Run
python scripts/extract-pptx.py <input.pptx> <output_dir> (install python-pptx if needed: pip install python-pptx)
- Confirm with user โ Present extracted slide titles, content summaries, and image counts
- Style selection โ Proceed to Phase 2 for style discovery
- Generate HTML โ Convert to chosen style, preserving all text, images (from assets/), slide order, and speaker notes (as HTML comments)
Phase 5: Delivery
- Clean up โ Delete
.claude-design/slide-previews/ if it exists
- Open โ Use
open [filename].html to launch in browser
- Summarize โ Tell the user:
- File location, style name, slide count
- Navigation: Arrow keys, Space, scroll/swipe, click nav dots
- How to customize:
:root CSS variables for colors, font link for typography, .reveal class for animations
- If inline editing was enabled: Hover top-left corner or press E to enter edit mode, click any text to edit, Ctrl+S to save
Phase 6: Share & Export (Optional)
After delivery, offer to deploy the deck to a live Vercel URL or export it to PDF. The full step-by-step flow for both paths โ including the Vercel login walkthrough, scripts/deploy.sh / scripts/export-pdf.sh usage, and every deployment and PDF gotcha โ is in references/sharing-export.md. Read it when the user wants to share or export.