All skills
affaan-m avatar

/frontend-slides

@c752aac

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.

Use this Skill: https://skilld.dev/gh/affaan-m/everything-claude-code/frontend-slides

This session only. Nothing lands on disk.

STYLE_PRESETS.md

≈2.3k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Style Presets Reference

Curated visual styles for frontend-slides.

Use this file for:

  • the mandatory viewport-fitting CSS base
  • preset selection and mood mapping
  • CSS gotchas and validation rules

Abstract shapes only. Avoid illustrations unless the user explicitly asks for them.

Viewport Fit Is Non-Negotiable

Every slide must fully fit in one viewport.

Golden Rule

Each slide = exactly one viewport height.
Too much content = split into more slides.
Never scroll inside a slide.

Density Limits

Slide Type Maximum Content
Title slide 1 heading + 1 subtitle + optional tagline
Content slide 1 heading + 4-6 bullets or 2 paragraphs
Feature grid 6 cards maximum
Code slide 8-10 lines maximum
Quote slide 1 quote + attribution
Image slide 1 image, ideally under 60vh

Mandatory Base CSS

Copy this block into every generated presentation and then theme on top of it.

/* ===========================================
   VIEWPORT FITTING: MANDATORY BASE STYLES
   =========================================== */

html, body {
    height: 100%;
    overflow-x: hidden;
}

html {
    scroll-snap-type: y mandatory;
    scroll-behavior: smooth;
}

.slide {
    width: 100vw;
    height: 100vh;
    height: 100dvh;
    overflow: hidden;
    scroll-snap-align: start;
    display: flex;
    flex-direction: column;
    position: relative;
}

.slide-content {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    max-height: 100%;
    overflow: hidden;
    padding: var(--slide-padding);
}

:root {
    --title-size: clamp(1.5rem, 5vw, 4rem);
    --h2-size: clamp(1.25rem, 3.5vw, 2.5rem);
    --h3-size: clamp(1rem, 2.5vw, 1.75rem);
    --body-size: clamp(0.75rem, 1.5vw, 1.125rem);
    --small-size: clamp(0.65rem, 1vw, 0.875rem);

    --slide-padding: clamp(1rem, 4vw, 4rem);
    --content-gap: clamp(0.5rem, 2vw, 2rem);
    --element-gap: clamp(0.25rem, 1vw, 1rem);
}

.card, .container, .content-box {
    max-width: min(90vw, 1000px);
    max-height: min(80vh, 700px);
}

.feature-list, .bullet-list {
    gap: clamp(0.4rem, 1vh, 1rem);
}

.feature-list li, .bullet-list li {
    font-size: var(--body-size);
    line-height: 1.4;
}

.grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
    gap: clamp(0.5rem, 1.5vw, 1rem);
}

img, .image-container {
    max-width: 100%;
    max-height: min(50vh, 400px);
    object-fit: contain;
}

@media (max-height: 700px) {
    :root {
        --slide-padding: clamp(0.75rem, 3vw, 2rem);
        --content-gap: clamp(0.4rem, 1.5vw, 1rem);
        --title-size: clamp(1.25rem, 4.5vw, 2.5rem);
        --h2-size: clamp(1rem, 3vw, 1.75rem);
    }
}

@media (max-height: 600px) {
    :root {
        --slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);
        --content-gap: clamp(0.3rem, 1vw, 0.75rem);
        --title-size: clamp(1.1rem, 4vw, 2rem);
        --body-size: clamp(0.7rem, 1.2vw, 0.95rem);
    }

    .nav-dots, .keyboard-hint, .decorative {
        display: none;
    }
}

@media (max-height: 500px) {
    :root {
        --slide-padding: clamp(0.4rem, 2vw, 1rem);
        --title-size: clamp(1rem, 3.5vw, 1.5rem);
        --h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
        --body-size: clamp(0.65rem, 1vw, 0.85rem);
    }
}

