Pitch Deck Design Specification

Status: Definitive reference (supersedes all previous pitch deck prompts) Last updated: 2026-03-20 Script: solanasis-scripts/generate-pitch-deck.py (~1,540 lines, python-pptx) Output: Solanasis_Pitch_Deck.pptx → PDF at solanasis-site/public/downloads/solanasis-pitch-deck.pdf Short URL: go.solanasis.com/pitch-deck

Previous Prompts (Historical Only)

These documents are superseded by this spec. Keep them for lessons-learned context:

  • pitch-deck-rebuild-prompt.md (v1: original 11-slide rebuild)
  • pitch-deck-styling-overhaul-prompt.md (v2: spacing + footer fixes)
  • pitch-deck-complete-overhaul-prompt.md (v3: styling + content polish)

1. Design Philosophy

This deck is handed to managing partners and compliance officers at firms managing generational wealth. It must look like it came from a firm that belongs in the same conversation as Kroll, Visory, and Agio.

Guiding principles:

  • Professional services aesthetic, not tech startup energy
  • Every word earns its place; no filler, no jargon-for-jargon’s-sake
  • Confident but not arrogant; authoritative but not salesy
  • Specific over vague (“14 findings mapped to SEC examination priorities” > “comprehensive analysis”)
  • Short, punchy sentences

2. Brand Palette

Colors

NameHexUsage
Navy#020532Primary dark, slide titles, card headings
Deep Navy#091652Gradient stop, CTA card fill, subtle accents
Copper#C47A3DPrimary accent, accent rules, pills, key text, CTA links
Copper Hover#D4945EFounder quote text
Parchment#FEF9F1Light slide backgrounds
Warm Stone#F0EBE4Muted card fills (outer columns slide 4, “Before” card slide 7)
Charcoal#111827Body text on light slides
White#FFFFFFText on dark slides, card fills
Slate Blue#374273Disclaimers, “Before” card accents

Fonts

FontRoleSource
Playfair DisplaySlide titles (display headings)Google Fonts
MontserratBody text, card headings, all UI textGoogle Fonts
Libre BaskervilleAccent text (quotes, subtitles, closing italics)Google Fonts

Slide Dimensions

  • 16:9 widescreen: 13.333” x 7.5”
  • Margins: 0.8” left/right, 0.6” top

3. Spacing Constants

These values are defined as Python constants in the script and must be consistent across ALL slides.

ConstantValuePurpose
TITLE_MARGIN_TOPInches(0.6)Top of slide to top of title
TITLE_TO_SUBTITLEInches(0.15)Title bottom to subtitle top
SUBTITLE_TO_CONTENTInches(0.25)Subtitle bottom to first content
CARD_INTERNAL_PAD_TOPInches(0.15)Inside card: top edge to text
CARD_INTERNAL_PAD_LRInches(0.2)Inside card: left/right padding
CARD_INTERNAL_PAD_BOTInches(0.12)Inside card: bottom edge to text
CARD_HEADING_SPACE_AFTERPt(8)Heading-to-body gap (single-frame)
CARD_HEADING_SPACE_AFTER_INCHESInches(0.08)Heading-to-body gap (two-frame)
CARD_BODY_LINE_SPACING1.5Card body line spacing
TITLE_LINE_SPACING1.15Slide title / card heading line spacing
BODY_LINE_SPACING1.5General body text line spacing
ACCENT_RULE_TO_TEXTInches(0.15)Accent rule to text below it
CONTENT_TO_FOOTERInches(0.3)Last content to footer

Line Spacing Rules

ElementValue
Slide titles (Playfair 36pt)1.15
Card headings (14-16pt bold Montserrat)1.15
Card body text (11-13pt)1.5
Bullet lists1.4
Footer/footnote text1.2
Italic subtitles (Libre Baskerville)1.4
CTA card text1.5

Never use 1.8. That is document-grade spacing, not presentation-grade.


4. Card System Architecture

The Problem: Heading Alignment

When cards sit side-by-side and headings wrap to different line counts, body text starts at inconsistent Y positions. A single text frame with both heading and body means body text is pushed down by longer headings.

The Solution: Two-Frame Cards

Every card uses two separate text frames overlaid on a rounded-rect background:

  1. Heading frame - Fixed height (heading_zone_height), sized to fit the tallest heading on that slide. All cards on the same slide use the same zone height.
  2. Body frame - Starts at a fixed Y offset: card_top + PAD_TOP + heading_zone_height + 0.08"

This ensures body text always starts at the same Y position regardless of heading length.

heading_zone_height Per Slide

