Agent skill

Pro Deck Builder

by thatrebeccarae in thatrebeccarae/claude-marketing

Create polished HTML slide decks and PDF-ready documents for consulting deliverables.

MITAuto-check passedFrontend & Design

Install Pro Deck Builder

skills CLI
$ npx skills add thatrebeccarae/claude-marketing --skill pro-deck-builder -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install thatrebeccarae/claude-marketing pro-deck-builder --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/thatrebeccarae/claude-marketing.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pro-deck-builder .claude/skills/pro-deck-builder && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pro-deck-builder
GitHub stars
162
Token cost
~6.1k tokens
SKILL.md length
2,323 words
Files
4
Skills in repo
55
Repo updated
First seen
Licence
MIT

At a glance

Create polished HTML slide decks and PDF-ready documents for consulting deliverables.

  • Works in 2 steps: Ask the User → Discover Fonts
  • Tasks that involve Slides and decks
  • SKILL.md covers Install, Quick Reference, Before You Start (Required… and Design Language: VC-Backed SaaS, plus 6 more sections
  • Calls python, npm and git

What it does

Pro Deck Builder is an agent skill from thatrebeccarae/claude-marketing. Create polished HTML slide decks and PDF-ready documents for consulting deliverables. Uses the RRBC design system with warm light mode, dark mode cover pages, Lora/Inter/Roboto Mono typography, and data visualization palette. Trigger on 'deck', 'slides', 'presentation', 'pitch deck', 'keynote', 'report', or 'PDF'.

Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `EXAMPLES.md` and `REFERENCE.md`).

It sits in Frontend & Design, covering Slides and decks, Theming and dark mode and Typography. It works with Microsoft PowerPoint. The repository describes itself as: A full marketing department for Claude Code. Skill packs for Klaviyo, Shopify, GA4, Looker Studio, paid media, and more. Audit, optimize, and report using natural language. The licence is MIT.

When your agent uses it

  • Tasks that involve Slides and decks
  • Tasks that involve Theming and dark mode
  • Tasks that involve Typography

Example prompts

  • “slides”
  • “presentation”
  • “pitch deck”
  • “/pro-deck-builder”

Requirements

  • Python 3

Workflow steps

2 steps, taken from the step headings in SKILL.md.

  1. Ask the User
  2. Discover Fonts

What it can do on your machine

Read from SKILL.md and the folder at commit a8a63ec. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • npm
    • git
    • pdftoppm
    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, git and pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pro Deck Builder loads about 6.1k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 2,323 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~6.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from thatrebeccarae/claude-marketing at commit a8a63ec, republished under its MIT licence (© thatrebeccarae). 2,323 words, ~6,095 tokens.

Download SKILL.mdSave it as .claude/skills/pro-deck-builder/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
pro-deck-builder
description
Create polished HTML slide decks and PDF-ready documents for consulting deliverables. Uses the RRBC design system with warm light mode, dark mode cover pages, Lora/Inter/Roboto Mono typography, and data visualization palette. Trigger on 'deck', 'slides', 'presentation', 'pitch deck', 'keynote', 'report', or 'PDF'.
license
MIT
origin
custom
author
Rebecca Rae Barton
author_url
https://github.com/thatrebeccarae
metadata.version
1.0.0
metadata.category
reporting
metadata.domain
presentations
metadata.updated
2026-02-23
metadata.tested
2026-03-17
metadata.tested_with
Claude Code v2.1

Presentation Designer

VC-backed SaaS design quality for PowerPoint. Think Linear, Attio, Vercel, Raycast — not corporate clip art.

Install

bash
git clone https://github.com/thatrebeccarae/claude-marketing.git && cp -r claude-marketing/skills/pro-deck-builder ~/.claude/skills/

Quick Reference

TaskApproach
Create from scratchRead REFERENCE.md, use PptxGenJS
Edit existing / use templateRead editing.md
Read/extract contentpython -m markitdown presentation.pptx
Visual overviewpython scripts/thumbnail.py presentation.pptx

Before You Start (Required Steps)

Step 1: Ask the User