@media (max-width: 600px) {
    :root {
        --title-size: clamp(1.25rem, 7vw, 2.5rem);
    }

    .grid {
        grid-template-columns: 1fr;
    }
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        transition-duration: 0.2s !important;
    }

    html {
        scroll-behavior: auto;
    }
}

Viewport Checklist

  • every .slide has height: 100vh, height: 100dvh, and overflow: hidden
  • all typography uses clamp()
  • all spacing uses clamp() or viewport units
  • images have max-height constraints
  • grids adapt with auto-fit + minmax()
  • short-height breakpoints exist at 700px, 600px, and 500px
  • if anything feels cramped, split the slide

Mood to Preset Mapping

Mood Good 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

Preset Catalog

1. Bold Signal

  • Vibe: confident, high-impact, keynote-ready
  • Best for: pitch decks, launches, statements
  • Fonts: Archivo Black + Space Grotesk
  • Palette: charcoal base, hot orange focal card, crisp white text
  • Signature: oversized section numbers, high-contrast card on dark field

2. Electric Studio

  • Vibe: clean, bold, agency-polished
  • Best for: client presentations, strategic reviews
  • Fonts: Manrope only
  • Palette: black, white, saturated cobalt accent
  • Signature: two-panel split and sharp editorial alignment

3. Creative Voltage

  • Vibe: energetic, retro-modern, playful confidence
  • Best for: creative studios, brand work, product storytelling
  • Fonts: Syne + Space Mono
  • Palette: electric blue, neon yellow, deep navy
  • Signature: halftone textures, badges, punchy contrast

4. Dark Botanical

  • Vibe: elegant, premium, atmospheric
  • Best for: luxury brands, thoughtful narratives, premium product decks
  • Fonts: Cormorant + IBM Plex Sans
  • Palette: near-black, warm ivory, blush, gold, terracotta
  • Signature: blurred abstract circles, fine rules, restrained motion

5. Notebook Tabs

  • Vibe: editorial, organized, tactile
  • Best for: reports, reviews, structured storytelling
  • Fonts: Bodoni Moda + DM Sans
  • Palette: cream paper on charcoal with pastel tabs
  • Signature: paper sheet, colored side tabs, binder details

6. Pastel Geometry

  • Vibe: approachable, modern, friendly
  • Best for: product overviews, onboarding, lighter brand decks
  • Fonts: Plus Jakarta Sans only
  • Palette: pale blue field, cream card, soft pink/mint/lavender accents
  • Signature: vertical pills, rounded cards, soft shadows

7. Split Pastel

  • Vibe: playful, modern, creative
  • Best for: agency intros, workshops, portfolios
  • Fonts: Outfit only
  • Palette: peach + lavender split with mint badges
  • Signature: split backdrop, rounded tags, light grid overlays

8. Vintage Editorial

  • Vibe: witty, personality-driven, magazine-inspired
  • Best for: personal brands, opinionated talks, storytelling
  • Fonts: Fraunces + Work Sans
  • Palette: cream, charcoal, dusty warm accents
  • Signature: geometric accents, bordered callouts, punchy serif headlines

9. Neon Cyber

  • Vibe: futuristic, techy, kinetic
  • Best for: AI, infra, dev tools, future-of-X talks
  • Fonts: Clash Display + Satoshi
  • Palette: midnight navy, cyan, magenta
  • Signature: glow, particles, grids, data-radar energy

10. Terminal Green

  • Vibe: developer-focused, hacker-clean
  • Best for: APIs, CLI tools, engineering demos
  • Fonts: JetBrains Mono only
  • Palette: GitHub dark + terminal green
  • Signature: scan lines, command-line framing, precise monospace rhythm

11. Swiss Modern

  • Vibe: minimal, precise, data-forward
  • Best for: corporate, product strategy, analytics
  • Fonts: Archivo + Nunito
  • Palette: white, black, signal red
  • Signature: visible grids, asymmetry, geometric discipline

