presentation-builder

Original🇺🇸 English
Translated

Creates zero-dependency, 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 slides, or create a slide deck for a talk, pitch, or tutorial. Generates single self-contained HTML files with inline CSS/JS.

2installs
Added on

NPX Install

npx skill4agent add yonatangross/orchestkit presentation-builder

Presentation Builder

Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.
Based on zarazhangrui/frontend-slides, restructured for OrchestKit.

Core Philosophy

  1. Zero Dependencies -- Single HTML files with inline CSS/JS. No npm, no build tools.
  2. Show, Don't Tell -- Generate visual previews, not abstract choices. People discover preferences by seeing.
  3. Distinctive Design -- Avoid generic "AI slop" aesthetics. Every presentation should feel custom-crafted.
  4. Production Quality -- Well-commented, accessible, performant code.
  5. Viewport Fitting -- Every slide MUST fit exactly within the viewport. No scrolling within slides, ever.

Phase 0: Detect Mode

Determine what the user wants:
ModeTriggerNext Phase
A: New PresentationCreate slides from scratchPhase 1
B: PPT ConversionHas a .ppt/.pptx filePPT Conversion then Phase 2
C: EnhancementHas existing HTML presentationRead file, understand structure, enhance

Phase 1: Content Discovery

Before designing, understand the content. Use
AskUserQuestion
:
Question 1: Purpose
  • Header: "Purpose"
  • Options: "Pitch deck", "Teaching/Tutorial", "Conference talk", "Internal presentation"
Question 2: Slide Count
  • Header: "Length"
  • Options: "Short (5-10)", "Medium (10-20)", "Long (20+)"
Question 3: Content Readiness
  • Header: "Content"
  • Options: "I have all content ready", "I have rough notes", "I have a topic only"
If user has content, ask them to share it. If topic only, help structure an outline.

Phase 2: Style Discovery

This is the "show, don't tell" phase.

Step 2.0: Style Path Selection

Ask how the user wants to choose their style:
  • "Show me options" -- Generate 3 previews based on mood (recommended)
  • "I know what I want" -- Pick from preset list directly
Available Presets (see Style Presets for full details):
PresetVibeBest For
Bold SignalConfident, high-impactPitch decks, keynotes
Electric StudioClean, professionalAgency presentations
Creative VoltageEnergetic, retro-modernCreative pitches
Dark BotanicalElegant, sophisticatedPremium brands
Notebook TabsEditorial, organizedReports, reviews
Pastel GeometryFriendly, approachableProduct overviews
Split PastelPlayful, modernCreative agencies
Vintage EditorialWitty, personality-drivenPersonal brands
Neon CyberFuturistic, techyTech startups
Terminal GreenDeveloper-focusedDev tools, APIs
Swiss ModernMinimal, preciseCorporate, data
Paper & InkLiterary, thoughtfulStorytelling

Step 2.1: Mood Selection (Guided Discovery)

If "Show me options", ask via
AskUserQuestion
:
Question: Vibe
  • "What feeling should the audience have?"
  • Options (multiSelect: true, pick up to 2):
    • "Impressed/Confident" -- Professional, trustworthy
    • "Excited/Energized" -- Innovative, bold
    • "Calm/Focused" -- Clear, easy to follow
    • "Inspired/Moved" -- Emotional, memorable
Mood-to-Style Mapping:
MoodSuggested Styles
Impressed/ConfidentBold Signal, Electric Studio, Dark Botanical
Excited/EnergizedCreative Voltage, Neon Cyber, Split Pastel
Calm/FocusedNotebook Tabs, Paper & Ink, Swiss Modern
Inspired/MovedDark Botanical, Vintage Editorial, Pastel Geometry

Step 2.2: Generate Style Previews

Generate 3 distinct mini HTML files in
.claude-design/slide-previews/
:
.claude-design/slide-previews/
├── style-a.html   # ~50-100 lines, single title slide
├── style-b.html
└── style-c.html
Each preview: self-contained, inline CSS/JS, animated title slide showing typography, colors, and motion style.

Step 2.3: Present Previews

Show user the 3 options and ask via
AskUserQuestion
:
  • "Which style preview do you prefer?"
  • Options: Style A, Style B, Style C, "Mix elements"

Phase 3: Generate Presentation

Generate the full presentation based on content (Phase 1) and style (Phase 2).

File Output

presentation.html    # Self-contained presentation
assets/              # Images if any (PPT conversion)

HTML Architecture

