fsi-strip-profile

|

INSTALLATION
npx skills add https://github.com/anthropics/financial-services-plugins --skill fsi-strip-profile
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

Workflow

1. Clarify Requirements

  • Ask the user: Single-slide or multi-slide (3-4 slides)?
  • Ask the user: Any specific focus areas or topics to emphasize?
  • Only after user confirms, proceed to research

2. Research & Planning

Data Sources:

  • Primary: Company filings (BamSEC, SEC EDGAR - "Item 1. Business", MD&A), investor presentations, corporate website
  • Market data: Bloomberg, FactSet, CapIQ (price, shares, market cap, net debt, EV, ownership)
  • Estimates: FactSet/CapIQ consensus for NTM revenue, EBITDA, EPS
  • News: Press releases from last 90 days, M&A activity, guidance changes

Required Metrics:

  • Financials: Revenue, EBITDA, margins (%), EPS, FCF for ±3 years
  • Valuation: Market Cap, EV, EV/Revenue, EV/EBITDA, P/E multiples
  • Growth: YoY growth rates (%)
  • Ownership: Top 5 shareholders with % ownership
  • Segments: Product mix and/or geographic mix (% breakdown)

Normalization:

  • Convert all amounts to consistent currency
  • Scale consistently ($mm or $bn throughout, not mixed)

Before Building:

  • Print outline to chat with 4-5 bullet points per item (actual numbers, no placeholders)
  • Print style choices: fonts, colors (hex codes), chart types for each data set
  • Get user alignment: "Does this outline and visual strategy align with your vision?"

3. Slide-by-Slide Creation

CRITICAL: You MUST create ONE slide at a time and get user approval before proceeding to the next slide.

For EACH slide:

  • Create ONLY this one slide with PptxGenJS
  • MANDATORY: Convert to image for review - You MUST convert slides to images so you can visually verify them:
soffice --headless --convert-to pdf presentation.pptx

pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide
  • MANDATORY VISUAL REVIEW: You MUST carefully examine the rendered slide image before proceeding:
  • Text overlap check: Scan every text element - do any labels, bullets, or titles collide with each other?
  • Text cutoff check: Is any text truncated at boundaries? Are all words fully visible?
  • Chart boundary check: Do charts stay within their containers? Are ALL axis labels fully visible?
  • Quadrant integrity: Does content in one quadrant bleed into adjacent quadrants?
  • If ANY overlap or cutoff is detected: Fix immediately using these strategies in order:
  • First: Reduce font size (go down 1-2pt)
  • Second: Shorten text (abbreviate, remove less critical info)
  • Third: Adjust element positions or container sizes
  • Re-render and verify again - do not proceed until all text fits cleanly
  • Show slide image to user with download link
  • STOP and wait for explicit user approval before creating the next slide. Do NOT proceed until user confirms.

YOU MUST CHECK FOR THESE SPECIFIC ISSUES ON EVERY PAGE:

  • Table rows colliding with text below them
  • Chart x-axis labels cut off at bottom
  • Long bullet points wrapping into adjacent content
  • Quadrant content bleeding into adjacent quadrants
  • Title text overlapping with content below
  • Legend text overlapping with chart elements
  • Footer/source text colliding with main content

Slide Format Requirements

Information Density is Critical

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:

  • Company Overview: 6-8 bullets minimum (HQ, founded, employees, CEO/CFO, market cap, ticker, industry, key stat)
  • Business & Positioning: 6-8 bullets (revenue drivers, products, market share %, competitive moat, customer count, geographic mix)
  • Key Financials: Table with 8-10 rows OR chart + 4-5 key metrics (Revenue, EBITDA, margins, EPS, FCF, growth rates, valuation multiples)
  • Fourth quadrant: 5-7 bullets (ownership %, recent M&A, developments, catalysts)

Information packing techniques:

  • Combine related facts: "HQ: Austin, TX; Founded: 2003; 140K employees"
  • Always include numbers: "$50B revenue" not "large revenue"
  • Add context: "EBITDA margin: 25% (vs. 18% industry avg)"
  • Include YoY changes: "Revenue: $125M (+28% YoY)"
  • Use percentages: "Enterprise: 62% of revenue"

If a quadrant looks sparse, add more:

  • Segment breakdowns with %
  • Geographic revenue splits
  • Customer concentration (top 10 = X%)
  • Recent contract wins with $ values
  • Guidance vs. consensus
  • Insider ownership %

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:

  • Put header + bullets in SAME textbox (no separate header textbox)
  • Use space_after = Pt(6) after header, Pt(3) between bullets
  • Don't hardcode gaps - let paragraph spacing handle it naturally
  • If content overflows, reduce font by 1pt rather than removing content

-

3-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 points
  • Pack multiple related facts into each bullet (e.g., "HQ: Austin; Founded: 2003")
  • Include specific numbers and percentages for information density

-

Title 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

Visual Reference

See examples/Nike_Strip_Profile_Example.pptx for layout inspiration. Adapt colors to each company's brand.

First Page Layout

Must pass "30-second comprehension test" for a busy executive.

Slide Setup (CRITICAL)

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

Slide Coordinate System

PptxGenJS uses inches. 4:3 slide = 10" wide × 7.5" tall.

  • x: horizontal position from left edge (0 = left, 10 = right)
  • y: vertical position from top edge (0 = top, 7.5 = bottom)
  • Content must stay within bounds - leave 0.3" margin on all sides

First Page Positioning (in inches)

┌─────────────────────────────────────────────────────────────────┐

│ 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

Title Section (y=0.2)

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 });

4-Quadrant Layout (y=0.6 to y=7.2)

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

Font Sizes - USE THESE EXACT VALUES

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.

Visual Accents (REQUIRED)

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:

  • Accent bars next to all section headers (brand color)
  • Thin horizontal divider line between top and bottom quadrants
  • Company logo in top-right corner if available
  • Subtle gridlines in tables (light gray #CCCCCC)

First Page Formatting

  • Font: Arial (or as specified by user/brand guidelines)
  • Quadrant titles: Title Case (not ALL CAPS), e.g., "Company Overview" not "COMPANY OVERVIEW"
  • Bullets: Bold key terms at start, e.g., "Market Position: Leading global manufacturer..."
  • White background only — no boxes, fills, or shading
  • Section headers: bold text, follow brand guidelines for styling
  • All quadrants equally sized and aligned

Subsequent Pages: Free-Form Layouts

  • Two-column (40/60 or 50/50), full-slide charts, or sidebar layouts
  • Each page elaborates on first page content
  • Maintain consistent typography and color scheme
  • Suggested flow: Products/Market → Financial Analysis → Leadership

Charts (Multi-Slide Profiles)

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

Chart Code Examples

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

});

Financial Data Formatting

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.

Quality Checklist

First Page

  • Title section with company name, ticker, industry
  • Exactly 4 equal quadrants below title
  • All bullets, no paragraphs, 1 line max each
  • Financials in table or chart (not both)

All Slides

  • No text overflow or cutoff
  • Consistent fonts and colors throughout
  • Charts render correctly
  • No placeholder text - all actual data
  • Consistent scaling ($mm or $bn, not mixed)
  • Sources cited
  • Investment banking quality (GS/MS/JPM standard)

Note: Reference the PPTX skill for PowerPoint file creation.

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card