SlideCardsTallest HeadingZone Height
2 (Problem)4 gap cards”Untested Incident Plan” (2 lines)Inches(0.55)
4 (Who We Are)3 columns”Your Compliance Consultant” (2 lines)Inches(0.65)
5 (Who We Serve)3 tall cards”RIAs and Financial Advisors” (2 lines)Inches(0.65)
7 (Composite)2 Before/AfterBoth 1 lineInches(0.4)
8 (Next Steps)3 path cardsAll 1 lineInches(0.4)
9 (Services)6 service cards”Disaster Recovery Verification” (2 lines)Inches(0.55)

Implementation

  • _create_two_frame_card() - Creates background + heading frame + body frame, returns all three
  • add_card() - Convenience wrapper for simple title+body cards (uses _create_two_frame_card internally)
  • For complex cards (badges, bullets, styled runs): call _create_two_frame_card() directly and populate the body frame manually

Corner Radius

CORNER_RADIUS = 5000 (subtle professional). Default python-pptx is 16667, which is too round.


The Problem

LibreOffice Impress ignores run.font.color.rgb on hyperlink runs and applies its own theme-based hyperlink color (default blue). This makes footer links invisible on navy backgrounds. Setting solidFill on a:rPr does not override this behavior.

The Solution (Three-Part)

  1. Theme override: After building all slides, modify the presentation theme’s a:hlink and a:folHlink color scheme entries to WHITE. This makes LibreOffice render all hyperlinked text in white.

    _set_theme_hyperlink_colors(prs, WHITE)
  2. Belt-and-suspenders solidFill: The add_hyperlink_run() helper also inserts a solidFill element on a:rPr BEFORE hlinkClick (OOXML schema ordering matters). This helps in PowerPoint even if the theme fix doesn’t apply.

  3. Shape-level click for non-white links: The CTA link (“go.solanasis.com/intro”) needs to be COPPER, not white. Solution: don’t use hlinkClick on the text run at all. Instead, style the text as copper via add_run(), and make the entire CTA card clickable via cta_card.click_action.hyperlink.address.

What Does NOT Work

  • Setting run.font.color.rgb alone (LibreOffice ignores it on hyperlinks)
  • Adding solidFill to a:rPr without the theme change (LibreOffice still uses theme blue)
  • solidFill after hlinkClick in the XML tree (violates OOXML element ordering)

6. Accent Rules

All horizontal accent lines use add_accent_rule():

LocationWidthHeightColor
Cover slide (below logo)Inches(4)Pt(3)Copper
Before closing lines (slides 2, 6, 7, 9)Inches(3)Pt(3)Copper
CTA slide (below title)Inches(3)Pt(3)Copper

All accent rules are Pt(3). Previous versions incorrectly used Pt(4) on slides 1 and 11.


7. Slide-by-Slide Content Spec

Slide 1: Cover (Navy Gradient)

  • Background: Navy → Deep Navy → Copper gradient (135 degrees)
  • Logo: top-left, solanasis-logo-horizontal-dark.png, 2.8” wide
  • Copper accent rule below logo
  • Title: “Cybersecurity and Operational Resilience for Wealth Management” (36pt Playfair, white, bold). No company name prefix; logo provides branding.
  • Body: “Your clients trust you with generational wealth. We make sure your systems deserve that trust.” (16pt Montserrat, parchment)
  • Founder quote: “After 23 years building and securing business systems, the pattern is always the same; the controls are there, they just haven’t been tested.” (15pt Libre Baskerville italic, copper hover)
  • Audience line: RIAs, estate planning firms, family offices (14pt, parchment)
  • Key line: “Examination-ready in 10 business days.” (18pt, copper, bold)
  • Footer: solanasis.com | hi@solanasis.com | Boulder, CO (12pt, ALL WHITE, clickable hyperlinks)

Slide 2: The Problem (Parchment)

  • Title: ‘“Probably Compliant” Doesn’t Survive an Examination’
  • Subtitle: controls exist but haven’t been tested
  • 4 gap cards: Backups Untested, Stale WISP, Vendor Blind Spots, Untested Incident Plan
  • Closing with “quiet drift” and “false comfort” as copper bold signature terms
  • Accent rule before closing

Slide 3: The Urgency (Parchment)

  • Title: “Can You Prove Your Security Controls Work?”
  • Two-column regulatory cards (deep navy border):
    • Left: RIAs / SEC Regulation S-P / June 3, 2026 copper pill badge / bullet requirements
    • Right: Estate Planning Attorneys / ABA Rules 1.1 & 1.6
  • Closing italic question centered

Slide 4: Who We Are (Parchment)

  • Title: “We Coordinate With Everyone. We Replace No One.” (exact phrasing, non-negotiable)
  • Subtitle: three-party positioning (compliance consultant / Solanasis / IT provider)
  • 3 columns: outer (warm stone), center (navy fill, copper border, Pt(2))
    • Column 1: “Your Compliance Consultant” / Regulatory strategy, exam prep, Form ADV
    • Column 2: “Solanasis” / Cybersecurity verification, disaster recovery testing, vendor risk assessment
    • Column 3: “Your IT Provider” (no ”/ MSP”; attorneys may not know that term)
  • Centered text in columns (appropriate for short content)

