feat(pitch-deck): pipeline stats from DB on Folie 2 + Optimizer on Folie 5 + quote fix
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m9s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 32s
CI / test-python-voice (push) Successful in 35s
CI / test-bqas (push) Successful in 33s

Folie 2 (Executive Summary):
- KPIs (Controls, Regulations) now from pitch_pipeline_stats DB
- "110 Gesetze" → dynamic from DB (380+)

Folie 5 (Solution):
- Added Compliance Optimizer banner below 3 pillars
- "Nicht nur erlaubt/verboten — maximale Ausgestaltung jedes KI-Use-Cases"

USP Slide:
- Quote fix: "wie weit du maximal gehen kannst" (was: "wie du maximal weit gehen kannst")

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-04-20 18:11:49 +02:00
parent e0fedde560
commit 6db0056329
3 changed files with 31 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { useCallback } from 'react' import { useCallback, useEffect, useState } from 'react'
import { Language, PitchData } from '@/lib/types' import { Language, PitchData } from '@/lib/types'
import { t, formatEur } from '@/lib/i18n' import { t, formatEur } from '@/lib/i18n'
import { useFpKPIs } from '@/lib/hooks/useFpKPIs' import { useFpKPIs } from '@/lib/hooks/useFpKPIs'
@@ -25,6 +25,12 @@ export default function ExecutiveSummarySlide({ lang, data, investorId, preferre
// Unternehmensentwicklung from fp_* tables (source of truth) // Unternehmensentwicklung from fp_* tables (source of truth)
const { kpis: fpKPIs } = useFpKPIs(isWandeldarlehen) const { kpis: fpKPIs } = useFpKPIs(isWandeldarlehen)
// Pipeline stats from DB
const [pipelineStats, setPipelineStats] = useState<Record<string, { value: number }>>({})
useEffect(() => {
fetch('/api/pipeline-stats', { cache: 'no-store' }).then(r => r.json()).then(setPipelineStats).catch(() => {})
}, [])
const funding = data.funding const funding = data.funding
const amount = funding?.amount_eur || 0 const amount = funding?.amount_eur || 0
const amountLabel = amount >= 1_000_000 const amountLabel = amount >= 1_000_000
@@ -382,8 +388,8 @@ export default function ExecutiveSummarySlide({ lang, data, investorId, preferre
<FadeInView delay={0.25} className="mb-4"> <FadeInView delay={0.25} className="mb-4">
<div className="grid grid-cols-3 md:grid-cols-6 gap-2"> <div className="grid grid-cols-3 md:grid-cols-6 gap-2">
{[ {[
{ value: '25.000+', label: es.controls, icon: Shield, color: '#6366f1' }, { value: pipelineStats.unique_controls ? `${Math.round(pipelineStats.unique_controls.value / 1000)}k+` : '25k+', label: es.controls, icon: Shield, color: '#6366f1' },
{ value: '110', label: es.regulations, icon: Brain, color: '#60a5fa' }, { value: pipelineStats.legal_sources ? `${pipelineStats.legal_sources.value}+` : '380+', label: es.regulations, icon: Brain, color: '#60a5fa' },
{ value: '10', label: es.industries, icon: Target, color: '#34d399' }, { value: '10', label: es.industries, icon: Target, color: '#34d399' },
{ value: '500K+', label: es.linesOfCode, icon: Cpu, color: '#fbbf24' }, { value: '500K+', label: es.linesOfCode, icon: Cpu, color: '#fbbf24' },
{ value: '80%', label: de ? 'Zeitersparnis bei\nCompliance-Prüfungen' : 'Time saved on\ncompliance checks', icon: TrendingUp, color: '#10b981' }, { value: '80%', label: de ? 'Zeitersparnis bei\nCompliance-Prüfungen' : 'Time saved on\ncompliance checks', icon: TrendingUp, color: '#10b981' },

View File

@@ -52,6 +52,27 @@ export default function SolutionSlide({ lang }: SolutionSlideProps) {
) )
})} })}
</div> </div>
{/* Compliance Optimizer MOAT */}
<FadeInView delay={0.8}>
<div className="bg-gradient-to-r from-amber-500/10 to-indigo-500/10 border border-amber-500/20 rounded-xl px-5 py-3 mt-8 max-w-4xl mx-auto">
<div className="flex items-center gap-3">
<div className="w-10 h-10 rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 flex items-center justify-center shrink-0">
<Bot className="w-5 h-5 text-white" />
</div>
<div>
<p className="text-sm font-bold text-amber-300">
{de ? 'Compliance Optimizer — Nicht nur „erlaubt/verboten"' : 'Compliance Optimizer — Not just "allowed/forbidden"'}
</p>
<p className="text-xs text-white/50 leading-relaxed mt-0.5">
{de
? 'Unsere Plattform zeigt die maximal zulässige Ausgestaltung jedes KI-Use-Cases. Statt Einschränkung: optimale Ausnutzung des regulatorischen Raums — deterministisch, automatisiert und auditierbar.'
: 'Our platform shows the maximum permissible configuration of every AI use case. Instead of restriction: optimal utilization of the regulatory space — deterministic, automated and auditable.'}
</p>
</div>
</div>
</div>
</FadeInView>
</div> </div>
) )
} }

View File

@@ -214,7 +214,7 @@ export default function USPSlide({ lang }: USPSlideProps) {
<div className="bg-gradient-to-r from-amber-500/10 to-indigo-500/10 border border-amber-500/20 rounded-xl px-5 py-3 text-center"> <div className="bg-gradient-to-r from-amber-500/10 to-indigo-500/10 border border-amber-500/20 rounded-xl px-5 py-3 text-center">
<p className="text-sm text-white/70 italic"> <p className="text-sm text-white/70 italic">
{de {de
? '„Jeder kann sagen, was verboten ist. Kaum jemand kann sagen, wie du maximal weit gehen kannst, ohne es zu brechen. Das ist unser Produkt."' ? '„Jeder kann sagen, was verboten ist. Kaum jemand kann sagen, wie weit du maximal gehen kannst, ohne es zu brechen. Das ist unser Produkt."'
: '"Everyone can say what is forbidden. Almost no one can say how far you can go without breaking it. That is our product."'} : '"Everyone can say what is forbidden. Almost no one can say how far you can go without breaking it. That is our product."'}
</p> </p>
</div> </div>