feat(marketing-website): add BreakPilot marketing website with CMP integration

Multi-page marketing website positioned as "Deterministic Regulatory Engineering Platform":
- 7 pages: Home, Plattform, CE-Prozess, Product Compliance, Architektur, Team, Preise
- Platform Bridge animation (adapted from pitch-deck USP slide)
- Cookie-Banner with consent-service integration (breakpilot-marketing site)
- DE/EN language toggle + Dark/Light theme
- Docker service on port 3014

[guardrail-change] PlatformBridgeSection.tsx added to loc-exceptions (816 LOC, SVG animation)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-10 22:41:00 +02:00
parent 937eca6b77
commit d13f4511cb
68 changed files with 11493 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
import { NextRequest } from 'next/server'
const SYSTEM_PROMPT = `Du bist der BreakPilot Compliance Agent — ein technischer Berater fuer die BreakPilot Plattform.
Kernbotschaften:
- BreakPilot ist eine deterministische Regulatory Engineering Plattform
- Keine Halluzinationen: Jedes Ergebnis verweist auf eine konkrete Rechtsquelle
- EU-souveraen: Kein US-Cloud-Anbieter, on-premise deploybar
- 294.000+ atomare Controls aus 380+ Rechtsquellen
- Unterstuetzte Regulierungen: DSGVO, NIS2, EU AI Act, Maschinenverordnung, TDDDG, DORA, BSI IT-Grundschutz
Sage NIEMALS "ChatGPT fuer CE" oder "KI-Assistent". Sage stattdessen "Deterministic Analysis" oder "Compliance Engine".
Antworte auf Deutsch, professionell und praezise. Halte Antworten kurz (max 200 Woerter).`
export async function POST(req: NextRequest) {
const { message, history } = await req.json()
// Placeholder: In production, connect to the actual Compliance Agent API
// For now, return a static response as a stream
const responses: Record<string, string> = {
'default': `Vielen Dank fuer Ihre Frage.
BreakPilot ist eine deterministische Regulatory Engineering Plattform. Im Unterschied zu LLM-basierten Tools analysieren wir regulatorische Anforderungen regelbasiert — jedes Ergebnis verweist auf eine konkrete Rechtsquelle (Artikel, Absatz, Erwaegungs\u00ADgrund).
Unsere Plattform umfasst:
- 294.000+ atomare Compliance Controls
- 380+ Rechtsquellen (DSGVO, NIS2, AI Act, Maschinenverordnung u.a.)
- Vollstaendiger Decision Trail: Rechtsquelle → Obligation → Control → Massnahme
- EU-souveraene Infrastruktur ohne US-Cloud-Abhaengigkeit
Fuer eine persoenliche Demo kontaktieren Sie uns unter info@breakpilot.ai.`,
}
void history
void SYSTEM_PROMPT
const responseText = responses['default']
// Simulate streaming by sending chunks
const encoder = new TextEncoder()
const stream = new ReadableStream({
async start(controller) {
const words = responseText.split(' ')
for (let i = 0; i < words.length; i++) {
const chunk = (i === 0 ? '' : ' ') + words[i]
controller.enqueue(encoder.encode(chunk))
await new Promise(resolve => setTimeout(resolve, 30))
}
controller.close()
},
})
void message
return new Response(stream, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'no-cache',
},
})
}
@@ -0,0 +1,30 @@
import { NextRequest, NextResponse } from 'next/server'
const BACKEND_URL = process.env.CONSENT_BACKEND_URL || 'https://macmini:3007/api/sdk/v1/banner'
const TENANT_ID = process.env.CONSENT_TENANT_ID || '9282a473-5c95-4b3a-bf78-0ecc0ec71d3e'
export async function POST(req: NextRequest) {
try {
const body = await req.text()
const res = await fetch(`${BACKEND_URL}/consent`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Tenant-ID': TENANT_ID,
},
body,
// Accept self-signed certs on internal network
...(process.env.NODE_TLS_REJECT_UNAUTHORIZED === '0' ? {} : {}),
})
const data = await res.text()
return new NextResponse(data, {
status: res.status,
headers: { 'Content-Type': 'application/json' },
})
} catch (err) {
console.error('Consent proxy error:', err)
return NextResponse.json({ error: 'Consent service not reachable' }, { status: 503 })
}
}
@@ -0,0 +1,18 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import ArchitectureSection from '@/components/sections/ArchitectureSection'
import SovereignSection from '@/components/sections/SovereignSection'
export default function ArchitekturPage() {
return (
<>
<Navbar />
<div className="pt-16" />
<ArchitectureSection />
<SovereignSection />
<Footer />
<ChatFAB />
</>
)
}
+26
View File
@@ -0,0 +1,26 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import PageHeader from '@/components/ui/PageHeader'
import CEFlowSection from '@/components/sections/CEFlowSection'
export default function CEProzessPage() {
return (
<>
<Navbar />
<main>
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<PageHeader
tag="CE-PROZESS"
title="Von der Maschinenbeschreibung"
titleHighlight="zur CE-Akte."
subtitle="6 deterministische Schritte — vom Textfeld zur vollständigen Technischen Dokumentation nach MVO 2023/1230."
/>
</div>
<CEFlowSection />
</main>
<Footer />
<ChatFAB />
</>
)
}
@@ -0,0 +1,67 @@
import Link from 'next/link'
export default function DatenschutzPage() {
return (
<div className="min-h-screen bg-enterprise-dark text-white">
<div className="max-w-3xl mx-auto px-4 py-24">
<Link href="/" className="text-sm text-white/40 hover:text-white/60 transition-colors mb-8 inline-block">
&larr; Zurueck zur Startseite
</Link>
<h1 className="text-4xl font-bold mb-8">Datenschutzerklaerung</h1>
<div className="space-y-6 text-white/60 text-sm">
<div>
<h2 className="text-lg font-semibold text-white mb-2">1. Verantwortlicher</h2>
<p>BreakPilot GmbH (i.Gr.)</p>
<p>[Adresse wird nach Gruendung ergaenzt]</p>
<p>E-Mail: datenschutz@breakpilot.ai</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">2. Hosting</h2>
<p>
Diese Website wird auf Servern in Deutschland gehostet.
Es werden keine personenbezogenen Daten an Drittlaender uebermittelt.
</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">3. Keine Cookies, kein Tracking</h2>
<p>
Diese Website verwendet keine Cookies, kein Tracking und keine Analyse-Tools.
Es werden keine personenbezogenen Daten erhoben oder gespeichert.
</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">4. Server-Logfiles</h2>
<p>
Der Hosting-Provider erhebt technisch notwendige Logfiles (IP-Adresse, Browsertyp, Zeitstempel).
Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Sicherheit).
Logfiles werden nach 7 Tagen automatisch geloescht.
</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">5. Externe Schriften</h2>
<p>
Diese Website laedt Schriftarten von Google Fonts. Dabei wird Ihre IP-Adresse an Google LLC uebermittelt.
Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO.
Weitere Informationen: https://policies.google.com/privacy
</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">6. Ihre Rechte</h2>
<p>
Sie haben das Recht auf Auskunft (Art. 15 DSGVO), Berichtigung (Art. 16), Loeschung (Art. 17),
Einschraenkung (Art. 18), Datenuebertragbarkeit (Art. 20) und Widerspruch (Art. 21).
Beschwerderecht bei der zustaendigen Aufsichtsbehoerde.
</p>
</div>
</div>
</div>
</div>
)
}
+280
View File
@@ -0,0 +1,280 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--bg-primary: #0a0a1a;
--bg-secondary: #06060f;
--bg-card: rgba(255, 255, 255, 0.06);
--bg-card-hover: rgba(255, 255, 255, 0.10);
--border-subtle: rgba(255, 255, 255, 0.08);
--text-primary: #ffffff;
--text-secondary: rgba(255, 255, 255, 0.6);
--text-muted: rgba(255, 255, 255, 0.4);
--accent-electric: #3b82f6;
--accent-signal: #22c55e;
--accent-indigo: #6366f1;
--accent-purple: #a78bfa;
--glass-bg: rgba(255, 255, 255, 0.06);
--glass-border: rgba(255, 255, 255, 0.08);
--glass-hover: rgba(255, 255, 255, 0.10);
--scrollbar-thumb: rgba(255, 255, 255, 0.15);
--scrollbar-hover: rgba(255, 255, 255, 0.25);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
background: var(--bg-primary);
color: var(--text-primary);
font-family: 'Inter', 'Plus Jakarta Sans', system-ui, sans-serif;
}
::selection {
background: rgba(59, 130, 246, 0.3);
color: white;
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: var(--scrollbar-thumb);
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--scrollbar-hover);
}
@layer utilities {
.glass {
background: var(--glass-bg);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid var(--glass-border);
}
.glass-hover:hover {
background: var(--glass-hover);
}
.gradient-text {
background: linear-gradient(135deg, var(--accent-electric), var(--accent-indigo), var(--accent-purple));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.gradient-text-signal {
background: linear-gradient(135deg, var(--accent-signal), #34d399, var(--accent-electric));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.text-shadow-glow {
text-shadow: 0 0 40px rgba(59, 130, 246, 0.3);
}
.glow-blue {
box-shadow: 0 0 30px rgba(59, 130, 246, 0.15), 0 0 60px rgba(59, 130, 246, 0.05);
}
.glow-signal {
box-shadow: 0 0 20px rgba(34, 197, 94, 0.15);
}
.mono-label {
font-family: 'JetBrains Mono', monospace;
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--text-muted);
}
.enterprise-grid {
background-image:
linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px);
background-size: 60px 60px;
}
.section-alt {
background: var(--bg-secondary);
}
}
/* === Light Mode === */
.theme-light {
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--bg-card: #f8fafc;
--bg-card-hover: #f1f5f9;
--border-subtle: #e2e8f0;
--text-primary: #0f172a;
--text-secondary: #334155;
--text-muted: #64748b;
--accent-electric: #2563eb;
--accent-signal: #059669;
--accent-indigo: #4f46e5;
--accent-purple: #7c3aed;
--glass-bg: #f8fafc;
--glass-border: #e2e8f0;
--glass-hover: #f1f5f9;
--scrollbar-thumb: #cbd5e1;
--scrollbar-hover: #94a3b8;
}
.theme-light body {
color: var(--text-primary);
}
.theme-light ::selection {
background: rgba(37, 99, 235, 0.15);
color: #0f172a;
}
/* Text overrides */
.theme-light .text-white { color: #0f172a; }
.theme-light .text-white\/80 { color: #1e293b; }
.theme-light .text-white\/70 { color: #334155; }
.theme-light .text-white\/60 { color: #475569; }
.theme-light .text-white\/50 { color: #64748b; }
.theme-light .text-white\/40 { color: #64748b; }
.theme-light .text-white\/30 { color: #94a3b8; }
.theme-light .text-white\/20 { color: #cbd5e1; }
/* Card backgrounds */
.theme-light .bg-white\/\[0\.06\],
.theme-light .bg-white\/\[0\.04\],
.theme-light .bg-white\/\[0\.03\] {
background-color: #f8fafc !important;
}
.theme-light .border-white\/\[0\.08\],
.theme-light .border-white\/\[0\.06\],
.theme-light .border-white\/10 {
border-color: #e2e8f0 !important;
}
/* No blur in light mode */
.theme-light .backdrop-blur-xl,
.theme-light .backdrop-blur {
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
/* Navbar */
.theme-light .bg-enterprise-dark\/80 {
background-color: rgba(255, 255, 255, 0.9) !important;
}
/* Enterprise grid */
.theme-light .enterprise-grid {
background-image:
linear-gradient(rgba(0, 0, 0, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.03) 1px, transparent 1px);
}
/* Gradient text — stronger in light */
.theme-light .gradient-text {
background: linear-gradient(135deg, #2563eb, #4f46e5, #7c3aed) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
.theme-light .gradient-text-signal {
background: linear-gradient(135deg, #059669, #10b981, #2563eb) !important;
-webkit-background-clip: text !important;
background-clip: text !important;
}
/* Mono label */
.theme-light .mono-label { color: #64748b; }
/* Status dots */
.theme-light .text-shadow-glow { text-shadow: none; }
.theme-light .glow-blue { box-shadow: 0 4px 14px -3px rgba(37, 99, 235, 0.15); }
/* Accent backgrounds */
.theme-light .bg-accent-electric\/10 { background-color: #eff6ff !important; }
.theme-light .bg-accent-electric\/5 { background-color: #f0f9ff !important; }
.theme-light .bg-accent-indigo\/10 { background-color: #eef2ff !important; }
.theme-light .bg-accent-indigo\/5 { background-color: #eef2ff !important; }
.theme-light .bg-accent-purple\/10 { background-color: #faf5ff !important; }
.theme-light .bg-accent-purple\/\[0\.04\] { background-color: #faf5ff !important; }
.theme-light .bg-amber-500\/10 { background-color: #fefce8 !important; }
/* Colored borders */
.theme-light .border-red-500\/20 { border-color: #fecaca !important; }
.theme-light .border-red-500\/15 { border-color: #fecaca !important; }
.theme-light .border-green-500\/20 { border-color: #bbf7d0 !important; }
.theme-light .border-green-500\/15 { border-color: #bbf7d0 !important; }
.theme-light .border-accent-electric\/30 { border-color: #bfdbfe !important; }
.theme-light .border-accent-indigo\/30 { border-color: #c7d2fe !important; }
.theme-light .border-accent-purple\/30 { border-color: #ddd6fe !important; }
.theme-light .border-accent-purple\/20 { border-color: #e9d5ff !important; }
.theme-light .border-accent-electric\/20 { border-color: #bfdbfe !important; }
/* Colored text */
.theme-light .text-red-400 { color: #dc2626 !important; }
.theme-light .text-green-400 { color: #059669 !important; }
.theme-light .text-amber-400 { color: #d97706 !important; }
.theme-light .text-accent-electric { color: #2563eb !important; }
.theme-light .text-accent-indigo { color: #4f46e5 !important; }
.theme-light .text-accent-purple { color: #7c3aed !important; }
.theme-light .text-accent-signal\/80 { color: #059669 !important; }
/* Colored backgrounds for tinted cards */
.theme-light .bg-red-500\/\[0\.04\] { background-color: #fef2f2 !important; }
.theme-light .bg-red-500\/\[0\.03\] { background-color: #fef2f2 !important; }
.theme-light .bg-green-500\/\[0\.04\] { background-color: #f0fdf4 !important; }
.theme-light .bg-green-500\/\[0\.03\] { background-color: #f0fdf4 !important; }
.theme-light .bg-red-500\/10 { background-color: #fef2f2 !important; }
.theme-light .bg-blue-500\/10 { background-color: #eff6ff !important; }
.theme-light .bg-green-500\/10 { background-color: #f0fdf4 !important; }
/* Terminal / code blocks */
.theme-light .bg-enterprise-darker {
background-color: #f1f5f9 !important;
}
/* Chat panel */
.theme-light .bg-black\/90 {
background-color: #ffffff !important;
border: 1px solid #e2e8f0 !important;
}
.theme-light .bg-black\/60 {
background-color: rgba(0, 0, 0, 0.1) !important;
}
/* Hover states */
.theme-light .hover\:bg-white\/\[0\.06\]:hover,
.theme-light .hover\:bg-white\/\[0\.04\]:hover { background-color: #f1f5f9 !important; }
.theme-light .hover\:bg-white\/20:hover { background-color: #e2e8f0 !important; }
/* Shadows */
.theme-light .shadow-lg { box-shadow: 0 4px 6px -1px rgba(0,0,0,0.06) !important; }
.theme-light .shadow-2xl { box-shadow: 0 10px 25px -5px rgba(0,0,0,0.08) !important; }
/* Table */
.theme-light .hover\:bg-white\/\[0\.02\]:hover { background-color: #f8fafc !important; }
.theme-light .bg-white\/\[0\.02\] { background-color: #f8fafc !important; }
+10
View File
@@ -0,0 +1,10 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="32" height="32" rx="8" fill="url(#g)"/>
<text x="16" y="22" text-anchor="middle" font-family="Inter, sans-serif" font-weight="700" font-size="18" fill="white">B</text>
<defs>
<linearGradient id="g" x1="0" y1="0" x2="32" y2="32">
<stop stop-color="#3b82f6"/>
<stop offset="1" stop-color="#6366f1"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 468 B

+41
View File
@@ -0,0 +1,41 @@
import Link from 'next/link'
export default function ImpressumPage() {
return (
<div className="min-h-screen bg-enterprise-dark text-white">
<div className="max-w-3xl mx-auto px-4 py-24">
<Link href="/" className="text-sm text-white/40 hover:text-white/60 transition-colors mb-8 inline-block">
&larr; Zurueck zur Startseite
</Link>
<h1 className="text-4xl font-bold mb-8">Impressum</h1>
<div className="space-y-6 text-white/60 text-sm">
<div>
<h2 className="text-lg font-semibold text-white mb-2">Angaben gemaess Paragraph 5 TMG</h2>
<p>BreakPilot GmbH (i.Gr.)</p>
<p>[Adresse wird nach Gruendung ergaenzt]</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">Kontakt</h2>
<p>E-Mail: info@breakpilot.ai</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">Verantwortlich fuer den Inhalt nach Paragraph 18 Abs. 2 MStV</h2>
<p>[Wird nach Gruendung ergaenzt]</p>
</div>
<div>
<h2 className="text-lg font-semibold text-white mb-2">EU-Streitschlichtung</h2>
<p>
Die Europaeische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit.
Unsere E-Mail-Adresse finden Sie oben im Impressum.
</p>
</div>
</div>
</div>
</div>
)
}
+34
View File
@@ -0,0 +1,34 @@
import type { Metadata } from 'next'
import { AppProvider } from '@/lib/context'
import ConsentBanner from '@/components/layout/ConsentBanner'
import './globals.css'
export const metadata: Metadata = {
title: 'BreakPilot | Deterministic Regulatory Engineering Platform',
description: 'Deterministische regulatorische Analyse für Maschinenbau, Fertigung und kritische Infrastruktur. Keine Halluzinationen. Keine US-Cloud. Volle Nachvollziehbarkeit.',
keywords: ['Compliance', 'Regulatory Engineering', 'CE-Kennzeichnung', 'Maschinenverordnung', 'DSGVO', 'NIS2', 'AI Act', 'Sovereign AI', 'CRA', 'OTA'],
robots: { index: true, follow: true },
openGraph: {
title: 'BreakPilot | Deterministic Regulatory Engineering',
description: 'Deterministische regulatorische Analyse. Keine Halluzinationen. Keine Compliance-Lücken.',
type: 'website',
locale: 'de_DE',
},
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="de">
<body className="antialiased">
<AppProvider>
{children}
<ConsentBanner />
</AppProvider>
</body>
</html>
)
}
+23
View File
@@ -0,0 +1,23 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import HeroSection from '@/components/sections/HeroSection'
import ProblemFlowSection from '@/components/sections/ProblemFlowSection'
import UseCaseCards from '@/components/sections/UseCaseCards'
import TrustBar from '@/components/sections/TrustBar'
export default function HomePage() {
return (
<>
<Navbar />
<main>
<HeroSection />
<ProblemFlowSection />
<UseCaseCards />
<TrustBar />
</main>
<Footer />
<ChatFAB />
</>
)
}
+20
View File
@@ -0,0 +1,20 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import PlatformBridgeSection from '@/components/sections/PlatformBridgeSection'
import ComparisonSection from '@/components/sections/ComparisonSection'
import ContinuousSection from '@/components/sections/ContinuousSection'
export default function PlattformPage() {
return (
<>
<Navbar />
<div className="pt-20" />
<PlatformBridgeSection />
<ComparisonSection />
<ContinuousSection />
<Footer />
<ChatFAB />
</>
)
}
+15
View File
@@ -0,0 +1,15 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import PricingSection from '@/components/sections/PricingSection'
export default function PreisePage() {
return (
<>
<Navbar />
<PricingSection />
<Footer />
<ChatFAB />
</>
)
}
@@ -0,0 +1,34 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import PageHeader from '@/components/ui/PageHeader'
import DeltaImpactSection from '@/components/sections/DeltaImpactSection'
import SecurityToolchainSection from '@/components/sections/SecurityToolchainSection'
import CRAFahrplanSection from '@/components/sections/CRAFahrplanSection'
import SafetySection from '@/components/sections/SafetySection'
import TargetSection from '@/components/sections/TargetSection'
export default function ProductCompliancePage() {
return (
<>
<Navbar />
<main>
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<PageHeader
tag="PRODUCT COMPLIANCE"
title="Muss ich mein Produkt"
titleHighlight="redesignen?"
subtitle="Delta-Impact-Analyse für bestehende Produkte. CRA, RED, Maschinenverordnung — priorisiert statt aufgelistet."
/>
</div>
<DeltaImpactSection />
<SecurityToolchainSection />
<CRAFahrplanSection />
<SafetySection />
<TargetSection />
</main>
<Footer />
<ChatFAB />
</>
)
}
+15
View File
@@ -0,0 +1,15 @@
import Navbar from '@/components/layout/Navbar'
import Footer from '@/components/layout/Footer'
import ChatFAB from '@/components/layout/ChatFAB'
import TeamSection from '@/components/sections/TeamSection'
export default function TeamPage() {
return (
<>
<Navbar />
<TeamSection />
<Footer />
<ChatFAB />
</>
)
}