|
| 1 | +# IB Deck Engine — Claude Code Plugin |
| 2 | + |
| 3 | +> A Claude Code plugin that ships a 14-template investment banking slide library with a JSON spec → deterministic pixel rendering architecture. |
| 4 | +
|
| 5 | +**Why this exists:** Other AI slide tools ask the LLM to write spatial code (`Inches(2.5), Pt(11)`). That's why their output has misaligned tables, disproportional bar charts, and reference label collisions. This plugin separates content reasoning (LLM's strength) from spatial rendering (deterministic code's strength). Right-alignment is guaranteed by the template, not hoped for. |
| 6 | + |
| 7 | +## Installation |
| 8 | + |
| 9 | +```bash |
| 10 | +claude plugin marketplace add gorajing/ib-deck-plugin |
| 11 | +claude plugin install ib-deck-engine@ib-deck-plugin |
| 12 | +``` |
| 13 | + |
| 14 | +Or install directly: |
| 15 | + |
| 16 | +```bash |
| 17 | +git clone https://github.com/gorajing/ib-deck-plugin ~/.claude/plugins/local/ib-deck-plugin |
| 18 | +``` |
| 19 | + |
| 20 | +Verify installation: |
| 21 | + |
| 22 | +```bash |
| 23 | +claude plugin list | grep ib-deck |
| 24 | +``` |
| 25 | + |
| 26 | +## Available commands |
| 27 | + |
| 28 | +| Command | Purpose | |
| 29 | +|---------|---------| |
| 30 | +| `/ib-deck [TICKER]` | Build a complete 14-slide IB pitch deck for a public company | |
| 31 | +| `/ib-extract [TICKER]` | Pull a 10-K from SEC EDGAR into a structured JSON master file | |
| 32 | +| `/ib-financial [COMPANY]` | Build a single financial summary table slide | |
| 33 | +| `/ib-football [COMPANY]` | Build a football field valuation summary slide | |
| 34 | +| `/ib-comps [TARGET]` | Build a trading comparables peer multiples table | |
| 35 | +| `/ib-sources-uses [DEAL]` | Build an LBO Sources & Uses table | |
| 36 | +| `/ib-sensitivity [COMPANY]` | Build a DCF sensitivity grid (WACC × TGR) | |
| 37 | + |
| 38 | +## Quick start |
| 39 | + |
| 40 | +```bash |
| 41 | +# In Claude Code, after installing the plugin: |
| 42 | +/ib-deck ADUS |
| 43 | +``` |
| 44 | + |
| 45 | +Claude will: |
| 46 | +1. Pull Addus HomeCare's most recent 10-K from SEC EDGAR via `edgartools` |
| 47 | +2. Extract financials into a structured JSON master file |
| 48 | +3. Fill JSON specs for 14 slide templates |
| 49 | +4. Render a pixel-perfect PPTX using the IBRenderer |
| 50 | +5. Save to `ADUS_pitch_deck.pptx` |
| 51 | + |
| 52 | +The entire pipeline takes one prompt. |
| 53 | + |
| 54 | +## What this plugin solves that the existing financial-services-plugins doesn't |
| 55 | + |
| 56 | +I built this after analyzing the source code of `anthropics/financial-services-plugins`. Here are the specific gaps it fills: |
| 57 | + |
| 58 | +### 1. Cross-model desync ✗ → ✓ |
| 59 | +The existing plugins build DCF and LBO independently. There's nothing guaranteeing both use the same revenue, EBITDA, share count, or tax rate. In a Medpace case study, the DCF used 15% effective tax and the LBO used 21% statutory with no documentation. |
| 60 | + |
| 61 | +**This plugin's fix:** `/ib-extract` produces a single master JSON. Every downstream model and slide references it. A `cross_audit` function verifies consistency across DCF, LBO, and slides. |
| 62 | + |
| 63 | +### 2. openpyxl corruption ✗ → ✓ |
| 64 | +The existing DCF skill (line 21) defaults to openpyxl for standalone xlsx generation. This produces files that trigger Excel's "We found a problem" recovery dialog. |
| 65 | + |
| 66 | +**This plugin's fix:** Uses `xlsxwriter` by default for new file creation. openpyxl is only for reading existing files. |
| 67 | + |
| 68 | +### 3. Spatial execution ceiling ✗ → ✓ |
| 69 | +The existing skills tell the LLM to write `python-pptx` code directly. The LLM has to remember `Inches(2.5), Pt(11)` for every cell. Failures: right-alignment inconsistent, bar heights not proportional, reference labels overlapping titles. |
| 70 | + |
| 71 | +**This plugin's fix:** The LLM never writes spatial code. It picks a template (`render_financial_summary`) and fills a JSON spec. The IBRenderer guarantees: |
| 72 | +- Right-alignment on all numeric columns |
| 73 | +- Proportional bar heights (`value / max_value × chart_height`) |
| 74 | +- Tables are real PowerPoint table objects (not text with tabs) |
| 75 | +- Reference labels never overlap (collision detection built-in) |
| 76 | +- Source text dynamically positioned below content |
| 77 | + |
| 78 | +### 4. Generic titles ✗ → ✓ |
| 79 | +The existing plugins don't enforce action titles. You get "Financial Summary" instead of "Consistent Revenue Growth With Expanding EBITDA Margin Expansion". |
| 80 | + |
| 81 | +**This plugin's fix:** SKILL.md explicitly requires action titles on every slide and gives examples. |
| 82 | + |
| 83 | +### 5. No template library ✗ → ✓ |
| 84 | +The existing plugins make Claude generate slides from scratch each time. No reusable patterns. |
| 85 | + |
| 86 | +**This plugin's fix:** 14 pre-built templates for the most common IB slide types, each with a documented JSON schema. |
| 87 | + |
| 88 | +## The 14 templates |
| 89 | + |
| 90 | +| # | Template | Pattern | Reference | |
| 91 | +|---|----------|---------|-----------| |
| 92 | +| 1 | `render_cover` | Cover with confidential mark + bank badge | GS board pres format | |
| 93 | +| 2 | `render_section_divider` | Full navy bg with section title | GS / Moelis style | |
| 94 | +| 3 | `render_toc` | Numbered agenda with light blue bands | GS agenda slides | |
| 95 | +| 4 | `render_exec_summary` | Blue callout + ■ / — bullet hierarchy | GS executive summary | |
| 96 | +| 5 | `render_investment_highlights` | 4-card 2×2 grid with numbered headers | GS / GS analyst format | |
| 97 | +| 6 | `render_financial_summary` | Historical P&L with bold subtotals | Standard IB financials | |
| 98 | +| 7 | `render_stacked_bar_table` | Stacked bars + data table below | Moelis revenue by segment | |
| 99 | +| 8 | `render_dual_chart` | Two bar charts side by side with CAGR | GS dual analysis | |
| 100 | +| 9 | `render_football_field` | Valuation methodologies with range bars | Evercore / Moelis | |
| 101 | +| 10 | `render_sensitivity` | WACC × TGR grid with base case highlight | Standard DCF sensitivity | |
| 102 | +| 11 | `render_sources_uses` | LBO capital structure (two-column) | Standard LBO | |
| 103 | +| 12 | `render_trading_comps` | Peer multiples with target highlighted | Standard comps table | |
| 104 | + |
| 105 | +See `skills/ib-deck-engine/reference/template-catalog.md` for the full pattern catalog and JSON schemas. |
| 106 | + |
| 107 | +## Architecture |
| 108 | + |
| 109 | +``` |
| 110 | +┌─────────────────────────────────────┐ |
| 111 | +│ CONTENT REASONING (Claude) │ |
| 112 | +│ │ |
| 113 | +│ - Pick the right template │ |
| 114 | +│ - Write the action title │ |
| 115 | +│ - Select the data │ |
| 116 | +│ - Cite the source │ |
| 117 | +└────────────────┬────────────────────┘ |
| 118 | + │ |
| 119 | + │ Output: structured JSON |
| 120 | + │ |
| 121 | + ▼ |
| 122 | +┌─────────────────────────────────────┐ |
| 123 | +│ JSON SPEC │ |
| 124 | +│ { │ |
| 125 | +│ "title": "...", │ |
| 126 | +│ "headers": [...], │ |
| 127 | +│ "rows": [...] │ |
| 128 | +│ } │ |
| 129 | +└────────────────┬────────────────────┘ |
| 130 | + │ |
| 131 | + │ Pure data, no coordinates |
| 132 | + │ |
| 133 | + ▼ |
| 134 | +┌─────────────────────────────────────┐ |
| 135 | +│ DETERMINISTIC RENDERER │ |
| 136 | +│ - Right-alignment ALWAYS │ |
| 137 | +│ - Proportional bars by math │ |
| 138 | +│ - Real table objects │ |
| 139 | +│ - Pixel-perfect by construction │ |
| 140 | +└────────────────┬────────────────────┘ |
| 141 | + │ |
| 142 | + ▼ |
| 143 | + output.pptx |
| 144 | +``` |
| 145 | + |
| 146 | +This is the same architecture used by Beautiful.ai, Gamma, Pitch, UpSlide, and Macabacus. The LLM never touches pixels. |
| 147 | + |
| 148 | +## Companion repo |
| 149 | + |
| 150 | +The standalone Python library (without the plugin packaging) is at: |
| 151 | +**https://github.com/gorajing/ib-deck-engine** |
| 152 | + |
| 153 | +It includes a complete worked example for Addus HomeCare Corp (ADUS) — DCF model, LBO model, master JSON, and rendered 14-slide deck. |
| 154 | + |
| 155 | +## Disclaimer |
| 156 | + |
| 157 | +This is a learning case study and template library. Models are simplified. Numbers in the example case study are illustrative. Always verify financial data against primary sources before relying on it for investment decisions. |
| 158 | + |
| 159 | +## License |
| 160 | + |
| 161 | +MIT — see [LICENSE](LICENSE). |
0 commit comments