Slide 5: Who We Serve (Parchment)

  • Title: “Built for Wealth Management”
  • 3 tall cards with framework badges:
    • RIAs: SEC Exam Priorities, Regulation S-P, Colorado DORA, NIST CSF
    • Estate Planning Attorneys: ABA Rules, State Bar Guidance, NIST CSF
    • Family Offices: no badges (shorter body text)

Slide 6: The Assessment (Parchment)

  • Title: “Examination-Ready in 10 Business Days”
  • Italic subtitle: “Your team’s involvement: 3-4 hours over 10 business days. Fixed scope. Fixed fee.”
  • Copper pill badge bar: SEC, Reg S-P, ABA 1.1 & 1.6, DORA, NIST CSF
  • Two columns: “What We Do” (checkmark items) + “What You Get” (bold label + description)
  • Accent rule + closing italic

Slide 7: Composite Findings (Parchment)

  • Title: “What We Typically Find”
  • Italic disclaimer: “Composite example based on real engagement patterns.”
  • Before card (warm stone, slate blue accents): 4 bullet items with emphasized tails
  • After card (white, copper accents): 4 bold-label findings
  • Accent rule + closing line

Slide 8: Next Steps (Parchment)

  • Title: “After the Assessment, You Decide”
  • Italic subtitle: “Three paths forward. No lock-in.”
  • 3 path cards with numbered copper circles:
    1. “You Run the Plan” - structured handoff
    2. “Remediation Sprint” - 2-4 weeks hands-on
    3. “Fractional CISO” - monthly cadence, month-to-month (NOT “CSRO”; CISO is recognized in financial services)
  • No footnote (previous meta-commentary about “see next slide” was removed; the next slide speaks for itself)

Slide 9: Services Grid (Parchment)

  • Title: “Beyond the Assessment”
  • Italic subtitle: “Targeted capabilities for firms that need more than a roadmap.”
  • 3x2 grid: card_height 2.2”, title Pt(14), body Pt(12)
  • Services: Security Assessments, Disaster Recovery Verification, Secure Data Migrations, CRM Setup & Optimization, Secure Systems Integration, Responsible AI Implementation
  • Body text as line-separated items (not bullet points)
  • Accent rule + closing italic

Slide 10: Team (Parchment)

  • Title: “The Team Behind the Assessment”
  • Subtitle: “23+ years of combined experience…”
  • 2 team cards with circular headshots (ellipse geometry, copper border 1.5pt)
  • Bios in third-person executive summary voice, not resume bullets
  • Photo size: 1.6” diameter

Slide 11: CTA (Navy solid)

  • Title: “Let’s See Where You Stand” (38pt, parchment) + copper accent rule
  • Left: “What Makes Us Different” + 3 differentiator items (copper bold label + parchment description)
  • Right: CTA card (deep navy fill, copper border Pt(2)):
    • “Book a 30-Minute Intro Call”
    • Description of what happens on the call
    • 3 features: Fixed Scope, Fixed Fee, 10 Business Days
    • “go.solanasis.com/intro” in COPPER (not a run-level hyperlink; the card shape is clickable)
  • Footer: solanasis.com | hi@solanasis.com | 303-900-8969 | Boulder, CO (12pt, ALL WHITE)
  • Logo bottom-left

8. Voice Rules (Non-Negotiable)

These rules apply to ALL text in the deck:

  • Zero em dashes (use semicolons, periods, or commas instead)
  • Zero banned words: genuinely, seamless, frictionless, SMBs, audit
  • “examination” not “audit” everywhere
  • Signature terms must appear: “quiet drift”, “false comfort” (slide 2)
  • No jargon the audience won’t know. RIA managing partners know “CISO”; they don’t know “CSRO” or “MSP”
  • Consistent punctuation: periods at end of card body text

Cross-reference: solanasis-site/content-style-guide.md for full voice rules.


9. Assets and File Paths

AssetPath
Generator scriptsolanasis-scripts/generate-pitch-deck.py
PPTX outputSolanasis_Pitch_Deck.pptx (project root)
PDF deploy targetsolanasis-site/public/downloads/solanasis-pitch-deck.pdf
Logo (dark bg)solanasis-site/public/images/logo/solanasis-logo-horizontal-dark.png
Headshot: Dmitrisolanasis-site/public/images/team/dmitri-sunshine.jpg
Headshot: Patricksolanasis-site/public/images/team/patrick-mcheyser.jpg
Short URLgo.solanasis.com/pitch-deck
Rebuild promptsolanasis-docs/sales/pitch-deck-rebuild-prompt.md
Design specsolanasis-docs/sales/pitch-deck-design-spec.md (this file)

