Strategy Consulting Visualization Skill

August 12, 2026 · View on GitHub

Strategy Consulting Visualization Skill

Messy notes in. Board-ready slides out.

One skill for your AI agent: turn notes, metrics, and prose into consulting-grade visuals — as real SVG slides, as an animated HTML deck, or as a spec any designer or tool can execute.

Python 3 standard library only. Zero dependencies. Zero API keys. Zero network calls.

License: MIT CI Skill Format Release

English | 日本語

Six-slide board deck rendered by this skill

An actual deck built by this repo: specs (JSON) → SVG slides → animated HTML deck. Nothing hand-drawn. Reproduce it: python3 scripts/scaffold_deck.py board-update -o demo && python3 scripts/build_html_deck.py --manifest demo/deck.json -o demo/deck.html

Why This Gets Starred

  • Install it and get a complete deck immediately. scripts/scaffold_deck.py <archetype> copies a full, coherent 9-12 slide deck — cover through closing — into a working directory. Swap the illustrative data for yours and build. Six archetypes ship, one in Japanese.
  • It actually renders. 22 patterns produce real SVG slides — waterfall, executive summary, 2×2, scatter, heatmap, Gantt, small multiples, cover, section dividers, agendas, closings, and more. Every gallery image below is committed renderer output, verified fresh by CI on every push.
  • Animated HTML decks from one command. Combine slides into a single self-contained HTML file: quiet staggered reveals, keyboard navigation, progress bar, zero external requests. Press p → your browser prints it → you have a PDF.
  • A browser-native report mode. scripts/build_html_report.py turns Markdown into a self-contained, print-to-A4 HTML document with numbered exhibits — the same visual system, for documents instead of decks.
  • Works with your slide tools. The SVGs drop straight into PowerPoint, Keynote, and Word (Insert → Picture). For Google Slides, export PNG from any browser first.
  • Japanese business documents are first-class. CJK text wraps correctly (measured per fullwidth character, not by spaces), fonts fall back to Noto Sans JP / Hiragino, and there are dedicated profiles for 稟議書, 役員会資料, 週報, 学会抄録.
  • Charts that survive an audit. Bar proportions match the data (Lie Factor ≈ 1.0), zero baselines are marked, cell text passes WCAG AA contrast across the whole color ramp, and the accent navy stays readable in greyscale print — all of it asserted in the test suite, not promised in prose.
  • Roasted by five design legends, then fixed. We ran the whole system through a five-perspective design panel — Tufte's data-ink discipline, an ex-McKinsey chart master, Swiss grid typography, FT-style data journalism, and modern design engineering. They scored it 5.8/10 and listed every flaw. A previous release shipped every fix. Read the receipts.

60-Second Start

# 1. Install it as an agent skill (Claude Code, Cursor, Codex, and 70+ agents)
npx skills add kgraph57/mckinsey-style-visualization-skill

Or clone it directly (also gets you the runnable scripts below):

# 1. Get it (Claude Code clone install)
git clone https://github.com/kgraph57/mckinsey-style-visualization-skill.git ~/.claude/skills/strategy-consulting-visualization
cd ~/.claude/skills/strategy-consulting-visualization

# 2. Render one slide → SVG
python3 scripts/render_slide_spec.py examples/render-specs/arr-waterfall.json -o slide.svg

# 3. Build the full animated deck → one HTML file
python3 scripts/build_html_deck.py --manifest examples/demo-deck.json -o deck.html
open deck.html   # ← arrows to navigate, "p" to print → PDF

Or skip the terminal and just ask your agent:

Use the strategy consulting visualization skill to turn these notes into a board slide:
ARR grew from \$10M to \$15M. Enterprise added \$3M, expansion \$2.5M, churn -\$0.5M.
The board must decide on implementation capacity investment.

The Pipeline

flowchart LR
    A["Messy notes,<br/>metrics, prose"] --> B["Slide spec<br/>(JSON)"]
    B --> C["SVG slides"]
    C --> D["Animated HTML deck"]
    C --> E["PowerPoint / Keynote / Word<br/>(insert SVG)"]
    D --> F["PDF<br/>(browser print)"]

Specs are plain JSON, so they diff, review, and version like code. The renderer and deck builder are single-file Python scripts with no installs.

Every image is committed output of scripts/render_slide_spec.py — CI fails if any of them drifts from what the renderer actually produces. Specs live in examples/render-specs/.

ARR WaterfallExecutive Summary Strip
Rendered ARR waterfallRendered executive summary
Small MultiplesScatter / Correlation
Rendered small multiplesRendered scatter
Japanese Board Summary(役員会サマリー)Cover Slide
Rendered Japanese board summaryRendered cover slide
Benchmark TableDistribution
Rendered benchmark tableRendered distribution
Capacity GapProcess Flow
Rendered capacity gapRendered process flow

