skills/pitch-deck/SKILL.md
Build a responsive, interactive pitch-deck website from a brand book + a PRD/example deck. Use when the user asks to "build a pitch deck", "make an investor deck", "create a sales deck", generate a deck site from a brand book, or scaffold a deck from a PRD or existing slides. Pulls brand tokens (colors, typography, voice) from a brandbook-builder-style repo, runs a guided brief (investor vs sales, copy approval, image/logo intake, reference mining), then scaffolds a Vite + React + TS + Tailwind + motion deck site mirroring the utopia-os-deck section-scroll pattern.
npx skillsauth add The-Utopia-Studio/skills pitch-deckInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Take the user from nothing to a deployed, responsive pitch-deck site. Mirrors the brandbook-builder plugin pattern (brief → build → QA/deploy) but the deliverable is a section-scroll deck app, not a brand book.
The output stack is fixed: Vite + React + TypeScript + Tailwind CSS + motion (Framer Motion).
The structural pattern is the utopia-os-deck section-scroll model (one component per slide,
AnimatePresence loader, fixed Navbar, scroll-snap optional, motion reveals on enter).
references/investor-tone.md and references/sales-tone.md).Ask only what you can't infer. Combine into one AskUserQuestion call.
.cache/brand-source/ inside output dir),references/reference-mining.md; mine moves, not layouts.If anything is ambiguous, ask in the same turn — never spawn the scaffold blind.
Default behaviour: read if present, ask if not. If the user gave a path or URL, try to extract every token from the brand book first; only prompt for tokens that cannot be resolved. If no brand book at all, fall through to inline intake.
Follow references/brand-extraction.md. Produce a single brand.json at the output target's
root with this shape (fields the build phase reads):
{
"name": "...",
"tone": "investor|sales",
"colors": { "ink": "#101010", "inkSoft": "#3c3c3c",
"brand": { "DEFAULT": "...", "deep": "...", "mint": "...", "light": "..." },
"bg": "#fff", "surface": "#f7f7f7" },
"fonts": { "display": "...", "sans": "...", "mono": "..." },
"logo": { "src": "/assets/logo.svg", "alt": "..." },
"radii": { "sm": 4, "md": 8, "lg": 16 },
"motion": { "ease": "easeOut", "durationMs": 600, "stagger": 80 }
}
If a brand book repo is provided, read tokens from tailwind.config.js (extend.colors,
extend.fontFamily), index.css (CSS custom props), and any brand.{ts,json} / tokens.*
files. If the brand book uses Shadcn-style theming, also read :root CSS vars from globals.
If no brand book exists, prompt for: 1 primary color, 1 accent, 1 ink color, display font, body font. Confirm before writing.
For each canonical section (see references/section-map.md), produce a one-line intent
plus a copy block status:
provided — pulled verbatim from PRD or existing deck.draft — generated; must be approved by user before write.defer — section dropped this round.Output the brief as deck-brief.md at the output root. Show it to the user. Wait for explicit
"approved" or edits before Phase 3.
Audience handling:
references/investor-tone.md.references/sales-tone.md.At the chosen output path, scaffold a fresh Vite + React + TS project (npm create vite@latest . -- --template react-ts), then add: Tailwind, postcss, autoprefixer, motion, @fontsource for
brand fonts. Mirror this repo's layout:
src/
App.tsx # AnimatePresence loader → main scroll
main.tsx
brand.ts # typed import of brand.json
assets.ts # central image manifest (local + optional figma URL)
index.css # Tailwind layers + brand CSS vars + font @imports
components/
Loader.tsx # branded boot animation
Navbar.tsx # fixed, anchors to sections
Reveal.tsx # motion in-view wrapper
icons.tsx # inline SVGs (lucide-react optional)
slides/
Cover.tsx
Problem.tsx
Solution.tsx
Market.tsx
Product.tsx
Traction.tsx # investor only by default
BusinessModel.tsx # investor only by default
GTM.tsx
Proof.tsx # sales: case studies; investor: traction continued
Team.tsx
Roadmap.tsx
Ask.tsx # investor: round ask; sales: next step CTA
tailwind.config.js # extends colors/fonts from brand.json
index.html
public/assets/ # logo + slide imagery
One component per slide — section-scroll, not a slide carousel. Each slide is a <section>
with id, mx-auto max-w-[1440px], px-6 md:px-[120px], motion Reveal on enter. Match the
hero/stats/cta motion style in templates/slide-skeleton.tsx.
Investor vs sales drives which slides ship. Cover/Problem/Solution/Market/Product/GTM/Team/Ask are universal. Traction + BusinessModel default-on for investor, default-off for sales. Proof default-on for sales.
For every slide:
[IMAGE NEEDED: <description>] placeholder in assets.ts and a neutral SVG placeholder in
public/assets/. Never leave broken refs.draft block from Phase 2 and require explicit approval per
slide before committing to JSX. Investor numbers (traction, ask) must be user-supplied;
never fabricate.Reference uploads (Pinterest URLs, deck PDFs) go into references/reference-mining.md flow:
extract palette temperature, contrast level, type pairing direction, image density, motion
intensity — write the conclusions into deck-brief.md under "Visual direction" and apply at
JSX time. Brand tokens win every conflict.
Run npm install, then npm run build. Run the skill's validator before booting:
node <skill-root>/scripts/validate-pitchdeck-project.mjs <deck-output-path>
(Resolved from pitch-deck/scripts/validate-pitchdeck-project.mjs inside the skills
collection.) Then boot npm run dev and verify:
The validator fails the deploy if brand.json, deck-brief.md, Cover, Ask, slide
components, or assets.ts are missing/malformed.
Deploy target — ask. Default Vercel; offer GitHub Pages / Netlify / static export. For Vercel,
confirm vercel.json (output, framework=vite). Do NOT push or deploy without explicit user OK.
When done, summarise in ≤6 lines:
references/section-map.md — canonical slide list + per-audience defaults.references/investor-tone.md — voice, structure, what investors need per slide.references/sales-tone.md — voice, structure, what prospects need per slide.references/brand-extraction.md — how to read tokens from a brandbook-builder repo.references/reference-mining.md — how to sample Pinterest / existing decks safely.references/deck-template-structure.md — full file tree + slide skeleton conventions.templates/slide-skeleton.tsx — copy-paste motion-aware slide template.scripts/validate-pitchdeck-project.mjs — pre-deploy validator.data-ai
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
development
Teaches the AI to design like a high-end agency. Defines the exact fonts, spacing, shadows, card structures, and animations that make a website feel expensive. Blocks all the common defaults that make AI designs look cheap or generic.
development
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
development
Senior UI/UX Engineer. Architect digital interfaces overriding default LLM biases. Enforces metric-based rules, strict component architecture, CSS hardware acceleration, and balanced design engineering.