Some checks failed
ci/woodpecker/push/integration Pipeline failed
ci/woodpecker/push/main Pipeline failed
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Restructure financial plan from single 200k SAFE to realistic staged funding (25k Stammkapital, 25k Angel, 200k Wandeldarlehen, 1M Series A = 1.25M total). Add 60-month compute engine with CAPEX/OPEX accounting, cash constraints, hardware financing (30% upfront / 70% leasing), and revenue-based hiring caps. Rebuild TheAskSlide with 4-event funding timeline, update i18n (DE/EN), chat agent core messages, and add 15 new annex/technology slides with supporting UI components (KPICard, RunwayGauge, WaterfallChart, etc.). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
'use client'
|
|
|
|
import { motion } from 'framer-motion'
|
|
import { TrendingUp, TrendingDown } from 'lucide-react'
|
|
import AnimatedCounter from './AnimatedCounter'
|
|
|
|
interface KPICardProps {
|
|
label: string
|
|
value: number
|
|
prefix?: string
|
|
suffix?: string
|
|
decimals?: number
|
|
trend?: 'up' | 'down' | 'neutral'
|
|
color?: string
|
|
delay?: number
|
|
subLabel?: string
|
|
}
|
|
|
|
export default function KPICard({
|
|
label,
|
|
value,
|
|
prefix = '',
|
|
suffix = '',
|
|
decimals = 0,
|
|
trend = 'neutral',
|
|
color = '#6366f1',
|
|
delay = 0,
|
|
subLabel,
|
|
}: KPICardProps) {
|
|
return (
|
|
<motion.div
|
|
initial={{ opacity: 0, y: 20 }}
|
|
animate={{ opacity: 1, y: 0 }}
|
|
transition={{ duration: 0.5, delay }}
|
|
className="relative overflow-hidden bg-white/[0.06] backdrop-blur-xl border border-white/10 rounded-2xl p-4"
|
|
>
|
|
{/* Glow effect */}
|
|
<div
|
|
className="absolute -top-8 -right-8 w-24 h-24 rounded-full blur-3xl opacity-20"
|
|
style={{ backgroundColor: color }}
|
|
/>
|
|
|
|
<p className="text-[10px] uppercase tracking-wider text-white/40 mb-1">{label}</p>
|
|
<div className="flex items-end gap-2">
|
|
<p className="text-2xl font-bold text-white leading-none">
|
|
<AnimatedCounter target={value} prefix={prefix} suffix={suffix} duration={1200} decimals={decimals} />
|
|
</p>
|
|
{trend !== 'neutral' && (
|
|
<span className={`flex items-center gap-0.5 text-xs pb-0.5 ${trend === 'up' ? 'text-emerald-400' : 'text-red-400'}`}>
|
|
{trend === 'up' ? <TrendingUp className="w-3 h-3" /> : <TrendingDown className="w-3 h-3" />}
|
|
</span>
|
|
)}
|
|
</div>
|
|
{subLabel && (
|
|
<p className="text-[10px] text-white/30 mt-1">{subLabel}</p>
|
|
)}
|
|
</motion.div>
|
|
)
|
|
}
|