22 patterns render to SVG: cover, section_divider, end_cover, agenda, bullet_list, closing, quote, waterfall, gap, before_after, time_series, benchmark_table, summary_strip, process_flow, funnel, heatmap, gantt, kpi_scorecard, two_by_two, scatter, distribution, small_multiples. Thirteen more patterns (Sankey, pyramid, maps, decision trees, …) ship as structured specs and image-generation prompts — the catalog says exactly which is which. We don't pretend.

Animated HTML Decks

python3 scripts/build_html_deck.py cover.json bridge.json summary.json -o deck.html --title "Q4 Review"

One command, one file, and you get:

  • Quiet, staggered element reveals on every slide — the restrained kind, not slide-carnival transitions (prefers-reduced-motion respected)
  • Keyboard + click navigation, progress bar, slide counter, deep links (deck.html#3)
  • Print stylesheet: p or Cmd+P gives you one slide per page → save as PDF
  • Zero external requests — fonts, styles, scripts, and SVGs are all inline. Email it, host it, present offline.

Try the committed demo: examples/demo-deck.html (open locally after cloning).

Instant Deck: Scaffold → Build

Skip writing specs from a blank page. Pick an archetype, copy it, swap in real data:

python3 scripts/scaffold_deck.py --list                    # see all 6 archetypes + slide counts
python3 scripts/scaffold_deck.py board-update -o my-deck --title "FY27 Board Update"
# edit my-deck/specs/*.json with real numbers — the pattern shapes are already right
python3 scripts/build_html_deck.py --manifest my-deck/deck.json -o my-deck/deck.html

scaffold_deck.py refuses to overwrite a non-empty directory unless you pass --force, and prints the next two commands when it's done.

Six deck archetypes ship pre-filled with a coherent illustrative storyline — every slide renders, nothing is a stub.

ArchetypeUse ForStoryline
board-updateRecurring board / steering updatesCover → agenda → executive summary → KPI scorecard → ARR waterfall → trend → risk view → closing → end cover
`strategy-recommendation$"\text{Where} \text{to} \text{play}, \text{how} \text{to} \text{win}" \text{strategy} \text{decks}\text{Cover} → \text{agenda} → \text{context} → \text{two} \text{section} \text{dividers} (\text{Where} \text{to} \text{play} / \text{How} \text{to} \text{win}) → 2 \times 2 → \text{benchmark} \text{table} → \text{gap} \text{or} \text{bridge} → \text{roadmap} → \text{closing} → \text{end} \text{cover}
$project-status`PMO / steering-committee status reviewsCover → summary → roadmap → KPI scorecard → blockers → path-to-green flow → closing → end cover
`market-entry$\text{Entry} \text{or} \text{expansion} \text{investment} \text{cases}\text{Cover} → \text{agenda} → \text{market} \text{trend} → \text{competitor} \text{benchmark} → \text{segment} 2 \times 2 → \text{entry}-\text{path} \text{flow} → \text{distribution} \text{or} \text{scatter} → \text{closing} → \text{end} \text{cover}
$sales-proposal`Customer-facing proposalsCover → client situation → before/after → approach flow → plan → why-us benchmark → customer quote → closing → end cover
board-update-ja役員会向け月次アップデート(日本語)board-update と同じ構成を、翻訳調ではなく自然な日本語の見出しで

Report Mode: Markdown → Browser Document

For a document instead of a deck, write Markdown and build it straight to a single self-contained, print-to-A4 HTML report:

python3 scripts/build_html_report.py my-report.md -o my-report.html --lang en
  • Front matter (title, subtitle, author, date, classification, lang) drives a navy title band — the only navy surface in the document.
  • ##/### headings auto-number and build a "Contents" TOC with anchor links; standard Markdown (bullets, ordered lists, tables, bold/italic, code, blockquotes, links) renders as clean editorial typography — everything HTML-escaped first, so nothing in the source can inject markup.
  • Drop in a rendered chart with ![Caption](spec:path/to/spec.json) — it becomes an auto-numbered Exhibit N — Caption with the full slide SVG embedded inline, no header/footer chrome needed. ![Caption](svg:path.svg) embeds an existing SVG file the same way.
  • p / Cmd+P exports an A4-portrait PDF with the title band as the first page.
  • Zero external requests — same self-contained guarantee as the HTML deck.

Three starting points ship in templates/reports/: board-pre-read.md, one-pager.md, proposal-memo.md. See the committed demo: examples/demo-report.html (built from examples/demo-report.md).

Speaker Script: What You Read at the Podium

Any slide spec can carry a top-level "notes" field — a string, or a list of paragraph strings — holding the spoken narration for that slide. The SVG renderer ignores it completely, so adding notes never changes a rendered slide. Build the same deck manifest into a print-first, one-slide-per-page script:

python3 scripts/build_speaker_script.py --manifest my-deck/deck.json -o my-deck/script.html --lang en
  • One printed A4 page per slide: the slide rendered inline above, the narration in podium-readable type below (screen 20px, print ~13.5pt; --lang ja loosens line-height to 1.9 with palt for CJK).
  • A slide with no notes still gets its own page, with a muted "(no script)" / "(原稿なし)" marker — never silently skipped.
  • A cover page carries the deck title and the date from the deck's own cover slide, if present.
  • Zero external requests, no required JavaScript.

See the committed demo: examples/demo-script.html (built with --lang ja from templates/decks/board-update-ja/deck.json).

Deck as an Article: Read It Top to Bottom Like a Web Page

The same notes field also drives a reading-mode build: the whole deck laid out vertically on a single 680px column, each slide's SVG followed by its narration as prose — a paper-first article, like a published M3-series piece, not a side-nav document.

python3 scripts/build_html_article.py --manifest my-deck/deck.json -o my-deck/article.html --lang en
  • A hero opens the page: an optional uppercase kicker from the manifest's series key, the title, an optional lead paragraph from lead (falling back to description for older manifests), and meta chips for slide count, presenter, and date (from the deck's cover slide).
  • Every slide appears, in manifest order, as its own <article> on the full 680px column — meta line (number + optional per-spec label), heading, SVG, then its notes as prose. There is no "Contents" jump list in this mode; it is a single linear scroll.
  • A slide with no notes renders frame-only — the article still shows every slide, like flipping through the deck.
  • Optional per-slide refs ([{"label": ..., "url": ...}]) render as a "Links" aside below the notes and roll up, deduped by URL, into an "All links" section after the last slide; only http(s)/mailto URLs render as links.
  • --title overrides the manifest title; zero external requests except the href of a ref link itself.

