diff --git a/pitch-deck/components/PitchDeck.tsx b/pitch-deck/components/PitchDeck.tsx index b25763e..968ee76 100644 --- a/pitch-deck/components/PitchDeck.tsx +++ b/pitch-deck/components/PitchDeck.tsx @@ -19,6 +19,7 @@ import PresenterOverlay from './presenter/PresenterOverlay' import AvatarPlaceholder from './presenter/AvatarPlaceholder' import IntroPresenterSlide from './slides/IntroPresenterSlide' +import ExecutiveSummarySlide from './slides/ExecutiveSummarySlide' import CoverSlide from './slides/CoverSlide' import ProblemSlide from './slides/ProblemSlide' import SolutionSlide from './slides/SolutionSlide' @@ -117,6 +118,8 @@ export default function PitchDeck({ lang, onToggleLanguage }: PitchDeckProps) { isPresenting={presenter.state !== 'idle'} /> ) + case 'executive-summary': + return case 'cover': return case 'problem': diff --git a/pitch-deck/components/slides/ExecutiveSummarySlide.tsx b/pitch-deck/components/slides/ExecutiveSummarySlide.tsx new file mode 100644 index 0000000..6d09379 --- /dev/null +++ b/pitch-deck/components/slides/ExecutiveSummarySlide.tsx @@ -0,0 +1,337 @@ +'use client' + +import { useCallback } from 'react' +import { Language, PitchData } from '@/lib/types' +import { t, formatEur } from '@/lib/i18n' +import GradientText from '../ui/GradientText' +import FadeInView from '../ui/FadeInView' +import GlassCard from '../ui/GlassCard' +import { Download, Shield, Server, Brain, TrendingUp, Users, FileText, Target } from 'lucide-react' + +interface ExecutiveSummarySlideProps { + lang: Language + data: PitchData +} + +export default function ExecutiveSummarySlide({ lang, data }: ExecutiveSummarySlideProps) { + const i = t(lang) + const es = i.executiveSummary + + const funding = data.funding + const amount = funding?.amount_eur || 0 + const amountLabel = amount >= 1_000_000 + ? `${(amount / 1_000_000).toFixed(1)} Mio. EUR` + : `${(amount / 1_000).toFixed(0)}k EUR` + + const market = data.market || [] + const tam = market.find(m => m.market_segment === 'TAM') + const sam = market.find(m => m.market_segment === 'SAM') + const som = market.find(m => m.market_segment === 'SOM') + + const handleDownloadPdf = useCallback(() => { + const printWindow = window.open('', '_blank') + if (!printWindow) return + + const tamVal = tam ? formatEur(tam.value_eur, lang) : '—' + const samVal = sam ? formatEur(sam.value_eur, lang) : '—' + const somVal = som ? formatEur(som.value_eur, lang) : '—' + + const teamHtml = data.team?.map(m => + `
+ ${m.name} — ${lang === 'de' ? m.role_de : m.role_en} +
` + ).join('') || '' + + const useOfFundsHtml = funding?.use_of_funds?.map(f => + `
+ ${lang === 'de' ? f.label_de : f.label_en} + ${f.percentage}% +
` + ).join('') || '' + + printWindow.document.write(` + + + + BreakPilot ComplAI — Executive Summary + + + +
+
+

BreakPilot ComplAI

+
${lang === 'de' + ? 'Compliance & Code-Security f\u00fcr den Maschinenbau' + : 'Compliance & Code Security for Machine Manufacturers'}
+
+
Pre-Seed ${funding?.target_date ? 'Q' + Math.ceil((new Date(funding.target_date).getMonth() + 1) / 3) + ' ' + new Date(funding.target_date).getFullYear() : 'Q4 2026'}
+
+ +
+ ${es.usp}: ${es.uspText} +
+ +
+
+
${es.problem}
+
${es.problemText}
+
+
+
${es.solution}
+
${es.solutionText}
+
+
+ +
+
${es.keyMetrics}
+
+
+
57
+
${es.modules}
+
+
+
19
+
${es.regulations}
+
+
+
2.274
+
${es.legalTexts}
+
+
+
45
+
${es.containers}
+
+
+
761K
+
${es.linesOfCode}
+
+
+
${amountLabel}
+
${es.theAsk}
+
+
+
+ +
+
+
${es.market}
+
+
TAM${tamVal}
+
SAM${samVal}
+
SOM${somVal}
+
+
+
+
${es.businessModel}
+
${es.businessModelText}
+
+
+ +
+
+
Team
+
${teamHtml}
+
+
+
${es.theAsk} — ${amountLabel}
+
+
${es.round}: ${funding?.round_name || 'Pre-Seed'}
+
Instrument: ${funding?.instrument || 'SAFE'}
+ ${useOfFundsHtml} +
+
+
+ + + +`) + + printWindow.document.close() + setTimeout(() => printWindow.print(), 300) + }, [lang, data, es, funding, tam, sam, som, amountLabel]) + + return ( +
+ +

+ {es.title} +

+

{es.subtitle}

+
+ + {/* USP Banner */} + +
+ {es.usp} +

{es.uspText}

+
+
+ + {/* Problem + Solution — 2 columns */} +
+ +
+ +

{es.problem}

+
+

{es.problemText}

+
+ + +
+ +

{es.solution}

+
+

{es.solutionText}

+
+
+ + {/* KPI Row */} + +
+ {[ + { value: '57', label: es.modules, icon: Brain, color: '#6366f1' }, + { value: '19', label: es.regulations, icon: FileText, color: '#a78bfa' }, + { value: '2.274', label: es.legalTexts, icon: Shield, color: '#60a5fa' }, + { value: '45', label: es.containers, icon: Server, color: '#34d399' }, + { value: '761K', label: es.linesOfCode, icon: Target, color: '#fbbf24' }, + { value: amountLabel, label: es.theAsk, icon: TrendingUp, color: '#f472b6' }, + ].map((kpi, idx) => ( +
+ +

{kpi.value}

+

{kpi.label}

+
+ ))} +
+
+ + {/* Market + Business Model + Team + The Ask — compact 2x2 */} +
+ +

{es.market}

+
+ {[ + { label: 'TAM', data: tam }, + { label: 'SAM', data: sam }, + { label: 'SOM', data: som }, + ].map(({ label, data: m }) => ( +
+ {label} + {m ? formatEur(m.value_eur, lang) : '—'} +
+ ))} +
+
+ + +

{es.businessModel}

+

{es.businessModelText}

+
+ + +

Team

+
+ {data.team?.slice(0, 4).map((m, idx) => ( +
+ {m.name} + {lang === 'de' ? m.role_de : m.role_en} +
+ ))} +
+
+ + +

+ {es.theAsk} — {amountLabel} +

+
+
+ {es.round} + {funding?.round_name || 'Pre-Seed'} +
+
+ Instrument + {funding?.instrument || 'SAFE'} +
+ {funding?.use_of_funds?.slice(0, 3).map((f, idx) => ( +
+ {lang === 'de' ? f.label_de : f.label_en} + {f.percentage}% +
+ ))} +
+
+
+ + {/* PDF Download Button */} + + + +
+ ) +} diff --git a/pitch-deck/lib/i18n.ts b/pitch-deck/lib/i18n.ts index d3461df..7a35abf 100644 --- a/pitch-deck/lib/i18n.ts +++ b/pitch-deck/lib/i18n.ts @@ -9,6 +9,7 @@ const translations = { }, slideNames: [ 'Intro', + 'Executive Summary', 'Cover', 'Das Problem', 'Die Lösung', @@ -30,6 +31,29 @@ const translations = { 'Anhang: KI-Pipeline', 'Anhang: SDK Demo', ], + executiveSummary: { + title: 'Executive Summary', + subtitle: 'BreakPilot ComplAI — Ihr Investment auf einen Blick', + problem: 'Das Problem', + problemText: 'Maschinenbauer entwickeln zunehmend Software — aber DSGVO, AI Act, CRA und NIS2 überfordern interne Teams. Bußgelder von über 4,1 Mrd. EUR und 30.000+ betroffene Unternehmen zeigen den Handlungsdruck.', + solution: 'Unsere Lösung', + solutionText: 'Self-Hosted KI-Plattform: Mac Mini/Studio im Serverraum scannt Code, bewertet Risiken und generiert Compliance-Dokumente automatisch. 57 Module, 19 Regularien, 2.274 indexierte Rechtstexte — kein Byte verlässt das Unternehmen.', + market: 'Markt', + businessModel: 'Geschäftsmodell', + businessModelText: 'Recurring Revenue mit Hardware-Moat. SaaS-Marge bei Self-Hosted-Sicherheit. Hardware-Einmalkauf + monatliche Lizenz.', + keyMetrics: 'Kennzahlen', + modules: 'SDK-Module', + regulations: 'Regularien', + legalTexts: 'Indexierte Rechtstexte', + containers: 'Container', + linesOfCode: 'Lines of Code', + theAsk: 'Finanzierung', + round: 'Runde', + contact: 'Kontakt', + downloadPdf: 'Als PDF herunterladen', + usp: 'USP', + uspText: 'Einziger Anbieter, der DSGVO + Code-Security + Self-Hosted KI für den Maschinenbau kombiniert.', + }, cover: { tagline: 'Compliance & Code-Security für den Maschinenbau', subtitle: 'Pre-Seed · Q4 2026', @@ -233,6 +257,7 @@ const translations = { }, slideNames: [ 'Intro', + 'Executive Summary', 'Cover', 'The Problem', 'The Solution', @@ -254,6 +279,29 @@ const translations = { 'Appendix: AI Pipeline', 'Appendix: SDK Demo', ], + executiveSummary: { + title: 'Executive Summary', + subtitle: 'BreakPilot ComplAI — Your Investment at a Glance', + problem: 'The Problem', + problemText: 'Machine manufacturers increasingly develop software — but GDPR, AI Act, CRA and NIS2 overwhelm internal teams. Over EUR 4.1B in fines and 30,000+ affected companies show the urgency.', + solution: 'Our Solution', + solutionText: 'Self-hosted AI platform: Mac Mini/Studio in the server room scans code, assesses risks and generates compliance documents automatically. 57 modules, 19 regulations, 2,274 indexed legal texts — no data leaves the company.', + market: 'Market', + businessModel: 'Business Model', + businessModelText: 'Recurring revenue with hardware moat. SaaS margins with self-hosted security. One-time hardware purchase + monthly license.', + keyMetrics: 'Key Metrics', + modules: 'SDK Modules', + regulations: 'Regulations', + legalTexts: 'Indexed Legal Texts', + containers: 'Containers', + linesOfCode: 'Lines of Code', + theAsk: 'Funding', + round: 'Round', + contact: 'Contact', + downloadPdf: 'Download as PDF', + usp: 'USP', + uspText: 'Only provider combining GDPR + code security + self-hosted AI for machine manufacturing.', + }, cover: { tagline: 'Compliance & Code Security for Machine Manufacturers', subtitle: 'Pre-Seed · Q4 2026', diff --git a/pitch-deck/lib/presenter/presenter-script.ts b/pitch-deck/lib/presenter/presenter-script.ts index 2d2d261..dfb25d0 100644 --- a/pitch-deck/lib/presenter/presenter-script.ts +++ b/pitch-deck/lib/presenter/presenter-script.ts @@ -26,7 +26,27 @@ export const PRESENTER_SCRIPT: SlideScript[] = [ transition_hint_en: 'Let us begin.', }, - // 1 — cover (20s) + // 1 — executive-summary (30s) + { + slideId: 'executive-summary', + duration: 30, + paragraphs: [ + { + text_de: 'Bevor wir ins Detail gehen, hier das Wichtigste auf einen Blick: BreakPilot ComplAI ist die einzige Self-Hosted Compliance- und Code-Security-Plattform speziell für den Maschinenbau.', + text_en: 'Before we dive into details, here is the key summary: BreakPilot ComplAI is the only self-hosted compliance and code security platform specifically for machine manufacturing.', + pause_after: 1500, + }, + { + text_de: '57 SDK-Module, 19 Regularien, 761.000 Zeilen Code — und Sie können diesen Onepager als PDF herunterladen, um ihn weiterzuleiten.', + text_en: '57 SDK modules, 19 regulations, 761,000 lines of code — and you can download this one-pager as PDF to share it.', + pause_after: 1000, + }, + ], + transition_hint_de: 'Nun zum vollständigen Pitch.', + transition_hint_en: 'Now for the full pitch.', + }, + + // 2 — cover (20s) { slideId: 'cover', duration: 20, diff --git a/pitch-deck/lib/slide-order.ts b/pitch-deck/lib/slide-order.ts index 0282032..65c7fac 100644 --- a/pitch-deck/lib/slide-order.ts +++ b/pitch-deck/lib/slide-order.ts @@ -2,6 +2,7 @@ import { SlideId } from './types' export const SLIDE_ORDER: SlideId[] = [ 'intro-presenter', + 'executive-summary', 'cover', 'problem', 'solution', diff --git a/pitch-deck/lib/types.ts b/pitch-deck/lib/types.ts index 47cf3eb..36a5b4f 100644 --- a/pitch-deck/lib/types.ts +++ b/pitch-deck/lib/types.ts @@ -202,6 +202,7 @@ export interface ChatMessage { export type SlideId = | 'intro-presenter' + | 'executive-summary' | 'cover' | 'problem' | 'solution'