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
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:
@@ -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">
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user