build-cfa-deck
Generate a complete, on-brand Chick-fil-A PowerPoint presentation from a topic using CFA brand guidelines, template layouts, and extracted brand assets
What this skill does
# Build CFA Deck
Generate a complete, on-brand Chick-fil-A PowerPoint presentation from a topic prompt. Uses the CFA "Support Now" PPTX template (64 layouts, 194 SVG icons, embedded Apercu fonts), extracted brand assets, and comprehensive brand guidelines.
No API key needed — content generation happens in this Claude Code session using your subscription.
## Pre-loaded Context
**Brand assets location:**
!`ls -d ~/dev/stratfield/slide-generator/examples/cfa-brand-assets/ 2>/dev/null && echo "Assets: OK" || echo "Assets: MISSING — run asset extraction first"`
**CFA template:**
!`ls -lh ~/dev/stratfield/slide-generator/examples/CFA\ PPT\ Template2.pptx 2>/dev/null && echo "Template: OK" || echo "Template: MISSING"`
**Brand guidelines:**
!`wc -l ~/dev/stratfield/slide-generator/examples/cfa-brand-guidelines-for-ppt.md 2>/dev/null || echo "Guidelines: MISSING"`
**python-pptx:**
!`python3 -c "import pptx; print('python-pptx: OK')" 2>/dev/null || echo "python-pptx: NOT INSTALLED — run: pip install python-pptx --break-system-packages"`
## Proactive Triggers
Suggest this skill when:
1. User wants to create a Chick-fil-A branded presentation
2. User says "build a CFA deck", "CFA presentation", "Chick-fil-A slides", or "CFA PowerPoint"
3. User references the CFA brand guidelines or CFA template
4. User asks for an on-brand presentation for a CFA audience
## Prerequisites
- `python-pptx` installed (`pip install python-pptx --break-system-packages`)
- CFA PPTX template at `~/dev/stratfield/slide-generator/examples/CFA PPT Template2.pptx`
- Brand guidelines at `~/dev/stratfield/slide-generator/examples/cfa-brand-guidelines-for-ppt.md`
- Brand assets extracted to `~/dev/stratfield/slide-generator/examples/cfa-brand-assets/`
## Input Validation
**Required:**
- `$ARGUMENTS` must contain a topic string (quoted). Example: `"The Future of Quick-Service Restaurants"`
**Optional flags (parse from $ARGUMENTS):**
- `--slides <N>` — number of slides (default: 20)
- `--audience <text>` — target audience (default: "CFA Leadership Team")
- `--presenter <text>` — presenter name for title/closing slides (default: empty)
- `--output <path>` — output .pptx file path (default: topic-slug in current directory)
If no topic is provided, ask the user for one. Do not proceed without a topic.
## Instructions
Follow these steps exactly. Do not skip or reorder.
### Step 1: Load Brand Context
Read the brand guidelines file. You need sections 1 (Color System), 5 (Layout System), 7 (Content Density Standards), and 8 (Deck Composition) to generate compliant content.
```
Read: ~/dev/stratfield/slide-generator/examples/cfa-brand-guidelines-for-ppt.md
```
Internalize these critical rules before generating content:
- **Color sequencing**: Never more than 3 consecutive white-background slides. Rotate navy, green, teal, red as visual breaks.
- **Content density**: Every content slide needs 3 layers (primary, supporting, contextual). Minimum word counts per slide type.
- **Headlines**: Insight-driven, not generic labels. Must contain a specific claim, number, or insight.
- **Data enrichment**: Every factual claim needs a specific number. No vague qualitative language.
### Step 2: Enumerate Template Layouts
Run this to get the exact layout names from the template:
```bash
python3 -c "
from pptx import Presentation
prs = Presentation(os.path.expanduser('~/dev/stratfield/slide-generator/examples/CFA PPT Template2.pptx'))
for i, layout in enumerate(prs.slide_layouts):
phs = ', '.join([f'idx={p.placeholder_format.idx}:{p.placeholder_format.type}' for p in layout.placeholders])
print(f'{i:2d}. {layout.name} [{phs}]')
import os
" 2>/dev/null || python3 -c "
import os
from pptx import Presentation
prs = Presentation(os.path.expanduser(os.path.join('~', 'dev', 'stratfield', 'slide-generator', 'examples', 'CFA PPT Template2.pptx')))
for i, layout in enumerate(prs.slide_layouts):
phs = ', '.join([f'idx={p.placeholder_format.idx}' for p in layout.placeholders])
print(f'{i:2d}. {layout.name} [{phs}]')
"
```
### Step 3: Generate the Slide Plan
Using the brand guidelines context and the template layout names, generate a complete slide plan as a JSON array. This is the creative core — you ARE the content engine.
For each slide, produce this structure:
```json
{
"slide_number": 1,
"slide_type": "cover|content|section_divider|stat_callout|data_chart|quote|split|card_grid|timeline|closing|...",
"layout_name": "exact template layout name from Step 2",
"background_color": "#hex or default",
"headline": "Insight-driven headline with a specific claim or number",
"subheadline": "Supporting context or null",
"body_content": ["Substantive bullet 1 with specific data...", "Bullet 2...", "..."] or "Paragraph text...",
"stats": [{"number": "$410B", "label": "QSR Market Size"}, ...] or null,
"speaker_notes": "2-4 sentences adding context not visible on slide",
"accent_color": "#hex for accent shapes",
"footer_text": "Presenter | Title | Date"
}
```
**Content quality rules (enforce strictly):**
- Every headline contains a specific insight, number, or claim
- Every bullet point contains a specific fact, percentage, dollar amount, or date
- Content slides have 4-8 bullets OR 2-3 substantive paragraphs (2-3 sentences each)
- Stat callout slides have 2-4 large statistics with labels
- Quote slides have 40+ word quotes with full attribution
- Data slides describe specific chart data (type, axes, series, values)
- Speaker notes add background context not visible on the slide
- Word count minimums: content=80-150, stat=40-60, data=50-80, quote=60-100
**Color sequencing rules (enforce strictly):**
- Slide 1: Navy or Red background (title)
- Slides 2-3: White background (content)
- Slide 4: Navy or Green (section break)
- Slides 5-7: White with rotating accent colors (teal, then navy, then green)
- Slide 8: Teal or Navy (stat/impact)
- Continue pattern: never 3+ consecutive white slides
- Last slide: Navy or Red (closing)
- Distribution targets: ~25% Navy, ~15% Red, ~10% Green/Teal, ~45% White, ~5% Warm Gray
**Layout selection guidance:**
- Title: "Title Slide Dark Blue Pattern", "Title Slide Blue Values", "Title Slide Green Pattern"
- Section dividers: "Large Transition Dark Blue", "Large Transition Green", "Transition Pattern"
- Content: "Text Chat", "Text Dots", "Split Slide Medium Titles", "Triple Block Content"
- Stats/callouts: "Circle Callout", "Circle Callout 2", "Circle Callout 3"
- Quotes: "Large Quote Dark Blue", "Quote Green", "Quote White"
- Charts: "Small Title Chart", "Split with Chart"
- Team: "Team Slide Four Column", "Team Slide"
- Closing: "End Slide Dark Blue", "End Slide Green", "Final Words"
### Step 4: Write the Build Script
Write a Python script to `/tmp/build_cfa_deck.py` that:
1. Opens the CFA template
2. Removes all 28 sample slides (preserve layouts and masters)
3. For each slide in your JSON plan:
a. Finds the matching layout by name
b. Adds a new slide with that layout
c. Populates placeholders (idx 0=title, 1=body, 10=footer, 12=slide number)
d. If the layout lacks needed placeholders, adds text boxes at appropriate positions
e. Applies background color if not "default"
f. Adds speaker notes
g. Adds the CFA Script Logo where appropriate (red on light backgrounds from `cfa-brand-assets/logos/`)
4. Saves the .pptx
**Critical python-pptx patterns:**
```python
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
import os, json
EXAMPLES = os.path.expanduser("~/dev/stratfield/slide-generator/examples")
TEMPLATE = os.path.join(EXAMPLES, "CFA PPT Template2.pptx")
ASSETS = os.path.join(EXAMPLES, "cfa-brand-assets")
COLORS = {
"cfa_red": RGBColor(0xDD, 0x00, 0x31),
"white": RGBColor(0xFF, 0xFF, 0xFF),
"navy": RGBColor(0x00, 0x4F, 0x71),
"teal": RGBColor(0x3E, 0xB1, 0xC8),
"slate": RGBColor(0x5B, 0x67, 0x70),
"greRelated in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".