See the committed demo: examples/demo-article.html (built from templates/decks/board-update/deck.json).

Export Anywhere

TargetHowFidelity
PDFOpen the HTML deck → print → save as PDFVector, one slide per page
PowerPoint / Keynote / WordInsert the SVG files as picturesVector, scales losslessly
Google Slides / DocsRender SVG → PNG in any browser, then insertRaster at any resolution
Design tools (Figma, Illustrator)Open the SVG directlyFully editable vectors
Docs / wikis / GitHubEmbed the SVG — GitHub renders it inlineWhat you see in this README

Roasted by Five Design Legends

Most chart generators say "beautiful". We wanted defensible, so we convened a five-perspective design review panel (as rigorous AI personas) and told them to be merciless:

Reviewer lensVerdictSharpest cut
Edward Tufte — data-ink, honest scales5.5/10"Meaningless decorated rectangles baked into the renderer"
Gene Zelazny — ex-McKinsey, Say It With Charts6.5/10"The flagship example violates its own headline rule"
Vignelli × Müller-Brockmann — Swiss grid6/10"A corporate template, not a design system"
Alan Smith — FT data journalism5.5/10"The waterfall draws off-canvas on negative bridges" (he proved it)
Modern design engineering5.5/10"2016 visuals wearing a 2020s spec sheet"

Then we shipped every fix in a prior release: zero-floor waterfalls, CJK-correct wrapping, no silent truncation, a single re-derived navy that survives greyscale printing, diverging heatmaps for signed data, WCAG-AA cell text asserted across the entire ramp, decoration stripped, a comparison-type gate before every chart choice, and a rubric that now measures data-ink integrity and deck-level storyline logic.

The result is a visual system you can defend in front of a board, an auditor, or a design critic — because it already survived one.

The Discipline Under the Hood

