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 AI-generated aesthetics like overused font families (Inter, Roboto) or cliched color schemes (purple gradients on white). Focus on:
- Typography: beautiful, unique fonts (Google Fonts/Fontshare).
- Color & Theme: cohesive aesthetic with CSS variables and sharp accents.
- Motion: CSS-only animations for staggered reveals and high-impact transitions.
- Backgrounds: layered gradients, geometric patterns, or depth effects.
Viewport Fitting Rules (Mandatory)
- Every
.slide must have height: 100vh; height: 100dvh; overflow: hidden;
- ALL font sizes and spacing must use
clamp(min, preferred, max).
- Content containers need
max-height constraints.
- Images:
max-height: min(50vh, 400px).
- Breakpoints required for heights: 700px, 600px, 500px.
- Include
prefers-reduced-motion support.
Always read 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) |
Workflow Guide
Phase 1: Content Discovery
- Ask the user about the Purpose, Length, and Content of the presentation.
- Inquire if they need Inline Editing (LocalStorage persistence).
Phase 2: Style Selection
- Show 3 distinct style previews based on the desired "mood" (Confident, Energized, Focused, Inspired).
- Read
STYLE_PRESETS.md for options.
- Save previews to a temporary folder and let the user pick.
Phase 3: Generation
- Read
html-template.md, viewport-base.css, and animation-patterns.md.
- Generate a self-contained HTML file with all CSS/JS inline.
- Include the full contents of
viewport-base.css.
Phase 4: PPT Conversion (requires python-pptx)
- Run
python3 .agent/skills/frontend-slides/scripts/extract-pptx.py <input.pptx> <output_dir>.
- Extract text and images, then proceed to style selection.
Phase 5: PPTX Export (requires python-pptx)
- Run
python3 .agent/skills/frontend-slides/scripts/export-pptx.py <input.html> <output.pptx>.
- Converts the HTML slides back into a PowerPoint format for offline presentation and editing.
Examples
| Project |
Description |
Links |
| JupViec Automation |
Content marketing automation presentation for JupViec.vn. |
HTML, PPTX |
Supporting Files
| File |
Purpose |
| STYLE_PRESETS.md |
12 curated visual presets with colors, fonts, and signature elements |
| viewport-base.css |
Mandatory responsive CSS — copy into every presentation |
| html-template.md |
HTML structure, JS features, code quality standards |
| animation-patterns.md |
CSS/JS animation snippets and effect-to-feeling guide |
| scripts/extract-pptx.py |
Python script for PPT content extraction (to HTML) |
| scripts/export-pptx.py |
Python script for HTML to PPTX conversion |
1---2name: frontend-slides3description: 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.4---56# Frontend Slides78Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.910## Core Principles11121. **Zero Dependencies** — Single HTML files with inline CSS/JS. No npm, no build tools.132. **Show, Don't Tell** — Generate visual previews, not abstract choices. People discover what they want by seeing it.143. **Distinctive Design** — No generic "AI slop." Every presentation must feel custom-crafted.154. **Viewport Fitting (NON-NEGOTIABLE)** — Every slide MUST fit exactly within 100vh. No scrolling within slides, ever. Content overflows? Split into multiple slides.1617## Design Aesthetics1819Avoid generic AI-generated aesthetics like overused font families (Inter, Roboto) or cliched color schemes (purple gradients on white). Focus on:20- **Typography**: beautiful, unique fonts (Google Fonts/Fontshare).21- **Color & Theme**: cohesive aesthetic with CSS variables and sharp accents.22- **Motion**: CSS-only animations for staggered reveals and high-impact transitions.23- **Backgrounds**: layered gradients, geometric patterns, or depth effects.2425## Viewport Fitting Rules (Mandatory)2627- Every `.slide` must have `height: 100vh; height: 100dvh; overflow: hidden;`28- ALL font sizes and spacing must use `clamp(min, preferred, max)`.29- Content containers need `max-height` constraints.30- Images: `max-height: min(50vh, 400px)`.31- Breakpoints required for heights: 700px, 600px, 500px.32- Include `prefers-reduced-motion` support.3334**Always read `viewport-base.css` and include its full contents in every presentation.**3536### Content Density Limits Per Slide3738| Slide Type | Maximum Content |39|------------|-----------------|40| Title slide | 1 heading + 1 subtitle + optional tagline |41| Content slide | 1 heading + 4-6 bullet points OR 1 heading + 2 paragraphs |42| Feature grid | 1 heading + 6 cards maximum (2x3 or 3x2) |43| Code slide | 1 heading + 8-10 lines of code |44| Quote slide | 1 quote (max 3 lines) + attribution |45| Image slide | 1 heading + 1 image (max 60vh height) |4647---4849## Workflow Guide5051### Phase 1: Content Discovery52- Ask the user about the **Purpose**, **Length**, and **Content** of the presentation.53- Inquire if they need **Inline Editing** (LocalStorage persistence).5455### Phase 2: Style Selection56- Show 3 distinct style previews based on the desired "mood" (Confident, Energized, Focused, Inspired).57- Read `STYLE_PRESETS.md` for options.58- Save previews to a temporary folder and let the user pick.5960### Phase 3: Generation61- Read `html-template.md`, `viewport-base.css`, and `animation-patterns.md`.62- Generate a self-contained HTML file with all CSS/JS inline.63- Include the **full contents** of `viewport-base.css`.6465### Phase 4: PPT Conversion (requires python-pptx)66- Run `python3 .agent/skills/frontend-slides/scripts/extract-pptx.py <input.pptx> <output_dir>`.67- Extract text and images, then proceed to style selection.6869### Phase 5: PPTX Export (requires python-pptx)70- Run `python3 .agent/skills/frontend-slides/scripts/export-pptx.py <input.html> <output.pptx>`.71- Converts the HTML slides back into a PowerPoint format for offline presentation and editing.7273---7475## Examples7677| Project | Description | Links |78|---------|-------------|-------|79| **JupViec Automation** | Content marketing automation presentation for JupViec.vn. | [HTML](examples/n8n-jupviec-automation.html), [PPTX](examples/n8n-jupviec-automation.pptx) |8081---8283## Supporting Files8485| File | Purpose |86|------|---------|87| [STYLE_PRESETS.md](STYLE_PRESETS.md) | 12 curated visual presets with colors, fonts, and signature elements |88| [viewport-base.css](viewport-base.css) | Mandatory responsive CSS — copy into every presentation |89| [html-template.md](html-template.md) | HTML structure, JS features, code quality standards |90| [animation-patterns.md](animation-patterns.md) | CSS/JS animation snippets and effect-to-feeling guide |91| [scripts/extract-pptx.py](scripts/extract-pptx.py) | Python script for PPT content extraction (to HTML) |92| [scripts/export-pptx.py](scripts/export-pptx.py) | Python script for HTML to PPTX conversion |