Frontend Slides

SkillFiles & storage

Create stunning, animation-rich single-file HTML presentations from scratch or by converting a PowerPoint (.pptx) file. Use when the user wants to build a presentation, convert a PPT to web format, or create slides for a talk, pitch, or demo. Shows 3 visual style previews before building the full deck — no design experience needed.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Frontend Slides skill

What this skill tells your AI

The instructions your AI receives, as published by hamzafarooq/multi-agent-course in .claude/skills/frontend-slides/SKILL.md and read by ahel’s review.

Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.

Core Principles

  1. Zero Dependencies — Single HTML files with inline CSS/JS. No npm, no build tools.
  2. Show, Don't Tell — Generate 3 visual previews before building. People discover what they want by seeing options, not describing them.
  3. Distinctive Design — No generic slides. Every presentation must feel custom-crafted.
  4. Viewport Fitting (NON-NEGOTIABLE) — Every slide MUST fit exactly within 100vh. No scrolling within slides ever. Content overflows? Split into multiple slides.

Workflow

Phase 1 — Gather Content

Ask the user:

  1. "What's the topic and goal? (e.g. investor pitch, product demo, teaching a concept)"
  2. "Who is the audience?"
  3. "How many slides roughly?"
  4. "Paste your content, bullets, or outline — OR share a .pptx file path to convert."

If a .pptx file is provided → jump to Phase 4 (PowerPoint Conversion) first, then return here.


Phase 2 — Style Selection (Always Do This)

Ask the user their vibe (multiselect, max 2):

  • Impressed / Confident
  • Excited / Energized
  • Calm / Focused
  • Inspired / Moved

Map their vibe to 3 distinct presets from this list and generate one single-slide HTML preview for each:

PresetFeel
Bold SignalDark, high-contrast, confident
Electric StudioVibrant neon on dark, energized
Dark BotanicalDark with organic texture, calm authority
Notebook TabsLight, handwritten-feel, approachable
Pastel GeometrySoft colors, geometric shapes, friendly
Neon CyberCyberpunk grid, glowing text, futuristic
Creative VoltageBold gradients, dynamic diagonals
Split PastelTwo-tone split layout, modern editorial
Paper & InkCream background, serif type, classic
Swiss ModernBrutalist grid, red + black, no-nonsense
Vintage EditorialMagazine-style, muted tones, typographic
Minimal ZenWhite space, single accent color, clean

Save 3 preview files to .claude-design/slide-previews/ as style-a.html, style-b.html, style-c.html and open them.

Wait for the user to pick one (A, B, or C) — or ask to mix elements from two.


Phase 3 — Build the Full Deck

Using the chosen style, generate the complete single-file HTML presentation.

Slide structure rules:

  • Every slide headline = one complete insight, not a topic label
    • Bad: "Market Opportunity"
    • Good: "The $4B SMB payroll market is 80% undigitized"
  • Body supports the headline — never repeats it
  • Max bullets/content per slide type:
Slide TypeMaximum Content
Title1 heading + 1 subtitle + optional tagline
Content1 heading + 4–6 bullets OR 2 paragraphs
Feature grid1 heading + 6 cards max (2×3 or 3×2)
Code1 heading + 8–10 lines of code
Quote1 quote (max 3 lines) + attribution
Image1 heading + 1 image (max 60vh)

Required slides:

  1. Title slide
  2. Agenda (for decks over 8 slides)
  3. Content slides
  4. Summary / So what

HTML requirements:

  • Fully self-contained — no external CDN, no imports
  • Keyboard navigation: arrow keys + spacebar
  • Progress indicator
  • Speaker notes in hidden <div> (toggle with N key)
  • prefers-reduced-motion support

Viewport fitting (mandatory):

  • Every .slide: height: 100vh; height: 100dvh; overflow: hidden;
  • All font sizes: clamp(min, preferred, max) — never fixed px/rem
  • Images: max-height: min(50vh, 400px)
  • Media breakpoints at 700px, 600px, 500px height
  • Never negate CSS functions directly — use calc(-1 * clamp(...))

Output the complete HTML file. Default filename: presentation.html.


Phase 4 — PowerPoint Conversion (if .pptx provided)

  1. Run the extractor (auto-installs python-pptx if needed):
    pip install python-pptx -q
    python -c "
    from pptx import Presentation
    import json, sys
    prs = Presentation(sys.argv[1])
    slides = []
    for i, slide in enumerate(prs.slides):
        texts = [shape.text for shape in slide.shapes if shape.has_text_frame]
        slides.append({'slide': i+1, 'content': texts})
    print(json.dumps(slides, indent=2))
    " <path_to_pptx>
    
  2. Confirm extracted slide titles, content summaries, and image counts with the user.
  3. Proceed to Phase 2 for style selection.
  4. Generate HTML preserving all text, slide order, and speaker notes (as HTML comments).

Optional Post-Build

Deploy to Vercel (requires Node + Vercel CLI):

vercel deploy ./presentation.html

Export to PDF (requires Node + Playwright):

npx playwright install chromium --with-deps
node -e "
const { chromium } = require('playwright');
(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('file://' + require('path').resolve('presentation.html'));
  await page.pdf({ path: 'presentation.pdf', printBackground: true });
  await browser.close();
  console.log('Saved: presentation.pdf');
})();
"

Source

Based on frontend-slides by Zara Zhang Rui.

Signals

GitHub stars
84
Forks
70
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
frontend-slides-2
Source
github.com/hamzafarooq/multi-agent-course