Files
breakpilot-core/pitch-deck/components/SlideContainer.tsx
Benjamin Boenisch b7d21daa24
All checks were successful
CI / test-bqas (push) Successful in 32s
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 46s
CI / test-python-voice (push) Successful in 38s
feat: Add DevSecOps tools, Woodpecker proxy, Vault persistent storage, pitch-deck annex slides
- Install Gitleaks, Trivy, Grype, Syft, Semgrep, Bandit in backend-core Dockerfile
- Add Woodpecker SQLite proxy API (fallback without API token)
- Mount woodpecker_data volume read-only to backend-core
- Add backend proxy fallback in admin-core Woodpecker route
- Add Vault file-based persistent storage (config.hcl, init-vault.sh)
- Auto-init, unseal and root-token persistence for Vault
- Add 6 pitch-deck annex slides (Assumptions, Architecture, GTM, Regulatory, Engineering, AI Pipeline)
- Dynamic margin/amortization KPIs in BusinessModelSlide
- Market sources modal with citations in MarketSlide
- Redesign nginx landing page to 3-column layout (Lehrer/Compliance/Core)
- Extend MkDocs nav with Services and SDK documentation sections
- Add SDK Protection architecture doc

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:42:43 +01:00

54 lines
1.2 KiB
TypeScript

'use client'
import { ReactNode } from 'react'
import { motion, AnimatePresence } from 'framer-motion'
interface SlideContainerProps {
children: ReactNode
slideKey: string
direction: number
}
const variants = {
enter: (direction: number) => ({
x: direction > 0 ? '30%' : '-30%',
opacity: 0,
scale: 0.95,
}),
center: {
x: 0,
opacity: 1,
scale: 1,
},
exit: (direction: number) => ({
x: direction < 0 ? '30%' : '-30%',
opacity: 0,
scale: 0.95,
}),
}
export default function SlideContainer({ children, slideKey, direction }: SlideContainerProps) {
return (
<AnimatePresence mode="wait" custom={direction}>
<motion.div
key={slideKey}
custom={direction}
variants={variants}
initial="enter"
animate="center"
exit="exit"
transition={{
x: { type: 'spring', stiffness: 300, damping: 30 },
opacity: { duration: 0.3 },
scale: { duration: 0.3 },
}}
className="absolute inset-0 flex justify-center overflow-y-auto"
>
<div className="w-full max-w-6xl mx-auto px-6 py-12 md:py-16 my-auto">
{children}
</div>
</motion.div>
</AnimatePresence>
)
}