0c09b960b9
- Session ID via sessionStorage UUID - Self-host Google Fonts (Inter, Plus Jakarta Sans, JetBrains Mono) — eliminates third-party transfer to Google, no more DSGVO violation - ScriptManager component: consent-change listener for future analytics/marketing scripts - GeoIP via browser timezone (Intl.DateTimeFormat) + IP injection in proxy - Vendor-level consent UI: loads vendor config from backend, shows per-vendor toggles under each category, sends vendor_consents dict - DSE updated: Google Fonts section now says "lokal gehostet" - Config proxy route: GET /api/consent/config Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import type { Metadata } from 'next'
|
|
import { AppProvider } from '@/lib/context'
|
|
import ConsentBanner from '@/components/layout/ConsentBanner'
|
|
import ScriptManager from '@/components/layout/ScriptManager'
|
|
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 />
|
|
<ScriptManager />
|
|
</AppProvider>
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|