This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BreakPilot Dev 19855efacc
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (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
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (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
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
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
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
feat: BreakPilot PWA - Full codebase (clean push without large binaries)
All services: admin-v2, studio-v2, website, ai-compliance-sdk,
consent-service, klausur-service, voice-service, and infrastructure.
Large PDFs and compiled binaries excluded via .gitignore.
2026-02-11 13:25:58 +01:00

244 lines
8.9 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use client'
import AdminLayout from '@/components/admin/AdminLayout'
import SystemInfoSection, { SYSTEM_INFO_CONFIGS } from '@/components/admin/SystemInfoSection'
import { AVAILABLE_WIZARDS, MODULE_ARCHITECTURE } from '@/lib/architecture-data'
interface WizardCardProps {
module: string
available: boolean
steps: number
priority: 'high' | 'medium' | 'low'
}
const PRIORITY_STYLES = {
high: 'border-red-200 bg-red-50',
medium: 'border-yellow-200 bg-yellow-50',
low: 'border-gray-200 bg-gray-50',
}
const PRIORITY_LABELS = {
high: { text: 'Hohe Prioritaet', color: 'text-red-700 bg-red-100' },
medium: { text: 'Mittlere Prioritaet', color: 'text-yellow-700 bg-yellow-100' },
low: { text: 'Niedrige Prioritaet', color: 'text-gray-700 bg-gray-100' },
}
const MODULE_ICONS: Record<string, string> = {
middleware: '🔧',
consent: '📋',
dsr: '🔒',
security: '🛡️',
rbac: '👥',
communication: '💬',
mail: '📧',
gpu: '🎮',
llm: '🤖',
rag: '📚',
'unity-bridge': '🔌',
}
function WizardCard({ module, available, steps, priority }: WizardCardProps) {
const architecture = MODULE_ARCHITECTURE[module]
const priorityStyle = PRIORITY_STYLES[priority]
const priorityLabel = PRIORITY_LABELS[priority]
const icon = MODULE_ICONS[module] || '📦'
return (
<div className={`rounded-xl border-2 p-6 transition-all ${priorityStyle} ${
available ? 'hover:shadow-lg cursor-pointer' : 'opacity-60'
}`}>
{/* Header */}
<div className="flex items-start justify-between mb-4">
<div className="flex items-center">
<span className="text-3xl mr-3">{icon}</span>
<div>
<h3 className="font-semibold text-gray-900">{architecture?.displayName || module}</h3>
<p className="text-sm text-gray-600">{architecture?.description || ''}</p>
</div>
</div>
<span className={`text-xs px-2 py-1 rounded-full ${priorityLabel.color}`}>
{priorityLabel.text}
</span>
</div>
{/* Services */}
{architecture && (
<div className="mb-4">
<h4 className="text-xs font-medium text-gray-500 uppercase tracking-wide mb-2">
Beteiligte Services
</h4>
<div className="flex flex-wrap gap-1">
{architecture.primaryServices.map((service) => (
<span
key={service}
className="px-2 py-1 bg-white rounded text-xs text-gray-700 border"
>
{service}
</span>
))}
{architecture.databases.map((db) => (
<span
key={db}
className="px-2 py-1 bg-blue-50 rounded text-xs text-blue-700 border border-blue-200"
>
{db}
</span>
))}
</div>
</div>
)}
{/* Footer */}
<div className="flex items-center justify-between pt-4 border-t border-gray-200">
<span className="text-sm text-gray-500">{steps} Schritte</span>
{available ? (
<a
href={`/admin/${module}/wizard`}
className="inline-flex items-center px-4 py-2 bg-blue-600 text-white rounded-lg text-sm font-medium hover:bg-blue-700 transition-colors"
>
Wizard starten
</a>
) : (
<span className="text-sm text-gray-400 italic">Demnachst verfuegbar</span>
)}
</div>
</div>
)
}
export default function OnboardingPage() {
const availableCount = AVAILABLE_WIZARDS.filter((w) => w.available).length
const totalCount = AVAILABLE_WIZARDS.length
return (
<AdminLayout
title="Onboarding Center"
description="Interaktive Lern-Wizards fuer alle Admin-Module"
>
{/* Hero Section */}
<div className="bg-gradient-to-r from-blue-600 to-purple-600 rounded-xl p-8 mb-8 text-white">
<div className="flex items-center mb-4">
<span className="text-4xl mr-4">🎓</span>
<div>
<h2 className="text-2xl font-bold">Willkommen im Onboarding Center</h2>
<p className="text-blue-100 mt-1">
Lernen Sie alle Admin-Module interaktiv kennen und testen Sie gleichzeitig alle Funktionen
</p>
</div>
</div>
<div className="grid grid-cols-3 gap-4 mt-6">
<div className="bg-white/10 rounded-lg p-4 text-center">
<div className="text-3xl font-bold">{availableCount}</div>
<div className="text-sm text-blue-100">Verfuegbare Wizards</div>
</div>
<div className="bg-white/10 rounded-lg p-4 text-center">
<div className="text-3xl font-bold">{totalCount}</div>
<div className="text-sm text-blue-100">Geplante Module</div>
</div>
<div className="bg-white/10 rounded-lg p-4 text-center">
<div className="text-3xl font-bold">~45</div>
<div className="text-sm text-blue-100">Minuten Onboarding</div>
</div>
</div>
</div>
{/* What You Learn */}
<div className="bg-white rounded-xl border p-6 mb-8">
<h3 className="font-semibold text-gray-900 mb-4 flex items-center">
<span className="mr-2">💡</span>
Was Sie in den Wizards lernen
</h3>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="flex items-start">
<span className="text-2xl mr-3">📖</span>
<div>
<h4 className="font-medium text-gray-900">Lernmaterial</h4>
<p className="text-sm text-gray-600">
Warum jede Funktion wichtig ist und welche Probleme sie loest
</p>
</div>
</div>
<div className="flex items-start">
<span className="text-2xl mr-3">🧪</span>
<div>
<h4 className="font-medium text-gray-900">Interaktive Tests</h4>
<p className="text-sm text-gray-600">
Alle Funktionen durchklicken und automatisch verifizieren
</p>
</div>
</div>
<div className="flex items-start">
<span className="text-2xl mr-3">🏗</span>
<div>
<h4 className="font-medium text-gray-900">Architektur-Kontext</h4>
<p className="text-sm text-gray-600">
Wo Sie sich im System befinden und welche Services beteiligt sind
</p>
</div>
</div>
</div>
</div>
{/* Wizard Grid */}
<div className="mb-6">
<h3 className="text-lg font-semibold text-gray-900 mb-4">Verfuegbare Wizards</h3>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{AVAILABLE_WIZARDS.filter((w) => w.available).map((wizard) => (
<WizardCard key={wizard.module} {...wizard} />
))}
</div>
</div>
{/* Coming Soon */}
<div className="mt-8">
<h3 className="text-lg font-semibold text-gray-900 mb-4">Demnachst verfuegbar</h3>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{AVAILABLE_WIZARDS.filter((w) => !w.available).map((wizard) => (
<WizardCard key={wizard.module} {...wizard} />
))}
</div>
</div>
{/* Quick Start Guide */}
<div className="mt-8 bg-slate-900 rounded-xl p-6 text-white">
<h3 className="font-semibold mb-4 flex items-center">
<span className="mr-2">🚀</span>
Schnellstart-Empfehlung
</h3>
<ol className="space-y-3">
<li className="flex items-start">
<span className="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-sm font-bold mr-3 flex-shrink-0">
1
</span>
<div>
<strong>Middleware Wizard</strong> - Verstehen Sie die Sicherheitsschicht, die alle Anfragen durchlaufen
</div>
</li>
<li className="flex items-start">
<span className="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-sm font-bold mr-3 flex-shrink-0">
2
</span>
<div>
<strong>Consent Wizard</strong> - Lernen Sie die DSGVO-konforme Einwilligungsverwaltung
</div>
</li>
<li className="flex items-start">
<span className="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-sm font-bold mr-3 flex-shrink-0">
3
</span>
<div>
<strong>Security Wizard</strong> - DevSecOps Praktiken und Sicherheitsscans verstehen
</div>
</li>
</ol>
</div>
{/* System Info Section - For Internal/External Audits */}
<div className="mt-8 border-t border-slate-200 pt-8">
<SystemInfoSection config={SYSTEM_INFO_CONFIGS.onboarding} />
</div>
</AdminLayout>
)
}