Aldea Slide Deck Designer
Create professional technical slide decks with two modes:
- Blueprint Mode (original) — Next.js 14, 1280x720, PDF-first, cyan blueprint grid, static slides
- Overwatch Mode (new) — Vite + React 19, 1920x1080, live SPA, WebGPU shaders, Framer Motion orchestration, interactive hover states, collapsible sidebar navigation
Mode Selection Guide
| Factor |
Blueprint Mode |
Overwatch Mode |
| Distribution |
PDF, email, print |
Live URL, screen presentations |
| Audience |
Non-technical, board, clients |
Technical, investors, demos |
| Interactivity |
Static (lightbox clicks) |
Hover effects, content swaps, tooltips, shaders |
| Dimensions |
1280x720 |
1920x1080 |
| Framework |
Next.js 14 |
Vite + React 19 + TanStack Router |
| Animation |
Basic motion enter/exit |
Deep Framer Motion orchestration |
| Graphics |
Static SVG, Recharts |
WebGPU shaders, particle fields, network graphs |
| Auth |
None |
Optional password gate |
| Deploy |
Static HTML + PDF |
Cloudflare Workers, Vercel, Netlify |
When to Use This Skill
- Creating new presentation decks for Aldea projects
- Building technical journey/progress presentations
- Scaffolding a Next.js slide deck with Aldea design system
- Exporting decks to PDF or static HTML for sharing
- Visualizing data, metrics, training results, or architecture
Domains Supported
| Domain |
Use Cases |
| Business & Finance |
KPI dashboards, revenue charts, growth trends, pricing |
| Healthcare |
Patient metrics, clinical outcomes, treatment timelines |
| Wellness & Coaching |
Transformation journeys, milestone celebrations, quotes |
| AI/ML Research |
Model architecture, training metrics, STT/TTS pipelines |
Design Philosophy
Theme Selection: Choose based on audience and distribution format.
- Dark mode (default): Tech/AI audiences, on-screen presentations. Deep canvas (
#0a0f1a) with vivid cyan accents (#00d4ff).
- Light mode: PDF distribution, non-technical audiences. Off-white canvas (
#FAFBFC) with darkened accents. See references/design-system.md > Light Mode.
Blueprint Aesthetic:
- Dual-layer grid overlay (40px coarse + 10px fine)
- Corner marks with dynamic chapter coloring via
--corner-color CSS variable
- Clean typographic hierarchy (Major Third 1.25x ratio)
Typography Stack:
- Display: Playfair Display (titles, headers)
- Body: DM Sans (content, descriptions) — minimum 16px (
text-base) for body text
- Mono: JetBrains Mono (code, labels, technical text)
Dimensions:
- 1280px × 720px (16:9 aspect ratio)
- Print-safe color preservation
- PDF-optimized page breaks
Quick Start Workflow
1. Audit Reference Decks (REQUIRED)
Before designing, audit the existing example decks for inspiration and consistency.
# Open reference decks for audit
open ~/.claude/skills/aldea-slidedeck/assets/examples/
# Reference decks available:
# - Aldea - AI Advisor Journey - Jan 2026.pdf (dark mode, original blueprint)
# - parenting-app-user-flows-2026-01-09.pdf (dark mode, 22-slide technical)
# - subq-media-thought-leaders-2026-02.pdf (LIGHT MODE, 18-slide media deck)
Audit checklist - extract from reference decks:
| Element |
What to Note |
| TOC Structure |
Chapter naming convention, numbering format (00, 01, 02...) |
| Logo Placement |
Top-right Aldea logo, brightness/contrast filters |
| Content Centering |
Horizontal centering patterns, vertical alignment |
| Color Usage |
Accent colors per section, card border colors |
| Typography |
Title sizes, label casing (uppercase mono for badges) |
| Slide Chrome |
Chapter badges, slide numbers, decorative lines |
| Image Treatment |
Opacity levels, gradient overlays, positioning |
2. Scaffold New Project
# Create project directory
mkdir my-slidedeck && cd my-slidedeck
# Copy scaffold files from this skill's assets
cp -r ~/.claude/skills/aldea-slidedeck/assets/scaffold/* .
# Install dependencies
npm install
# Start dev server
npm run dev # Opens at http://localhost:3200
3. Review Iconography Options
Before building, review available icons for your domain.
See references/icon-reference.md for full library with domain-specific recommendations.
| Domain |
Key Icons |
| AI/ML |
Brain, Cpu, Database, Layers, Network, Waveform |
| Business |
TrendingUp, DollarSign, PieChart, Target, Users |
| Healthcare |
Heart, Activity, Stethoscope, ShieldCheck |
| Parenting |
Baby, Users, HandHeart, Shield, Brain, Puzzle |
| Spirituality |
Compass, Flame, Mountain, Sunrise, Lightbulb |
Icon libraries available:
- Lucide (1,500+):
lucide-react - General purpose, clean
- Tabler (5,900+):
@tabler/icons-react - Largest collection
- Phosphor (7,000+):
@phosphor-icons/react - Multiple weights (thin/bold/fill)
Finding icons:
4. Plan Content Structure
Before building slides:
- Define chapters - Group content into 4-8 logical chapters (follow
XX — CHAPTER NAME format)
- Outline slides - 3-5 slides per chapter
- Identify slide types - Title, TOC, metrics, workflow, comparison, etc.
- Gather assets - Screenshots, diagrams, logos, expert photos
- Select icons - Map icons to chapters/concepts using icon reference
5. Brand Color Extraction
Before building slides, extract and map brand colors from the client/company site.
# Scrape the client/company site for brand identity (colors, fonts, typography)
python3 ~/.claude/skills/firecrawl/scripts/firecrawl_api.py scrape "https://client-site.com" --formats branding
# Or take a screenshot for visual reference
agent-browser open https://client-site.com
agent-browser screenshot /tmp/brand-reference.png
Map extracted brand colors to chapter accents in slides/constants.ts:
// Brand alignment: [source] → [deck color]
// Example: aldea.ai primary gradient amber-to-indigo
// → Chapter accents darkened for light-mode readability
export const CH: Record<string, { color: string; icon: any; label: string }> = {
'01': { color: '#1E3A8A', icon: Globe, label: 'Chapter One' },
// ...
};
Anti-patterns:
- Never use bright reds (
#DC2626, #E11D48) — they read as error/danger
- Never use saturated yellows (
#fbbf24) on light backgrounds — they disappear
- Darken to amber-800/900 range (
#92400E, #B45309) for readability
6. Research & Content Gathering
Available research tools (separate skills/CLIs):
| Tool |
Skill/CLI |
Purpose |
| Firecrawl |
firecrawl CLI or Firecrawl skill |
Web scraping, convert URLs to markdown |
| Exa Search |
exa-search skill |
AI-powered neural search, code examples |
| Reddit JSON |
Native curl (no auth) |
User feedback, pain points, discussions |
| Perplexity |
Perplexity MCP |
Research synthesis, fact-checking |
Tools for domain research:
# Reddit JSON API (no auth required) - user feedback, pain points
curl "https://www.reddit.com/r/{SUBREDDIT}/search.json?q={QUERY}&limit=25&sort=relevance"
curl "https://www.reddit.com/r/{SUBREDDIT}/top.json?t=month&limit=50"
# Exa Search (AI-powered) - expert content, articles
exa-search "{domain} best practices" --type article
# Firecrawl - competitor decks, methodology pages
firecrawl scrape https://example.com/methodology
Reddit JSON trick: Append .json to any Reddit URL for structured data:
reddit.com/r/{sub}/top.json?t=year - Top posts
reddit.com/r/{sub}/search.json?q=query - Search results
reddit.com/r/{sub}/comments/POST_ID.json - Post + comments
Domain-specific subreddits:
| Domain |
Subreddits |
| Parenting |
r/Parenting, r/NewParents, r/Mommit, r/Daddit, r/toddlers |
| AI/ML |
r/MachineLearning, r/LocalLLaMA, r/artificial |
| Healthcare |
r/medicine, r/nursing, r/healthIT |
| Business |
r/startups, r/Entrepreneur, r/smallbusiness |
7. Build Slides
Each slide uses the SlideLayout wrapper with optional chapterColor and chapterIcon for dynamic styling:
import { CH, TOTAL } from './constants';
import { SectionHeader, GradientCard } from './helpers';
<SlideLayout
chapter="01 — CHAPTER NAME"
slideNumber={3}
totalSlides={TOTAL}
chapterColor={CH['01'].color}
chapterIcon={CH['01'].icon}
>
<div className="h-full flex flex-col px-16 pt-16 pb-10">
<SectionHeader icon={Globe} color={CH['01'].color}>
Section Title Here
</SectionHeader>
<div className="grid grid-cols-3 gap-5 flex-1">
{/* Use distinct colors per card — see Card Color Strategy */}
<GradientCard color="#1E3A8A" icon={Globe}>...</GradientCard>
<GradientCard color="#059669" icon={Leaf}>...</GradientCard>
<GradientCard color="#B45309" icon={Star}>...</GradientCard>
</div>
</div>
</SlideLayout>
8. Design QA Checklist (REQUIRED)
Before exporting, compare your deck against reference decks.
See references/visual-qa-checklist.md for the full bug catalog and references/2026-best-practices.md for typography/density rules.
| Check |
Requirement |
| ✅ TOC Slide |
Matches chapter structure, clickable cards with scrollIntoView navigation |
| ✅ Logo |
Aldea logo top-right on every slide (black for light mode, white for dark) |
| ✅ Centering |
Content horizontally centered (items-center, text-center) |
| ✅ Chapter Badges |
Format: XX — CHAPTER NAME, uppercase, top-left, chapter-colored |
| ✅ Slide Numbers |
Format: 01 / NN, mono font, below logo |
| ✅ Card Colors |
Distinct accent colors per card in grids of 3+ (see Card Color Strategy) |
| ✅ Body Text |
Minimum 16px (text-base) — never text-sm for body content |
| ✅ Content Density |
≤ 40 words per content slide, one main idea per slide |
| ✅ GlowBadge Size |
size="sm" for inline badges, size="md" for standalone |
| ✅ StatsBar Position |
In-flow (mt-auto), never absolute positioned |
| ✅ Color Readability |
No bright reds or saturated yellows on light backgrounds |
| ✅ Grid Spacing |
Consistent gap-4 or gap-6 between elements |
Visual Verification with agent-browser
# Start dev server
npm run dev &
# Screenshot each slide for visual inspection
agent-browser open http://localhost:3200
agent-browser screenshot /tmp/slide-01.png # Title
agent-browser scroll down 720
agent-browser screenshot /tmp/slide-02.png # TOC
# ... repeat for each slide
# Read each screenshot and check for:
# - Text overlapping other elements
# - Colors unreadable against background
# - Cards/bars extending beyond parent containers
# - GlowBadge text disproportionate to surrounding text
# - StatsBar colors matching corresponding GradientCards
9. Export & Share
# Build static HTML (shareable folder)
npm run export
# Output: out/
# Generate PDF (requires dev server running)
npm run dev &
npm run pdf
# Output: output/[name]-YYYY-MM-DD.pdf
# Verify page count matches slide count
mdls -name kMDItemNumberOfPages output/*.pdf
# Zip for distribution
zip -rq deck.zip out/
Component Library
Core Components
| Component |
Purpose |
SlideLayout |
Universal wrapper with branding, grid, chrome. Props: chapterColor, chapterIcon |
SectionHeader |
Centered icon + gradient lines + heading. Props: icon, color, children |
GradientCard |
Rounded card with gradient bg + left accent bar. Props: color, icon?, children |
StatsBar |
In-flow stats footer (NOT absolute). Props: stats: { value, label, color }[] |
GlowBadge |
Inline metric callout with glow shadow. Props: color, children, size: 'sm'|'md' |
MetricCard |
Numbered key points with descriptions |
FlowDiagram |
Sequential workflow visualization |
ComparisonTable |
Feature comparison matrices |
CodeBlock |
Syntax-highlighted code snippets |
ImageLightbox |
Zoomable image with modal overlay |
ImageGallery |
Grid of lightbox-enabled images |
Chart Components (Recharts)
| Component |
Purpose |
ChartCard |
Wrapper with blueprint styling |
MetricsChart |
Line/area charts for time series |
ComparisonChart |
Bar charts for comparisons |
RadarChart |
Multi-dimensional analysis |
Animation Components (Motion)
| Component |
Purpose |
AnimatedSlide |
Entrance animations (fade, slideUp, scale, blur) |
AnimatedList |
Staggered list item reveals |
AnimatedNumber |
Counter animation for metrics |
Diagram Components
| Component |
Purpose |
ArchitectureDiagram |
Node-based system diagrams (React Flow) |
MermaidDiagram |
Markdown-based flowcharts (Mermaid) |
ML Visualization Components
| Component |
Purpose |
AttentionHeatmap |
Transformer attention weight visualization |
AudioWaveform |
STT/TTS audio signal display |
TrainingMetrics |
Loss/accuracy training curves |
Slide Type Templates
| Type |
Use Case |
Key Elements |
| Title |
Opening slide |
Large logo, title, subtitle, decorative lines |
| TOC |
Chapter overview |
Expandable cards, color-coded chapters, icons |
| Metrics Grid |
KPIs, evaluation criteria |
3-column MetricCard grid |
| Workflow |
Process flows |
FlowDiagram + info boxes |
| Technical |
Architecture, code |
CodeBlock + description sidebar |
| Comparison |
Feature matrices |
ComparisonTable or side-by-side columns |
| Image |
Screenshots, diagrams |
Full-width image with lightbox |
| Timeline |
Chronological events |
Horizontal timeline with markers |
| Chart |
Data visualization |
MetricsChart/ComparisonChart in ChartCard |
| Architecture |
System diagrams |
ArchitectureDiagram with custom nodes |
| Training |
ML results |
TrainingMetrics with loss/accuracy curves |
See references/slide-templates.md for detailed templates.
Icon Libraries
Included icon packs:
| Library |
Import |
Icons |
| Lucide |
lucide-react |
1,500+ |
| Tabler |
@tabler/icons-react |
5,900+ |
| Phosphor |
@phosphor-icons/react |
7,000+ |
See references/icon-reference.md for domain-specific recommendations.
Domain Templates
Pre-built templates for common use cases:
domain-templates/
├── business/ # KPI dashboards, revenue charts, pricing
├── healthcare/ # Patient metrics, clinical outcomes
├── wellness/ # Transformation journeys, quotes
└── ml-research/ # Model architecture, training, STT/TTS
Import and customize:
// Example: ML training slide
import { TrainingProgressSlide } from '../domain-templates/ml-research/templates';
<TrainingProgressSlide slideNumber={15} />
Color Palette
Dark Mode
--canvas-900: #0a0f1a; --canvas-800: #0f1729; --canvas-700: #141e35;
--text-primary: #e2e8f0; --text-secondary: #94a3b8; --text-muted: #64748b;
--blueprint-cyan: #00d4ff; --blueprint-grid: rgba(30,58,95,0.25);
Light Mode (recommended for PDF)
--canvas-900: #FAFBFC; --canvas-800: #F1F3F5; --canvas-700: #E8ECF0;
--text-primary: #1A1D23; --text-secondary: #4A5568; --text-muted: #8896A6;
--blueprint-cyan: #0891B2; --blueprint-grid: rgba(100,130,170,0.08);
Chart Colors (both themes)
#00d4ff / #0891B2 /* Cyan - primary data */
#60a5fa /* Blue - secondary */
#a78bfa /* Purple - tertiary */
#34d399 / #059669 /* Green - positive */
#f97316 / #B45309 /* Orange - warning */
See references/design-system.md for full token tables and card color strategy.
Reference Documentation
| File |
Purpose |
references/design-system.md |
Colors (dark + light), typography, spacing, grid, card color strategy |
references/component-patterns.md |
Component props, examples, TOC navigation pattern |
references/visual-qa-checklist.md |
Agent-browser screenshot workflow, 10 common visual bugs + fixes |
references/2026-best-practices.md |
Typography scale, content density, color rules, structural patterns |
references/slide-templates.md |
8+ slide type templates |
references/export-workflow.md |
PDF and static export guide |
references/data-visualization.md |
Chart components and best practices |
references/icon-reference.md |
Icon libraries by domain |
references/animation-patterns.md |
Motion components and timing |
references/ml-visualization.md |
ML-specific components |
references/custom-asset-generation.md |
Custom icon/graphic generation pipeline |
Custom Asset Generation
Generate custom icons and graphics matching the blueprint aesthetic:
Pipeline: Nano Banana Pro → ImageMagick → Potrace → SVG Cleanup
# Generate blueprint-styled icon
nano-banana-pro "Minimalist neural network icon, flat design,
3 solid colors, cyan #00d4ff on dark #0a0f1a, geometric"
# Vectorize
magick output.png -posterize 4 -colors 4 processed.png
potrace processed.pbm -s -o icon.svg
# Optimize
svgo icon.svg -o icon-optimized.svg
Alternative: Use SVGMaker MCP for direct text-to-SVG generation.
Required Tools:
nano-banana-pro skill (Gemini 3 Pro image generation)
- ImageMagick (
brew install imagemagick)
- Potrace (
brew install potrace)
- SVGO (
npm install -g svgo)
See references/custom-asset-generation.md for full workflow and domain-specific prompts
Overwatch Mode
When to Use Overwatch Mode
- Live presentations (investor pitches, product demos, conference talks)
- Interaction-rich decks with hover states, content swaps, tooltips
- WebGPU shader backgrounds for dramatic cover slides
- Decks that need password protection
- Keyboard-navigated presentations with sidebar navigation
Quick Start (Overwatch Mode)
# Create project from Overwatch scaffold
cp -r ~/.claude/skills/aldea-slidedeck/assets/scaffold-overwatch/ ./my-deck
cd my-deck
# Install dependencies
npm install
# Start dev server
npm run dev # Opens at http://localhost:5173
# Navigate to /deck/1
Adding Slides
- Create a new file in
src/slides/ (e.g., 02-problem.tsx):
import { SlideWrapper } from "../components/layout/SlideWrapper";
import { SplitLayout } from "../components/layout/SplitLayout";
import { Headline } from "../components/layout/Headline";
import { BodyText } from "../components/layout/BodyText";
export default function ProblemSlide() {
return (
<SlideWrapper mode="dark">
<Headline>The Problem</Headline>
<BodyText className="mt-8">Your content here</BodyText>
</SlideWrapper>
);
}
- Register in
src/config.ts:
export const slides: SlideEntry[] = [
{ id: "cover", fileKey: "01-cover", title: "Cover", shortTitle: "Cover" },
{ id: "problem", fileKey: "02-problem", title: "The Problem", shortTitle: "Problem" },
];
const slideModules = {
"01-cover": () => import("./slides/01-cover"),
"02-problem": () => import("./slides/02-problem"),
};
Component Library (Overwatch)
Layout Components
| Component |
Import |
Purpose |
SlideWrapper |
layout/SlideWrapper |
Full-slide container with mode prop (dark/white/orange) |
Headline |
layout/Headline |
140px display title |
SubHeadline |
layout/SubHeadline |
72px secondary title |
Eyebrow |
layout/Eyebrow |
Small caps category label |
BodyText |
layout/BodyText |
Body copy (sm/md/lg) |
MonoLabel |
layout/MonoLabel |
Monospace label (sm/md/lg) |
Divider |
layout/Divider |
Configurable hr (thin/medium/thick) |
SplitLayout |
layout/SplitLayout |
Two-column with ratio (1:1, 2:1, 1:2, 3:2, 2:3) |
CenterLayout |
layout/CenterLayout |
Centered flex container |
GridLayout |
layout/GridLayout |
2/3/4 column grid |
Interaction Components
| Component |
Import |
Purpose |
AnimatedItem |
interactions/AnimatedItem |
Entrance variants: fade/slideUp/slideLeft/scale |
StaggeredAnimation |
interactions/StaggeredAnimation |
Parent container with stagger timing |
HoverLift |
interactions/HoverLift |
Hover elevation (sm/md/lg) |
GlowBorder |
interactions/GlowBorder |
Mouse-tracking gradient border |
ExpandableCard |
interactions/ExpandableCard |
Click-to-expand with layout animation |
Accordion |
interactions/Accordion |
Collapsible sections |
TabGroup |
interactions/TabGroup |
Tabbed content panels |
QuoteRotator |
interactions/QuoteRotator |
Auto-cycling quotes with dot indicators |
ContentRotator |
interactions/ContentRotator |
Auto-cycling arbitrary ReactNode children with dots |
SocialProofCard |
interactions/SocialProofCard |
Platform-styled testimonial (twitter/linkedin/testimonial) |
TerminalTyper |
interactions/TerminalTyper |
Typewriter CLI demo with macOS terminal chrome |
TimelineConnector |
interactions/TimelineConnector |
Horizontal roadmap with animated SVG connectors |
InfiniteScrollTicker |
interactions/InfiniteScrollTicker |
Vertical marquee with gradient masks |
ProgressBar |
interactions/ProgressBar |
Animated horizontal fill bar with label |
RevealCaption |
interactions/RevealCaption |
Hover caption overlay |
Tooltip |
interactions/Tooltip |
Position-aware tooltip |
PulseIndicator |
interactions/PulseIndicator |
Pulsing dot + expanding ring |
Skeleton |
interactions/Skeleton |
Loading placeholder |
Graphics Components
| Component |
Import |
Purpose |
WebGPUCanvas |
graphics/WebGPUCanvas |
WebGPU shader host + CSS gradient fallback |
ParticleField |
graphics/ParticleField |
Floating particle animation |
NetworkGraph |
graphics/NetworkGraph |
Pulsing node-ring visualization |
SVGRadarChart |
graphics/SVGRadarChart |
Zero-dependency SVG radar chart with pathLength animation |
Utility Hooks
| Hook |
Import |
Purpose |
useAutoCycle |
hooks/useAutoCycle |
Generic auto-advancing timer: [currentItem, index, setIndex] |
useTypewriter |
hooks/useTypewriter |
Character-by-character text reveal: { displayText, isComplete } |
Navigation
- Sidebar: Auto-collapses after 3s, hover to expand, spring-animated
- Keyboard: ArrowRight/Space (next), ArrowLeft (prev), Home/End
- URL-based:
/deck/1, /deck/2, etc. via TanStack Router
- Preloading: Adjacent slides are preloaded for instant navigation
Password Protection
Set config.auth.password in src/config.ts:
auth: { password: "your-password" } // Empty string = no auth
Supports ?pw=your-password URL param for direct access.
Data-Driven Authoring
For faster deck creation, provide a YAML spec file that describes each slide's type, content, and mode. The spec serves as Claude's brief—not template codegen.
# Initialize a new deck from a YAML spec
node ~/.claude/skills/aldea-slidedeck/scripts/init-deck-from-spec.mjs deck-spec.yaml ./my-deck
The script copies the scaffold, generates config.ts, and creates empty slide files. Claude then fills in each slide using the spec + references/overwatch-slide-templates.md.
See references/overwatch-deck-schema.md for the full YAML schema covering all 14 slide types.
Deployment
# Build static SPA
npm run build
# Output: dist/
# Deploy to Cloudflare Workers
npx wrangler deploy
# Deploy to Vercel
npx vercel
# Deploy to Netlify
npx netlify deploy --prod
No PDF export — Overwatch Mode is for live presentations. For static output, use agent-browser screenshots.
Overwatch Reference Documentation
| File |
Purpose |
references/overwatch-design-system.md |
Color tokens, typography, dimensions, slide modes |
references/overwatch-interactions.md |
Animation patterns, timing, 19 interaction components + hooks |
references/overwatch-shaders.md |
WebGPU setup, WGSL syntax, custom shaders, fallback |
references/overwatch-slide-templates.md |
14 slide type templates with component composition |
references/overwatch-advanced-patterns.md |
Reference-only patterns: waterfall, carousel, strikethrough, dual-layer shader |
references/overwatch-deck-schema.md |
YAML schema for data-driven deck authoring |
Blueprint Mode (Original)
The sections below document the original Blueprint Mode.
Scaffold Assets
assets/scaffold/ - Blueprint Mode starter template
- package.json with all dependencies
- Component library (20+ components): SlideLayout, SectionHeader, GradientCard, StatsBar, GlowBadge, MetricCard, FlowDiagram, etc.
- CSS design tokens (globals.css) with both dark and light mode themes
- Export script (export-pdf.js)
slides/ - Modular file structure template
public/images/aldea-logo.png — White logo (dark mode)
public/images/aldea-logo-black.png — Black logo (light mode)
assets/scaffold-overwatch/ - Overwatch Mode starter template
- Vite + React 19 + TanStack Router + Framer Motion + Tailwind 4
- 10 layout components: SlideWrapper, Headline, SubHeadline, Eyebrow, BodyText, MonoLabel, Divider, SplitLayout, CenterLayout, GridLayout
- 12 interaction components: AnimatedItem, StaggeredAnimation, HoverLift, GlowBorder, ExpandableCard, Accordion, TabGroup, QuoteRotator, RevealCaption, Tooltip, PulseIndicator, Skeleton
- 3 graphics components: WebGPUCanvas (with CSS gradient fallback), ParticleField, NetworkGraph
- 1 WGSL shader: lava-nebula.wgsl (raymarching nebula effect)
- Chrome: DeckShell, PasswordGate, MobileBlock, SlideCounter
- Navigation: Sidebar (collapsible), SlideScaler (ResizeObserver), KeyboardNav (arrow/space/home/end)
- Example cover slide with shader background
- CSS design tokens with 3 slide modes (dark/white/orange)
assets/examples/ - Reference decks for audit workflow
Aldea - AI Advisor Journey - Jan 2026.pdf - Dark mode, original blueprint aesthetic
parenting-app-user-flows-2026-01-09.pdf - Dark mode, 22-slide technical deck
subq-media-thought-leaders-2026-02.pdf - LIGHT MODE, 18-slide media deck — brand-aligned colors, distinct card colors, GradientCard/GlowBadge components
static-export/ - HTML export example with all assets
Dependencies
{
"recharts": "^2.12.0",
"lucide-react": "^0.468.0",
"@tabler/icons-react": "^3.24.0",
"@phosphor-icons/react": "^2.1.0",
"motion": "^11.15.0",
"@xyflow/react": "^12.3.0",
"mermaid": "^11.4.0"
}
Example Usage
# User request:
"Create a slide deck for the parenting app user flows"
# Workflow (follows 9-step process):
1. AUDIT: Open assets/examples/, review existing decks for TOC, logos, centering
2. SCAFFOLD: Copy assets/scaffold/* to new project, npm install, npm run dev
3. ICONS: Review references/icon-reference.md, select Parenting domain icons
4. PLAN: Define chapters (00-Pre-Session, 01-First Launch, etc.), outline slides
5. BRAND: Extract brand colors with Firecrawl, map to chapter accents in constants.ts
6. RESEARCH: Use Reddit JSON API for user pain points, Exa for expert content
7. BUILD: Create slides with SlideLayout + chapterColor/chapterIcon, use distinct card colors
8. QA: Visual verification with agent-browser screenshots, check against 2026-best-practices.md
9. EXPORT: npm run pdf, verify page count with mdls
Tips
- Keep slides focused - One main idea per slide, ≤ 40 words per content slide
- Use consistent spacing - px-16 horizontal, pt-16/pb-10 vertical
- Leverage new components - SectionHeader for headings, GradientCard for content, StatsBar for metrics
- Distinct card colors - Never use the same accent for all cards in a grid of 3+
- Body text minimum 16px - Use
text-base, never text-sm for body content
- GlowBadge sizing -
size="sm" for inline, size="md" for standalone
- StatsBar in-flow - Always
mt-auto, never absolute positioned
- Visual verify - Screenshot every slide with agent-browser before export
- Test exports early - PDF rendering may differ from browser
- Update slide count - TOTAL in constants.ts, SlideLayout shows "/ N"
1---2name: aldea-slidedeck3description: Create Aldea-branded technical slide decks with Blueprint (Next.js 14, PDF export, dark/light themes) or Overwatch (Vite+React 19, live SPA, WebGPU shaders, Framer Motion). Supports 4 domains, 30+ components, 16 reference files, visual QA via agent-browser.4---5
6# Aldea Slide Deck Designer
7
8Create professional technical slide decks with two modes:
9
101. **Blueprint Mode** (original) — Next.js 14, 1280x720, PDF-first, cyan blueprint grid, static slides
112. **Overwatch Mode** (new) — Vite + React 19, 1920x1080, live SPA, WebGPU shaders, Framer Motion orchestration, interactive hover states, collapsible sidebar navigation
12
13## Mode Selection Guide
14
15| Factor | Blueprint Mode | Overwatch Mode |
16|--------|---------------|----------------|
17| **Distribution** | PDF, email, print | Live URL, screen presentations |
18| **Audience** | Non-technical, board, clients | Technical, investors, demos |
19| **Interactivity** | Static (lightbox clicks) | Hover effects, content swaps, tooltips, shaders |
20| **Dimensions** | 1280x720 | 1920x1080 |
21| **Framework** | Next.js 14 | Vite + React 19 + TanStack Router |
22| **Animation** | Basic motion enter/exit | Deep Framer Motion orchestration |
23| **Graphics** | Static SVG, Recharts | WebGPU shaders, particle fields, network graphs |
24| **Auth** | None | Optional password gate |
25| **Deploy** | Static HTML + PDF | Cloudflare Workers, Vercel, Netlify |
26
27## When to Use This Skill
28
29- Creating new presentation decks for Aldea projects
30- Building technical journey/progress presentations
31- Scaffolding a Next.js slide deck with Aldea design system
32- Exporting decks to PDF or static HTML for sharing
33- Visualizing data, metrics, training results, or architecture
34
35## Domains Supported
36
37| Domain | Use Cases |
38|--------|-----------|
39| **Business & Finance** | KPI dashboards, revenue charts, growth trends, pricing |
40| **Healthcare** | Patient metrics, clinical outcomes, treatment timelines |
41| **Wellness & Coaching** | Transformation journeys, milestone celebrations, quotes |
42| **AI/ML Research** | Model architecture, training metrics, STT/TTS pipelines |
43
44---
45
46## Design Philosophy
47
48**Theme Selection:** Choose based on audience and distribution format.
49- **Dark mode** (default): Tech/AI audiences, on-screen presentations. Deep canvas (`#0a0f1a`) with vivid cyan accents (`#00d4ff`).
50- **Light mode**: PDF distribution, non-technical audiences. Off-white canvas (`#FAFBFC`) with darkened accents. See `references/design-system.md` > Light Mode.
51
52**Blueprint Aesthetic:**
53- Dual-layer grid overlay (40px coarse + 10px fine)
54- Corner marks with dynamic chapter coloring via `--corner-color` CSS variable
55- Clean typographic hierarchy (Major Third 1.25x ratio)
56
57**Typography Stack:**
58- Display: Playfair Display (titles, headers)
59- Body: DM Sans (content, descriptions) — minimum 16px (`text-base`) for body text
60- Mono: JetBrains Mono (code, labels, technical text)
61
62**Dimensions:**
63- 1280px × 720px (16:9 aspect ratio)
64- Print-safe color preservation
65- PDF-optimized page breaks
66
67---
68
69## Quick Start Workflow
70
71### 1. Audit Reference Decks (REQUIRED)
72
73**Before designing, audit the existing example decks for inspiration and consistency.**
74
75```bash
76# Open reference decks for audit
77open ~/.claude/skills/aldea-slidedeck/assets/examples/
78
79# Reference decks available:
80# - Aldea - AI Advisor Journey - Jan 2026.pdf (dark mode, original blueprint)
81# - parenting-app-user-flows-2026-01-09.pdf (dark mode, 22-slide technical)
82# - subq-media-thought-leaders-2026-02.pdf (LIGHT MODE, 18-slide media deck)
83```
84
85**Audit checklist - extract from reference decks:**
86
87| Element | What to Note |
88|---------|--------------|
89| **TOC Structure** | Chapter naming convention, numbering format (00, 01, 02...) |
90| **Logo Placement** | Top-right Aldea logo, brightness/contrast filters |
91| **Content Centering** | Horizontal centering patterns, vertical alignment |
92| **Color Usage** | Accent colors per section, card border colors |
93| **Typography** | Title sizes, label casing (uppercase mono for badges) |
94| **Slide Chrome** | Chapter badges, slide numbers, decorative lines |
95| **Image Treatment** | Opacity levels, gradient overlays, positioning |
96
97### 2. Scaffold New Project
98
99```bash
100# Create project directory
101mkdir my-slidedeck && cd my-slidedeck
102
103# Copy scaffold files from this skill's assets
104cp -r ~/.claude/skills/aldea-slidedeck/assets/scaffold/* .
105
106# Install dependencies
107npm install
108
109# Start dev server
110npm run dev # Opens at http://localhost:3200
111```
112
113### 3. Review Iconography Options
114
115**Before building, review available icons for your domain.**
116
117See `references/icon-reference.md` for full library with domain-specific recommendations.
118
119| Domain | Key Icons |
120|--------|-----------|
121| **AI/ML** | Brain, Cpu, Database, Layers, Network, Waveform |
122| **Business** | TrendingUp, DollarSign, PieChart, Target, Users |
123| **Healthcare** | Heart, Activity, Stethoscope, ShieldCheck |
124| **Parenting** | Baby, Users, HandHeart, Shield, Brain, Puzzle |
125| **Spirituality** | Compass, Flame, Mountain, Sunrise, Lightbulb |
126
127**Icon libraries available:**
128- **Lucide** (1,500+): `lucide-react` - General purpose, clean
129- **Tabler** (5,900+): `@tabler/icons-react` - Largest collection
130- **Phosphor** (7,000+): `@phosphor-icons/react` - Multiple weights (thin/bold/fill)
131
132**Finding icons:**
133- Lucide: https://lucide.dev/icons
134- Tabler: https://tabler.io/icons
135- Phosphor: https://phosphoricons.com
136
137### 4. Plan Content Structure
138
139Before building slides:
1401. **Define chapters** - Group content into 4-8 logical chapters (follow `XX — CHAPTER NAME` format)
1412. **Outline slides** - 3-5 slides per chapter
1423. **Identify slide types** - Title, TOC, metrics, workflow, comparison, etc.
1434. **Gather assets** - Screenshots, diagrams, logos, expert photos
1445. **Select icons** - Map icons to chapters/concepts using icon reference
145
146### 5. Brand Color Extraction
147
148**Before building slides, extract and map brand colors from the client/company site.**
149
150```bash
151# Scrape the client/company site for brand identity (colors, fonts, typography)
152python3 ~/.claude/skills/firecrawl/scripts/firecrawl_api.py scrape "https://client-site.com" --formats branding
153
154# Or take a screenshot for visual reference
155agent-browser open https://client-site.com
156agent-browser screenshot /tmp/brand-reference.png
157```
158
159**Map extracted brand colors to chapter accents** in `slides/constants.ts`:
160```tsx
161// Brand alignment: [source] → [deck color]
162// Example: aldea.ai primary gradient amber-to-indigo
163// → Chapter accents darkened for light-mode readability
164export const CH: Record<string, { color: string; icon: any; label: string }> = {
165 '01': { color: '#1E3A8A', icon: Globe, label: 'Chapter One' },
166 // ...
167};
168```
169
170**Anti-patterns:**
171- Never use bright reds (`#DC2626`, `#E11D48`) — they read as error/danger
172- Never use saturated yellows (`#fbbf24`) on light backgrounds — they disappear
173- Darken to amber-800/900 range (`#92400E`, `#B45309`) for readability
174
175### 6. Research & Content Gathering
176
177**Available research tools (separate skills/CLIs):**
178
179| Tool | Skill/CLI | Purpose |
180|------|-----------|---------|
181| **Firecrawl** | `firecrawl` CLI or Firecrawl skill | Web scraping, convert URLs to markdown |
182| **Exa Search** | `exa-search` skill | AI-powered neural search, code examples |
183| **Reddit JSON** | Native curl (no auth) | User feedback, pain points, discussions |
184| **Perplexity** | Perplexity MCP | Research synthesis, fact-checking |
185
186**Tools for domain research:**
187
188```bash
189# Reddit JSON API (no auth required) - user feedback, pain points
190curl "https://www.reddit.com/r/{SUBREDDIT}/search.json?q={QUERY}&limit=25&sort=relevance"
191curl "https://www.reddit.com/r/{SUBREDDIT}/top.json?t=month&limit=50"
192
193# Exa Search (AI-powered) - expert content, articles
194exa-search "{domain} best practices" --type article
195
196# Firecrawl - competitor decks, methodology pages
197firecrawl scrape https://example.com/methodology
198```
199
200**Reddit JSON trick:** Append `.json` to any Reddit URL for structured data:
201- `reddit.com/r/{sub}/top.json?t=year` - Top posts
202- `reddit.com/r/{sub}/search.json?q=query` - Search results
203- `reddit.com/r/{sub}/comments/POST_ID.json` - Post + comments
204
205**Domain-specific subreddits:**
206
207| Domain | Subreddits |
208|--------|------------|
209| **Parenting** | r/Parenting, r/NewParents, r/Mommit, r/Daddit, r/toddlers |
210| **AI/ML** | r/MachineLearning, r/LocalLLaMA, r/artificial |
211| **Healthcare** | r/medicine, r/nursing, r/healthIT |
212| **Business** | r/startups, r/Entrepreneur, r/smallbusiness |
213
214### 7. Build Slides
215
216Each slide uses the `SlideLayout` wrapper with optional `chapterColor` and `chapterIcon` for dynamic styling:
217
218```tsx
219import { CH, TOTAL } from './constants';
220import { SectionHeader, GradientCard } from './helpers';
221
222<SlideLayout
223 chapter="01 — CHAPTER NAME"
224 slideNumber={3}
225 totalSlides={TOTAL}
226 chapterColor={CH['01'].color}
227 chapterIcon={CH['01'].icon}
228>
229 <div className="h-full flex flex-col px-16 pt-16 pb-10">
230 <SectionHeader icon={Globe} color={CH['01'].color}>
231 Section Title Here
232 </SectionHeader>
233 <div className="grid grid-cols-3 gap-5 flex-1">
234 {/* Use distinct colors per card — see Card Color Strategy */}
235 <GradientCard color="#1E3A8A" icon={Globe}>...</GradientCard>
236 <GradientCard color="#059669" icon={Leaf}>...</GradientCard>
237 <GradientCard color="#B45309" icon={Star}>...</GradientCard>
238 </div>
239 </div>
240</SlideLayout>
241```
242
243### 8. Design QA Checklist (REQUIRED)
244
245**Before exporting, compare your deck against reference decks.**
246See `references/visual-qa-checklist.md` for the full bug catalog and `references/2026-best-practices.md` for typography/density rules.
247
248| Check | Requirement |
249|-------|-------------|
250| ✅ **TOC Slide** | Matches chapter structure, clickable cards with `scrollIntoView` navigation |
251| ✅ **Logo** | Aldea logo top-right on every slide (black for light mode, white for dark) |
252| ✅ **Centering** | Content horizontally centered (`items-center`, `text-center`) |
253| ✅ **Chapter Badges** | Format: `XX — CHAPTER NAME`, uppercase, top-left, chapter-colored |
254| ✅ **Slide Numbers** | Format: `01 / NN`, mono font, below logo |
255| ✅ **Card Colors** | Distinct accent colors per card in grids of 3+ (see Card Color Strategy) |
256| ✅ **Body Text** | Minimum 16px (`text-base`) — never `text-sm` for body content |
257| ✅ **Content Density** | ≤ 40 words per content slide, one main idea per slide |
258| ✅ **GlowBadge Size** | `size="sm"` for inline badges, `size="md"` for standalone |
259| ✅ **StatsBar Position** | In-flow (`mt-auto`), never absolute positioned |
260| ✅ **Color Readability** | No bright reds or saturated yellows on light backgrounds |
261| ✅ **Grid Spacing** | Consistent `gap-4` or `gap-6` between elements |
262
263#### Visual Verification with agent-browser
264
265```bash
266# Start dev server
267npm run dev &
268
269# Screenshot each slide for visual inspection
270agent-browser open http://localhost:3200
271agent-browser screenshot /tmp/slide-01.png # Title
272agent-browser scroll down 720
273agent-browser screenshot /tmp/slide-02.png # TOC
274# ... repeat for each slide
275
276# Read each screenshot and check for:
277# - Text overlapping other elements
278# - Colors unreadable against background
279# - Cards/bars extending beyond parent containers
280# - GlowBadge text disproportionate to surrounding text
281# - StatsBar colors matching corresponding GradientCards
282```
283
284### 9. Export & Share
285
286```bash
287# Build static HTML (shareable folder)
288npm run export
289# Output: out/
290
291# Generate PDF (requires dev server running)
292npm run dev &
293npm run pdf
294# Output: output/[name]-YYYY-MM-DD.pdf
295
296# Verify page count matches slide count
297mdls -name kMDItemNumberOfPages output/*.pdf
298
299# Zip for distribution
300zip -rq deck.zip out/
301```
302
303---
304
305## Component Library
306
307### Core Components
308
309| Component | Purpose |
310|-----------|---------|
311| `SlideLayout` | Universal wrapper with branding, grid, chrome. Props: `chapterColor`, `chapterIcon` |
312| `SectionHeader` | Centered icon + gradient lines + heading. Props: `icon`, `color`, `children` |
313| `GradientCard` | Rounded card with gradient bg + left accent bar. Props: `color`, `icon?`, `children` |
314| `StatsBar` | In-flow stats footer (NOT absolute). Props: `stats: { value, label, color }[]` |
315| `GlowBadge` | Inline metric callout with glow shadow. Props: `color`, `children`, `size: 'sm'\|'md'` |
316| `MetricCard` | Numbered key points with descriptions |
317| `FlowDiagram` | Sequential workflow visualization |
318| `ComparisonTable` | Feature comparison matrices |
319| `CodeBlock` | Syntax-highlighted code snippets |
320| `ImageLightbox` | Zoomable image with modal overlay |
321| `ImageGallery` | Grid of lightbox-enabled images |
322
323### Chart Components (Recharts)
324
325| Component | Purpose |
326|-----------|---------|
327| `ChartCard` | Wrapper with blueprint styling |
328| `MetricsChart` | Line/area charts for time series |
329| `ComparisonChart` | Bar charts for comparisons |
330| `RadarChart` | Multi-dimensional analysis |
331
332### Animation Components (Motion)
333
334| Component | Purpose |
335|-----------|---------|
336| `AnimatedSlide` | Entrance animations (fade, slideUp, scale, blur) |
337| `AnimatedList` | Staggered list item reveals |
338| `AnimatedNumber` | Counter animation for metrics |
339
340### Diagram Components
341
342| Component | Purpose |
343|-----------|---------|
344| `ArchitectureDiagram` | Node-based system diagrams (React Flow) |
345| `MermaidDiagram` | Markdown-based flowcharts (Mermaid) |
346
347### ML Visualization Components
348
349| Component | Purpose |
350|-----------|---------|
351| `AttentionHeatmap` | Transformer attention weight visualization |
352| `AudioWaveform` | STT/TTS audio signal display |
353| `TrainingMetrics` | Loss/accuracy training curves |
354
355---
356
357## Slide Type Templates
358
359| Type | Use Case | Key Elements |
360|------|----------|--------------|
361| **Title** | Opening slide | Large logo, title, subtitle, decorative lines |
362| **TOC** | Chapter overview | Expandable cards, color-coded chapters, icons |
363| **Metrics Grid** | KPIs, evaluation criteria | 3-column MetricCard grid |
364| **Workflow** | Process flows | FlowDiagram + info boxes |
365| **Technical** | Architecture, code | CodeBlock + description sidebar |
366| **Comparison** | Feature matrices | ComparisonTable or side-by-side columns |
367| **Image** | Screenshots, diagrams | Full-width image with lightbox |
368| **Timeline** | Chronological events | Horizontal timeline with markers |
369| **Chart** | Data visualization | MetricsChart/ComparisonChart in ChartCard |
370| **Architecture** | System diagrams | ArchitectureDiagram with custom nodes |
371| **Training** | ML results | TrainingMetrics with loss/accuracy curves |
372
373See `references/slide-templates.md` for detailed templates.
374
375---
376
377## Icon Libraries
378
379Included icon packs:
380
381| Library | Import | Icons |
382|---------|--------|-------|
383| **Lucide** | `lucide-react` | 1,500+ |
384| **Tabler** | `@tabler/icons-react` | 5,900+ |
385| **Phosphor** | `@phosphor-icons/react` | 7,000+ |
386
387See `references/icon-reference.md` for domain-specific recommendations.
388
389---
390
391## Domain Templates
392
393Pre-built templates for common use cases:
394
395```
396domain-templates/
397├── business/ # KPI dashboards, revenue charts, pricing
398├── healthcare/ # Patient metrics, clinical outcomes
399├── wellness/ # Transformation journeys, quotes
400└── ml-research/ # Model architecture, training, STT/TTS
401```
402
403Import and customize:
404
405```tsx
406// Example: ML training slide
407import { TrainingProgressSlide } from '../domain-templates/ml-research/templates';
408
409<TrainingProgressSlide slideNumber={15} />
410```
411
412---
413
414## Color Palette
415
416### Dark Mode
417```css
418--canvas-900: #0a0f1a; --canvas-800: #0f1729; --canvas-700: #141e35;
419--text-primary: #e2e8f0; --text-secondary: #94a3b8; --text-muted: #64748b;
420--blueprint-cyan: #00d4ff; --blueprint-grid: rgba(30,58,95,0.25);
421```
422
423### Light Mode (recommended for PDF)
424```css
425--canvas-900: #FAFBFC; --canvas-800: #F1F3F5; --canvas-700: #E8ECF0;
426--text-primary: #1A1D23; --text-secondary: #4A5568; --text-muted: #8896A6;
427--blueprint-cyan: #0891B2; --blueprint-grid: rgba(100,130,170,0.08);
428```
429
430### Chart Colors (both themes)
431```css
432#00d4ff / #0891B2 /* Cyan - primary data */
433#60a5fa /* Blue - secondary */
434#a78bfa /* Purple - tertiary */
435#34d399 / #059669 /* Green - positive */
436#f97316 / #B45309 /* Orange - warning */
437```
438
439See `references/design-system.md` for full token tables and card color strategy.
440
441---
442
443## Reference Documentation
444
445| File | Purpose |
446|------|---------|
447| `references/design-system.md` | Colors (dark + light), typography, spacing, grid, card color strategy |
448| `references/component-patterns.md` | Component props, examples, TOC navigation pattern |
449| `references/visual-qa-checklist.md` | Agent-browser screenshot workflow, 10 common visual bugs + fixes |
450| `references/2026-best-practices.md` | Typography scale, content density, color rules, structural patterns |
451| `references/slide-templates.md` | 8+ slide type templates |
452| `references/export-workflow.md` | PDF and static export guide |
453| `references/data-visualization.md` | Chart components and best practices |
454| `references/icon-reference.md` | Icon libraries by domain |
455| `references/animation-patterns.md` | Motion components and timing |
456| `references/ml-visualization.md` | ML-specific components |
457| `references/custom-asset-generation.md` | Custom icon/graphic generation pipeline |
458
459---
460
461## Custom Asset Generation
462
463Generate custom icons and graphics matching the blueprint aesthetic:
464
465**Pipeline:** Nano Banana Pro → ImageMagick → Potrace → SVG Cleanup
466
467```bash
468# Generate blueprint-styled icon
469nano-banana-pro "Minimalist neural network icon, flat design,
470 3 solid colors, cyan #00d4ff on dark #0a0f1a, geometric"
471
472# Vectorize
473magick output.png -posterize 4 -colors 4 processed.png
474potrace processed.pbm -s -o icon.svg
475
476# Optimize
477svgo icon.svg -o icon-optimized.svg
478```
479
480**Alternative:** Use SVGMaker MCP for direct text-to-SVG generation.
481
482**Required Tools:**
483- `nano-banana-pro` skill (Gemini 3 Pro image generation)
484- ImageMagick (`brew install imagemagick`)
485- Potrace (`brew install potrace`)
486- SVGO (`npm install -g svgo`)
487
488See `references/custom-asset-generation.md` for full workflow and domain-specific prompts
489
490---
491
492## Overwatch Mode
493
494### When to Use Overwatch Mode
495
496- Live presentations (investor pitches, product demos, conference talks)
497- Interaction-rich decks with hover states, content swaps, tooltips
498- WebGPU shader backgrounds for dramatic cover slides
499- Decks that need password protection
500- Keyboard-navigated presentations with sidebar navigation
501
502### Quick Start (Overwatch Mode)
503
504```bash
505# Create project from Overwatch scaffold
506cp -r ~/.claude/skills/aldea-slidedeck/assets/scaffold-overwatch/ ./my-deck
507cd my-deck
508
509# Install dependencies
510npm install
511
512# Start dev server
513npm run dev # Opens at http://localhost:5173
514# Navigate to /deck/1
515```
516
517### Adding Slides
518
5191. Create a new file in `src/slides/` (e.g., `02-problem.tsx`):
520```tsx
521import { SlideWrapper } from "../components/layout/SlideWrapper";
522import { SplitLayout } from "../components/layout/SplitLayout";
523import { Headline } from "../components/layout/Headline";
524import { BodyText } from "../components/layout/BodyText";
525
526export default function ProblemSlide() {
527 return (
528 <SlideWrapper mode="dark">
529 <Headline>The Problem</Headline>
530 <BodyText className="mt-8">Your content here</BodyText>
531 </SlideWrapper>
532 );
533}
534```
535
5362. Register in `src/config.ts`:
537```typescript
538export const slides: SlideEntry[] = [
539 { id: "cover", fileKey: "01-cover", title: "Cover", shortTitle: "Cover" },
540 { id: "problem", fileKey: "02-problem", title: "The Problem", shortTitle: "Problem" },
541];
542
543const slideModules = {
544 "01-cover": () => import("./slides/01-cover"),
545 "02-problem": () => import("./slides/02-problem"),
546};
547```
548
549### Component Library (Overwatch)
550
551#### Layout Components
552| Component | Import | Purpose |
553|-----------|--------|---------|
554| `SlideWrapper` | `layout/SlideWrapper` | Full-slide container with `mode` prop (dark/white/orange) |
555| `Headline` | `layout/Headline` | 140px display title |
556| `SubHeadline` | `layout/SubHeadline` | 72px secondary title |
557| `Eyebrow` | `layout/Eyebrow` | Small caps category label |
558| `BodyText` | `layout/BodyText` | Body copy (sm/md/lg) |
559| `MonoLabel` | `layout/MonoLabel` | Monospace label (sm/md/lg) |
560| `Divider` | `layout/Divider` | Configurable hr (thin/medium/thick) |
561| `SplitLayout` | `layout/SplitLayout` | Two-column with ratio (1:1, 2:1, 1:2, 3:2, 2:3) |
562| `CenterLayout` | `layout/CenterLayout` | Centered flex container |
563| `GridLayout` | `layout/GridLayout` | 2/3/4 column grid |
564
565#### Interaction Components
566| Component | Import | Purpose |
567|-----------|--------|---------|
568| `AnimatedItem` | `interactions/AnimatedItem` | Entrance variants: fade/slideUp/slideLeft/scale |
569| `StaggeredAnimation` | `interactions/StaggeredAnimation` | Parent container with stagger timing |
570| `HoverLift` | `interactions/HoverLift` | Hover elevation (sm/md/lg) |
571| `GlowBorder` | `interactions/GlowBorder` | Mouse-tracking gradient border |
572| `ExpandableCard` | `interactions/ExpandableCard` | Click-to-expand with layout animation |
573| `Accordion` | `interactions/Accordion` | Collapsible sections |
574| `TabGroup` | `interactions/TabGroup` | Tabbed content panels |
575| `QuoteRotator` | `interactions/QuoteRotator` | Auto-cycling quotes with dot indicators |
576| `ContentRotator` | `interactions/ContentRotator` | Auto-cycling arbitrary ReactNode children with dots |
577| `SocialProofCard` | `interactions/SocialProofCard` | Platform-styled testimonial (twitter/linkedin/testimonial) |
578| `TerminalTyper` | `interactions/TerminalTyper` | Typewriter CLI demo with macOS terminal chrome |
579| `TimelineConnector` | `interactions/TimelineConnector` | Horizontal roadmap with animated SVG connectors |
580| `InfiniteScrollTicker` | `interactions/InfiniteScrollTicker` | Vertical marquee with gradient masks |
581| `ProgressBar` | `interactions/ProgressBar` | Animated horizontal fill bar with label |
582| `RevealCaption` | `interactions/RevealCaption` | Hover caption overlay |
583| `Tooltip` | `interactions/Tooltip` | Position-aware tooltip |
584| `PulseIndicator` | `interactions/PulseIndicator` | Pulsing dot + expanding ring |
585| `Skeleton` | `interactions/Skeleton` | Loading placeholder |
586
587#### Graphics Components
588| Component | Import | Purpose |
589|-----------|--------|---------|
590| `WebGPUCanvas` | `graphics/WebGPUCanvas` | WebGPU shader host + CSS gradient fallback |
591| `ParticleField` | `graphics/ParticleField` | Floating particle animation |
592| `NetworkGraph` | `graphics/NetworkGraph` | Pulsing node-ring visualization |
593| `SVGRadarChart` | `graphics/SVGRadarChart` | Zero-dependency SVG radar chart with pathLength animation |
594
595#### Utility Hooks
596| Hook | Import | Purpose |
597|------|--------|---------|
598| `useAutoCycle` | `hooks/useAutoCycle` | Generic auto-advancing timer: `[currentItem, index, setIndex]` |
599| `useTypewriter` | `hooks/useTypewriter` | Character-by-character text reveal: `{ displayText, isComplete }` |
600
601### Navigation
602
603- **Sidebar:** Auto-collapses after 3s, hover to expand, spring-animated
604- **Keyboard:** ArrowRight/Space (next), ArrowLeft (prev), Home/End
605- **URL-based:** `/deck/1`, `/deck/2`, etc. via TanStack Router
606- **Preloading:** Adjacent slides are preloaded for instant navigation
607
608### Password Protection
609
610Set `config.auth.password` in `src/config.ts`:
611```typescript
612auth: { password: "your-password" } // Empty string = no auth
613```
614
615Supports `?pw=your-password` URL param for direct access.
616
617### Data-Driven Authoring
618
619For faster deck creation, provide a YAML spec file that describes each slide's type, content, and mode. The spec serves as Claude's brief—not template codegen.
620
621```bash
622# Initialize a new deck from a YAML spec
623node ~/.claude/skills/aldea-slidedeck/scripts/init-deck-from-spec.mjs deck-spec.yaml ./my-deck
624```
625
626The script copies the scaffold, generates `config.ts`, and creates empty slide files. Claude then fills in each slide using the spec + `references/overwatch-slide-templates.md`.
627
628See `references/overwatch-deck-schema.md` for the full YAML schema covering all 14 slide types.
629
630### Deployment
631
632```bash
633# Build static SPA
634npm run build
635# Output: dist/
636
637# Deploy to Cloudflare Workers
638npx wrangler deploy
639
640# Deploy to Vercel
641npx vercel
642
643# Deploy to Netlify
644npx netlify deploy --prod
645```
646
647**No PDF export** — Overwatch Mode is for live presentations. For static output, use agent-browser screenshots.
648
649### Overwatch Reference Documentation
650
651| File | Purpose |
652|------|---------|
653| `references/overwatch-design-system.md` | Color tokens, typography, dimensions, slide modes |
654| `references/overwatch-interactions.md` | Animation patterns, timing, 19 interaction components + hooks |
655| `references/overwatch-shaders.md` | WebGPU setup, WGSL syntax, custom shaders, fallback |
656| `references/overwatch-slide-templates.md` | 14 slide type templates with component composition |
657| `references/overwatch-advanced-patterns.md` | Reference-only patterns: waterfall, carousel, strikethrough, dual-layer shader |
658| `references/overwatch-deck-schema.md` | YAML schema for data-driven deck authoring |
659
660---
661
662## Blueprint Mode (Original)
663
664The sections below document the original Blueprint Mode.
665
666## Scaffold Assets
667
668- `assets/scaffold/` - Blueprint Mode starter template
669 - package.json with all dependencies
670 - Component library (20+ components): SlideLayout, SectionHeader, GradientCard, StatsBar, GlowBadge, MetricCard, FlowDiagram, etc.
671 - CSS design tokens (globals.css) with both dark and light mode themes
672 - Export script (export-pdf.js)
673 - `slides/` - Modular file structure template
674 - `public/images/aldea-logo.png` — White logo (dark mode)
675 - `public/images/aldea-logo-black.png` — Black logo (light mode)
676
677- `assets/scaffold-overwatch/` - Overwatch Mode starter template
678 - Vite + React 19 + TanStack Router + Framer Motion + Tailwind 4
679 - 10 layout components: SlideWrapper, Headline, SubHeadline, Eyebrow, BodyText, MonoLabel, Divider, SplitLayout, CenterLayout, GridLayout
680 - 12 interaction components: AnimatedItem, StaggeredAnimation, HoverLift, GlowBorder, ExpandableCard, Accordion, TabGroup, QuoteRotator, RevealCaption, Tooltip, PulseIndicator, Skeleton
681 - 3 graphics components: WebGPUCanvas (with CSS gradient fallback), ParticleField, NetworkGraph
682 - 1 WGSL shader: lava-nebula.wgsl (raymarching nebula effect)
683 - Chrome: DeckShell, PasswordGate, MobileBlock, SlideCounter
684 - Navigation: Sidebar (collapsible), SlideScaler (ResizeObserver), KeyboardNav (arrow/space/home/end)
685 - Example cover slide with shader background
686 - CSS design tokens with 3 slide modes (dark/white/orange)
687
688- `assets/examples/` - **Reference decks for audit workflow**
689 - `Aldea - AI Advisor Journey - Jan 2026.pdf` - Dark mode, original blueprint aesthetic
690 - `parenting-app-user-flows-2026-01-09.pdf` - Dark mode, 22-slide technical deck
691 - `subq-media-thought-leaders-2026-02.pdf` - **LIGHT MODE**, 18-slide media deck — brand-aligned colors, distinct card colors, GradientCard/GlowBadge components
692 - `static-export/` - HTML export example with all assets
693
694---
695
696## Dependencies
697
698```json
699{
700 "recharts": "^2.12.0",
701 "lucide-react": "^0.468.0",
702 "@tabler/icons-react": "^3.24.0",
703 "@phosphor-icons/react": "^2.1.0",
704 "motion": "^11.15.0",
705 "@xyflow/react": "^12.3.0",
706 "mermaid": "^11.4.0"
707}
708```
709
710---
711
712## Example Usage
713
714```bash
715# User request:
716"Create a slide deck for the parenting app user flows"
717
718# Workflow (follows 9-step process):
7191. AUDIT: Open assets/examples/, review existing decks for TOC, logos, centering
7202. SCAFFOLD: Copy assets/scaffold/* to new project, npm install, npm run dev
7213. ICONS: Review references/icon-reference.md, select Parenting domain icons
7224. PLAN: Define chapters (00-Pre-Session, 01-First Launch, etc.), outline slides
7235. BRAND: Extract brand colors with Firecrawl, map to chapter accents in constants.ts
7246. RESEARCH: Use Reddit JSON API for user pain points, Exa for expert content
7257. BUILD: Create slides with SlideLayout + chapterColor/chapterIcon, use distinct card colors
7268. QA: Visual verification with agent-browser screenshots, check against 2026-best-practices.md
7279. EXPORT: npm run pdf, verify page count with mdls
728```
729
730## Tips
731
732- **Keep slides focused** - One main idea per slide, ≤ 40 words per content slide
733- **Use consistent spacing** - px-16 horizontal, pt-16/pb-10 vertical
734- **Leverage new components** - SectionHeader for headings, GradientCard for content, StatsBar for metrics
735- **Distinct card colors** - Never use the same accent for all cards in a grid of 3+
736- **Body text minimum 16px** - Use `text-base`, never `text-sm` for body content
737- **GlowBadge sizing** - `size="sm"` for inline, `size="md"` for standalone
738- **StatsBar in-flow** - Always `mt-auto`, never absolute positioned
739- **Visual verify** - Screenshot every slide with agent-browser before export
740- **Test exports early** - PDF rendering may differ from browser
741- **Update slide count** - TOTAL in constants.ts, SlideLayout shows "/ N"