Affiliate-skills infographic-generator
git clone https://github.com/Affitor/affiliate-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/Affitor/affiliate-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/content/infographic-generator" ~/.claude/skills/affitor-affiliate-skills-infographic-generator && rm -rf "$T"
skills/content/infographic-generator/SKILL.mdInfographic Generator
Generate complete infographic specifications from any content, data, or topic. Outputs structured layout + all copy + data points + color scheme — ready to render as HTML/CSS, with Satori (server-side), in Canva, Figma, or any design tool.
LinkedIn posts with images get 2-3x more engagement. This skill turns your content into visual assets without design skills.
Inspired by content-pipeline's Satori rendering: AI writes the content → structured spec → rendered as a branded image.
Stage
This skill belongs to Stage S2: Content
When to Use
- After
creates a LinkedIn post — add a visualviral-post-writer - After
collects stats — visualize themcontent-research-brief - When creating comparison content — feature/pricing comparison chart
- When sharing data or stats — stat highlight cards
- When creating a listicle — visual checklist or numbered list
- For any social media post that would benefit from a branded image
Input Schema
content: string # (required) Content to visualize — post text, data, or article infographic_type: string # (optional, default: auto-detected) # "stat_highlight" — 1-3 key numbers, large and bold # "comparison" — side-by-side product/feature comparison # "process_flow" — step-by-step workflow or how-to # "checklist" — list of items with checkmarks # "timeline" — chronological events # "data_chart" — bar/pie chart representation # "quote_card" — featured quote with attribution # "feature_grid" — grid of features/benefits with icons platform: string # (optional, default: "linkedin") # "linkedin" — 1080×1350 (portrait, optimal engagement) # "instagram" — 1080×1080 (square) # "twitter" — 1200×675 (landscape) # "facebook" — 1200×630 # "blog" — 1200×800 (featured image) brand: object # (optional) Brand customization name: string # Company/personal brand name primary_color: string # Hex — "#0066FF" secondary_color: string # Hex — "#1A1A2E" accent_color: string # Hex — "#FF6B35" font_style: string # "modern" | "classic" | "bold" | "minimal" logo_text: string # Text-based logo — "Affitor" | "@yourhandle" output_format: string # (optional, default: "spec") # "spec" — structured JSON spec (for any renderer) # "html" — renderable HTML/CSS (self-contained) # "both" — spec + HTML
Workflow
Step 1: Analyze Content and Select Type
Read the input content and detect the best infographic type:
| Content Pattern | Auto-detected Type |
|---|---|
| Contains 1-3 prominent numbers/stats | |
| Contains "vs", comparison data | |
| Contains numbered steps or a process | |
| Contains a list of items (3-10) | or |
| Contains dates or chronological events | |
| Contains a notable quote | |
| Contains percentages or proportions | |
If
infographic_type is provided, use that. Otherwise auto-detect.
Step 2: Extract Visual Data
From the content, extract exactly what needs to appear in the infographic:
For
:stat_highlight
stats: - number: "30%" # The big number label: "commission" # What it measures context: "recurring" # Additional context - number: "60" label: "cookie days" context: "industry avg: 30"
For
:comparison
items: - name: "HeyGen" features: - label: "Commission" value: "30% recurring" highlight: true # winner for this row - label: "Cookie" value: "60 days" highlight: true - name: "Synthesia" features: - label: "Commission" value: "25% one-time" highlight: false - label: "Cookie" value: "30 days" highlight: false
For
:process_flow
steps: - number: 1 title: "Research" description: "Find winning programs" icon: "🔍" - number: 2 title: "Create" description: "Write content that converts" icon: "✍️"
For
:checklist
items: - text: "Recurring commission" checked: true - text: "60+ day cookie" checked: true - text: "Free trial available" checked: true - text: "Dedicated affiliate manager" checked: false
Step 3: Design Layout
Based on type + platform, define the layout:
Platform dimensions:
| Platform | Width | Height | Aspect |
|---|---|---|---|
| 1080 | 1350 | 4:5 (portrait) | |
| 1080 | 1080 | 1:1 (square) | |
| 1200 | 675 | 16:9 (landscape) | |
| 1200 | 630 | ~2:1 | |
| Blog | 1200 | 800 | 3:2 |
Layout structure (all types):
┌─────────────────────────────┐ │ HEADER │ 10-15% height │ Headline / Title │ ├─────────────────────────────┤ │ │ │ BODY │ 70-80% height │ Data / Content │ │ (type-specific layout) │ │ │ ├─────────────────────────────┤ │ FOOTER │ 10% height │ Brand / CTA / Source │ └─────────────────────────────┘
Step 4: Generate Color Scheme
If brand colors provided: Use them directly.
If no brand colors: Generate a professional palette:
# Default professional palette options palettes: dark_modern: # Dark background, light text bg: "#1A1A2E" text: "#FFFFFF" accent: "#0066FF" secondary: "#16213E" light_clean: # Light background, dark text bg: "#FFFFFF" text: "#1A1A2E" accent: "#0066FF" secondary: "#F0F4F8" warm_bold: # Warm tones bg: "#FFF8F0" text: "#2D2D2D" accent: "#FF6B35" secondary: "#FFE8D6" dark_gradient: # Gradient dark bg: "linear-gradient(135deg, #1A1A2E, #16213E)" text: "#FFFFFF" accent: "#00D4AA" secondary: "#2A2A4A"
Auto-select based on platform:
- LinkedIn →
ordark_modern
(professional)light_clean - Twitter →
ordark_gradient
(attention-grabbing)warm_bold - Instagram → Any (most visual flexibility)
Step 5: Generate All Copy
Write every piece of text that appears in the infographic:
copy: headline: string # Main title — bold, short (max 8 words) subheadline: string # Optional supporting line body_items: string[] # Data labels, descriptions, etc. cta: string # Call-to-action text — "Link in bio" | "See comments for link" footer: string # Brand name or @handle source: string # "Data: list.affitor.com" or source attribution
Copy rules:
- Headlines: 3-8 words, bold claim or specific number
- All text must be readable at mobile scale (not too small)
- No more than 50 total words on the infographic (less = better)
- Data > adjectives (show numbers, not "amazing" or "incredible")
Step 6: Output
Spec output (default):
Complete structured spec that any renderer can consume:
infographic_spec: type: string platform: string dimensions: width: number height: number colors: background: string text: string accent: string secondary: string layout: header: object body: object footer: object data: object # Type-specific data (stats, comparison items, steps, etc.) copy: headline: string subheadline: string body_items: string[] cta: string footer: string source: string
HTML output (if
is "html" or "both"):output_format
Generate a self-contained HTML file with inline CSS that renders the infographic at exact dimensions. This can be:
- Opened in a browser and screenshotted
- Rendered server-side with Satori or Puppeteer
- Used as a starting point for design iteration
<!-- Self-contained, no external dependencies --> <div style="width: 1080px; height: 1350px; ..."> <!-- Header --> <!-- Body (type-specific) --> <!-- Footer --> </div>
Step 7: Self-Validation
Before presenting output, verify:
- Total word count on infographic ≤ 50 words
- All text readable at 50% zoom (minimum effective font size)
- Color contrast meets accessibility (WCAG AA: 4.5:1 ratio)
- Data points are accurate and attributed
- Layout doesn't feel cramped — whitespace is intentional
- Platform dimensions are correct
If any check fails, fix before delivering.
Output Format
## Infographic: [Headline] ### Spec - **Type:** [stat_highlight] - **Platform:** [LinkedIn] — 1080×1350 - **Colors:** [dark_modern] — bg: #1A1A2E, accent: #0066FF ### Preview (text representation) ┌─────────────────────────────────┐ │ │ │ HeyGen vs Synthesia │ │ The Real Comparison │ │ │ │ ┌──────────┐ ┌──────────┐ │ │ │ HeyGen │ │Synthesia │ │ │ │ │ │ │ │ │ │ 30% rec. │ │ 25% once │ │ │ │ 60 days │ │ 30 days │ │ │ │ ★ 127 │ │ ★ 84 │ │ │ └──────────┘ └──────────┘ │ │ │ │ 🏆 Winner: HeyGen │ │ │ │ ─────────────────────────── │ │ @yourhandle · list.affitor.com │ └─────────────────────────────────┘ ### Data [Structured spec as YAML or JSON] ### HTML (if requested) [Self-contained HTML/CSS code block] ### Next Steps - Post to [platform] with your viral post from `viral-post-writer` - Create variations for other platforms: `--platform instagram` - Generate more infographics from different data in your `content-research-brief`
Error Handling
- Content has no extractable data: Generate a
orquote_card
type instead. Note: "No numerical data found. Created a [type] infographic instead."checklist - Too much data for one infographic: Select top 3-5 most impactful data points. Note: "Content has [X] data points. Selected the [Y] most impactful for visual clarity. Consider creating multiple infographics."
- No brand colors: Use default palette. Note: "No brand colors specified. Using [palette name]. Add brand colors for consistent branding."
- HTML output too complex: Simplify layout. Infographics should be simple — complexity kills visual impact.
Examples
Example 1: User: "Make an infographic comparing HeyGen vs Synthesia for LinkedIn" → type: comparison, platform: linkedin (1080×1350) → Extract: commission, cookie, rating, price for each → Output: side-by-side comparison card with winner highlighted → Dark modern palette, bold numbers
Example 2: User: "Create a stat card from my research brief showing HeyGen's key numbers" → type: stat_highlight, platform: linkedin → Extract: "$60M raised", "40K businesses", "30% commission" → Output: 3 large numbers with labels and context
Example 3: User: "Visualize the affiliate funnel steps as an infographic" → type: process_flow, platform: blog (1200×800) → Steps: Research → Content → Landing → Deploy → Track → Optimize → Output: horizontal flow with icons and brief descriptions
Feedback & Issue Reporting
When this skill produces unexpected, incomplete, or incorrect output, generate a
skill_feedback block (see shared/references/feedback-protocol.md for full schema).
Skill-specific failure modes:
- No extractable data from content: Content is purely narrative, no stats/numbers. Report as
.data_quality - HTML output doesn't render correctly: CSS issues, wrong dimensions, text overflow. Report as
with the HTML.wrong_output - Too many words on infographic: >50 words makes it unreadable. Report as
.wrong_output
Auto-detect triggers:
has <2 data pointsinfographic_spec.data- Total word count in all copy fields > 60
- Dimensions don't match declared platform
Report issues: GitHub Issues | Discussions
References
— data sources for infographic contentshared/references/social-data-providers.md
— platform-specific image requirementsshared/references/platform-rules.md
— master flywheel connection mapshared/references/flywheel-connections.md
— issue detection and reporting standardshared/references/feedback-protocol.md
Flywheel Connections
Feeds Into
(S5) — infographic ready to schedule with postsocial-media-scheduler
(S4) — infographic as hero image or section visuallanding-page-creator
(S5) — infographic as email visual contentemail-drip-sequence
(S5) — infographic in link hubbio-link-deployer
Fed By
(S2) — key stats and data for visualizationcontent-research-brief
(S2) — post content to create accompanying visualviral-post-writer
(S3) — blog data for featured image infographicaffiliate-blog-builder
(S1) — engagement data for benchmark visualstrending-content-scout
(S1) — traffic data for comparison infographicstraffic-analyzer
(S3) — comparison data for visual formatcomparison-post-writer
(S1) — commission data for stat highlightscommission-calculator
Feedback Loop
- S6 posts with infographics vs without →
shows engagement lift → prioritize infographic creation for high-value contentperformance-report
Quality Gate
Before delivering output, verify:
- Would I stop scrolling for this image?
- Can I understand the main point in under 3 seconds?
- Is the data accurate and attributed?
- Does it look professional, not like clip art?
- Is it readable on a phone screen?
Any NO → redesign before delivering.
chain_metadata: skill_slug: "infographic-generator" stage: "content" timestamp: string suggested_next: - "social-media-scheduler" - "viral-post-writer" - "landing-page-creator"