skills/marketing/pitch-deck-visuals/SKILL.md
Investor pitch deck structure with slide-by-slide framework, visual design rules, and data presentation. Covers the 12-slide framework, chart types, team slides, and common investor turn-offs. Use for: fundraising decks, investor presentations, startup pitch, demo day, grant proposals. Triggers: pitch deck, investor deck, startup pitch, fundraising deck, demo day, pitch presentation, investor presentation, seed deck, series a deck, pitch slides, startup presentation, vc pitch, investor meeting
npx skillsauth add pedronauck/skills pitch-deck-visualsInstall 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.
Create investor-ready pitch deck visuals via inference.sh CLI.
curl -fsSL https://cli.inference.sh | sh && infsh login
# Generate a slide background
infsh app run infsh/html-to-image --input '{
"html": "<div style=\"width:1920px;height:1080px;background:linear-gradient(135deg,#0f0f23,#1a1a3e);display:flex;align-items:center;padding:100px;font-family:system-ui;color:white\"><div><p style=\"font-size:24px;color:#818cf8;text-transform:uppercase;letter-spacing:3px\">The Problem</p><h1 style=\"font-size:72px;margin:16px 0;font-weight:800;line-height:1.1\">Teams waste 12 hours/week on manual reporting</h1><p style=\"font-size:28px;opacity:0.7\">Source: Forrester Research, 2024</p></div></div>"
}'
| # | Slide | Duration | Content | |---|-------|----------|---------| | 1 | Title | 15s | Company name, tagline, your name | | 2 | Problem | 45s | Pain point with data | | 3 | Solution | 45s | Your product in one sentence | | 4 | Demo/Product | 60s | Screenshot or live demo | | 5 | Market Size | 30s | TAM → SAM → SOM | | 6 | Business Model | 30s | How you make money | | 7 | Traction | 45s | Growth metrics, customers | | 8 | Competition | 30s | Positioning, not feature list | | 9 | Team | 30s | Why you specifically will win | | 10 | Financials | 30s | Revenue projections, unit economics | | 11 | The Ask | 15s | How much, what for | | 12 | Contact | 10s | Email, next steps |
Total: ~6 minutes. Never exceed 20 slides.
| Element | Size (1920x1080) | Rule | |---------|-----------------|------| | Slide title | 48-72px | Max 6 words | | Key stat/number | 96-144px | One per slide, when applicable | | Body text | 24-32px | Max 6 bullet points | | Caption/source | 16-20px | Cite data sources | | Font | Sans-serif only | Inter, Helvetica, SF Pro, or similar |
If you need more text, you need more slides.
| Element | Guideline | |---------|-----------| | Background | Dark (navy, charcoal) OR clean white — pick one, commit | | Accent color | ONE brand color for emphasis | | Text | White on dark, or dark grey (#333) on light | | Charts | 2-3 colors max, your brand color = "you" | | Avoid | Gradients on text, neon colors, more than 3 colors |
| Rule | Why | |------|-----| | Consistent margins (80-100px) | Professional, clean | | Left-align text (never center body text) | Easier to scan | | One visual per slide | Focus attention | | Slide numbers | Helps investors reference specific slides | | Logo in corner | Subtle brand reinforcement |
infsh app run infsh/html-to-image --input '{
"html": "<div style=\"width:1920px;height:1080px;background:#0f0f23;display:flex;align-items:center;justify-content:center;font-family:system-ui;color:white;text-align:center\"><div><h1 style=\"font-size:80px;font-weight:900;margin:0\">DataFlow</h1><p style=\"font-size:32px;opacity:0.7;margin-top:16px\">Automated reporting for data teams</p><p style=\"font-size:22px;opacity:0.5;margin-top:40px\">Seed Round — Q1 2025</p></div></div>"
}'
One big number + one sentence.
infsh app run infsh/html-to-image --input '{
"html": "<div style=\"width:1920px;height:1080px;background:#0f0f23;display:flex;align-items:center;padding:100px;font-family:system-ui;color:white\"><div><p style=\"font-size:24px;color:#f59e0b;text-transform:uppercase;letter-spacing:3px;margin:0\">The Problem</p><h1 style=\"font-size:144px;margin:20px 0;font-weight:900;color:#f59e0b\">12 hrs/week</h1><p style=\"font-size:36px;opacity:0.8;line-height:1.4\">The average data analyst spends 12 hours per week<br>building reports manually</p><p style=\"font-size:20px;opacity:0.4;margin-top:30px\">Source: Forrester Research, 2024</p></div></div>"
}'
Use concentric circles, not pie charts:
infsh app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(19.2, 10.8))\nfig.patch.set_facecolor(\"#0f0f23\")\nax.set_facecolor(\"#0f0f23\")\n\ncircles = [\n (0, 0, 4.0, \"#1e1e4a\", \"TAM\\n$50B\", 40),\n (0, 0, 2.8, \"#2a2a5a\", \"SAM\\n$8B\", 32),\n (0, 0, 1.4, \"#818cf8\", \"SOM\\n$800M\", 28)\n]\n\nfor x, y, r, color, label, fontsize in circles:\n circle = plt.Circle((x, y), r, color=color, ec=\"#333366\", linewidth=2)\n ax.add_patch(circle)\n ax.text(x, y, label, ha=\"center\", va=\"center\", fontsize=fontsize, color=\"white\", fontweight=\"bold\")\n\nax.set_xlim(-5, 5)\nax.set_ylim(-5, 5)\nax.set_aspect(\"equal\")\nax.axis(\"off\")\nax.text(0, 4.8, \"Market Opportunity\", ha=\"center\", fontsize=36, color=\"white\", fontweight=\"bold\")\nplt.tight_layout()\nplt.savefig(\"market-size.png\", dpi=100, facecolor=\"#0f0f23\")\nprint(\"Saved\")"
}'
Show growth, not just numbers. Up-and-to-the-right chart.
infsh app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(19.2, 10.8))\nfig.patch.set_facecolor(\"#0f0f23\")\nax.set_facecolor(\"#0f0f23\")\n\nmonths = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\"]\nrevenue = [8, 12, 18, 28, 42, 58, 82, 120]\n\nax.fill_between(range(len(months)), revenue, alpha=0.3, color=\"#818cf8\")\nax.plot(range(len(months)), revenue, color=\"#818cf8\", linewidth=4, marker=\"o\", markersize=10)\nax.set_xticks(range(len(months)))\nax.set_xticklabels(months, color=\"white\", fontsize=18)\nax.tick_params(colors=\"white\", labelsize=16)\nax.set_ylabel(\"MRR ($K)\", color=\"white\", fontsize=20)\nax.spines[\"top\"].set_visible(False)\nax.spines[\"right\"].set_visible(False)\nax.spines[\"bottom\"].set_color(\"#333\")\nax.spines[\"left\"].set_color(\"#333\")\nax.set_title(\"Monthly Recurring Revenue\", color=\"white\", fontsize=32, fontweight=\"bold\", pad=20)\nax.text(7, 120, \"$120K MRR\", color=\"#22c55e\", fontsize=28, fontweight=\"bold\", ha=\"center\", va=\"bottom\")\nax.text(7, 112, \"15x growth in 8 months\", color=\"#22c55e\", fontsize=18, ha=\"center\")\nplt.tight_layout()\nplt.savefig(\"traction.png\", dpi=100, facecolor=\"#0f0f23\")\nprint(\"Saved\")"
}'
Never use a feature matrix against competitors. Use a 2x2 positioning map.
# See the competitor-teardown skill for positioning map generation
infsh app run infsh/python-executor --input '{
"code": "import matplotlib.pyplot as plt\nimport matplotlib\nmatplotlib.use(\"Agg\")\n\nfig, ax = plt.subplots(figsize=(19.2, 10.8))\nfig.patch.set_facecolor(\"#0f0f23\")\nax.set_facecolor(\"#0f0f23\")\n\ncompetitors = {\n \"Us\": (0.6, 0.7, \"#22c55e\", 300),\n \"Legacy Tool\": (-0.5, 0.5, \"#6366f1\", 200),\n \"Startup X\": (0.3, -0.4, \"#6366f1\", 200),\n \"Manual Process\": (-0.6, -0.6, \"#475569\", 150)\n}\n\nfor name, (x, y, color, size) in competitors.items():\n ax.scatter(x, y, s=size*5, c=color, zorder=5, alpha=0.8)\n weight = \"bold\" if name == \"Us\" else \"normal\"\n ax.annotate(name, (x, y), textcoords=\"offset points\", xytext=(15, 15), fontsize=22, color=\"white\", fontweight=weight)\n\nax.axhline(y=0, color=\"#333\", linewidth=1)\nax.axvline(x=0, color=\"#333\", linewidth=1)\nax.set_xlim(-1, 1)\nax.set_ylim(-1, 1)\nax.set_xlabel(\"Manual ← → Automated\", fontsize=22, color=\"white\", labelpad=15)\nax.set_ylabel(\"Basic ← → Advanced\", fontsize=22, color=\"white\", labelpad=15)\nax.set_title(\"Competitive Landscape\", fontsize=32, color=\"white\", fontweight=\"bold\", pad=20)\nax.tick_params(colors=\"#0f0f23\")\nfor spine in ax.spines.values():\n spine.set_visible(False)\nplt.tight_layout()\nplt.savefig(\"competition.png\", dpi=100, facecolor=\"#0f0f23\")\nprint(\"Saved\")"
}'
# Generate professional team headshots/avatars
infsh app run falai/flux-dev-lora --input '{
"prompt": "professional headshot portrait, person in business casual attire, clean neutral background, warm studio lighting, confident friendly expression, corporate photography style",
"width": 512,
"height": 512
}'
Layout: Photos in a row with name, title, and one credential each.
| Person | Format | |--------|--------| | CEO | Name, title, "Ex-[Company], [credential]" | | CTO | Name, title, "Built [thing] at [Company]" | | Others | Name, title, one relevant credential |
Max 4 people on the team slide. More = unfocused.
| Chart Type | Use For | Never Use For | |-----------|---------|--------------| | Line chart | Growth over time (traction) | Comparisons between categories | | Bar chart | Comparing amounts | Time series (use line) | | Concentric circles | TAM/SAM/SOM | Anything else | | 2x2 matrix | Competitive positioning | Feature comparison | | Single big number | Key metric highlight | Multiple metrics | | Pie chart | NEVER | Anything (hard to read, unprofessional) |
| Rule | Why | |------|-----| | Max 2 colors per chart | Clarity | | Your company = green or brand color | Positive association | | Label directly on chart | No separate legend needed | | Remove gridlines or make very subtle | Reduce clutter | | Start Y-axis at 0 | Don't mislead | | Cite data sources | Credibility |
| Slide | Investor's Real Question | |-------|------------------------| | Problem | "Is this a real problem people pay to solve?" | | Solution | "Is this 10x better than the status quo?" | | Market | "Is this big enough to matter?" | | Traction | "Is this actually working?" | | Team | "Can these people execute?" | | Ask | "Is this a reasonable deal?" |
| Mistake | Problem | Fix | |---------|---------|-----| | Too many slides (20+) | Loses attention, unfocused | Max 12-15 slides | | Wall of text | Nobody reads it | 1-6-6 rule: 1 idea, 6 words, 6 bullets | | Feature comparison table vs competitors | Looks defensive | Use 2x2 positioning map | | Pie charts | Hard to read, unprofessional | Use bar charts or big numbers | | No data sources cited | Looks made up | Always cite sources | | Team slide with 8+ people | Unfocused | Max 4, focus on relevant experience | | Inconsistent design | Looks amateur | Same colors, fonts, margins on every slide | | No "The Ask" slide | Investor doesn't know what you want | State amount, use of funds, timeline | | Vanity metrics | "1M visits" means nothing without conversion | Show revenue, active users, retention | | Too much product demo | This is a business pitch, not a demo | Max 2 slides on product, focus on business |
npx skills add inferencesh/skills@competitor-teardown
npx skills add inferencesh/skills@data-visualization
npx skills add inferencesh/skills@ai-image-generation
Browse all apps: infsh app list
development
Deep review of branch diffs, working trees, or GitHub PRs at any size. Use when the user asks for CodeRabbit-grade review, an incremental re-review after new pushes, publication of findings to a PR, a cross-LLM peer-review verdict round, or conformance review against spec artifacts. Don't use for applying fixes, reviewing specs or PRDs as documents, or quick single-file feedback.
tools
Orchestrate Claude and Codex worker TUIs from a controller agent through herdr panes and the herdr socket CLI. Use when delegating bounded tasks to herdr worker panes, running user-activated plan-first delegations (Claude Code plan mode, Codex Plan mode), waiting on native agent status (idle, working, blocked, done), or verifying worker reports. Workers launch as interactive TUIs via herdr agent start — never through headless runners (compozy exec, claude -p, codex exec). Not for cmux workspaces (see cmux-orchestration) and not for end-user herdr control.
tools
TanStack Query, Router, and Form patterns for React. Use when writing useQuery/queryOptions, mutations, caching, file-based routes, search params, loaders, or TanStack Form validation. Don't use for TanStack Start, TanStack DB/collections, Zustand client state, or non-TanStack routing.
development
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.