The renderer is the visible part. The skill underneath is a full operating system for executive visualization:

  • Message first: every visual starts from the reader's decision, gets a single-proposition insight headline, and only then picks a chart — gated by the five comparison types (component / item / time series / distribution / correlation).
  • A real style system: design tokens on an 8px grid, a fixed type scale, one navy, an emphasis ladder (fill > line > text) with hard caps — the same constants the renderer executes.
  • A quality rubric with teeth: 24-point scoring across strategy, data integrity, data-ink honesty, hierarchy, portability, and safety, plus blocking gates (no color-only meaning, no invented data, no implied rendering that doesn't exist).
  • An adversarial review loop: expert lenses that hunt overclaims, insider jargon, accessibility failures, and cultural assumptions before anything is called publishable.

By Role

The persona playbook gives every role a copy-paste prompt and a rendered example:

RoleAsk ForRendered Example
SalesPipeline QBR, proposal visualsSales funnel
Project manager / PMORoadmap with critical pathPMO gantt
MarketingChannel × segment performanceMarketing heatmap
HR / People opsTalent scorecardHR scorecard
Product managerEffort vs. impact prioritizationProduct 2x2
Engineer / Tech leadIncident postmortem flowIncident flow
Researcher / ClinicianStudy outcome summaryResearch before-after

Japanese business formats (稟議書, 週報・月報, 役員会資料, 学会抄録, 提案書) have dedicated profiles in document-type-profiles.md.

One-Minute Example

Give the skill this:

ARR grew from \$10M to \$15M.
Enterprise expansion contributed \$3M. Existing customers added \$2.5M. Churn cost \$0.5M.
AI workflow adoption grew from 18% to 64%.
The board needs to decide whether to invest in implementation capacity.

It returns a decision-framed spec — strategic question, single-proposition headline, pattern choice with reasoning, exact values and labels, assumptions, and a rubric score — that renders to the waterfall you saw in the gallery. See the full worked proof: inputslide specsevaluation.

Case Study: the full loop in two minutes

SaaS Board Update — Raw Notes to a Board-Ready Slide walks one real pass end to end: anonymized founder notes → weak first draft → the packaged reviewer rejects it (14/20) → decision-first revision passes (20/20) → the committed rendered slides. Every artifact is in this repo and reproducible with two commands.

What You Can Point It At

Starting PointYou Get
Board update metrics5-slide story: cover, waterfall, trend, gap, recommendation
Revenue bridge dataWaterfall with drivers, honest baselines, assumptions
Competitor / vendor dataBenchmark table + 2×2 positioning with leader highlights
KPI before/after dataImpact slide with deltas and an implication headline
Process description / SOPProcess flow with owners and the bottleneck highlighted
Segment metrics over timeSmall-multiples grid on one honest shared scale
Research notes / whitepaperNumbered report figures with sources and distributions
Any prose — "visualize this"Input triage → right pattern → document profile → spec

Install

# Skills CLI (skills.sh) — works with Claude Code, Cursor, Codex, and 70+ agents
npx skills add kgraph57/mckinsey-style-visualization-skill

Alternative — Claude Code clone install:

# Personal skill (Claude Code)
git clone https://github.com/kgraph57/mckinsey-style-visualization-skill.git ~/.claude/skills/strategy-consulting-visualization

# Project skill
git clone https://github.com/kgraph57/mckinsey-style-visualization-skill.git .claude/skills/strategy-consulting-visualization

Verify the package (same checks CI runs):

python3 -m unittest discover -s tests
python3 scripts/validate_skill.py   # → OK: skill package passed validation

The validator re-renders every committed SVG and the demo deck from source specs and fails on any drift — the gallery cannot silently rot.

Star It, Break It, Share It

If this turned your rough notes into a usable slide, star the repo — stars are how other people find tools that actually render instead of hallucinate.

Even better contributions:

  • A messy input and the slide it produced (Discussions)
  • A business scenario that needs a pattern we don't have (request template)
  • An output that's broken, confusing, or overconfident — it becomes a regression test

Star History Chart

Repository map & package internals
LayerWhat It DoesFile
Skill entrypointTells agents when and how to use the skillSKILL.md
Input triageMaps any input to a pattern familyinput-triage.md
Document profilesAdapts format and tone per deliverabledocument-type-profiles.md
Pattern libraryComparison-type gate + 35-pattern catalogvisualization-patterns.md
Style systemTokens, palette, typography, chart rulesstyle-system.md
Prompt templatesReproducible spec formatsprompt-templates.md
Quality rubric24-point scoring + blocking gates + deck checkquality-rubric.md
Expert review loopAdversarial pre-publication reviewexpert-review-loop.md
SVG rendererSpec JSON → styled SVG slide (22 patterns)render_slide_spec.py
Deck builderSVG slides → animated single-file HTML deckbuild_html_deck.py
Deck scaffolderCopies a ready-made deck archetype into a working directoryscaffold_deck.py
Report builderMarkdown → self-contained, print-to-A4 HTML reportbuild_html_report.py
Speaker script builderDeck manifest + notes → print-first, one-slide-per-page podium scriptbuild_speaker_script.py
Slide article builderDeck manifest + notes → self-contained, top-to-bottom reading articlebuild_html_article.py
Structural reviewLint a drafted spec documentreview_slide_spec.py
ValidationPackage integrity + render parityvalidate_skill.py

Iterative review-loop examples (draft → review → revision, four scenarios) live in examples/review-loop/. Distribution and commercial docs: MARKETPLACE.md, BUYER_BRIEF.md, ROADMAP.md, SECURITY.md, CHANGELOG.md.

Disclaimer

This is an independent skill package. It is not affiliated with, endorsed by, or sponsored by McKinsey & Company, Boston Consulting Group, Bain & Company, or any other consulting firm. Named firms may appear only as common style references or search terms.

License

MIT. See LICENSE.