10. Generation, QA, and Deploy Process

Generate

cd solanasis-scripts && python generate-pitch-deck.py

Convert to PDF (LibreOffice headless)

"C:/Program Files/LibreOffice/program/soffice.exe" --headless --convert-to pdf \
  ../Solanasis_Pitch_Deck.pptx --outdir ..

Render to PNG (300 DPI, for visual QA)

import fitz
doc = fitz.open('../Solanasis_Pitch_Deck.pdf')
for i, page in enumerate(doc):
    pix = page.get_pixmap(dpi=300)
    pix.save(f'../../_screenshots/2026-03-20/pitch-deck-slide-{i+1:02d}.png')

Screenshots go to _screenshots/{YYYY-MM-DD}/ per project rules.

Visual QA Checklist (EVERY Slide)

Text Visibility:

  • All text fully visible (no clipping, overflow, truncation)
  • No text overlaps other text
  • Hyperlink text is correct color (not LibreOffice default blue)
  • Footer text legible on dark backgrounds
  • No text smaller than 11pt

Card Alignment:

  • Card body text on same slide starts at consistent Y position
  • No text jammed against card borders (minimum 0.15” padding)

Line Spacing:

  • Title text tightly spaced (1.15, not loose)
  • Card body readable but compact (1.5, not 1.8-level loose)
  • Bullet lists slightly tighter (1.4) than body paragraphs

Overall:

  • Looks like it came from a professional services firm, not a startup
  • Every slide matches Kroll/Agio quality standard

Voice QA

  • Zero em dashes
  • Zero banned words (genuinely, seamless, frictionless, SMBs, audit)
  • “examination” not “audit”
  • Signature terms present (quiet drift, false comfort)
  • Date: June 3, 2026 (Regulation S-P)
  • URL: go.solanasis.com/intro
  • “We Coordinate With Everyone. We Replace No One.” exact phrasing

Deploy

# Copy PDF
cp ../Solanasis_Pitch_Deck.pdf ../solanasis-site/public/downloads/solanasis-pitch-deck.pdf
 
# Commit script
cd solanasis-scripts && git add generate-pitch-deck.py
git commit -m "fix: pitch deck — [description of changes]"
 
# Commit PDF
cd ../solanasis-site && git add public/downloads/solanasis-pitch-deck.pdf
git commit -m "chore: update pitch deck PDF"
 
# Push both
cd ../solanasis-scripts && git push origin main
cd ../solanasis-site && git push origin main

Verify: curl -sI https://go.solanasis.com/pitch-deck should return 302 to the PDF.


11. What NOT to Change

  • Color palette - keep all brand colors exactly as defined
  • Font families - keep Playfair Display, Montserrat, Libre Baskerville
  • Slide count - keep 11 slides
  • Slide order - keep current order
  • Image assets - do not modify logos or headshots
  • Copper pills/badges - keep design and content
  • Circular headshots - keep ellipse geometry (it works)
  • Three-party model - compliance consultant / Solanasis / IT provider
  • “Examination” language - never say “audit”

12. Lessons Learned (Why These Decisions Exist)

  1. LibreOffice hyperlink override is theme-level, not run-level. Setting run.font.color.rgb and even solidFill on a:rPr does nothing for hyperlinks in LibreOffice. You must modify the theme’s a:hlink color scheme entry. For links that need a different color than the theme, use shape-level click_action instead of run-level hlinkClick.

  2. Card heading alignment requires separate text frames. MSO_ANCHOR.TOP anchors the frame, not individual paragraphs. When heading and body share a frame, body position depends on heading wrap length. The only reliable fix is two separate text frames with body starting at a fixed Y offset.

  3. 1.8x line spacing is document-grade, not presentation-grade. 1.5x for body, 1.15x for titles, 1.4x for bullets. Question defaults early.

  4. set_shrink_autofit() only works in PowerPoint. LibreOffice (which generates our PDF) ignores it. Size everything correctly. Keep it as a PowerPoint safety net.

  5. Render at 300 DPI and zoom into every region. Thumbnail-level QA misses that “solanasis.com” is blue while ”|” next to it is white. Compare adjacent text elements.

  6. “CSRO” is not a recognized title. The wealth management audience knows “CISO” but not “CSRO” (Chief Security and Resilience Officer). Use standard industry titles.

  7. “MSP” is jargon for attorneys. Estate planning attorneys may not know what a Managed Service Provider is. “Your IT Provider” is universally understood.

  8. Meta-commentary about the deck itself is unprofessional. “See next slide for…” is filler. The next slide speaks for itself.

  9. Cover title doesn’t need the company name. When the logo is right above the title, repeating “Solanasis:” is redundant. Let the title do its job.