Before writing any code, ask:

  1. Light or dark mode? Dark = premium/keynote feel. Light = reports/data-heavy decks.
  2. Palette preference? Show the palette table below, or ask if they have brand colors.
  3. Logo? Ask if they have a logo file to include (PNG/SVG path).
Step 2: Discover Fonts

Check what's installed — premium fonts make a massive difference:

bash
# macOS — list all installed font families
fc-list : family | sort -u

# Search for premium fonts first
fc-list : family | grep -iE "inter|dm.sans|poppins|avenir|futura|geist|sf.pro|sf.mono|jetbrains|fira.code|montserrat|playfair|source.sans"

# Check macOS Font Book directories directly
ls ~/Library/Fonts/ /Library/Fonts/ /System/Library/Fonts/Supplemental/ 2>/dev/null

Priority order for font selection:

  1. Inter — the gold standard for SaaS UI (if installed, use it for everything)
  2. DM Sans — geometric, startup-friendly
  3. Poppins — rounded, approachable
  4. Avenir / Avenir Next — ships with macOS, Apple-adjacent elegance
  5. Calibri — safe fallback, always available

For data/mono: JetBrains Mono > Fira Code > SF Mono > Consolas


Design Language: VC-Backed SaaS

Aesthetic Principles
  1. Depth through layering — Surfaces float above backgrounds. Cards and panels have subtle elevation via shadows and fine borders, not flat colored boxes.
  2. Bold typography, minimal decoration — Let type hierarchy do the work. No accent lines, no decorative shapes, no clip art.
  3. Restrained color — One accent color used sparingly (10%). Mostly neutrals. Color = signal, not decoration.
  4. Generous whitespace — Empty space signals confidence. If a slide feels sparse, make the content bigger, don't add more.
  5. Every element earns its place — Before adding anything: what does it communicate? If removing it changes nothing, remove it.
Light vs Dark Mode

The user picks one mode for the entire deck. Never mix modes within a deck.


Color System

Dark Mode (Default — Premium/Keynote)
TokenValueUse
bg-primary0A0A0CSlide backgrounds (deep space black)
bg-surface17181ACards, panels (deep slate)
bg-elevated1E1F23Elevated surfaces, hover states
bg-glassFFFFFF at 4% opacityTranslucent overlays
text-primaryFFFFFFHeadlines, key content
text-secondaryA0A0A0Body text, descriptions
text-muted5A5A5ECaptions, metadata, labels
border-subtleFFFFFF at 8% opacityCard borders
Light Mode (Reports/Data-Heavy)
TokenValueUse
bg-primaryFFFFFFSlide backgrounds
bg-surfaceF8F9FACards, panels
bg-elevatedFFFFFFElevated surfaces (use shadow)
text-primary111111Headlines, key content
text-secondary555555Body text, descriptions
text-muted999999Captions, metadata, labels
border-subtleE8E8E8Card borders

Palette System

Each palette defines one accent color (used at 10%) plus semantic status colors. The accent is the personality — everything else is neutral.

Built-In Palettes
NameAccentHexBest For
Electric BlueIntense azure0055FFSaaS, tech, product
Neon LimeAcid green39FF14Dev tools, performance
Hot CoralWarm energyFF6B6BMarketing, creative
IndigoDeep purple6366F1Startups, AI/ML
Teal TrustCool confidence0D9488Healthcare, finance
Amber SignalWarm authorityF59E0BConsulting, strategy
RoseRefined pinkF43F5EDesign, brand, luxury
EmeraldGrowth green10B981Sustainability, success
Cyan EdgeSharp blue-green06B6D4Data, analytics
VioletCreative depth8B5CF6Education, innovation
SlateNo accent64748BMinimal, understated
Gold StandardFinancial premiumD4AF37Investor, board decks
Custom Palette (User Brand Colors)

If the user provides brand colors, build a custom palette:

javascript
const palette = {
  accent: "0055FF",      // primary brand color
  accentMuted: "0055FF" + " at 15% opacity", // for tinted backgrounds
  positive: "10B981",    // good, up, success
  warning: "F59E0B",     // attention, caution
  critical: "EF4444",    // bad, down, error
};
Color Application: 85/10/5 Rule
  • 85% — Backgrounds + neutral text (bg + text tokens from mode)
  • 10% — Accent (key numbers, chart primary, CTAs, active states)
  • 5% — Semantic status (positive/warning/critical in KPIs and data)

