Краткий профиль компании для презентации
Делает 1–4 насыщенных слайда с профилем компании: обзор, позиции, финансы и акционеры, по одному слайду с вашим одобрением.
- Что делает
- Делает 1–4 насыщенных слайда с профилем компании: обзор, позиции, финансы и акционеры, по одному слайду с вашим одобрением.
- Когда брать
- Для презентационных книг, материалов по сделкам и презентаций клиентам, когда нужен информационно плотный профиль компании.
- Когда не брать
- Если нужен подробный анализ компании или длинная презентация.
- Пример запроса
- Сделай одностраничный профиль компании Nike для презентации клиенту.
- Нужно подключить
- PowerPoint (PptxGenJS), доступ к данным о компании
- Работает лучше с
- Bloomberg, FactSet или CapIQ
Входит в плагин investment-banking. В Cowork и Claude Code можно поставить плагин целиком.
Как включить
- Скачайте архив и распакуйте его.
- Положите папку
fsi-strip-profileв~/.claude/skills/. - Откройте Claude Code и опишите задачу своими словами: Claude подхватит скилл по описанию.
Текст
---
name: fsi-strip-profile
description: |
Создаёт профессиональные краткие профили компаний инвестиционного банка (strip profiles) для презентационных книг (pitch books), материалов по сделкам и презентаций для клиентов. Готовит 1–4 насыщенных информацией слайда с макетом из квадрантов, диаграммами и таблицами.
---
Рабочий процесс
1. Уточни требования
- Спроси пользователя: один слайд или несколько (3–4 слайда)?
- Спроси пользователя: есть ли особые направления или темы, которые нужно выделить?
- Только после подтверждения пользователя переходи к исследованию
2. Исследование и планирование
Источники данных:
- Основные: отчётность компании (BamSEC, SEC EDGAR — «Item 1. Business», MD&A), презентации для инвесторов, корпоративный сайт
- Рыночные данные: Bloomberg, FactSet, CapIQ (цена, акции, рыночная капитализация, чистый долг, EV, структура собственников)
- Оценки: консенсус FactSet/CapIQ по выручке, EBITDA и EPS на следующие 12 месяцев (NTM)
- Новости: пресс-релизы за последние 90 дней, активность в M&A, изменения прогнозов компании (guidance)
Обязательные показатели:
- Финансы: выручка, EBITDA, маржа (%), EPS, свободный денежный поток (FCF) за ±3 года
- Оценка: рыночная капитализация, EV, EV/выручка, EV/EBITDA, мультипликаторы P/E
- Рост: темпы роста год к году (%)
- Собственники: пять крупнейших акционеров с долей владения в %
- Сегменты: структура по продуктам и/или по географии (разбивка в %)
Нормализация:
- Приведи все суммы к одной валюте
- Единый масштаб ($ млн или $ млрд везде, без смешения)
Перед построением:
- Выведи в чат план по 4–5 пунктов на каждый элемент (реальные цифры, без заглушек)
- Выведи выбор оформления: шрифты, цвета (hex-коды), типы диаграмм для каждого набора данных
- Согласуй с пользователем: «Соответствуют ли этот план и визуальная стратегия вашему замыслу?»
3. Создание по слайду
КРИТИЧЕСКИ ВАЖНО: ты ДОЛЖЕН создавать ОДИН слайд за раз и получать одобрение пользователя перед переходом к следующему.
Для КАЖДОГО слайда:
- Создай ТОЛЬКО этот один слайд с помощью PptxGenJS
- ОБЯЗАТЕЛЬНО: преобразуй в изображение для проверки: ты ДОЛЖЕН преобразовать слайды в изображения, чтобы визуально их проверить: ``
bash soffice --headless --convert-to pdf presentation.pptx pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide`` - ОБЯЗАТЕЛЬНАЯ ВИЗУАЛЬНАЯ ПРОВЕРКА: ты ДОЛЖЕН внимательно изучить полученное изображение слайда, прежде чем идти дальше:
- Проверка наложения текста: просмотри каждый текстовый элемент: не сталкиваются ли подписи, маркеры или заголовки друг с другом?
- Проверка обрезки текста: не обрезан ли текст на границах? Все ли слова видны полностью?
- Проверка границ диаграмм: остаются ли диаграммы в своих контейнерах? ВСЕ ли подписи осей видны полностью?
- Целостность квадрантов: не вылезает ли содержимое одного квадранта в соседние?
- Если обнаружено ЛЮБОЕ наложение или обрезка: исправь сразу этими способами по порядку:
- Сначала: уменьши размер шрифта (на 1–2 пт)
- Затем: сократи текст (сократи слова, убери менее важное)
- Потом: поправь положение элементов или размеры контейнеров
- Отрисуй заново и проверь ещё раз: не продолжай, пока весь текст не поместится аккуратно
- Покажи изображение слайда пользователю со ссылкой для скачивания
- ОСТАНОВИСЬ и дождись явного одобрения пользователя, прежде чем создавать следующий слайд. НЕ продолжай, пока пользователь не подтвердит.
НА КАЖДОЙ СТРАНИЦЕ ТЫ ДОЛЖЕН ПРОВЕРЯТЬ ИМЕННО ЭТИ ПРОБЛЕМЫ:
- Строки таблицы сталкиваются с текстом под ними
- Подписи оси X диаграммы обрезаны снизу
- Длинные маркеры переносятся на соседнее содержимое
- Содержимое квадранта вылезает в соседние квадранты
- Заголовок накладывается на содержимое под ним
- Текст легенды накладывается на элементы диаграммы
- Нижний колонтитул и текст источника сталкиваются с основным содержимым
Требования к формату слайда
Информационная плотность критична
Цель №1 — МАКСИМАЛЬНАЯ информационная плотность. Занятый руководитель должен понять всю историю компании за 30 секунд. Заполняй каждый квадрант до предела.
Целевые показатели по квадрантам:
- Обзор компании: минимум 6–8 пунктов (штаб-квартира, год основания, сотрудники, CEO/CFO, рыночная капитализация, тикер, отрасль, ключевой показатель)
- Бизнес и позиции: 6–8 пунктов (драйверы выручки, продукты, доля рынка %, конкурентный ров (moat), число клиентов, структура по географии)
- Ключевые финансы: таблица на 8–10 строк ИЛИ диаграмма + 4–5 ключевых показателей (выручка, EBITDA, маржа, EPS, FCF, темпы роста, мультипликаторы оценки)
- Четвёртый квадрант: 5–7 пунктов (доли собственников %, недавние сделки M&A, события, катализаторы)
Приёмы уплотнения информации:
- Объединяй связанные факты: «Штаб-квартира: Остин, Техас; основана в 2003 г.; 140 тыс. сотрудников»
- Всегда добавляй числа: «выручка $50 млрд», а не «большая выручка»
- Добавляй контекст: «Маржа EBITDA: 25% (против 18% в среднем по отрасли)»
- Включай изменения год к году: «Выручка: $125 млн (+28% г/г)»
- Используй проценты: «Корпоративный сегмент: 62% выручки»
Если квадрант выглядит пустым, добавь:
- Разбивку по сегментам в %
- Разбивку выручки по географии
- Концентрацию клиентов (топ-10 = X%)
- Недавние выигранные контракты с суммами в $
- Прогноз компании в сравнении с консенсусом
- Долю инсайдеров в %
Межстрочный интервал: один текстовый блок на раздел:
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
Ключевые принципы интервалов:
- Помещай заголовок и маркеры в ОДИН текстовый блок (без отдельного блока под заголовок)
- Используй
space_after = Pt(6)после заголовка иPt(3)между маркерами - Не зашивай отступы: пусть интервалы между абзацами работают естественно
- Если содержимое не помещается, уменьши шрифт на 1 пт, а не убирай содержимое
- 3–4 насыщенных слайда: используй квадранты, колонки, таблицы, диаграммы
- Маркеры для ВСЕГО основного текста: НИКОГДА не абзацы. Используй ОДИН текстовый блок на раздел со всеми маркерами внутри: НЕ создавай отдельные текстовые блоки на каждый маркер. Используй форматирование маркеров PptxGenJS: ```javascript // 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: { indent: 10 }— управляет отступом маркера (меньше значение — теснее)paraSpaceAfter: 6— интервал после каждого абзаца в пунктах- Упаковывай в каждый маркер несколько связанных фактов (например, «Штаб-квартира: Остин; основана в 2003 г.»)
- Добавляй конкретные числа и проценты для информационной плотности
- Заголовки в обычном регистре (не ВЕРХНИМ РЕГИСТРОМ), по левому краю
- Единые шрифты везде, включая таблицы
- Фирменные цвета компании: ты ДОЛЖЕН выяснить настоящие фирменные цвета через веб-поиск, прежде чем создавать слайды. Не угадывай и не предполагай цвета.
- Следуй фирменным гайдлайнам, если они предоставлены
Визуальный образец
Смотри examples/Nike_Strip_Profile_Example.pptx для вдохновения по макету. Адаптируй цвета под каждую компанию.
Макет первой страницы
Должен пройти «тест на понимание за 30 секунд» для занятого руководителя.
Настройка слайда (КРИТИЧЕСКИ ВАЖНО)
Используй соотношение сторон 4:3 (стандартный формат презентационных книг инвестбанков):
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_4x3'; // 10" wide × 7.5" tall - MUST USE THIS
Система координат слайда
PptxGenJS использует дюймы. Слайд 4:3 = 10" в ширину × 7.5" в высоту.
- x: горизонтальное положение от левого края (0 = слева, 10 = справа)
- y: вертикальное положение от верхнего края (0 = сверху, 7.5 = снизу)
- Содержимое должно оставаться в границах: оставляй поле 0.3" со всех сторон
Положение элементов первой страницы (в дюймах)
┌─────────────────────────────────────────────────────────────────┐
│ y=0.2 Заголовок: название компании (тикер) │
├────────────────────────────┬────────────────────────────────────┤
│ y=0.6 Обзор компании │ y=0.6 Бизнес и позиции │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.0 │ h=3.0 │
├────────────────────────────┼────────────────────────────────────┤
│ y=3.7 Ключевые финансы │ y=3.7 Акции / последние события │
│ x=0.3, w=4.7 │ x=5.0, w=4.7 │
│ h=3.5 │ h=3.5 │
└────────────────────────────┴────────────────────────────────────┘
y=7.5
Раздел заголовка (y=0.2)
Название компании (тикер): пример: 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 квадрантов (от y=0.6 до y=7.2)
| Квадрант | Положение | Содержимое |
|---|---|---|
| 1 | x=0.3, y=0.6, w=4.7, h=3.0 | Обзор компании: штаб-квартира, год основания, ключевые показатели, краткое описание бизнеса (4–5 пунктов) |
| 2 | x=5.0, y=0.6, w=4.7, h=3.0 | Бизнес и позиции: драйверы выручки, продукты и услуги, конкурентная позиция, драйверы роста (4–5 пунктов) |
| 3 | x=0.3, y=3.7, w=4.7, h=3.5 | Ключевые финансы: выручка, EBITDA, маржа, EPS, FCF + оценка (рыночная капитализация, EV, мультипликаторы) — таблица ИЛИ диаграмма, не обе |
| 4 | x=5.0, y=3.7, w=4.7, h=3.5 | Для публичных компаний: диаграмма цены акции за 1 год + крупнейшие акционеры. Для частных: недавние события или история владения и сделок M&A |
Размеры шрифтов: ИСПОЛЬЗУЙ ИМЕННО ЭТИ ЗНАЧЕНИЯ
| Элемент | Размер | Примечания |
|---|---|---|
| Заголовок слайда | 24 пт | Жирный, фирменный цвет компании |
| Заголовки квадрантов | 14 пт | Жирный, с акцентной полосой |
| Основной текст и маркеры | 11 пт | Обычное начертание |
| Текст таблиц | 10 пт | Для плотных таблиц 9 пт |
| Подписи диаграмм | 9 пт | Подписи короткие |
| Источник / нижний колонтитул | 8 пт | Внизу слайда |
КРИТИЧЕСКИ ВАЖНО: если текст не помещается, УМЕНЬШИ шрифт на 1 пт и отрисуй заново.
Визуальные акценты (ОБЯЗАТЕЛЬНО)
У каждого заголовка квадранта ДОЛЖНА быть цветная акцентная полоса слева:
// 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'
});
Визуальные элементы, которые нужно включить:
- Акцентные полосы рядом со всеми заголовками разделов (фирменный цвет)
- Тонкая горизонтальная разделительная линия между верхними и нижними квадрантами
- Логотип компании в правом верхнем углу, если он есть
- Тонкая сетка в таблицах (светло-серая #CCCCCC)
Оформление первой страницы
- Шрифт: Arial (или как указал пользователь либо фирменные гайдлайны)
- Заголовки квадрантов: обычный регистр (не ВЕРХНИЙ), например «Обзор компании», а не «ОБЗОР КОМПАНИИ»
- Маркеры: жирным выдели ключевые термины в начале, например «Позиция на рынке: ведущий мировой производитель...»
- Только белый фон: без рамок, заливок и затенения
- Заголовки разделов: жирный текст, оформление по фирменным гайдлайнам
- Все квадранты одного размера и выровнены
Следующие страницы: свободные макеты
- Две колонки (40/60 или 50/50), диаграммы на весь слайд или макеты с боковой панелью
- Каждая страница развивает содержимое первой страницы
- Сохраняй единую типографику и цветовую схему
- Рекомендуемая последовательность: продукты и рынок → финансовый анализ → руководство
Диаграммы (многослайдовые профили)
Для многослайдовых профилей: включи 2–3 настоящих диаграммы PptxGenJS. Никогда не используй блоки-заглушки (div) и статичные изображения.
Для однослайдовых профилей: используй таблицы для финансов (они экономнее по месту). Добавляй диаграмму, только если она заменяет таблицу, а не в дополнение к ней.
| Тип данных | Тип диаграммы |
|---|---|
| Динамика выручки | Линейная или столбчатая (за несколько лет) |
| Разбивка по географии | Горизонтальные столбцы |
| Структура продуктов | Круговая с процентами |
| Сравнение финансовых показателей | Столбчатая |
| Цена акции (1 год, по дням) | Линейная |
Примеры кода диаграмм
Горизонтальные столбцы (помещаются в правый нижний квадрант слайда 4:3):
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
});
Круговая диаграмма (помещается в правый нижний квадрант слайда 4:3):
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
});
Линейная диаграмма (на всю ширину для следующих слайдов):
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
});
Оформление финансовых данных
Всегда используй встроенные таблицы или диаграммы PptxGenJS: НИКОГДА не обычный текст и не HTML-таблицы.
Используй slide.addTable() для финансовых данных (помещается в левый нижний квадрант слайда 4:3):
// 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
});
❌ Неверно: обычный текст вроде Note: FY2024 revenue growth +1.0%, Net Income $5.1B... ❌ Неверно: HTML-таблицы, которые некорректно преобразуются в PowerPoint
Для прогнозов используй сценарии «медвежий / базовый / бычий» (Bear/Base/Bull) в структурированных таблицах.
Контрольный список качества
Первая страница
- [ ] Раздел заголовка с названием компании, тикером, отраслью
- [ ] Ровно 4 равных квадранта под заголовком
- [ ] Только маркеры, без абзацев, не больше 1 строки на каждый
- [ ] Финансы в таблице или диаграмме (не в обеих)
Все слайды
- [ ] Нет переполнения и обрезки текста
- [ ] Единые шрифты и цвета везде
- [ ] Диаграммы отрисованы правильно
- [ ] Нет текста-заглушек: везде реальные данные
- [ ] Единый масштаб ($ млн или $ млрд, без смешения)
- [ ] Источники указаны
- [ ] Качество инвестбанка (стандарт GS/MS/JPM)
Примечание: для создания файла PowerPoint обратись к скиллу PPTX.
Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/financial-services/tree/main/plugins/vertical-plugins/investment-banking/skills/strip-profile, лицензия Apache-2.0. Изменения: перевод на русский язык.
Оригинал на английском
---
name: fsi-strip-profile
description: |
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.
---
## 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:**
1. Create ONLY this one slide with PptxGenJS
2. **MANDATORY: Convert to image for review** - You MUST convert slides to images so you can visually verify them:
```bash
soffice --headless --convert-to pdf presentation.pptx
pdftoppm -jpeg -r 150 -f 1 -l 1 presentation.pdf slide
```
3. **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?
4. **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
5. Show slide image to user with download link
6. **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:**
```python
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:
```javascript
// 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):
```javascript
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)`
```javascript
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:
```javascript
// 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):**
```javascript
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):**
```javascript
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):**
```javascript
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):
```javascript
// 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.
Источник: anthropics/financial-services / investment-banking / fsi-strip-profile ↗. Ссылка проверена 2026-10-10.