$npx -y skills add affaan-m/ECC --skill frontend-slidesCreate 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 exploratio
| 1 | # Frontend Slides |
| 2 | |
| 3 | Create zero-dependency, animation-rich HTML presentations that run entirely in the browser. |
| 4 | |
| 5 | Inspired by the visual exploration approach showcased in work by [zarazhangrui](https://github.com/zarazhangrui). |
| 6 | |
| 7 | ## When to Activate |
| 8 | |
| 9 | - Creating a talk deck, pitch deck, workshop deck, or internal presentation |
| 10 | - Converting `.ppt` or `.pptx` slides into an HTML presentation |
| 11 | - Improving an existing HTML presentation's layout, motion, or typography |
| 12 | - Exploring presentation styles with a user who does not know their design preference yet |
| 13 | |
| 14 | ## Non-Negotiables |
| 15 | |
| 16 | 1. **Zero dependencies**: default to one self-contained HTML file with inline CSS and JS. |
| 17 | 2. **Viewport fit is mandatory**: every slide must fit inside one viewport with no internal scrolling. |
| 18 | 3. **Show, don't tell**: use visual previews instead of abstract style questionnaires. |
| 19 | 4. **Distinctive design**: avoid generic purple-gradient, Inter-on-white, template-looking decks. |
| 20 | 5. **Production quality**: keep code commented, accessible, responsive, and performant. |
| 21 | |
| 22 | Before generating, read `STYLE_PRESETS.md` for the viewport-safe CSS base, density limits, preset catalog, and CSS gotchas. |
| 23 | |
| 24 | ## Workflow |
| 25 | |
| 26 | ### 1. Detect Mode |
| 27 | |
| 28 | Choose one path: |
| 29 | - **New presentation**: user has a topic, notes, or full draft |
| 30 | - **PPT conversion**: user has `.ppt` or `.pptx` |
| 31 | - **Enhancement**: user already has HTML slides and wants improvements |
| 32 | |
| 33 | ### 2. Discover Content |
| 34 | |
| 35 | Ask only the minimum needed: |
| 36 | - purpose: pitch, teaching, conference talk, internal update |
| 37 | - length: short (5-10), medium (10-20), long (20+) |
| 38 | - content state: finished copy, rough notes, topic only |
| 39 | |
| 40 | If the user has content, ask them to paste it before styling. |
| 41 | |
| 42 | ### 3. Discover Style |
| 43 | |
| 44 | Default to visual exploration. |
| 45 | |
| 46 | If the user already knows the desired preset, skip previews and use it directly. |
| 47 | |
| 48 | Otherwise: |
| 49 | 1. Ask what feeling the deck should create: impressed, energized, focused, inspired. |
| 50 | 2. Generate **3 single-slide preview files** in `.ecc-design/slide-previews/`. |
| 51 | 3. Each preview must be self-contained, show typography/color/motion clearly, and stay under roughly 100 lines of slide content. |
| 52 | 4. Ask the user which preview to keep or what elements to mix. |
| 53 | |
| 54 | Use the preset guide in `STYLE_PRESETS.md` when mapping mood to style. |
| 55 | |
| 56 | ### 4. Build the Presentation |
| 57 | |
| 58 | Output either: |
| 59 | - `presentation.html` |
| 60 | - `[presentation-name].html` |
| 61 | |
| 62 | Use an `assets/` folder only when the deck contains extracted or user-supplied images. |
| 63 | |
| 64 | Required structure: |
| 65 | - semantic slide sections |
| 66 | - a viewport-safe CSS base from `STYLE_PRESETS.md` |
| 67 | - CSS custom properties for theme values |
| 68 | - a presentation controller class for keyboard, wheel, and touch navigation |
| 69 | - Intersection Observer for reveal animations |
| 70 | - reduced-motion support |
| 71 | |
| 72 | ### 5. Enforce Viewport Fit |
| 73 | |
| 74 | Treat this as a hard gate. |
| 75 | |
| 76 | Rules: |
| 77 | - every `.slide` must use `height: 100vh; height: 100dvh; overflow: hidden;` |
| 78 | - all type and spacing must scale with `clamp()` |
| 79 | - when content does not fit, split into multiple slides |
| 80 | - never solve overflow by shrinking text below readable sizes |
| 81 | - never allow scrollbars inside a slide |
| 82 | |
| 83 | Use the density limits and mandatory CSS block in `STYLE_PRESETS.md`. |
| 84 | |
| 85 | ### 6. Validate |
| 86 | |
| 87 | Check the finished deck at these sizes: |
| 88 | - 1920x1080 |
| 89 | - 1280x720 |
| 90 | - 768x1024 |
| 91 | - 375x667 |
| 92 | - 667x375 |
| 93 | |
| 94 | If browser automation is available, use it to verify no slide overflows and that keyboard navigation works. |
| 95 | |
| 96 | ### 7. Deliver |
| 97 | |
| 98 | At handoff: |
| 99 | - delete temporary preview files unless the user wants to keep them |
| 100 | - open the deck with the platform-appropriate opener when useful |
| 101 | - summarize file path, preset used, slide count, and easy theme customization points |
| 102 | |
| 103 | Use the correct opener for the current OS: |
| 104 | - macOS: `open file.html` |
| 105 | - Linux: `xdg-open file.html` |
| 106 | - Windows: `start "" file.html` |
| 107 | |
| 108 | ## PPT / PPTX Conversion |
| 109 | |
| 110 | For PowerPoint conversion: |
| 111 | 1. Prefer `python3` with `python-pptx` to extract text, images, and notes. |
| 112 | 2. If `python-pptx` is unavailable, ask whether to install it or fall back to a manual/export-based workflow. |
| 113 | 3. Preserve slide order, speaker notes, and extracted assets. |
| 114 | 4. After extraction, run the same style-selection workflow as a new presentation. |
| 115 | |
| 116 | Keep conversion cross-platform. Do not rely on macOS-only tools when Python can do the job. |
| 117 | |
| 118 | ## Implementation Requirements |
| 119 | |
| 120 | ### HTML / CSS |
| 121 | |
| 122 | - Use inline CSS and JS unless the user explicitly wants a multi-file project. |
| 123 | - Fonts may come from Google Fonts or Fontshare. |
| 124 | - Prefer atmospheric backgrounds, strong type hierarchy, and a clear visual direction. |
| 125 | - Use abstract shapes, gradients, grids, noise, and geometry rather than illustrations. |
| 126 | |
| 127 | ### JavaScript |
| 128 | |
| 129 | Include: |
| 130 | - keyboard navigation |
| 131 | - touch / swipe |