Typography

Font Priority

Run font discovery (Step 2 above), then pick:

PriorityHeaderBodyData/MonoVibe
1stInter 700Inter 400JetBrains MonoLinear/Vercel
2ndDM Sans 700DM Sans 400Fira CodeGeometric startup
3rdAvenir Next BoldAvenir 400SF MonoApple-adjacent
4thPoppins 700Poppins 400JetBrains MonoFriendly modern
SafeCalibri BoldCalibriConsolasAlways available

For editorial/financial decks:

HeaderBodyVibe
DM Serif DisplayDM SansSophisticated editorial
Playfair DisplaySource Sans ProLuxury, financial
GeorgiaCalibriClassic corporate
Size Scale
RoleSizeWeightUse
Hero title54-72ptBold (700)Title slide only
Slide title32-40ptBold (700)Every content slide
Section header20-24ptSemibold (600)Within-slide sections
Body text14-16ptRegular (400)Paragraphs, bullets
Captions/meta10-12ptRegular (400)Footnotes, sources
Big KPI number48-72ptBold (700)Dashboard callouts
KPI label9-10ptSemibold, ALL CAPS, +trackingBelow KPI numbers
Data/numbers11-14ptMono regularTables, data labels
Typography Rules
  • Left-align body text and lists — center ONLY titles and KPI values
  • Max 2 font families per deck (+1 mono for data)
  • ALL CAPS + charSpacing only for small labels (KPI labels, category tags)
  • Line height: 1.3x for body, 1.1x for titles
  • Never underline for emphasis — use bold or accent color
Text Fitting (Prevents Overflow)

Big numbers and titles WILL overflow if you use a fixed font size without checking content length. Use these rules:

Big KPI Numbers — scale font to character count:

CharactersExampleMax Font Size (card)Max Font Size (standalone)
1–4$4.2M48pt72pt
5–7$5,307K36pt54pt
8–10$5,307,54028pt44pt
11+$12,345,67822pt36pt

Rule: prefer abbreviated numbers. $5.3M > $5,307,540. Only use full numbers in tables or footnotes where precision matters.

Slide Titles — max characters before wrapping:

