+ {/* Header */}
+
+
{i.competition.title}
- {i.competition.subtitle}
+ {subtitle}
- {/* Feature Matrix (Core Compliance) */}
-
-
-
-
-
-
- {/* Security & Developer Features — nur bei ComplAI */}
-
-
-
-
- {lang === 'de' ? <>Integrierte Security & Developer Tools — nur bei > : <>Integrated Security & Developer Tools — only>}
-
-
- {secFeats.map((feat, idx) => {
- const Icon = feat.icon
- return (
-
-
-
-
- {feat.title}
-
-
{feat.desc}
-
-
- )
- })}
-
-
-
-
- {/* Competitor Summary */}
-
- {competitors.map((c, idx) => (
-
-
-
-
{c.name}
- {c.customers_count.toLocaleString()} {lang === 'de' ? 'Kunden' : 'customers'}
-
-
{c.pricing_range}
-
- {(c.weaknesses || []).slice(0, 2).map((w, widx) => (
-
- {w}
-
- ))}
-
-
-
+ {/* Tab Bar */}
+
+ {([
+ { key: 'overview' as ViewTab, de: 'Ueberblick & Vergleich', en: 'Overview & Comparison' },
+ { key: 'features' as ViewTab, de: 'Feature-Matrix (Detail)', en: 'Feature Matrix (Detail)' },
+ ]).map(tab => (
+
))}
+
+
+ {/* ─── Tab: Overview ─── */}
+ {activeTab === 'overview' && (
+
+ {/* Competitor Profiles */}
+
+ {/* International */}
+
+
+ {lang === 'de' ? 'International' : 'International'}
+
+
+ {EXTENDED_COMPETITORS.filter(c => c.isInternational).map(c => (
+
+ ))}
+
+
+ {/* DACH */}
+
+
+ DACH
+
+
+ {EXTENDED_COMPETITORS.filter(c => !c.isInternational).map(c => (
+
+ ))}
+
+
+
+ {/* Efficiency Ratios */}
+
+
+
+ {lang === 'de' ? 'Effizienz-Kennzahlen' : 'Efficiency Ratios'}
+
+
+
+
+
+ | {lang === 'de' ? 'Kennzahl' : 'Metric'} |
+ {EXTENDED_COMPETITORS.map(c => (
+ {c.flag} {c.name} |
+ ))}
+
+
+
+
+ | {lang === 'de' ? 'Umsatz / Mitarbeiter' : 'Revenue / Employee'} |
+ {EXTENDED_COMPETITORS.map(c => (
+
+ ${ratio(c.revenueNum, c.employees)}
+ |
+ ))}
+
+
+ | {lang === 'de' ? 'Kunden / Mitarbeiter' : 'Customers / Employee'} |
+ {EXTENDED_COMPETITORS.map(c => (
+
+ {(c.customers / c.employees).toFixed(0)}
+ |
+ ))}
+
+
+ | {lang === 'de' ? 'Mitarbeiter' : 'Employees'} |
+ {EXTENDED_COMPETITORS.map(c => (
+
+ {c.employees.toLocaleString()}
+ |
+ ))}
+
+
+
+
+
+
+ {/* DACH Landscape Note */}
+
+ {DACH_NOTE[lang]}
+
+
+ )}
+
+ {/* ─── Tab: Feature Matrix ─── */}
+ {activeTab === 'features' && (
+
+
+ {/* Top 5 Differences */}
+
+ toggleSection('top5')}
+ accent="text-yellow-400"
+ />
+ {openSections.has('top5') && (
+
+ )}
+
+
+ {/* All Features */}
+
+ toggleSection('all')}
+ />
+ {openSections.has('all') && (
+
+ )}
+
+
+ {/* USPs */}
+
+ toggleSection('usp')}
+ accent="text-indigo-400"
+ />
+ {openSections.has('usp') && (
+
+ )}
+
+
+
+ {/* Score Summary */}
+
+ {[
+ { name: 'ComplAI', score: ALL_FEATURES.filter(f => f.bp === true).length, color: 'text-indigo-400' },
+ { name: 'Vanta', score: ALL_FEATURES.filter(f => f.vanta === true).length, color: 'text-white/50' },
+ { name: 'Drata', score: ALL_FEATURES.filter(f => f.drata === true).length, color: 'text-white/50' },
+ { name: 'Sprinto', score: ALL_FEATURES.filter(f => f.sprinto === true).length, color: 'text-white/50' },
+ { name: 'Proliance', score: ALL_FEATURES.filter(f => f.proliance === true).length, color: 'text-white/50' },
+ { name: 'DataGuard', score: ALL_FEATURES.filter(f => f.dataguard === true).length, color: 'text-white/50' },
+ { name: 'heyData', score: ALL_FEATURES.filter(f => f.heydata === true).length, color: 'text-white/50' },
+ ].map(item => (
+
+
{item.score}/{ALL_FEATURES.length}
+
{item.name}
+
+ ))}
+
+
+ )}
+
+ )
+}
+
+// ─── Sub-Components ────────────────────────────────────────────────────────────
+
+function CompetitorCard({ competitor: c, lang }: { competitor: ExtendedCompetitor; lang: Language }) {
+ return (
+
+ {/* Header */}
+
+
+ {c.flag}
+ {c.name}
+
+
+
+ {/* HQ + Offices */}
+
1 ? ` | Offices: ${c.offices.join(', ')}` : '')}>
+ {c.hq}, {c.hqCountry}
+ {c.offices.length > 1 && (
+ + {c.offices.join(', ')}
+ )}
+
+ {/* KPIs */}
+
+
+ {lang === 'de' ? 'Gr.' : 'Est.'}
+ {c.founded}
+
+
+
+ {c.employees.toLocaleString()}
+
+
+
+ {c.revenue}
+
+
+
+ {c.customers.toLocaleString()} {lang === 'de' ? 'Kd.' : 'cust.'} ({c.customerCountries})
+
+
+ {/* Funding + Investors */}
+
+
+ {c.fundingTotal}
+ {c.fundingRound}
+
+ {c.investors.length > 0 && (
+
+ {c.investors.slice(0, 3).join(', ')}{c.investors.length > 3 ? ' +' + (c.investors.length - 3) : ''}
+
+ )}
+
+ {/* Market */}
+
+ {c.market[lang]}
)
}
+
+function FeatureTable({
+ features,
+ lang,
+ cols,
+ labels,
+ highlight,
+}: {
+ features: ComparisonFeature[]
+ lang: Language
+ cols: readonly string[]
+ labels: string[]
+ highlight?: boolean
+}) {
+ return (
+
+
+
+
+ | Feature |
+ {labels.map((l, idx) => (
+
+ {idx === 0 ? : l}
+ |
+ ))}
+
+
+
+ {features.map((f, i) => (
+
+ |
+ {f.isDiff && }
+
+ {lang === 'de' ? f.de : f.en}
+
+ |
+ {cols.map(col => (
+
+
+ |
+ ))}
+
+ ))}
+
+
+
+ )
+}
diff --git a/pitch-deck/lib/i18n.ts b/pitch-deck/lib/i18n.ts
index b34b8e6..57db096 100644
--- a/pitch-deck/lib/i18n.ts
+++ b/pitch-deck/lib/i18n.ts
@@ -137,7 +137,7 @@ const translations = {
},
competition: {
title: 'Wettbewerb',
- subtitle: '44 Features vs. ~15-25 bei Wettbewerbern — 9 einzigartige USPs',
+ subtitle: '44 Features, 9 USPs — kein Anbieter kombiniert DSGVO + Code-Security + Self-Hosted KI',
feature: 'Feature',
selfHosted: 'Self-Hosted',
integratedAI: 'Integrierte KI',
@@ -357,7 +357,7 @@ const translations = {
},
competition: {
title: 'Competition',
- subtitle: '44 features vs. ~15-25 competitors — 9 unique USPs',
+ subtitle: '44 features, 9 USPs — no provider combines GDPR + code security + self-hosted AI',
feature: 'Feature',
selfHosted: 'Self-Hosted',
integratedAI: 'Integrated AI',