plugins/vertical-plugins/investment-banking/skills/strip-profile/SKILL.md
Creates professional investment banking strip profiles (company profiles) for pitch books, deal materials, and client presentations. Generates 1-4 information-dense slides with quadrant layouts, charts, and tables.
npx skillsauth add anthropics/financial-services-plugins fsi-strip-profileInstall 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.
Data Sources:
Required Metrics:
Normalization:
Before Building:
CRITICAL: You MUST create ONE slide at a time and get user approval before proceeding to the next slide.
For EACH slide:
soffice --headless --convert-to pdf presentation.pptx
pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide
YOU MUST CHECK FOR THESE SPECIFIC ISSUES ON EVERY PAGE:
The #1 goal is MAXIMUM information density. A busy executive should understand the entire company story in 30 seconds. Fill every quadrant to capacity.
Per quadrant targets:
Information packing techniques:
If a quadrant looks sparse, add more:
Line spacing - use single textbox per section:
def add_section(slide, x, y, w, header_text, bullets, header_size=10, bullet_size=8):
"""Header + bullets in single textbox with natural spacing"""
tb = slide.shapes.add_textbox(x, y, w, Inches(len(bullets) * 0.18 + 0.3))
tf = tb.text_frame
tf.word_wrap = True
# Header paragraph
p = tf.paragraphs[0]
p.text = header_text
p.font.bold = True
p.font.size = Pt(header_size)
p.font.color.rgb = RGBColor(0, 51, 102)
p.space_after = Pt(6) # Small gap after header
# Bullet paragraphs
for bullet in bullets:
p = tf.add_paragraph()
p.text = bullet
p.font.size = Pt(bullet_size)
p.space_after = Pt(3)
return tb
Key spacing principles:
space_after = Pt(6) after header, Pt(3) between bullets3-4 dense slides - use quadrants, columns, tables, charts
Bullets for ALL body text - NEVER paragraphs. Use ONE textbox per section with all bullets inside - do NOT create separate textboxes for each bullet point. Use PptxGenJS bullet formatting:
// CORRECT: Single textbox with bullet list - each array item becomes a bullet
// Position in top-left quadrant (Company Overview) - after header with accent bar
slide.addText(
[
{ text: 'Headquarters: Austin, Texas; Founded 2003', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: 'Employees: 140,000+ globally across 6 continents', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: 'CEO: Elon Musk; CFO: Vaibhav Taneja', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: 'Market Cap: $850B (#6 globally by market cap)', options: { bullet: { indent: 10 }, breakLine: true } },
{ text: 'Segments: Automotive (85%), Energy (10%), Services (5%)', options: { bullet: { indent: 10 } } }
],
{ x: 0.45, y: 0.95, w: 4.5, h: 2.6, fontSize: 11, fontFace: 'Arial', valign: 'top', paraSpaceAfter: 6 }
);
// WRONG: Multiple separate textboxes for each bullet - causes alignment issues
// slide.addText('Headquarters: Austin', { x: 0.5, y: 1.0, bullet: true });
Bullet formatting tips:
bullet: { indent: 10 } - controls bullet indentation (smaller = tighter)paraSpaceAfter: 6 - space after each paragraph in pointsTitle case for titles (not ALL CAPS), left-aligned
Consistent fonts everywhere including tables
Company's brand colors - YOU MUST research actual brand colors via web search before creating slides. Do not guess or assume colors.
Follow brand guidelines if provided
See examples/Nike_Strip_Profile_Example.pptx for layout inspiration. Adapt colors to each company's brand.
Must pass "30-second comprehension test" for a busy executive.
Use 4:3 aspect ratio (standard IB pitch book format):
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_4x3'; // 10" wide × 7.5" tall - MUST USE THIS
PptxGenJS uses inches. 4:3 slide = 10" wide × 7.5" tall.
┌─────────────────────────────────────────────────────────────────┐
│ y=0.2 Title: Company Name (Ticker) │
├────────────────────────────┬────────────────────────────────────┤
│ y=0.6 Company Overview │ y=0.6 Business & Positioning │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.0 │ h=3.0 │
├────────────────────────────┼────────────────────────────────────┤
│ y=3.7 Key Financials │ y=3.7 Stock/Recent Developments │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.5 │ h=3.5 │
└────────────────────────────┴────────────────────────────────────┘
y=7.5
Company Name (Ticker) - Example: Tesla, Inc. (TSLA)
slide.addText('Tesla, Inc. (TSLA)', { x: 0.3, y: 0.2, w: 9.4, h: 0.35, fontSize: 18, bold: true });
| Quadrant | Position | Content | |----------|----------|---------| | 1 | x=0.3, y=0.6, w=4.7, h=3.0 | Company Overview: HQ, founded, key stats, business summary (4-5 bullets) | | 2 | x=5.0, y=0.6, w=4.7, h=3.0 | Business & Positioning: revenue drivers, products/services, competitive position, growth drivers (4-5 bullets) | | 3 | x=0.3, y=3.7, w=4.7, h=3.5 | Key Financials: Revenue, EBITDA, margins, EPS, FCF + Valuation (Mkt Cap, EV, multiples) — table OR chart, not both | | 4 | x=5.0, y=3.7, w=4.7, h=3.5 | For public companies: 1Y stock price chart + top shareholders. For private: Recent developments or Ownership/M&A history |
| Element | Size | Notes | |---------|------|-------| | Slide title | 24pt | Bold, company brand color | | Quadrant headers | 14pt | Bold, with accent bar | | Body/bullet text | 11pt | Regular weight | | Table text | 10pt | Use 9pt for dense tables | | Chart labels | 9pt | Keep labels short | | Source/footer | 8pt | Bottom of slide |
CRITICAL: If text overflows, REDUCE font size by 1pt and re-render.
Each quadrant header MUST have a colored accent bar to the left:
// Add accent bar for quadrant header
slide.addShape(pptx.shapes.RECTANGLE, {
x: 0.3, y: 0.6, w: 0.08, h: 0.25,
fill: { color: 'E31937' } // Use company brand color
});
slide.addText('Company Overview', {
x: 0.45, y: 0.6, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
});
Visual elements to include:
For multi-slide profiles: Include 2-3 actual PptxGenJS charts. Never use placeholder divs or static images.
For single-slide profiles: Use tables for financials (more space-efficient). Only add a chart if it replaces the table, not in addition to it.
| Data Type | Chart Type | |-----------|------------| | Revenue trends | Line or column (multi-year) | | Geographic breakdown | Horizontal bar | | Product mix | Pie with percentages | | Financial comparison | Column | | Stock price (1Y daily) | Line |
Horizontal Bar (fits in bottom-right quadrant for 4:3 slide):
slide.addChart(pptx.charts.BAR, [{
name: 'FY2024 Revenue by Region',
labels: ['North America', 'EMEA', 'China', 'APLA'],
values: [21.4, 13.6, 7.6, 6.7]
}], {
x: 5.0, y: 4.1, w: 4.5, h: 3.0, // Fits in bottom-right quadrant (4:3)
barDir: 'bar', chartColors: ['FF6B35'], showValue: true,
dataLabelFontSize: 10, catAxisLabelFontSize: 10, valAxisLabelFontSize: 10,
dataLabelFormatCode: '$#,##0.0B',
title: 'Revenue by Geography', titleFontSize: 12, titleBold: true
});
Pie Chart (fits in bottom-right quadrant for 4:3 slide):
slide.addChart(pptx.charts.PIE, [{
name: 'Product Mix',
labels: ['Footwear', 'Apparel', 'Equipment'],
values: [68, 29, 3]
}], {
x: 5.0, y: 4.1, w: 4.5, h: 3.0, // Fits in bottom-right quadrant (4:3)
showPercent: true, showLegend: true, legendPos: 'r',
dataLabelFontSize: 10, legendFontSize: 10,
chartColors: ['FF6B35', '2C2C2C', '4A4A4A'],
title: 'Revenue Mix FY24', titleFontSize: 12, titleBold: true
});
Line Chart (full width for subsequent slides):
slide.addChart(pptx.charts.LINE, [{
name: 'Revenue ($B)',
labels: ['FY21', 'FY22', 'FY23', 'FY24', 'FY25E'],
values: [44.5, 46.7, 48.5, 51.4, 54.2]
}], {
x: 0.3, y: 1.2, w: 9.4, h: 5.5, // Full width for 4:3 slide
chartColors: ['FF6B35'], showValue: true, lineSmooth: true,
dataLabelFontSize: 11, catAxisLabelFontSize: 11, valAxisLabelFontSize: 11,
title: 'Revenue Trend & Forecast', titleFontSize: 14, titleBold: true
});
Always use native PptxGenJS tables or charts - NEVER plain text prose or HTML tables.
Use slide.addTable() for financial data (fits in bottom-left quadrant for 4:3 slide):
// Add header with accent bar first
slide.addShape(pptx.shapes.RECTANGLE, {
x: 0.3, y: 3.7, w: 0.08, h: 0.25, fill: { color: 'E31937' }
});
slide.addText('Key Financials & Valuation', {
x: 0.45, y: 3.7, w: 4.5, h: 0.3, fontSize: 14, bold: true, fontFace: 'Arial'
});
// Financial data table
slide.addTable([
[{ text: 'Metric', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
{ text: 'FY24', options: { bold: true, fill: '003366', color: 'FFFFFF' } },
{ text: 'FY25E', options: { bold: true, fill: '003366', color: 'FFFFFF' } }],
['Revenue', '$51.4B', '$54.2B'],
['YoY Growth', '+6.0%', '+5.5%'],
['EBITDA', '$8.9B', '$9.5B'],
['EBITDA Margin', '17.3%', '17.5%'],
['EPS', '$3.42', '$3.75'],
['Market Cap', '$185B', '—'],
['EV/EBITDA', '12.5x', '11.7x']
], {
x: 0.45, y: 4.1, w: 4.3, h: 3.0, // Below header in bottom-left quadrant
fontFace: 'Arial', fontSize: 10,
border: { pt: 0.5, color: 'CCCCCC' },
valign: 'middle',
colW: [1.8, 1.25, 1.25] // Column widths
});
❌ Incorrect: Plain text like Note: FY2024 revenue growth +1.0%, Net Income $5.1B...
❌ Incorrect: HTML tables that don't convert properly to PowerPoint
For projections, use Bear/Base/Bull case scenarios in structured tables.
Note: Reference the PPTX skill for PowerPoint file creation.
tools
Identify tax-loss harvesting opportunities across taxable accounts. Finds positions with unrealized losses, suggests replacement securities, and tracks wash sale windows. Triggers on "tax-loss harvesting", "TLH", "harvest losses", "tax losses", "unrealized losses", or "year-end tax planning".
testing
Analyze portfolio allocation drift and generate rebalancing trade recommendations across accounts. Considers tax implications, transaction costs, and wash sale rules. Triggers on "rebalance", "portfolio drift", "allocation check", "rebalancing trades", or "my portfolio is out of balance".
tools
Create professional investment proposals for prospective clients. Covers the firm's approach, proposed allocation, expected outcomes, and fee structure. Use when pitching new clients or presenting a new investment strategy. Triggers on "investment proposal", "prospect presentation", "pitch new client", "proposal for [client]", or "new client presentation".
tools
Build or update a comprehensive financial plan covering retirement projections, education funding, estate planning, and cash flow analysis. Use for new client onboarding, annual plan reviews, or scenario modeling. Triggers on "financial plan", "retirement plan", "can I retire", "education funding", "estate plan", "cash flow analysis", or "plan update".