12. Paper & Ink

  • Vibe: literary, thoughtful, story-driven
  • Best for: essays, keynote narratives, manifesto decks
  • Fonts: Cormorant Garamond + Source Serif 4
  • Palette: warm cream, charcoal, crimson accent
  • Signature: pull quotes, drop caps, elegant rules

Direct Selection Prompts

If the user already knows the style they want, let them pick directly from the preset names above instead of forcing preview generation.

Animation Feel Mapping

Feeling Motion Direction
Dramatic / Cinematic slow fades, parallax, large scale-ins
Techy / Futuristic glow, particles, grid motion, scramble text
Playful / Friendly springy easing, rounded shapes, floating motion
Professional / Corporate subtle 200-300ms transitions, clean slides
Calm / Minimal very restrained movement, whitespace-first
Editorial / Magazine strong hierarchy, staggered text and image interplay

CSS Gotcha: Negating Functions

Never write these:

right: -clamp(28px, 3.5vw, 44px);
margin-left: -min(10vw, 100px);

Browsers ignore them silently.

Always write this instead:

right: calc(-1 * clamp(28px, 3.5vw, 44px));
margin-left: calc(-1 * min(10vw, 100px));

Validation Sizes

Test at minimum:

  • Desktop: 1920x1080, 1440x900, 1280x720
  • Tablet: 1024x768, 768x1024
  • Mobile: 375x667, 414x896
  • Landscape phone: 667x375, 896x414

Anti-Patterns

Do not use:

  • purple-on-white startup templates
  • Inter / Roboto / Arial as the visual voice unless the user explicitly wants utilitarian neutrality
  • bullet walls, tiny type, or code blocks that require scrolling
  • decorative illustrations when abstract geometry would do the job better

Source: SKILL.md on GitHub

2 warnings9d5 checks · Risk MEDIUM
  • Gen Agent Trust Hub9d

    The skill provides utility scripts for PowerPoint extraction and PDF export. The PDF export feature dynamically generates a Node.js script and executes it locally, which also includes starting a temporary HTTP server and installing external browser automation tools at runtime. Additionally, the skill processes external user content that could be a vector for indirect prompt injection.

  • Socket9d

    No alerts

  • Snyk9d

    Risk: MEDIUM · 1 issue

  • Runlayer7mo

    2 files scanned · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at c752aac. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 10 hours ago.

Activeupdated 4 months ago
metadata
{
  "origin": "ECC"
}
  • html
  • presentations
  • slides
  • ppt
  • pptx
  • animation
  • css
  • javascript
  • responsive
  • accessibility

README badge

README badge for affaan-m/everything-claude-code/frontend-slides

Creates zero-dependency HTML presentations with animation and responsive design, running entirely in the browser. Supports building decks from scratch, converting PowerPoint files, or enhancing existing HTML slides while enforcing viewport-fit constraints and visual exploration of design direction.

Generated from the current SKILL.md.

Does this skill convert PowerPoint files to HTML?
Yes. The skill uses python-pptx to extract text, images, and notes from .ppt or .pptx files, then builds an HTML presentation from the extracted content. It falls back to manual export if python-pptx is unavailable.
Can I use external libraries or dependencies?
No. The skill defaults to zero-dependency, self-contained HTML files with inline CSS and JavaScript. External fonts may come from Google Fonts or Fontshare, but no build tools or npm packages.
What happens if my content doesn't fit on one slide?
The skill splits content across multiple slides rather than allowing scrolling. Viewport fit is a hard requirement: every slide must display fully within the browser window without internal scrollbars.
Does the skill generate a design automatically or ask me questions first?
It uses visual exploration by default. The skill generates 3 single-slide preview files showing different styles, then asks you which preset to keep or which elements to mix, rather than using abstract questionnaires.
What navigation methods are supported?
Keyboard navigation, touch/swipe navigation, and mouse wheel navigation. The skill also includes a progress indicator and respects reduced-motion preferences.

Generated from the current SKILL.md. These answers refresh after source changes.