fix(pitch-deck): remove Use of Funds, GTM slide; move Assumptions after Finanzplan
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 1m11s
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 34s
CI / test-python-voice (push) Successful in 38s
CI / test-bqas (push) Successful in 33s

- Remove Use of Funds card from The Ask slide
- Remove Go-to-Market slide from deck
- Move Annahmen & Sensitivität after Finanzplan in slide order
- Update sidebar names in both DE and EN

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-04-20 19:57:41 +02:00
parent 3cce3b2871
commit da4dcdca32
3 changed files with 3 additions and 76 deletions

View File

@@ -3,14 +3,12 @@
import { motion } from 'framer-motion' import { motion } from 'framer-motion'
import { Language, PitchFunding } from '@/lib/types' import { Language, PitchFunding } from '@/lib/types'
import { t } from '@/lib/i18n' import { t } from '@/lib/i18n'
import { useFpKPIs } from '@/lib/hooks/useFpKPIs'
import ProjectionFooter from '../ui/ProjectionFooter' import ProjectionFooter from '../ui/ProjectionFooter'
import GradientText from '../ui/GradientText' import GradientText from '../ui/GradientText'
import FadeInView from '../ui/FadeInView' import FadeInView from '../ui/FadeInView'
import AnimatedCounter from '../ui/AnimatedCounter' import AnimatedCounter from '../ui/AnimatedCounter'
import GlassCard from '../ui/GlassCard' import GlassCard from '../ui/GlassCard'
import { Landmark, Banknote, ArrowRightLeft, TrendingUp, ShieldCheck, Target, Calendar, FileText } from 'lucide-react' import { Landmark, Banknote, ArrowRightLeft, TrendingUp, ShieldCheck, Target, Calendar, FileText } from 'lucide-react'
import { PieChart, Pie, Cell, ResponsiveContainer, Tooltip } from 'recharts'
interface TheAskSlideProps { interface TheAskSlideProps {
lang: Language lang: Language
@@ -18,8 +16,6 @@ interface TheAskSlideProps {
isWandeldarlehen?: boolean isWandeldarlehen?: boolean
} }
const COLORS = ['#6366f1', '#a78bfa', '#60a5fa', '#34d399', '#fbbf24']
function formatFundingAmount(amount: number): { target: number; suffix: string } { function formatFundingAmount(amount: number): { target: number; suffix: string } {
if (amount >= 1_000_000) { if (amount >= 1_000_000) {
return { target: Math.round(amount / 100_000) / 10, suffix: ' Mio.' } return { target: Math.round(amount / 100_000) / 10, suffix: ' Mio.' }
@@ -47,17 +43,6 @@ export default function TheAskSlide({ lang, funding, isWandeldarlehen }: TheAskS
const isWD = isWandeldarlehen || (funding?.instrument || '').toLowerCase() === 'wandeldarlehen' const isWD = isWandeldarlehen || (funding?.instrument || '').toLowerCase() === 'wandeldarlehen'
const amount = Number(funding?.amount_eur) || 0 const amount = Number(funding?.amount_eur) || 0
const { target, suffix } = formatFundingAmount(amount) const { target, suffix } = formatFundingAmount(amount)
const totalBudget = isWD ? amount * 2 : amount
// Use of Funds from fp_* data (computed, not manual)
const { useOfFunds: fpUseOfFunds } = useFpKPIs(isWD)
const rawFunds = fpUseOfFunds.length > 0 ? fpUseOfFunds : (funding?.use_of_funds || [])
const useOfFunds = Array.isArray(rawFunds) ? rawFunds : (typeof rawFunds === 'string' ? JSON.parse(rawFunds) : [])
const pieData = useOfFunds.map((item: Record<string, unknown>) => ({
name: (de ? item.label_de : item.label_en) as string || 'N/A',
value: Number(item.percentage) || 0,
}))
return ( return (
<div> <div>
@@ -214,61 +199,6 @@ export default function TheAskSlide({ lang, funding, isWandeldarlehen }: TheAskS
</> </>
)} )}
{/* Use of Funds */}
<FadeInView delay={0.8}>
<GlassCard hover={false} className="p-6">
<h3 className="text-lg font-semibold text-white mb-4 text-center">{i.theAsk.useOfFunds}</h3>
<div className="flex flex-col md:flex-row items-center gap-8">
{/* Pie Chart */}
<div className="w-48 h-48">
<ResponsiveContainer width="100%" height="100%">
<PieChart>
<Pie
data={pieData}
cx="50%"
cy="50%"
innerRadius={50}
outerRadius={80}
dataKey="value"
stroke="none"
>
{pieData.map((_, idx) => (
<Cell key={idx} fill={COLORS[idx % COLORS.length]} />
))}
</Pie>
<Tooltip
contentStyle={{
background: 'rgba(10, 10, 26, 0.9)',
border: '1px solid rgba(255,255,255,0.1)',
borderRadius: 8,
color: '#fff',
fontSize: 13,
}}
formatter={(value: number) => `${value}%`}
/>
</PieChart>
</ResponsiveContainer>
</div>
{/* Legend */}
<div className="flex-1 space-y-3">
{useOfFunds.map((item, idx) => (
<div key={idx} className="flex items-center gap-3">
<div className="w-3 h-3 rounded-full" style={{ backgroundColor: COLORS[idx] }} />
<span className="flex-1 text-sm text-white/70">
{lang === 'de' ? item.label_de : item.label_en}
</span>
<span className="text-sm font-bold text-white">{item.percentage}%</span>
<span className="text-xs text-white/30">
{((totalBudget * item.percentage) / 100).toLocaleString('de-DE')} EUR
</span>
</div>
))}
</div>
</div>
</GlassCard>
</FadeInView>
{/* INVEST Program Hint */} {/* INVEST Program Hint */}
<FadeInView delay={0.6} className="mt-4"> <FadeInView delay={0.6} className="mt-4">
<div className="bg-gradient-to-r from-indigo-500/10 to-emerald-500/10 border border-indigo-500/20 rounded-xl px-5 py-3"> <div className="bg-gradient-to-r from-indigo-500/10 to-emerald-500/10 border border-indigo-500/20 rounded-xl px-5 py-3">

View File

@@ -27,15 +27,14 @@ const translations = {
'Investition & Cap Table', 'Investition & Cap Table',
'Kundenersparnis', 'Kundenersparnis',
'KI Q&A', 'KI Q&A',
'Anhang: Annahmen',
'Anhang: Architektur', 'Anhang: Architektur',
'Anhang: Go-to-Market',
'Anhang: Regulatorik', 'Anhang: Regulatorik',
'Anhang: Engineering', 'Anhang: Engineering',
'Anhang: KI-Pipeline', 'Anhang: KI-Pipeline',
'Anhang: SDK Demo', 'Anhang: SDK Demo',
'Anhang: Strategie', 'Anhang: Strategie',
'Anhang: Finanzplan', 'Anhang: Finanzplan',
'Anhang: Annahmen',
'Glossar', 'Glossar',
'Risiken & Mitigation', 'Risiken & Mitigation',
'Rechtlicher Hinweis', 'Rechtlicher Hinweis',
@@ -325,15 +324,14 @@ const translations = {
'Investment & Cap Table', 'Investment & Cap Table',
'Customer Savings', 'Customer Savings',
'AI Q&A', 'AI Q&A',
'Appendix: Assumptions',
'Appendix: Architecture', 'Appendix: Architecture',
'Appendix: Go-to-Market',
'Appendix: Regulatory', 'Appendix: Regulatory',
'Appendix: Engineering', 'Appendix: Engineering',
'Appendix: AI Pipeline', 'Appendix: AI Pipeline',
'Appendix: SDK Demo', 'Appendix: SDK Demo',
'Appendix: Strategy', 'Appendix: Strategy',
'Appendix: Financial Plan', 'Appendix: Financial Plan',
'Appendix: Assumptions',
'Glossary', 'Glossary',
'Risks & Mitigation', 'Risks & Mitigation',
'Legal Notice', 'Legal Notice',

View File

@@ -20,15 +20,14 @@ export const SLIDE_ORDER: SlideId[] = [
'cap-table', 'cap-table',
'customer-savings', 'customer-savings',
'ai-qa', 'ai-qa',
'annex-assumptions',
'annex-architecture', 'annex-architecture',
'annex-gtm',
'annex-regulatory', 'annex-regulatory',
'annex-engineering', 'annex-engineering',
'annex-aipipeline', 'annex-aipipeline',
'annex-sdk-demo', 'annex-sdk-demo',
'annex-strategy', 'annex-strategy',
'annex-finanzplan', 'annex-finanzplan',
'annex-assumptions',
'annex-glossary', 'annex-glossary',
'risks', 'risks',
'legal-disclaimer', 'legal-disclaimer',