Every presentation follows this structure:
html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Presentation Title</title>
    <!-- Fonts from Fontshare or Google Fonts -->
    <style>
        /* Theme variables in :root */
        /* Base styles + viewport fitting (see rules/viewport-fitting.md) */
        /* Slide container styles */
        /* Animations */
        /* Responsive breakpoints */
    </style>
</head>
<body>
    <div class="progress-bar"></div>
    <nav class="nav-dots"><!-- JS generated --></nav>
    <section class="slide title-slide">...</section>
    <section class="slide">...</section>
    <!-- More slides -->
    <script>
        /* SlidePresentation class with navigation */
    </script>
</body>
</html>

Critical: Viewport Fitting

Every slide MUST fit exactly in the viewport. See Viewport Fitting Rules.
Quick checklist:
  • Every
    .slide
    has
    height: 100vh; height: 100dvh; overflow: hidden;
  • All font sizes use
    clamp(min, preferred, max)
  • All spacing uses
    clamp()
    or viewport units
  • Content respects density limits
  • Breakpoints exist for heights: 700px, 600px, 500px
  • When content doesn't fit: split into multiple slides, never scroll
Also see
responsive-patterns
skill for advanced clamp()/container query patterns.

Required JavaScript Features

  1. SlidePresentation Class -- Keyboard (arrows, space), touch/swipe, mouse wheel, progress bar, nav dots
  2. Intersection Observer -- Add
    .visible
    class on scroll for CSS animations
  3. Optional enhancements (style-dependent): Custom cursor, particle backgrounds, parallax, 3D tilt, magnetic buttons

Code Quality

  • Every CSS/JS section has clear comments explaining what, why, and how to modify
  • Semantic HTML (
    <section>
    ,
    <nav>
    ,
    <main>
    )
  • Keyboard navigation works
  • ARIA labels where needed
  • Reduced motion support:
    @media (prefers-reduced-motion: reduce)

Anti-Patterns (DO NOT USE)

  • Fonts: Inter, Roboto, Arial, system fonts as display
  • Colors:
    #6366f1
    (generic indigo), purple gradients on white
  • Layouts: Everything centered, generic hero sections, identical card grids
  • Decorations: Realistic illustrations, gratuitous glassmorphism

Phase 4: Delivery

  1. Clean up
    .claude-design/slide-previews/
    if it exists
  2. Open the presentation:
    open [filename].html
  3. Provide summary:
Your presentation is ready!

File: [filename].html
Style: [Style Name]
Slides: [count]

Navigation:
- Arrow keys or Space to navigate
- Scroll/swipe also works
- Click dots on the right to jump

To customize:
- Colors: :root CSS variables at top
- Fonts: Change the font link
- Animations: Modify .reveal class timings

Style Reference: Effect-to-Feeling Mapping

FeelingAnimation StyleVisual Approach
Dramatic/CinematicSlow fade-ins (1-1.5s), large scale transitionsDark BG, spotlight effects, parallax
Techy/FuturisticNeon glow, glitch/scramble textParticle systems, grid patterns, monospace accents
Playful/FriendlyBouncy easing, floating animationsPastel/bright colors, rounded corners
Professional/CorporateSubtle fast animations (200-300ms)Clean sans-serif, navy/slate, data viz focus
Calm/MinimalVery slow subtle motionHigh whitespace, muted palette, serif typography
Editorial/MagazineStrong typography hierarchyPull quotes, grid-breaking layouts, B&W + accent

Troubleshooting

IssueSolution
Fonts not loadingCheck Fontshare/Google Fonts URL, verify font names match CSS
Animations not triggeringVerify Intersection Observer is running, check
.visible
class
Scroll snap not workingEnsure
scroll-snap-type
on html,
scroll-snap-align
on slides
Mobile issuesDisable heavy effects at 768px, test touch events, reduce particles
PerformanceUse
will-change
sparingly, prefer
transform
/
opacity
animations

Related Skills

  • ork:responsive-patterns
    -- Advanced clamp(), container queries, responsive breakpoints
  • ork:accessibility
    -- WCAG 2.2 compliance, keyboard navigation, ARIA patterns
  • ork:ui-components
    -- shadcn/ui and Radix component patterns
  • ork:demo-producer
    -- Terminal recording and video demos

Rules

  • Viewport Fitting -- Mandatory CSS for viewport-locked slides
  • Content Density -- Maximum content per slide type

References

  • Style Presets -- 12 curated visual themes with CSS variables
  • PPT Conversion -- PowerPoint extraction and conversion workflow