Back to skills
SKILL.md
Guizang Ppt Skill
ASecurity> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. A Claude Code / Agent skill for generating **single-file HTML horizontal-swipe PPT** presentations with an "electronic magazine × electronic ink" aesthetic — like *Monocle* magazine with code.
- 92 stars
- 0 votes
- 0 copies
- 2 views
- Added September 8, 2026
Works with
Security analysis
100/100npx -y skills add Aradotso/trending-skills --skill guizang-ppt-skill --agent claude-codeAre you the author of Guizang Ppt Skill?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aradotso-guizang-ppt-skill)```markdown
---
name: guizang-ppt-skill
description: Generate single-file HTML magazine-style horizontal swipe PPT presentations with WebGL fluid backgrounds, editorial typography, and 10 layout templates
triggers:
- "make a magazine style PPT"
- "generate a horizontal swipe presentation"
- "create an editorial magazine slide deck"
- "帮我做一份杂志风 PPT"
- "生成电子杂志风格演示文稿"
- "electronic ink style presentation slides"
- "create a single file HTML presentation"
- "build a web PPT with WebGL background"
---
# Magazine Web PPT (guizang-ppt-skill)
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
A Claude Code / Agent skill for generating **single-file HTML horizontal-swipe PPT** presentations with an "electronic magazine × electronic ink" aesthetic — like *Monocle* magazine with code.
## What This Skill Does
- Generates a **single `.html` file** — no build step, no server, open directly in browser
- **WebGL fluid/dispersion background** visible on hero pages, restrained on content pages
- **Horizontal left-right pagination**: keyboard ← → / scroll wheel / touch swipe / bottom dots / ESC index
- **5 color theme presets**: Ink Classic / Indigo Porcelain / Forest Ink / Kraft Paper / Dune
- **10 page layout templates**: Cover, Chapter, Data Headline, Left-Text-Right-Image, Image Grid, Pipeline, Question, Big Quote, Before/After, Mixed Layout
- **Triple font hierarchy**: serif headlines + sans-serif body + monospace metadata
## Installation
### Method 1: Ask Your AI Agent
```
帮我安装 guizang-ppt-skill 这个 Claude Code skill。请按下面步骤做:
1. 确保 ~/.claude/skills/ 目录存在(不存在就创建)
2. 执行 git clone https://github.com/op7418/guizang-ppt-skill.git ~/.claude/skills/magazine-web-ppt
3. 验证: ls ~/.claude/skills/magazine-web-ppt/ 应该看到 SKILL.md、assets/、references/ 三项
4. 告诉我安装好了
```
### Method 2: Manual
```bash
git clone https://github.com/op7418/guizang-ppt-skill.git ~/.claude/skills/magazine-web-ppt
ls ~/.claude/skills/magazine-web-ppt/
# Should see: SKILL.md assets/ references/
```
## Repository Structure
```
magazine-web-ppt/
├── SKILL.md ← Skill main file: workflow, principles, common errors
├── README.md
├── assets/
│ └── template.html ← Complete runnable seed HTML (CSS + WebGL + pagination JS)
└── references/
├── components.md ← Component manual (fonts, colors, grid, icons, callout, stat, pipeline)
├── layouts.md ← 10 page layout skeletons (paste-ready)
├── themes.md ← 5 color theme presets (choose, don't customize)
└── checklist.md ← Quality checklist (P0 / P1 / P2 / P3 graded)
```
## 6-Step Workflow
### Step 1: Requirements Clarification (6 Questions)
Ask the user:
1. **Audience** — Who's in the room? (investors, peers, public)
2. **Duration** — How many minutes? (determines slide count ~1 slide/min)
3. **Content** — Raw materials: outline, doc, bullet points?
4. **Images** — URLs provided or use placeholder patterns?
5. **Theme** — Which of the 5 presets? (default: Ink Classic)
6. **Hard constraints** — Max slides, forbidden content, language?
### Step 2: Copy Template
```bash
cp ~/.claude/skills/magazine-web-ppt/assets/template.html ./my-presentation.html
```
Then edit the top of the file:
- Change `<title>Your Title</title>`
- Replace the `:root{}` theme variables (6 lines only)
### Step 3: Fill Content from Layouts
Read `references/layouts.md` for the 10 skeleton templates. Copy paste and fill.
**Pre-fill checklist:**
- [ ] Run class name pre-check: every class used in layout HTML must exist in `template.html` CSS
- [ ] Plan hero/non-hero rhythm before writing (hero pages ~every 3-4 slides)
### Step 4: Self-Check
Open `references/checklist.md` and verify all **P0** items pass before delivering.
### Step 5: Preview
```bash
open my-presentation.html
# or
python3 -m http.server 8080
# then visit http://localhost:8080/my-presentation.html
```
### Step 6: Iterate
Use inline styles for per-slide tweaks:
```html
<!-- Adjust font size -->
<h1 style="font-size: 4.5rem;">Bigger Title</h1>
<!-- Adjust slide height constraint -->
<div class="slide" style="--slide-padding: 3rem;">
<!-- Tighten line height -->
<p style="line-height: 1.4;">Dense paragraph</p>
```
## Theme Presets
**Never use custom hex values.** Only select from these 5 presets in `references/themes.md`.
| Theme | CSS Variables Snippet | Best For |
|-------|----------------------|----------|
| 🖋 Ink Classic | `--bg: #F5F2ED; --fg: #1A1A1A; --accent: #2C2C2C` | Default, business, launches |
| 🌊 Indigo Porcelain | `--bg: #EEF2F7; --fg: #1B2A4A; --accent: #2D5BE3` | Tech, AI, research |
| 🌿 Forest Ink | `--bg: #F0F4F0; --fg: #1A2E1A; --accent: #2D6A2D` | Nature, sustainability, culture |
| 🍂 Kraft Paper | `--bg: #F4EDE0; --fg: #2E1F0E; --accent: #8B4513` | Retro, humanities, indie |
| 🌙 Dune | `--bg: #F5F0E8; --fg: #2A1F0A; --accent: #C4860A` | Art, design, gallery |
To switch themes, replace only the `:root {}` block at the top of `template.html`:
```css
:root {
--bg: #EEF2F7;
--fg: #1B2A4A;
--accent: #2D5BE3;
--accent-light: #E8EDFB;
--muted: #6B7A99;
--border: #C9D3E8;
}
```
## The 10 Layout Templates
Paste these from `references/layouts.md` — shown here with key structure:
### 1. Hero Cover (开场封面)
```html
<section class="slide hero" data-slide="1">
<canvas class="webgl-bg"></canvas>
<div class="slide-content cover-layout">
<div class="eyebrow mono">VOL.01 · 2026</div>
<h1 class="display-title">Your Big<br>Main Title</h1>
<p class="subtitle">Subtitle or tagline goes here</p>
<div class="meta-row">
<span class="mono">SPEAKER NAME</span>
<span class="mono">EVENT · DATE</span>
</div>
</div>
</section>
```
### 2. Chapter Curtain (章节幕封)
```html
<section class="slide hero chapter" data-slide="2">
<div class="chapter-number mono">02</div>
<div class="chapter-content">
<h2 class="chapter-title">Chapter Title</h2>
<p class="chapter-sub">Brief chapter description</p>
</div>
</section>
```
### 3. Data Headline (数据大字报)
```html
<section class="slide data-hero" data-slide="3">
<div class="slide-content">
<div class="stat-block">
<span class="stat-number display-title">73%</span>
<span class="stat-label">of something important</span>
</div>
<p class="stat-context">Supporting context sentence explaining the data point above.</p>
</div>
</section>
```
### 4. Left Text Right Image (左文右图)
```html
<section class="slide split-layout" data-slide="4">
<div class="split-left">
<div class="eyebrow mono">SECTION LABEL</div>
<h2>Section Heading</h2>
<p>Body copy goes here. Keep it to 3-4 lines maximum for readability at presentation distance.</p>
<ul class="bullet-list">
<li>Key point one</li>
<li>Key point two</li>
<li>Key point three</li>
</ul>
</div>
<div class="split-right">
<img src="https://example.com/image.jpg" alt="Description" class="slide-image">
</div>
</section>
```
### 5. Image Grid (图片网格)
```html
<section class="slide grid-layout" data-slide="5">
<div class="grid-header">
<h2>Grid Section Title</h2>
</div>
<div class="image-grid grid-2x2">
<figure class="grid-item">
<img src="img1.jpg" alt="Item 1">
<figcaption class="mono">CAPTION ONE</figcaption>
</figure>
<figure class="grid-item">
<img src="img2.jpg" alt="Item 2">
<figcaption class="mono">CAPTION TWO</figcaption>
</figure>
<figure class="grid-item">
<img src="img3.jpg" alt="Item 3">
<figcaption class="mono">CAPTION THREE</figcaption>
</figure>
<figure class="grid-item">
<img src="img4.jpg" alt="Item 4">
<figcaption class="mono">CAPTION FOUR</figcaption>
</figure>
</div>
</section>
```
### 6. Pipeline / Process (流程图)
```html
<section class="slide pipeline-layout" data-slide="6">
<h2>Process Title</h2>
<div class="pipeline">
<div class="pipeline-step">
<div class="step-number mono">01</div>
<div class="step-content">
<h3>Step One</h3>
<p>Brief description</p>
</div>
</div>
<div class="pipeline-arrow">→</div>
<div class="pipeline-step">
<div class="step-number mono">02</div>
<div class="step-content">
<h3>Step Two</h3>
<p>Brief description</p>
</div>
</div>
<div class="pipeline-arrow">→</div>
<div class="pipeline-step">
<div class="step-number mono">03</div>
<div class="step-content">
<h3>Step Three</h3>
<p>Brief description</p>
</div>
</div>
</div>
</section>
```
### 7. Suspense Question (悬念问题)
```html
<section class="slide hero question-slide" data-slide="7">
<div class="slide-content centered">
<div class="question-mark mono">?</div>
<h2 class="question-text">What if everything<br>you knew was wrong?</h2>
<p class="question-sub mono">We're about to find out.</p>
</div>
</section>
```
### 8. Big Quote (大引用)
```html
<section class="slide quote-slide" data-slide="8">
<div class="slide-content">
<blockquote class="big-quote">
<p>"The best way to predict the future is to invent it."</p>
<footer class="quote-attribution mono">— ALAN KAY · 1971</footer>
</blockquote>
</div>
</section>
```
### 9. Before / After Comparison
```html
<section class="slide compare-layout" data-slide="9">
<h2>Before vs After</h2>
<div class="compare-grid">
<div class="compare-panel before">
<div class="panel-label mono">BEFORE</div>
<ul class="compare-list negative">
<li>Pain point one</li>
<li>Pain point two</li>
<li>Pain point three</li>
</ul>
</div>
<div class="compare-divider"></div>
<div class="compare-panel after">
<div class="panel-label mono accent">AFTER</div>
<ul class="compare-list positive">
<li>Improvement one</li>
<li>Improvement two</li>
<li>Improvement three</li>
</ul>
</div>
</div>
</section>
```
### 10. Mixed Text + Image (图文混排)
```html
<section class="slide mixed-layout" data-slide="10">
<div class="mixed-header">
<h2>Mixed Layout Title</h2>
<p class="lead">Opening paragraph that frames the content below.</p>
</div>
<div class="mixed-body">
<img src="wide-image.jpg" alt="Main visual" class="mixed-image">
<div class="mixed-caption">
<p>Caption or supplementary text explaining the image above.</p>
<span class="mono">SOURCE · 2026</span>
</div>
</div>
</section>
```
## Core CSS Classes Reference
From `references/components.md`:
```css
/* Typography */
.display-title /* Serif, hero-scale (5-8rem) headline */
.mono /* Monospace, metadata/labels/numbers */
.eyebrow /* Small mono label above heading */
.lead /* Large sans-serif intro paragraph */
.subtitle /* Secondary heading text */
/* Layout */
.slide /* Base slide container (100vw × 100vh) */
.slide.hero /* Hero variant — WebGL bg visible */
.slide-content /* Inner content wrapper with padding */
.split-layout /* Two-column 50/50 or 40/60 */
.centered /* Flex center both axes */
/* Components */
.stat-number /* Giant number display */
.stat-label /* Label under stat number */
.big-quote /* Blockquote with editorial styling */
.callout /* Highlighted aside box */
.pipeline /* Horizontal step process */
.bullet-list /* Styled unordered list */
.image-grid /* CSS grid image container */
.compare-grid /* Two-panel before/after */
/* Navigation (auto-generated) */
.slide-dots /* Bottom pagination dots */
.slide-index /* ESC overlay with all slides */
```
## Navigation Controls
Built into `template.html` — no configuration needed:
| Input | Action |
|-------|--------|
| `→` / `Space` | Next slide |
| `←` | Previous slide |
| Mouse wheel down | Next slide |
| Mouse wheel up | Previous slide |
| Touch swipe left | Next slide |
| Touch swipe right | Previous slide |
| `ESC` | Toggle slide index overlay |
| Click dot | Jump to slide |
## Image Handling Rules
**Critical:** Images crop from bottom only — top and sides must be compositionally complete.
```html
<!-- Correct: object-fit cover with top anchor -->
<img src="photo.jpg" class="slide-image"
style="object-fit: cover; object-position: top center;">
<!-- For portrait images in landscape slides -->
<img src="portrait.jpg" class="slide-image"
style="object-fit: cover; object-position: center top; height: 100%;">
```
If no images are provided, use structured placeholder patterns:
```html
<!-- Placeholder with label -->
<div class="img-placeholder" style="background: var(--accent-light);
aspect-ratio: 16/9; display:flex; align-items:center;
justify-content:center;">
<span class="mono" style="color: var(--muted);">IMAGE · 16:9</span>
</div>
```
## Quality Checklist (P0 — Must Pass)
From `references/checklist.md`:
- [ ] All CSS classes used in HTML exist in `template.html` — no undefined classes
- [ ] No slide exceeds viewport height (no scrollbar appears within a slide)
- [ ] Hero/non-hero rhythm maintained (not 5+ non-hero slides in a row)
- [ ] All `<img>` tags have `alt` attributes
- [ ] WebGL canvas only present on `.hero` slides
- [ ] Font stack loads: serif for display, sans for body, mono for metadata
- [ ] Navigation works: keyboard, scroll, touch, dots all functional
- [ ] Theme uses only preset variables — no raw hex values in content HTML
- [ ] `<title>` updated from template default
- [ ] File opens correctly with `file://` protocol (no server required)
## Common Errors & Fixes
### Slide Content Overflows
```html
<!-- Problem: too much text in one slide -->
<!-- Fix: reduce content OR add font-size override -->
<div class="slide-content" style="font-size: 0.9em;">
<!-- Or split into two slides -->
```
### WebGL Background Not Showing
```html
<!-- Canvas must be direct child of .hero slide -->
<section class="slide hero">
<canvas class="webgl-bg"></canvas> <!-- ← must be here -->
<div class="slide-content">...</div>
</section>
```
### Classes Not Styled
```
ERROR: Using .grid-3col but template only has .grid-2x2 and .grid-3x1
FIX: Check references/components.md for available classes, or add inline styles
```
### Images Cropping Wrong
```html
<!-- Fix portrait image in landscape slide -->
<img src="tall.jpg" style="object-fit:cover; object-position: top;
width:100%; height:100%;">
```
### Dots Not Updating
The pagination dots are auto-generated from `[data-slide]` attributes. Ensure every `<section class="slide">` has `data-slide="N"` with sequential numbers starting from 1.
```html
<section class="slide hero" data-slide="1">
<section class="slide" data-slide="2">
<section class="slide" data-slide="3">
```
## Design Principles
1. **Restraint over flashiness** — WebGL only on hero slides
2. **Structure over decoration** — hierarchy via type scale + grid whitespace, not shadows/cards
3. **Images are first-class** — crop bottom only, keep top/sides compositionally whole
4. **Rhythm via hero slides** — alternate hero/non-hero, ~every 3-4 slides
5. **Theme lock** — 5 presets only, no custom hex, aesthetic protection > freedom
## Slide Count Guidelines
| Talk Length | Suggested Slides |
|-------------|-----------------|
| 5 min | 5-7 slides |
| 10 min | 10-12 slides |
| 20 min | 18-22 slides |
| 30 min | 25-30 slides |
Rule of thumb: 1 slide per minute, with hero/chapter slides as breathing room.
## Full Minimal Example
Complete working 3-slide presentation:
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Magazine PPT</title>
<style>
/* Copy full CSS from assets/template.html */
:root {
--bg: #F5F2ED;
--fg: #1A1A1A;
--accent: #2C2C2C;
--accent-light: #ECEAE6;
--muted: #888580;
--border: #D8D4CE;
}
/* ... rest of template CSS ... */
</style>
</head>
<body>
<!-- Slide 1: Hero Cover -->
<section class="slide hero" data-slide="1">
<canvas class="webgl-bg"></canvas>
<div class="slide-content cover-layout">
<div class="eyebrow mono">VOL.01 · 2026</div>
<h1 class="display-title">The Future<br>of Work</h1>
<p class="subtitle">How AI is folding organizations</p>
<div class="meta-row">
<span class="mono">GUIZANG</span>
<span class="mono">SHANGHAI · APR 2026</span>
</div>
</div>
</section>
<!-- Slide 2: Data Headline -->
<section class="slide data-hero" data-slide="2">
<div class="slide-content">
<div class="stat-block">
<span class="stat-number display-title">1人</span>
<span class="stat-label">可以做到过去10人的工作</span>
</div>
<p class="stat-context">AI agent 的出现让个体效能产生了指数级变化。</p>
</div>
</section>
<!-- Slide 3: Big Quote -->
<section class="slide quote-slide" data-slide="3">
<div class="slide-content">
<blockquote class="big-quote">
<p>"The company of one is the company of the future."</p>
<footer class="quote-attribution mono">— A NEW WORKING METHOD · 2026</footer>
</blockquote>
</div>
</section>
<!-- Navigation dots auto-generated by JS -->
<div class="slide-dots"></div>
<script>
/* Copy full JS from assets/template.html */
</script>
</body>
</html>
```
## Troubleshooting
| Problem | Solution |
|---------|----------|
| Blank white page | Check browser console; likely a JS error in template |
| Fonts look wrong | Ensure Google Fonts link in `<head>` from template |
| Can't advance slides | Verify `data-slide` attributes are sequential from 1 |
| WebGL flickering | Only one `<canvas class="webgl-bg">` per hero slide |
| File too large | Compress images before embedding as data URIs |
| Slide content cut off | Reduce font size or split slide; never scroll within slide |
## Resources
- Full template: `~/.claude/skills/magazine-web-ppt/assets/template.html`
- All 10 layouts: `~/.claude/skills/magazine-web-ppt/references/layouts.md`
- Component library: `~/.claude/skills/magazine-web-ppt/references/components.md`
- Theme presets: `~/.claude/skills/magazine-web-ppt/references/themes.md`
- Quality checklist: `~/.claude/skills/magazine-web-ppt/references/checklist.md`
- GitHub: https://github.com/op7418/guizang-ppt-skill
- Creator: [@op7418](https://x.com/op7418)
```
Attribution
Related skills
View all in documentation →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.