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:
@@ -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 })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user