Font SizeMax Chars (~9" wide)If Longer
54pt~30Reduce to 44pt or rewrite shorter
44pt~38Reduce to 36pt or rewrite shorter
36pt~46Reduce to 32pt or rewrite shorter
32pt~52Use subtitle for overflow

Rule: count characters before setting fontSize. Never let content slide titles wrap to 2 lines. Section dividers can wrap.

Body Text in Narrow Containers (Insight Panels, Sidebars):

Text overflow in narrow panels (< 4" wide) is a common problem. PptxGenJS does not auto-shrink text. Apply these rules:

Container WidthMax fontSizeMax chars per line (~)Max lines at 1.25x spacing
4.0"+14pt~55Height ÷ 0.22"
3.0-3.9"11pt~45Height ÷ 0.18"
2.0-2.9"10pt~35Height ÷ 0.16"
< 2.0"9pt~25Height ÷ 0.15"

Rule: estimate line count before adding text. Count characters in your text, divide by max chars per line to get line count, then verify it fits in the container height. If it doesn't fit: (1) reduce fontSize, (2) shorten the text, or (3) increase the container. Never let text silently overflow — it gets clipped or overlaps adjacent elements.

javascript
// ✅ CORRECT: 2.8" panel → max 10pt, ~35 chars/line
// "Welcome series dominates at 62%..." = 90 chars ≈ 3 lines
// Container h: 1.6" → fits ~10 lines at 10pt. Safe.
s.addText("Short, edited copy.", {
  x: 6.55, y: 1.45, w: 2.7, h: 1.6,
  fontSize: 10, fontFace: theme.font.body,
});

// ❌ WRONG: 2.8" panel with 14pt font and 200+ char paragraph
s.addText("Very long paragraph that will overflow...", {
  x: 6.55, y: 1.45, w: 2.8, h: 1.6,
  fontSize: 14, fontFace: theme.font.body,  // too large for narrow panel
});
Chart Number Formatting

Always format chart numbers for readability — raw numbers like "1000000" are never acceptable on axes OR data labels.

CRITICAL: valAxisLabelFormatCode only formats the AXIS. Data labels from showValue: true are formatted separately via dataLabelFormatCode. If you set valAxisLabelFormatCode but not dataLabelFormatCode, data labels will show raw unformatted numbers like "2888000". numFmt is NOT a valid PptxGenJS property — always use dataLabelFormatCode.

Preferred approach — OOXML conditional format with raw values: Use raw (unscaled) values and let OOXML conditional number formatting handle the display. This is the most reliable approach and handles mixed-magnitude data (e.g., a chart with both $2.9M and $3.6K values).

javascript
// ✅ BEST: Raw values + OOXML conditional format
// Under 1K: whole number ($500)
// 1K-999K: X.XXK ($540.18K, $57.72K)
// 1M+: X.XM ($2.9M)
const currFmt = '[>=1000000]"$"#,##0.0,,"M";[>=1000]"$"#,##0.00,"K";"$"#,##0';

values: [2888000, 717734, 425467, 3655],  // raw dollar values
dataLabelFormatCode: currFmt,              // conditional brackets OK here
valAxisLabelFormatCode: '"$"#,##0.0,,"M"', // simple format only (no brackets)
javascript
// ✅ ALSO OK: Pre-scale when all values are same magnitude
values: [2888, 718, 425],  // raw values divided by 1000
dataLabelFormatCode: '"$"#,##0"K"',
valAxisLabelFormatCode: '"$"#,##0"K"',
javascript
// ❌ WRONG: Raw values with axis-only format
values: [2888000, 718000, 425000],
valAxisLabelFormatCode: "$#,##0,K",  // axis may format but data labels show 2888000
// ❌ WRONG: numFmt (not a valid PptxGenJS property)

OOXML conditional format reference (use with RAW values):

Data RangeFormat CodeRenders As
Currency (auto-scale)'[>=1000000]"$"#,##0.0,,"M";[>=1000]"$"#,##0.00,"K";"$"#,##0'$2.9M, $540.18K, $500
Plain number (auto-scale)'[>=1000000]#,##0.0,,"M";[>=1000]#,##0.00,"K";#,##0'2.9M, 540.18K, 500
Percentage'0%'50%, 85%

Format code syntax: OOXML supports up to 2 conditions in brackets + a default: [condition1]format1;[condition2]format2;defaultFormat. Each trailing , divides by 1,000 (so ,, divides by 1M).

IMPORTANT: valAxisLabelFormatCode does NOT support OOXML conditional brackets [>=1000]. Use a simple format for the axis based on the data range:

Axis RangevalAxisLabelFormatCodeRenders As
Up to ~999K'"$"#,##0,"K"'$0K, $100K, $500K
Up to ~10M+'"$"#,##0.0,,"M"'$0.0M, $0.5M, $1.0M
Up to ~999'"$"#,##0'$0, $100, $500

Use the conditional currFmt for dataLabelFormatCode (which supports brackets), but a simple format for valAxisLabelFormatCode. Always set showValue: true with dataLabelPosition: "outEnd" on bar charts so readers can see exact values without tracing to the axis.


Spacing

TokenValueUse
xs0.125"Within grouped elements
sm0.25"Label to value, icon to text
md0.375"Between sections within a card
lg0.5"Between cards, major sections
xl0.75"Between content zones
Layout Grid (10" × 5.625")
Margins:       0.5" from all edges
Content area:  9.0" wide × ~4.5" tall
Title zone:    y = 0.3"
Content zone:  y = 1.0" to y = 5.0"
Footer zone:   y = 5.2"
Card gap:      0.25" - 0.3"

Logo Placement

Finding Logos
bash
find ~/Desktop ~/Downloads ~/Documents -maxdepth 3 -iname "*logo*" \( -name "*.png" -o -name "*.svg" -o -name "*.jpg" \) 2>/dev/null
Placement Patterns
Slide TypePositionSizeNotes
Title slide (top-left)x:0.5, y:0.4w:1.5, h:0.5Subtle brand mark
Title slide (centered)x:4.0, y:0.8w:2.0, h:0.7Above title text
Content slidesx:8.5, y:0.2w:1.0, h:0.35Top-right corner, every slide
Closing slidex:3.5, y:1.5w:3.0, h:1.0Centered, hero size
Logo Rules
  • Always use sizing: { type: "contain", w, h } to preserve aspect ratio
  • Content slides: max 1" wide, don't compete with content
  • Title/closing: up to 3" wide for brand moment
  • Dark mode: use white/light logo variant if available (ask user)
  • Slide master: if logo goes on every slide, add it to a master definition

Icons

Show full SKILL.md (939 more words)Show less
Pipeline: react-icons → sharp → PNG → PptxGenJS
bash
npm install -g react-icons react react-dom sharp

Prefer Lucide (react-icons/lu) or Feather (react-icons/fi) — they match the Linear/Vercel icon language.

PackageImportStyle
react-icons/luLucideLinear-style, clean
react-icons/fiFeatherThin, modern
react-icons/hi2Heroicons v2Apple-ish
react-icons/tbTablerConsistent strokes
Icon Sizes
ContextDisplay SizeColor
KPI card icon0.35" × 0.35"Accent on dark, muted on light
Feature row icon0.4" × 0.4"White inside accent circle
Section divider0.5" × 0.5"Accent color
Inline bullet0.25" × 0.25"text-secondary

Reusable Components

Bottom Callout Box (Standardized)

Many slides end with a highlighted callout box (recommendation, key insight, total impact). These must be visually identical across all slides:

PropertyValueNotes
Box height0.6"Always 0.6" — never 0.5", 0.7", 0.9"
Text height0.5"Fits inside 0.6" box with padding
Font size11ptAlways 11pt bold — never 12pt or 13pt
Fonttheme.font.bodyBold, left-aligned, valign: "middle"
Box x/wx: 0.5, w: 9.0Full content width
Text x/wx: 0.7, w: 8.6Inset 0.2" from box edges
Text y offsetbox y + 0.05"Centers text vertically in box
Corner radius0.06"Consistent across all callouts
javascript
// Standard bottom callout — copy this pattern exactly
s.addShape(pres.shapes.RECTANGLE, {
  x: 0.5, y: calloutY, w: 9.0, h: 0.6,
  fill: { color: "DCFCE7" },  // or theme.accentMuted, "FEF3C7", etc.
  line: { color: theme.status.positive, width: 0.75 },
  rectRadius: 0.06,
});

s.addText("Callout text here.", {
  x: 0.7, y: calloutY + 0.05, w: 8.6, h: 0.5,
  fontSize: 11, fontFace: theme.font.body, bold: true,
  color: "166534", align: "left", valign: "middle",
});
Table + Callout Layout (Prevents Overlap)

Always calculate the table bottom position before placing a callout below it. PptxGenJS tables don't auto-report their height, so you must compute it:

tableBottom = tableY + (rowCount × rowH)
calloutY = tableBottom + 0.15"  // minimum 0.15" gap

Verify calloutY + 0.6" (callout height) < 5.2" (footer zone). If it doesn't fit, reduce rowH or table font sizes — never let the callout overlap the footer.

Rows (incl header)rowH: 0.32"rowH: 0.36"rowH: 0.42"rowH: 0.48"rowH: 0.55"
6 rows1.92"2.16"2.52"2.88"3.30"
7 rows2.24"2.52"2.94"3.36"3.85"
8 rows2.56"2.88"3.36"3.84"4.40"
11 rows3.52"3.96"4.62"——

With table starting at y: 1.0" and callout needing 0.75" (0.15" gap + 0.6" box), the table height limit is 3.45" to stay above footer. Choose rowH accordingly.

Cross-Slide Consistency Rules

Repeated elements MUST use identical dimensions across all slides:

  1. Bottom callout boxes — same h, fontSize, padding on every slide (see standard above)
  2. Chart font sizes — if multiple slides have bar/line charts, use identical dataLabelFontSize, catAxisLabelFontSize, and valAxisLabelFontSize across all of them
  3. Table styling — header row style (hdr()) and cell style (cell()) should be defined once as helpers and reused
  4. Card dimensions — if using stat cards on multiple slides, keep card width/height/corner radius consistent
  5. Section badge positions — impact badges (e.g., "$400K-$800K") should use the same x, y, w, h, fontSize

Rule: define reusable constants at the top of the script for any dimension that appears on more than one slide.


Slide Compositions

Vary Layouts — The #1 Rule

Never repeat the same layout more than twice consecutively. Rotate through:

TypeWhenElements
Title SlideOpening/closingHero text, subtitle, logo, date
KPI DashboardExecutive summary3-5 cards, big numbers
Chart + InsightData with context60/40 split
Full-Width ChartChart IS the storyFull span, callout overlay
Icon Feature GridFeatures, pillars3-4 icon+text rows
Data TableFinancials, comparisonsStyled rows, mono numbers
Section DividerBetween sectionsBold title on dark/accent bg
QuoteTestimonialsLarge italic, attribution
Big NumberSingle key statHuge centered metric
ComparisonBefore/after, vs.Side-by-side columns
Image + TextProducts, case studiesHalf-bleed image
ClosingEndLogo, CTA, contact

Anti-Patterns (Never Do These)

  1. NEVER add horizontal accent lines/bars under titles, subtitles, or headings — This is the #1 AI tell. No thin rectangles (h: 0.03-0.05) placed under text as decorative separators. Not on title slides, not on section dividers, not on closing slides, not anywhere. If you feel a slide needs visual separation, use whitespace or a tinted panel instead.
  2. No gradient fills on shapes — use solid colors + subtle borders
  3. No heavy shadows — max opacity 0.1, blur 6
  4. Don't repeat layouts on consecutive slides
  5. Don't center body text — left-align everything except titles/KPIs
  6. No more than 2 fonts (+1 mono)
  7. No walls of text — max 6 lines body per slide
  8. No decorative shapes — no random circles, triangles, swooshes
  9. No clip art — use Lucide/Feather icons
  10. No colored card backgrounds — cards = bg-surface + subtle border
  11. No unicode bullets — use bullet: true
  12. No mixing light/dark within a deck
  13. No unformatted chart data labels — if you use showValue: true, you MUST also set dataLabelFormatCode. valAxisLabelFormatCode alone does NOT format data labels. Use OOXML conditional formats with raw values for best results.
  14. No long text in narrow panels without size checks — before adding body text to any container < 4" wide, estimate line count (chars ÷ chars-per-line) and verify it fits the container height. Reduce font size or shorten text if it won't fit.
  15. No inconsistent callout boxes — all full-width bottom callout boxes must use identical height (0.6"), text fontSize (11pt), and padding across every slide. Define the callout pattern once and copy it exactly.
  16. No callout-over-table overlap — always calculate tableBottom = tableY + (rows × rowH) and place the callout at tableBottom + 0.15" minimum. Never hardcode callout y-positions without verifying they clear the table.
  17. No inconsistent chart font sizes — if multiple slides contain charts, use identical dataLabelFontSize, catAxisLabelFontSize, and valAxisLabelFontSize values. Define these as constants and reuse them.

QA (Required)

Assume there are problems. First render is never correct.

Content Check
bash
python -m markitdown output.pptx
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|placeholder|click to"
Visual QA (Use Subagents)
bash
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide

Subagent prompt:

Inspect these slides. Assume issues exist — find them.
Look for:
- TEXT OVERFLOW: Numbers or titles that wrap to a second line inside their container. Also check body text in narrow panels (<4" wide) — long paragraphs at font sizes >11pt will overflow.
- ACCENT LINES: Any thin horizontal bars/lines under titles or headings (must be removed)
- CHART DATA LABELS: Raw unformatted numbers on data labels (e.g., "2888000" instead of "$2,889K"). This is the #1 chart bug — valAxisLabelFormatCode does NOT format data labels.
- CHART AXES: Raw unformatted numbers on axes (should be $500K not 500000)
- Overlapping elements, cramped spacing (<0.3"), insufficient margins (<0.5")
- Low contrast, text-only slides, repeated layouts, placeholder text
- Mode inconsistency (light elements on dark or vice versa)
- Big numbers that should be abbreviated ($5.3M not $5,307,540)
- CALLOUT INCONSISTENCY: Bottom callout boxes with different heights, font sizes, or padding across slides (all must be h:0.6", fontSize:11)
- TABLE-CALLOUT OVERLAP: Callout boxes overlapping tables — calculate tableY + (rows × rowH) and verify callout clears it
- CHART FONT INCONSISTENCY: Different dataLabelFontSize, catAxisLabelFontSize, or valAxisLabelFontSize between charts on different slides

Fix → re-render → inspect → repeat until clean. Complete at least one fix cycle.


Dependencies

bash
npm install -g pptxgenjs                          # Creation
npm install -g react-icons react react-dom sharp  # Icons
pip install "markitdown[pptx]" Pillow             # Reading + QA
# Also: LibreOffice (soffice) + Poppler (pdftoppm) for visual QA

Implementation

Read REFERENCE.md for PptxGenJS API patterns and complete slide composition code for both light and dark modes.

Brand Context (Optional)

If brand-profile.json exists in the working directory, read it before building decks. Override the default RRBC palette with the brand's colors (primary, secondary, background), use brand fonts when available (fall back to system fonts), and include the brand name on title slides and headers. This profile is produced by the brand-dna skill.

© thatrebeccarae, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in skills/pro-deck-builder of thatrebeccarae/claude-marketing.

  • SKILL.md
  • EXAMPLES.md
  • LICENSE
  • REFERENCE.md

Open the folder on GitHubat commit a8a63ec

Compare with similar skills

Pro Deck Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pro Deck Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pro Deck Builder this skillthatrebeccarae/claude-marketing162—~6.1kAutomated safety check: PassMIT
Theme Factoryanthropics/skills180k48 repos~781Automated safety check: PassApache-2.0
Visual Brand Extractorgooseworks-ai/goose-skills1.2k1 repos~3.8kAutomated safety check: PassMIT
Refactoring UIwondelai/skills2.4k—~3.9kAutomated safety check: PassMIT
Design System Generatemohitagw15856/pm-claude-skills1.4k—~1.7kAutomated safety check: PassMIT
Openkb Deck NeonVectifyAI/OpenKB4.8k1 repos~4.3kAutomated safety check: PassApache-2.0

Similar skills

  • Theme Factory

    anthropics/skills

    Official

    Applies one of ten preset color and font themes to slide decks, documents or HTML pages, or creates a new theme on the fly after you choose from a showcase.

    180k GitHub starsUsed in 48 repos~781 tokens
    Frontend & DesignAuto-check passed
  • Visual Brand Extractor

    gooseworks-ai/goose-skills

    Extract visual branding (colors, typography, layout patterns) from a client's website and generate a style preset compatible with the HTML slides skill and a brand config JSON for the content asset…

    1.2k GitHub starsUsed in 1 repo~3.8k tokens
    Frontend & DesignAuto-check passed
  • Refactoring UI

    wondelai/skills

    Audit and fix visual hierarchy, spacing, color, and depth in web UIs.

    2.4k GitHub stars~3.9k tokensUpdated 28 days ago
    Frontend & DesignAuto-check passed
  • Design System Generate

    mohitagw15856/pm-claude-skills

    Generate a complete, accessibility-checked design system from scratch — colour ramps, type scale, spacing, elevation, and exports for CSS, Tailwind, design tokens, Figma, VS Code and PowerPoint.

    1.4k GitHub stars~1.7k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Openkb Deck Neon

    VectifyAI/OpenKB

    A skill your agent uses when the user asks the openkb chat to make a deck / slide presentation / PPT / slides / 演示稿 / 幻灯片 from their compiled KB content AND wants a dark, high-tech, neon / glow /…

    4.8k GitHub starsUsed in 1 repo~4.3k tokens
    Frontend & DesignAuto-check passed
  • Baoyu Design

    DejavuMoe/Smoji

    Create polished design artifacts as self-contained HTML: UI mockups, interactive prototypes, wireframes, landing pages, dashboards, app screens, mobile apps, slide decks (a.k.a.

    114 GitHub starsUsed in 1 repo~2.7k tokens
    Frontend & DesignAuto-check passed

More from thatrebeccarae/claude-marketing

All 55 skills in this repo
  • Google Analytics

    thatrebeccarae/claude-marketing

    Analyze Google Analytics data, review website performance metrics, identify traffic patterns, and suggest data-driven improvements.

    162 GitHub starsUsed in 3 repos~1.3k tokens
    Auto-check: notes
  • Content Creator

    thatrebeccarae/claude-marketing

    Comprehensive content marketing toolkit with brand voice analysis, SEO optimization scripts, content frameworks, social media strategy, and content calendar planning.

    162 GitHub stars~1.1k tokensUpdated 4 mo ago
    Auto-check passed
  • Klaviyo Analyst

    thatrebeccarae/claude-marketing

    Klaviyo marketing operations and analyst expertise. An agent skill from thatrebeccarae/claude-marketing.

    162 GitHub stars~5k tokensUpdated 4 mo ago
    Auto-check: notes
  • Klaviyo Developer

    thatrebeccarae/claude-marketing

    Klaviyo API and developer integration expertise. An agent skill from thatrebeccarae/claude-marketing.

    162 GitHub stars~4.9k tokensUpdated 4 mo ago
    Auto-check: notes
  • Looker Studio

    thatrebeccarae/claude-marketing

    Looker Studio (formerly Google Data Studio) expertise. An agent skill from thatrebeccarae/claude-marketing.

    162 GitHub stars~3.6k tokensUpdated 4 mo ago
    Auto-check: notes
  • Shopify

    thatrebeccarae/claude-marketing

    Shopify e-commerce platform marketing expertise. An agent skill from thatrebeccarae/claude-marketing.

    162 GitHub stars~2.4k tokensUpdated 4 mo ago
    Auto-check: notes

Questions about Pro Deck Builder

What does Pro Deck Builder do?

Create polished HTML slide decks and PDF-ready documents for consulting deliverables. Pro Deck Builder is an agent skill from thatrebeccarae/claude-marketing. Create polished HTML slide decks and PDF-ready documents for consulting deliverables.

When should I use Pro Deck Builder?

Pro Deck Builder fits situations like: tasks that involve Slides and decks; tasks that involve Theming and dark mode; tasks that involve Typography.

How do I install Pro Deck Builder in Claude Code?

Run `npx skills add thatrebeccarae/claude-marketing --skill pro-deck-builder -a claude-code`. Or copy the skill folder (skills/pro-deck-builder in thatrebeccarae/claude-marketing) into .claude/skills/pro-deck-builder in your project. Claude Code loads it when a task matches its description.

How do I install Pro Deck Builder in Codex?

Run `npx skills add thatrebeccarae/claude-marketing --skill pro-deck-builder -a codex`. Or copy the skill folder (skills/pro-deck-builder in thatrebeccarae/claude-marketing) into .agents/skills/pro-deck-builder in your project. Codex loads it when a task matches its description.

Can I use Pro Deck Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add thatrebeccarae/claude-marketing --skill pro-deck-builder -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pro-deck-builder, .gemini/skills/pro-deck-builder, .github/skills/pro-deck-builder and .opencode/skills/pro-deck-builder in your project.

What does Pro Deck Builder need to run?

Going by SKILL.md and its folder, Pro Deck Builder needs the command-line tools its instructions call (python, npm, git, pdftoppm and pip). Our summary lists: Python 3.

Does Pro Deck Builder access the network?

SKILL.md contains no URLs. Its commands use npm, git and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Pro Deck Builder safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Pro Deck Builder use?

Pro Deck Builder is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pro Deck Builder use?

About 6.1k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pro Deck Builder?

Skills that share tags, products or a category with Pro Deck Builder: Theme Factory (anthropics/skills, 180k stars), Visual Brand Extractor (gooseworks-ai/goose-skills, 1.2k stars), Refactoring UI (wondelai/skills, 2.4k stars) and Design System Generate (mohitagw15856/pm-claude-skills, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pro Deck Builder?

thatrebeccarae (a GitHub user) maintains it in thatrebeccarae/claude-marketing, which has 162 GitHub stars. The repository holds 55 skills in this directory. The repository was last updated on May 14, 2026.

Source: thatrebeccarae/claude-marketing on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.