smithery/evolving-machines-lab

slides-as-code

Create presentation slides as standalone HTML files with automated PNG export. Use when users ask to: create slides, build a deck, make a presentation, design slides, export slides to images, or work with HTML-based presentations. Triggers: "create slides", "make a presentation", "build a deck", "slide deck", "export slides", "slides as code".

Installation

$ npx skills add smithery/evolving-machines-lab --skill slides-as-code

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/evolving-machines-lab.

npx skills add smithery/evolving-machines-lab

Browse all from smithery/evolving-machines-lab

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,844 B
  • docs SUMMARY.md 367 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Slides as Code

Create presentation decks as standalone HTML files (1920x1080). Each slide is self-contained with embedded CSS. Preview in browser, export to PNG/PPTX.

Workflow

Always follow this sequence when creating a deck:

  1. Initialize project in user's working directory (NOT inside the skill folder)
  2. Create all slide HTML files in <project>/html/
  3. Update <project>/html/viewer.html slides array
  4. Run export: cd <project> && npm run build

IMPORTANT: After creating slides, always run npm run build to generate PNG and PPTX exports. Do not skip this step.

Quick Start

Initialize a new deck in the user's current working directory:

# CORRECT: Run from user's cwd, use absolute path to script
bash ~/.claude/skills/slides-as-code/scripts/init-slideshow.sh my-deck

# WRONG: Don't cd into skill folder first
# cd ~/.claude/skills/slides-as-code && bash scripts/init-slideshow.sh my-deck

This creates my-deck/ in the current directory with all files ready.

Auto-installs dependencies. Takes ~30 seconds.

Design Philosophy

Don't look AI-generated. Think Apple iOS, Linear, Vercel - professionally designed by outlier designers.

NEVER use:

  • Emoji icons (🚀 ✨ 💡 🎯) - instant AI-generated signal
  • Clip art or stock icons
  • Colored background boxes for every section
  • Generic headers ("Our Solution", "Key Benefits")
  • Placeholder text or fake code

ALWAYS use:

  • Typography as design - Let fonts do the work, not decorations
  • Whitespace - Generous spacing is sophistication
  • Restrained color - Gradient on 1-2 key words only
  • Real content - Actual code, specific numbers, concrete claims
  • Symbols over icons - Use → ✓ ✕ + = as visual elements

Quality bar:

If a slide looks like it could be from a free template or AI generator, redesign it. Aim for the aesthetic of Linear's changelog, Vercel's marketing, or Apple keynotes.

For detailed styling: See [references/design-guide.md](references/design-guide.md) For layout patterns: See [references/slide-patterns.md](references/slide-patterns.md)

Typography

/* Three fonts, each with a purpose */
font-family: 'Space Grotesk', sans-serif;  /* Titles, UI */
font-family: 'Lora', serif;                 /* Body text */
font-family: 'JetBrains Mono', monospace;   /* Code */

Title: 52-72px, weight 300 (light = sophisticated), letter-spacing -0.02em

Colors

/* Gradient - use sparingly */
background: linear-gradient(90deg, #8B5CF6 0%, #EC4899 100%);

/* Text hierarchy */
#1a1a1a  /* Headings */
#333333  /* Body */
#555555  /* Subtle */
#888888  /* Muted */

/* Surfaces */
#ffffff  /* Background */
#fafafa  /* Light cards */
#1a1a1a  /* Dark cards/code */

Slide Structure

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Slide N - Specific Title</title>
    <link href="https://fonts.googleapis.com/css2?family=Lora:wght@400;600&family=Space+Grotesk:wght@300;400;500;600&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        html, body { margin: 0; padding: 0; overflow: hidden; }
        body {
            font-family: 'Space Grotesk', sans-serif;
            background: #ffffff;
            width: 1920px;
            height: 1080px;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    </style>
</head>
<body>
    <!-- Content -->
</body>
</html>

Common Elements

Gradient text:

.gradient {
    background: linear-gradient(90deg, #8B5CF6 0%, #EC4899 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    font-weight: 500;
}

Arrow bullets:

.bullets li::before { content: "→"; color: #8B5CF6; }

Check/X bullets:

.gained li::before { content: "✓"; color: #8B5CF6; }
.eliminated li::before { content: "✕"; color: #EC4899; }

Code box:

.code-box {
    background: #1a1a1a;
    border-radius: 10px;
    padding: 32px 40px;
}

Viewer

Update slides array in html/viewer.html:

const slides = ['slide1.html', 'slide2.html', 'slide3.html'];

Open in browser, use arrow keys to navigate.

Export

npm run export    # HTML → PNG (2x resolution)
npm run pptx      # PNG → PPTX
npm run build     # Full pipeline