Generate L1-L3 business capability maps organized across three pillars: Customer/Guest Journey, Value Chain, and Supporting Domains. Produces PPTX, XLSX, and HTML outputs with optional maturity heat mapping. Works for any industry from first principles.
73
73%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
This file contains the exact build instructions for each output format. Read the section relevant to the user's requested format.
The spreadsheet is the most data-rich output — it's the "source of truth" that other formats can be derived from. Build it first when producing multiple formats.
Base columns (always included):
| Column | Header | Content |
|---|---|---|
| A | Pillar | "[Persona] Journey" / "Value Chain" / "[Internal] Journey" / "Supporting" |
| B | L1 Capability | Top-level capability or journey stage |
| C | L2 Capability Group | Capability group name |
| D | L3 Capability | Specific capability name |
| E | Shared With | Cross-reference (e.g., "Journey: Onboarding") or blank |
Pillar order in rows: [Persona] Journey → Value Chain → [Internal] Journey (if enabled) → Supporting
Optional lens columns (append in this order when enabled):
The column order flows logically: what it is → how mature → where it's going → who owns it → investment decision. When multiple lenses are enabled, columns are shared (e.g., Current Maturity serves both maturity and investment lenses).
| Column | Header | Lens | Content |
|---|---|---|---|
| +1 | Current Maturity (1-5) | Maturity/Investment | Empty dropdown (1-5), conditional formatting |
| +2 | Maturity Label | Maturity | Auto-fill formula: CHOOSE(Current, "Ad-hoc".."Optimized") |
| +3 | Target Maturity (1-5) | Investment | Empty dropdown (1-5), conditional formatting |
| +4 | Maturity Gap | Investment | Formula: Target - Current. Conditional formatting (larger gap = darker red) |
| +5 | Strategic Initiative | Investment | Free text — which strategy this supports |
| +6 | Owner | Ownership | Free text — role/team/individual accountable |
| +7 | Investment Priority | Investment | Empty dropdown: Invest / Maintain / Divest / Sunset |
Column letters shift based on which lenses are enabled. If only Ownership is on, Owner becomes column F. If all lenses are on, the sheet extends to column L.
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.formatting.rule import CellIsRule
wb = Workbook()
# ── Pillar colors (for row backgrounds) ──
# Pillar name for Journey varies by industry — use the persona-specific name
# e.g., "Guest Journey", "Patient Journey", "Customer Journey", "Subscriber Journey"
# Pillar order: Journey → Value Chain → Internal Journey (if enabled) → Supporting
PILLAR_FILLS = {
journey_pillar_name: PatternFill("solid", fgColor="E8F4FD"), # light blue
"Value Chain": PatternFill("solid", fgColor="E8F8E8"), # light green
internal_journey_pillar_name: PatternFill("solid", fgColor="FFF5E6"), # light amber (optional Pillar 4)
"Supporting": PatternFill("solid", fgColor="F5F0FF"), # light purple (always last)
}
# ── Header style ──
HEADER_FONT = Font(name="Calibri", bold=True, size=11, color="FFFFFF")
HEADER_FILL = PatternFill("solid", fgColor="20206E") # Dark Navy
HEADER_ALIGN = Alignment(horizontal="center", vertical="center", wrap_text=True)
# ── Maturity heat map (conditional formatting on Maturity column) ──
MATURITY_FILLS = {
1: PatternFill("solid", fgColor="E74C3C"), # Red - Ad-hoc
2: PatternFill("solid", fgColor="E67E22"), # Orange - Developing
3: PatternFill("solid", fgColor="F1C40F"), # Yellow - Defined
4: PatternFill("solid", fgColor="2ECC71"), # Green - Managed
5: PatternFill("solid", fgColor="27AE60"), # Dark Green - Optimized
}
# Apply conditional formatting for maturity column:
# ws.conditional_formatting.add(f'F2:F{max_row}', CellIsRule(...))| Column | Header | Content |
|---|---|---|
| A | Pillar | Same pillar names as Capability Map sheet |
| B | L1 Capability | L1 name |
| C | L2 Capability | L2 name (one row per L2) |
| D | Process Maturity (1-5) | 1-5 dropdown with conditional formatting |
| E | Process Notes | Qualitative context on process state |
| F | Tool-set Maturity (1-5) | 1-5 dropdown with conditional formatting |
| G | Tool-set Notes | Qualitative context on tools/systems |
| H | People/Expertise Maturity (1-5) | 1-5 dropdown with conditional formatting |
| I | People Notes | Qualitative context on skills, staffing, expertise |
| J | Org Reach (1-5) | 1-5 dropdown with conditional formatting |
| K | Performance Measurement (1-5) | 1-5 dropdown with conditional formatting |
| Column | Header | Content |
|---|---|---|
| A | Pillar | Same pillar names as Capability Map sheet |
| B | L1 Capability | L1 name |
| C | L2 Capability | L2 name (one row per L2) |
| D | Company Maturity | Average of L3 current maturity scores for this L2 |
| E | Industry Average | Industry benchmark score (generated from first principles) |
| F | Delta | Formula: Company - Industry Average. Conditional formatting: ≥0.3=green, ≤-0.5=orange, ≤-1.0=red |
| G | Benchmark Insight | Brief qualitative insight explaining delta and strategic implications |
| Column | Header | Content |
|---|---|---|
| A | Quarter | Q1-Q8 dropdown, color-coded by half-year |
| B | Pillar | Same pillar names as Capability Map sheet |
| C | L1 Capability | L1 name |
| D | L2 Capability | L2 name |
| E | Strategic Initiative | Action statement describing the change or investment |
| F | Current Maturity | 1-5 with conditional formatting |
| G | Target Maturity | 1-5 with conditional formatting |
| H | Gap | Target minus Current |
| I | Dependencies | What must be in place before this can succeed |
| J | Milestone 1 | Single clear deliverable (planning/procurement phase) |
| K | Milestone 2 | Single clear deliverable (build/pilot phase) |
| L | Milestone 3 | Single clear deliverable (outcome/steady-state) |
| M | Success Metric | Baseline → target format (e.g., "Win rate: 45% → 60%") |
| N | Owner | Executive accountable for delivery |
| O | Investment Priority | High / Medium / Low dropdown |
Quarter color scheme:
| Column | Header | Content |
|---|---|---|
| A | Pillar | Same pillar names as Capability Map sheet |
| B | L1 Capability | L1 name |
| C | L2 Capability | L2 name |
| D | L3 Capability | L3 name |
| E | Definition | Plain-language description (varied openers, not repetitive) |
| F | Business Value | Why it matters — framed for CFO/CEO/board |
| G | Example Activities | Concrete examples of what doing this capability looks like |
| H | Common Enterprise Tools | Representative platforms used by large enterprises (where relevant) |
The deck is an executive presentation of the capability map. It uses the Metis Strategy
design system — read the metis-pptx skill's references/design-system.md for brand
constants and references/layout-grids.md for slide construction.
Slide 1: Cover — "[Company] Business Capability Map"
Slide 2: Agenda — Overview of the three pillars
Slide 3: Conceptual Model — The three-pillar diagram (full width)
Slide 4: [Persona] Journey Overview — L1 stages as a horizontal flow
Slide 5+: [Persona] Journey Detail — One slide per L1 showing its L2/L3 table
Slide N: Section Divider — "Value Chain"
Slide N+1: Value Chain Overview — L1 functions aligned to journey stages
Slide N+2+: Value Chain Detail — One slide per L1 showing its L2/L3 table
Slide P: Section Divider — "[Internal Persona] Journey" (if Pillar 4 enabled)
Slide P+1+: [Internal Persona] Journey Detail — One slide per L1 showing its L2/L3 table
Slide M: Section Divider — "Supporting Domains"
Slide M+1+: Supporting Detail — One slide per L1 showing its L2/L3 table
--- Optional lens slides (append before closing) ---
Slide Z-9: Roadmap Timeline (if roadmap enabled) — Horizontal swimlane timeline with
quarters on x-axis and pillars as swim lanes. Each initiative is a colored bar.
Slide Z-8: Roadmap Summary (if roadmap enabled) — Table showing initiative count and
key theme per quarter, with by-pillar breakdown.
Slide Z-7: Capability Definitions Appendix (if definitions enabled) — One slide per L1
showing a table of L3 definitions with Common Tools column where relevant.
Slide Z-6: People/Process/Tools Summary (if PPT lens enabled) — Summary slide per pillar
showing a table with Process / Tools / People columns and traffic-light indicators.
Follow with detail slides per focus area showing strengths, needs/opportunities,
and representative observations (matching the Metis capability assessment format).
Slide Z-5: Industry Benchmark Chart (if benchmark lens enabled) — Grouped bar chart showing
Company Maturity vs. Industry Average by L1 capability, with delta annotations.
Slide Z-4: Industry Benchmark Key Gaps & Strengths (if benchmark lens enabled) — Summary
slide listing top 5 gaps (largest negative delta) and top 3 strengths (largest
positive delta) with benchmark insights.
Slide Z-3: Investment Matrix (if investment lens enabled) — 2x2 bubble chart:
X-axis = Current Maturity (1-5), Y-axis = Strategic Importance
Bubble color = Investment Priority (green=Invest, blue=Maintain, orange=Divest, red=Sunset)
Plot L1 or L2 capabilities as bubbles
Slide Z-2: Ownership Summary (if ownership lens enabled) — Table grouped by owner,
showing which L1/L2 capabilities each leader is accountable for.
This is the operating model slide.
Slide Z-1: Maturity Summary (if maturity enabled) — Heat map overview across all pillars
Slide Z: Closing slideEach detail slide uses Grid 5 (Title + Visual) from the metis-pptx layout system. The content area is a table:
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
# Table dimensions for capability detail
LEFT = Inches(0.50)
TOP = Inches(1.30)
WIDTH = Inches(12.33)
HEIGHT = Inches(5.30)
# Column widths vary by which optional lenses are enabled:
# Base: L2 (3.5") | L3 (5.5") | Shared (3.33")
# + Maturity: L2 (3.0") | L3 (4.5") | Shared (2.5") | Maturity (1.33") | Label (1.0")
# + Investment: Add Investment Priority tag as colored badge within L3 cell (no extra column)
# + Ownership: L2 (3.0") | L3 (4.0") | Shared (2.0") | Owner (2.0") | [+ maturity cols]
# Adapt widths to fit — never exceed 12.33" total# Header row
HEADER_BG = RGBColor(0x20, 0x20, 0x6E) # Dark Navy
HEADER_FONT_COLOR = RGBColor(0xFF, 0xFF, 0xFF)
HEADER_FONT_SIZE = Pt(11)
# Data rows — alternate between white and light gray
ROW_EVEN = RGBColor(0xFF, 0xFF, 0xFF)
ROW_ODD = RGBColor(0xF2, 0xF2, 0xF2)
# Maturity cell backgrounds use the heat map colors from SKILL.md section 3
# Cell padding: use internal margins of 0.05" on all sides
# Font: Calibri 10pt for table cells, bold for L2 grouping rowsFor the Journey Overview slide, render the L1 stages as a horizontal process flow:
# Horizontal arrow flow for journey stages
stage_count = len(journey_l1s)
box_width = (12.33 - (stage_count - 1) * 0.15) / stage_count # equal width, 0.15" gaps
box_height = 0.8
for i, stage in enumerate(journey_l1s):
left = Inches(0.50 + i * (box_width + 0.15))
top = Inches(2.0)
# Rounded rectangle with Mint fill
shape = slide.shapes.add_shape(
MSO_SHAPE.ROUNDED_RECTANGLE,
Inches(left), Inches(top),
Inches(box_width), Inches(box_height)
)
shape.fill.solid()
shape.fill.fore_color.rgb = RGBColor(0x3B, 0xDA, 0xC0) # Mint
# Add chevron arrow between stages (except after last)A single standalone HTML file with no external dependencies. Everything is inlined — CSS, JS, and data.
@media print hides controls, expands all)<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>[Company] Business Capability Map</title>
<style>
/* Inline all styles — no external CSS */
:root {
--navy: #20206E;
--blue: #256BA2;
--mint: #3BDAC0;
--dark-gray: #4A4A4A;
--light-gray: #F2F2F2;
--journey-bg: #E8F4FD;
--valuechain-bg: #E8F8E8;
--supporting-bg: #F5F0FF;
--internal-bg: #FFF5E6;
--invest: #27AE60;
--maintain: #256BA2;
--divest: #E67E22;
--sunset: #E74C3C;
}
body { font-family: Calibri, 'Segoe UI', sans-serif; margin: 0; padding: 20px; color: var(--dark-gray); }
.header { background: var(--navy); color: white; padding: 24px 32px; border-radius: 8px; margin-bottom: 24px; }
.pillar { margin-bottom: 20px; border-radius: 8px; overflow: hidden; }
.pillar-header { padding: 16px 20px; font-size: 18px; font-weight: bold; cursor: pointer; }
.l1-item { padding: 12px 20px 12px 32px; border-bottom: 1px solid #e0e0e0; cursor: pointer; }
.l2-item { padding: 8px 20px 8px 52px; font-weight: 600; }
.l3-item { padding: 6px 20px 6px 72px; display: flex; align-items: center; gap: 12px; }
.maturity-badge {
display: inline-block; padding: 2px 10px; border-radius: 12px;
font-size: 12px; font-weight: 600; color: white;
}
.collapsible-content { display: none; }
.collapsible-content.open { display: block; }
.search-bar { width: 100%; padding: 10px 16px; font-size: 14px; border: 1px solid #ccc; border-radius: 6px; margin-bottom: 16px; }
.highlight { background: #FFF3CD; }
.owner-label { font-size: 11px; color: #888; margin-top: 2px; }
.investment-pill { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; color: white; }
.investment-pill.invest { background: var(--invest); }
.investment-pill.maintain { background: var(--maintain); }
.investment-pill.divest { background: var(--divest); }
.investment-pill.sunset { background: var(--sunset); }
.gap-indicator { font-size: 11px; color: #666; }
.toolbar { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; }
.toolbar button { padding: 6px 14px; border: 1px solid #ccc; border-radius: 4px; background: white; cursor: pointer; font-size: 13px; }
.toolbar button.active { background: var(--navy); color: white; border-color: var(--navy); }
@media print { .search-bar, .toolbar { display: none; } .collapsible-content { display: block !important; } }
</style>
</head>
<body>
<div class="header">
<h1>[Company] Business Capability Map</h1>
<p>L1–L3 Capabilities across [Persona] Journey, Value Chain, and Supporting Domains</p>
</div>
<input type="text" class="search-bar" placeholder="Search capabilities..." id="search">
<!-- Pillar sections rendered here by JS from inline data -->
<script>
const DATA = /* capability map JSON embedded here */;
// Render tree, handle collapse/expand, search filtering
</script>
</body>
</html>{
"company": "Acme Corp",
"industry": "Luxury Hospitality",
"lenses": ["maturity", "investment", "ownership"],
"pillars": [
{
"name": "Guest Journey",
"color": "#E8F4FD",
"l1s": [
{
"name": "Discovery",
"l2s": [
{
"name": "Brand Presence",
"l3s": [
{
"name": "Social Media Management",
"shared_with": "",
"maturity": null,
"investment_priority": null,
"current_maturity": null,
"target_maturity": null,
"strategic_initiative": "",
"owner": ""
}
]
}
]
}
]
}
]
}Only include lens fields that are enabled. The lenses array tells the renderer which
optional UI elements to show (filter buttons, Group by Owner toggle, gap summary, etc.).
The script reads this JSON and builds the DOM dynamically. When ownership is enabled,
add a "Group by Owner" toggle that rebuilds the tree grouped by the owner field instead
of by pillar. When investment is enabled, add filter buttons for each priority level and
a summary bar showing capability counts per bucket.