From 0b37c5e69245af94eb012c2203ca9c957cfc802b Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Fri, 24 Apr 2026 17:52:36 +0200 Subject: [PATCH] [split-required] Split website + studio-v2 monoliths (Phase 3 continued) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Website (14 monoliths split): - compliance/page.tsx (1,519 → 9), docs/audit (1,262 → 20) - quality (1,231 → 16), alerts (1,203 → 10), docs (1,202 → 11) - i18n.ts (1,173 → 8 language files) - unity-bridge (1,094 → 12), backlog (1,087 → 6) - training (1,066 → 8), rag (1,063 → 8) - Deleted index_original.ts (4,899 LOC dead backup) Studio-v2 (5 monoliths split): - meet/page.tsx (1,481 → 9), messages (1,166 → 9) - AlertsB2BContext.tsx (1,165 → 5 modules) - alerts-b2b/page.tsx (1,019 → 6), korrektur/archiv (1,001 → 6) All existing imports preserved. Zero new TypeScript errors. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../_components/DecisionTraceModal.tsx | 120 ++ .../app/alerts-b2b/_components/DigestView.tsx | 49 + .../_components/EmailImportModal.tsx | 163 ++ .../app/alerts-b2b/_components/HitCard.tsx | 66 + .../alerts-b2b/_components/HitDetailModal.tsx | 148 ++ studio-v2/app/alerts-b2b/page.tsx | 859 +--------- .../CreateKlausurFromTemplateModal.tsx | 130 ++ .../archiv/_components/DokumentCard.tsx | 79 + .../archiv/_components/FilterDropdown.tsx | 34 + .../archiv/_components/GlassCard.tsx | 49 + .../archiv/_components/PreviewModal.tsx | 164 ++ studio-v2/app/korrektur/archiv/page.tsx | 821 +-------- .../app/meet/_components/BreakoutTab.tsx | 183 ++ .../app/meet/_components/DashboardTab.tsx | 254 +++ .../app/meet/_components/JoinMeetingModal.tsx | 55 + .../app/meet/_components/NewMeetingModal.tsx | 131 ++ .../app/meet/_components/RecordingsTab.tsx | 196 +++ .../app/meet/_components/TranscriptModal.tsx | 93 + studio-v2/app/meet/_components/types.ts | 193 +++ studio-v2/app/meet/_components/useMeetPage.ts | 323 ++++ studio-v2/app/meet/page.tsx | 1502 ++--------------- .../app/messages/_components/ChatArea.tsx | 425 +++++ .../messages/_components/ContactInfoPanel.tsx | 113 ++ .../app/messages/_components/ContextMenu.tsx | 47 + .../messages/_components/ConversationList.tsx | 189 +++ .../app/messages/_components/EmojiPicker.tsx | 81 + .../_components/NewConversationModal.tsx | 106 ++ .../_components/TemplatesDropdown.tsx | 43 + .../messages/_components/useMessagesPage.ts | 166 ++ studio-v2/app/messages/page.tsx | 1152 +------------ studio-v2/lib/AlertsB2BContext.tsx | 927 +--------- studio-v2/lib/alerts-b2b/actions.ts | 149 ++ studio-v2/lib/alerts-b2b/helpers.ts | 59 + studio-v2/lib/alerts-b2b/template-data.ts | 427 +++++ studio-v2/lib/alerts-b2b/types.ts | 230 +++ .../admin/alerts/_components/DashboardTab.tsx | 80 + .../alerts/_components/DocumentationTab.tsx | 430 +++++ .../app/admin/alerts/_components/InboxTab.tsx | 67 + .../admin/alerts/_components/ProfileTab.tsx | 78 + .../app/admin/alerts/_components/RulesTab.tsx | 57 + .../admin/alerts/_components/TopicsTab.tsx | 49 + .../alerts/_components/alertsSystemConfig.ts | 133 ++ website/app/admin/alerts/_components/types.ts | 68 + .../alerts/_components/useAlertsData.tsx | 193 +++ website/app/admin/alerts/page.tsx | 1167 +------------ .../backlog/_components/BacklogItemCard.tsx | 133 ++ .../admin/backlog/_components/backlogData.ts | 205 +++ .../admin/backlog/_components/categories.tsx | 114 ++ .../app/admin/backlog/_components/types.ts | 35 + .../admin/backlog/_components/useBacklog.ts | 110 ++ website/app/admin/backlog/page.tsx | 992 +---------- .../compliance/_components/ArchitekturTab.tsx | 98 ++ .../admin/compliance/_components/AuditTab.tsx | 81 + .../_components/DokumentationTab.tsx | 97 ++ .../compliance/_components/ExecutiveTab.tsx | 303 ++++ .../compliance/_components/RoadmapTab.tsx | 105 ++ .../compliance/_components/TechnischTab.tsx | 88 + .../compliance/_components/UebersichtTab.tsx | 293 ++++ website/app/admin/compliance/page.tsx | 1408 +-------------- website/app/admin/compliance/types.ts | 191 +++ .../docs/_components/ApiReferenceTab.tsx | 67 + .../app/admin/docs/_components/DockerTab.tsx | 116 ++ .../admin/docs/_components/OverviewTab.tsx | 229 +++ .../docs/_components/ServiceDetailPanel.tsx | 79 + .../admin/docs/_components/ServicesTab.tsx | 78 + .../admin/docs/_components/TabNavigation.tsx | 31 + .../app/admin/docs/_components/TestingTab.tsx | 171 ++ .../docs/audit/_components/AuditHeader.tsx | 37 + .../audit/_components/AuditTitleBlock.tsx | 19 + .../docs/audit/_components/CodeBlock.tsx | 12 + .../admin/docs/audit/_components/Table.tsx | 33 + .../audit/_components/TableOfContents.tsx | 41 + .../audit/_components/sections/Anhaenge.tsx | 64 + .../_components/sections/BQASScheduler.tsx | 129 ++ .../_components/sections/BSIAndEUAIAct.tsx | 97 ++ .../sections/DatenschutzFolgen.tsx | 131 ++ .../InformationspflichtenAndArt22.tsx | 89 + .../_components/sections/KontakteAndVoice.tsx | 164 ++ .../sections/MLTrainingAndRechte.tsx | 106 ++ .../sections/ManagementSummary.tsx | 53 + .../sections/PrivacyByDesignAndTOM.tsx | 117 ++ .../_components/sections/Rechtsgrundlagen.tsx | 67 + .../sections/SchulungReviewVorfall.tsx | 98 ++ .../sections/VerarbeitungsTaetigkeiten.tsx | 72 + .../docs/audit/_components/sections/index.ts | 12 + website/app/admin/docs/audit/constants.ts | 54 + website/app/admin/docs/audit/page.tsx | 1239 +------------- website/app/admin/docs/data.ts | 386 +++++ website/app/admin/docs/helpers.ts | 58 + website/app/admin/docs/page.tsx | 1191 +------------ website/app/admin/docs/types.ts | 42 + .../quality/_components/FailedTestsList.tsx | 38 + .../admin/quality/_components/GoldenTab.tsx | 73 + .../quality/_components/IntentScoresChart.tsx | 38 + .../admin/quality/_components/MetricCard.tsx | 52 + .../admin/quality/_components/OverviewTab.tsx | 94 ++ .../app/admin/quality/_components/RagTab.tsx | 97 ++ .../_components/SchedulerStatusCard.tsx | 40 + .../quality/_components/SchedulerTab.tsx | 266 +++ .../admin/quality/_components/SpinnerIcon.tsx | 12 + .../quality/_components/SyntheticTab.tsx | 75 + .../quality/_components/TestRunsTable.tsx | 60 + .../quality/_components/TestSuiteCard.tsx | 97 ++ .../admin/quality/_components/TrendChart.tsx | 79 + website/app/admin/quality/page.tsx | 1186 +------------ website/app/admin/quality/types.ts | 56 + .../app/admin/quality/useQualityDashboard.ts | 132 ++ .../admin/rag/_components/CollectionsTab.tsx | 123 ++ .../admin/rag/_components/IngestionTab.tsx | 98 ++ .../app/admin/rag/_components/MetricsTab.tsx | 111 ++ .../app/admin/rag/_components/SearchTab.tsx | 141 ++ .../app/admin/rag/_components/UploadTab.tsx | 126 ++ website/app/admin/rag/_components/tabs.tsx | 49 + website/app/admin/rag/_components/types.ts | 35 + website/app/admin/rag/page.tsx | 976 +---------- .../training/_components/ChartComponents.tsx | 150 ++ .../training/_components/DatasetOverview.tsx | 62 + .../training/_components/NewTrainingModal.tsx | 230 +++ .../training/_components/QuickActions.tsx | 52 + .../training/_components/TrainingJobCard.tsx | 144 ++ website/app/admin/training/_components/api.ts | 123 ++ .../app/admin/training/_components/types.ts | 57 + website/app/admin/training/page.tsx | 985 +---------- .../unity-bridge/_components/AnalyticsTab.tsx | 92 + .../_components/ConsoleLogPanel.tsx | 89 + .../unity-bridge/_components/ContentTab.tsx | 133 ++ .../_components/DiagnosticPanel.tsx | 60 + .../unity-bridge/_components/EditorTab.tsx | 132 ++ .../unity-bridge/_components/StatCard.tsx | 31 + .../unity-bridge/_components/StatusBadge.tsx | 39 + .../unity-bridge/_components/UnitsTab.tsx | 145 ++ .../admin/unity-bridge/_components/tabs.tsx | 49 + .../admin/unity-bridge/_components/types.ts | 92 + .../_components/useUnityBridge.ts | 258 +++ website/app/admin/unity-bridge/page.tsx | 1060 +----------- website/lib/i18n-ar.ts | 161 ++ website/lib/i18n-de.ts | 177 ++ website/lib/i18n-en.ts | 161 ++ website/lib/i18n-pl.ts | 161 ++ website/lib/i18n-ru.ts | 161 ++ website/lib/i18n-tr.ts | 161 ++ website/lib/i18n-uk.ts | 161 ++ website/lib/i18n.ts | 1148 +------------ 143 files changed, 15822 insertions(+), 15889 deletions(-) create mode 100644 studio-v2/app/alerts-b2b/_components/DecisionTraceModal.tsx create mode 100644 studio-v2/app/alerts-b2b/_components/DigestView.tsx create mode 100644 studio-v2/app/alerts-b2b/_components/EmailImportModal.tsx create mode 100644 studio-v2/app/alerts-b2b/_components/HitCard.tsx create mode 100644 studio-v2/app/alerts-b2b/_components/HitDetailModal.tsx create mode 100644 studio-v2/app/korrektur/archiv/_components/CreateKlausurFromTemplateModal.tsx create mode 100644 studio-v2/app/korrektur/archiv/_components/DokumentCard.tsx create mode 100644 studio-v2/app/korrektur/archiv/_components/FilterDropdown.tsx create mode 100644 studio-v2/app/korrektur/archiv/_components/GlassCard.tsx create mode 100644 studio-v2/app/korrektur/archiv/_components/PreviewModal.tsx create mode 100644 studio-v2/app/meet/_components/BreakoutTab.tsx create mode 100644 studio-v2/app/meet/_components/DashboardTab.tsx create mode 100644 studio-v2/app/meet/_components/JoinMeetingModal.tsx create mode 100644 studio-v2/app/meet/_components/NewMeetingModal.tsx create mode 100644 studio-v2/app/meet/_components/RecordingsTab.tsx create mode 100644 studio-v2/app/meet/_components/TranscriptModal.tsx create mode 100644 studio-v2/app/meet/_components/types.ts create mode 100644 studio-v2/app/meet/_components/useMeetPage.ts create mode 100644 studio-v2/app/messages/_components/ChatArea.tsx create mode 100644 studio-v2/app/messages/_components/ContactInfoPanel.tsx create mode 100644 studio-v2/app/messages/_components/ContextMenu.tsx create mode 100644 studio-v2/app/messages/_components/ConversationList.tsx create mode 100644 studio-v2/app/messages/_components/EmojiPicker.tsx create mode 100644 studio-v2/app/messages/_components/NewConversationModal.tsx create mode 100644 studio-v2/app/messages/_components/TemplatesDropdown.tsx create mode 100644 studio-v2/app/messages/_components/useMessagesPage.ts create mode 100644 studio-v2/lib/alerts-b2b/actions.ts create mode 100644 studio-v2/lib/alerts-b2b/helpers.ts create mode 100644 studio-v2/lib/alerts-b2b/template-data.ts create mode 100644 studio-v2/lib/alerts-b2b/types.ts create mode 100644 website/app/admin/alerts/_components/DashboardTab.tsx create mode 100644 website/app/admin/alerts/_components/DocumentationTab.tsx create mode 100644 website/app/admin/alerts/_components/InboxTab.tsx create mode 100644 website/app/admin/alerts/_components/ProfileTab.tsx create mode 100644 website/app/admin/alerts/_components/RulesTab.tsx create mode 100644 website/app/admin/alerts/_components/TopicsTab.tsx create mode 100644 website/app/admin/alerts/_components/alertsSystemConfig.ts create mode 100644 website/app/admin/alerts/_components/types.ts create mode 100644 website/app/admin/alerts/_components/useAlertsData.tsx create mode 100644 website/app/admin/backlog/_components/BacklogItemCard.tsx create mode 100644 website/app/admin/backlog/_components/backlogData.ts create mode 100644 website/app/admin/backlog/_components/categories.tsx create mode 100644 website/app/admin/backlog/_components/types.ts create mode 100644 website/app/admin/backlog/_components/useBacklog.ts create mode 100644 website/app/admin/compliance/_components/ArchitekturTab.tsx create mode 100644 website/app/admin/compliance/_components/AuditTab.tsx create mode 100644 website/app/admin/compliance/_components/DokumentationTab.tsx create mode 100644 website/app/admin/compliance/_components/ExecutiveTab.tsx create mode 100644 website/app/admin/compliance/_components/RoadmapTab.tsx create mode 100644 website/app/admin/compliance/_components/TechnischTab.tsx create mode 100644 website/app/admin/compliance/_components/UebersichtTab.tsx create mode 100644 website/app/admin/compliance/types.ts create mode 100644 website/app/admin/docs/_components/ApiReferenceTab.tsx create mode 100644 website/app/admin/docs/_components/DockerTab.tsx create mode 100644 website/app/admin/docs/_components/OverviewTab.tsx create mode 100644 website/app/admin/docs/_components/ServiceDetailPanel.tsx create mode 100644 website/app/admin/docs/_components/ServicesTab.tsx create mode 100644 website/app/admin/docs/_components/TabNavigation.tsx create mode 100644 website/app/admin/docs/_components/TestingTab.tsx create mode 100644 website/app/admin/docs/audit/_components/AuditHeader.tsx create mode 100644 website/app/admin/docs/audit/_components/AuditTitleBlock.tsx create mode 100644 website/app/admin/docs/audit/_components/CodeBlock.tsx create mode 100644 website/app/admin/docs/audit/_components/Table.tsx create mode 100644 website/app/admin/docs/audit/_components/TableOfContents.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/Anhaenge.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/BQASScheduler.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/BSIAndEUAIAct.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/DatenschutzFolgen.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/InformationspflichtenAndArt22.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/KontakteAndVoice.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/MLTrainingAndRechte.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/ManagementSummary.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/PrivacyByDesignAndTOM.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/Rechtsgrundlagen.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/SchulungReviewVorfall.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/VerarbeitungsTaetigkeiten.tsx create mode 100644 website/app/admin/docs/audit/_components/sections/index.ts create mode 100644 website/app/admin/docs/audit/constants.ts create mode 100644 website/app/admin/docs/data.ts create mode 100644 website/app/admin/docs/helpers.ts create mode 100644 website/app/admin/docs/types.ts create mode 100644 website/app/admin/quality/_components/FailedTestsList.tsx create mode 100644 website/app/admin/quality/_components/GoldenTab.tsx create mode 100644 website/app/admin/quality/_components/IntentScoresChart.tsx create mode 100644 website/app/admin/quality/_components/MetricCard.tsx create mode 100644 website/app/admin/quality/_components/OverviewTab.tsx create mode 100644 website/app/admin/quality/_components/RagTab.tsx create mode 100644 website/app/admin/quality/_components/SchedulerStatusCard.tsx create mode 100644 website/app/admin/quality/_components/SchedulerTab.tsx create mode 100644 website/app/admin/quality/_components/SpinnerIcon.tsx create mode 100644 website/app/admin/quality/_components/SyntheticTab.tsx create mode 100644 website/app/admin/quality/_components/TestRunsTable.tsx create mode 100644 website/app/admin/quality/_components/TestSuiteCard.tsx create mode 100644 website/app/admin/quality/_components/TrendChart.tsx create mode 100644 website/app/admin/quality/types.ts create mode 100644 website/app/admin/quality/useQualityDashboard.ts create mode 100644 website/app/admin/rag/_components/CollectionsTab.tsx create mode 100644 website/app/admin/rag/_components/IngestionTab.tsx create mode 100644 website/app/admin/rag/_components/MetricsTab.tsx create mode 100644 website/app/admin/rag/_components/SearchTab.tsx create mode 100644 website/app/admin/rag/_components/UploadTab.tsx create mode 100644 website/app/admin/rag/_components/tabs.tsx create mode 100644 website/app/admin/rag/_components/types.ts create mode 100644 website/app/admin/training/_components/ChartComponents.tsx create mode 100644 website/app/admin/training/_components/DatasetOverview.tsx create mode 100644 website/app/admin/training/_components/NewTrainingModal.tsx create mode 100644 website/app/admin/training/_components/QuickActions.tsx create mode 100644 website/app/admin/training/_components/TrainingJobCard.tsx create mode 100644 website/app/admin/training/_components/api.ts create mode 100644 website/app/admin/training/_components/types.ts create mode 100644 website/app/admin/unity-bridge/_components/AnalyticsTab.tsx create mode 100644 website/app/admin/unity-bridge/_components/ConsoleLogPanel.tsx create mode 100644 website/app/admin/unity-bridge/_components/ContentTab.tsx create mode 100644 website/app/admin/unity-bridge/_components/DiagnosticPanel.tsx create mode 100644 website/app/admin/unity-bridge/_components/EditorTab.tsx create mode 100644 website/app/admin/unity-bridge/_components/StatCard.tsx create mode 100644 website/app/admin/unity-bridge/_components/StatusBadge.tsx create mode 100644 website/app/admin/unity-bridge/_components/UnitsTab.tsx create mode 100644 website/app/admin/unity-bridge/_components/tabs.tsx create mode 100644 website/app/admin/unity-bridge/_components/types.ts create mode 100644 website/app/admin/unity-bridge/_components/useUnityBridge.ts create mode 100644 website/lib/i18n-ar.ts create mode 100644 website/lib/i18n-de.ts create mode 100644 website/lib/i18n-en.ts create mode 100644 website/lib/i18n-pl.ts create mode 100644 website/lib/i18n-ru.ts create mode 100644 website/lib/i18n-tr.ts create mode 100644 website/lib/i18n-uk.ts diff --git a/studio-v2/app/alerts-b2b/_components/DecisionTraceModal.tsx b/studio-v2/app/alerts-b2b/_components/DecisionTraceModal.tsx new file mode 100644 index 0000000..8fa232e --- /dev/null +++ b/studio-v2/app/alerts-b2b/_components/DecisionTraceModal.tsx @@ -0,0 +1,120 @@ +'use client' + +import { useTheme } from '@/lib/ThemeContext' +import type { B2BHit } from '@/lib/AlertsB2BContext' + +export function DecisionTraceModal({ + hit, + onClose +}: { + hit: B2BHit + onClose: () => void +}) { + const { isDark } = useTheme() + const trace = hit.decisionTrace + + return ( +
+
+
+
+

+ Decision Trace +

+ +
+ + {trace ? ( +
+ {/* Rules Triggered */} +
+

+ Regeln ausgeloest +

+
+ {trace.rulesTriggered.map((rule, idx) => ( + + {rule} + + ))} +
+
+ + {/* LLM Used */} +
+
+ LLM verwendet + + {trace.llmUsed ? `Ja (${Math.round((trace.llmConfidence || 0) * 100)}% Konfidenz)` : 'Nein'} + +
+
+ + {/* Signals */} +
+ {trace.signals.procurementSignalsFound.length > 0 && ( +
+

+ Beschaffungs-Signale +

+

+ {trace.signals.procurementSignalsFound.join(', ')} +

+
+ )} + + {trace.signals.publicBuyerSignalsFound.length > 0 && ( +
+

+ Oeffentliche Auftraggeber +

+

+ {trace.signals.publicBuyerSignalsFound.join(', ')} +

+
+ )} + + {trace.signals.productSignalsFound.length > 0 && ( +
+

+ Produkt-Signale +

+

+ {trace.signals.productSignalsFound.join(', ')} +

+
+ )} + + {trace.signals.negativesFound.length > 0 && ( +
+

+ Negative Signale +

+

+ {trace.signals.negativesFound.join(', ')} +

+
+ )} +
+
+ ) : ( +

+ Kein Decision Trace verfuegbar. +

+ )} +
+
+ ) +} diff --git a/studio-v2/app/alerts-b2b/_components/DigestView.tsx b/studio-v2/app/alerts-b2b/_components/DigestView.tsx new file mode 100644 index 0000000..35f619d --- /dev/null +++ b/studio-v2/app/alerts-b2b/_components/DigestView.tsx @@ -0,0 +1,49 @@ +'use client' + +import { useTheme } from '@/lib/ThemeContext' +import type { B2BHit } from '@/lib/AlertsB2BContext' +import { HitCard } from './HitCard' + +export function DigestView({ + hits, + onHitClick +}: { + hits: B2BHit[] + onHitClick: (hit: B2BHit) => void +}) { + const { isDark } = useTheme() + + return ( +
+
+ 📬 +

+ Tages-Digest (Top 10) +

+
+ {hits.length === 0 ? ( +
+ 🎉 +

Keine relevanten Hits heute

+
+ ) : ( +
+ {hits.map((hit, idx) => ( +
+ + {idx + 1} + +
+ onHitClick(hit)} /> +
+
+ ))} +
+ )} +
+ ) +} diff --git a/studio-v2/app/alerts-b2b/_components/EmailImportModal.tsx b/studio-v2/app/alerts-b2b/_components/EmailImportModal.tsx new file mode 100644 index 0000000..8d8870f --- /dev/null +++ b/studio-v2/app/alerts-b2b/_components/EmailImportModal.tsx @@ -0,0 +1,163 @@ +'use client' + +import { useState } from 'react' +import { useTheme } from '@/lib/ThemeContext' + +export function EmailImportModal({ + onClose, + onImport +}: { + onClose: () => void + onImport: (content: string, subject?: string) => void +}) { + const { isDark } = useTheme() + const [emailSubject, setEmailSubject] = useState('') + const [emailContent, setEmailContent] = useState('') + const [isProcessing, setIsProcessing] = useState(false) + + const handleImport = async () => { + if (!emailContent.trim()) return + setIsProcessing(true) + // Simulate processing delay + await new Promise(resolve => setTimeout(resolve, 800)) + onImport(emailContent, emailSubject || undefined) + setIsProcessing(false) + onClose() + } + + return ( +
+
+
+
+
+
+ 📧 +
+
+

+ E-Mail manuell einfuegen +

+

+ Fuegen Sie den Inhalt einer Google Alert E-Mail ein +

+
+
+ +
+ +
+ {/* Subject (optional) */} +
+ + setEmailSubject(e.target.value)} + className={`w-full px-4 py-3 rounded-xl border ${ + isDark + ? 'bg-white/10 border-white/20 text-white placeholder-white/40' + : 'bg-white border-slate-200 text-slate-900 placeholder-slate-400' + }`} + /> +
+ + {/* Email Content */} +
+ +