'use client' /** * Production Readiness Backlog * * Comprehensive checklist of items needed before going live with BreakPilot * Includes CI/CD, Security, RBAC, Data Protection, and Release Workflows */ import AdminLayout from '@/components/admin/AdminLayout' import { useState, useEffect } from 'react' interface BacklogItem { id: string title: string description: string category: string priority: 'critical' | 'high' | 'medium' | 'low' status: 'not_started' | 'in_progress' | 'review' | 'completed' | 'blocked' assignee?: string dueDate?: string notes?: string subtasks?: { id: string; title: string; completed: boolean }[] } interface BacklogCategory { id: string name: string icon: React.ReactNode color: string description: string } const categories: BacklogCategory[] = [ { id: 'modules', name: 'Module Progress', icon: ( ), color: 'bg-violet-100 text-violet-700 border-violet-300', description: 'Fertigstellungsgrad aller Services & Module', }, { id: 'cicd', name: 'CI/CD Pipelines', icon: ( ), color: 'bg-blue-100 text-blue-700 border-blue-300', description: 'Build, Test & Deployment Automation', }, { id: 'security', name: 'Security & Vulnerability', icon: ( ), color: 'bg-red-100 text-red-700 border-red-300', description: 'Security Scans, Dependency Checks & Penetration Testing', }, { id: 'testing', name: 'Testing & Quality', icon: ( ), color: 'bg-emerald-100 text-emerald-700 border-emerald-300', description: 'Unit Tests, Integration Tests & E2E Testing', }, { id: 'rbac', name: 'RBAC & Access Control', icon: ( ), color: 'bg-purple-100 text-purple-700 border-purple-300', description: 'Developer Roles, Permissions & Team Management', }, { id: 'git', name: 'Git & Branch Protection', icon: ( ), color: 'bg-orange-100 text-orange-700 border-orange-300', description: 'Protected Branches, Merge Requests & Code Reviews', }, { id: 'release', name: 'Release Management', icon: ( ), color: 'bg-green-100 text-green-700 border-green-300', description: 'Versioning, Changelog & Release Notes', }, { id: 'data', name: 'Data Protection', icon: ( ), color: 'bg-cyan-100 text-cyan-700 border-cyan-300', description: 'Backup, Migration & Customer Data Safety', }, { id: 'compliance', name: 'Compliance & SBOM', icon: ( ), color: 'bg-teal-100 text-teal-700 border-teal-300', description: 'SBOM, Lizenzen & Open Source Compliance', }, { id: 'approval', name: 'Approval Workflow', icon: ( ), color: 'bg-indigo-100 text-indigo-700 border-indigo-300', description: 'Developer Approval, QA Sign-off & Release Gates', }, ] const initialBacklogItems: BacklogItem[] = [ // ==================== MODULE PROGRESS ==================== { id: 'mod-1', title: 'Consent Service (Go) - 85% fertig', description: 'DSGVO Consent Management Microservice - Near Production Ready', category: 'modules', priority: 'high', status: 'in_progress', notes: 'Port 8081. 19 Test-Dateien vorhanden. JWT Auth, OAuth 2.0, TOTP 2FA, DSR Workflow, Matrix/Jitsi Integration.', subtasks: [ { id: 'mod-1-1', title: 'Core Consent API (CRUD, Versioning)', completed: true }, { id: 'mod-1-2', title: 'Authentication (JWT, OAuth 2.0, TOTP)', completed: true }, { id: 'mod-1-3', title: 'DSR Workflow (Art. 15-21)', completed: true }, { id: 'mod-1-4', title: 'Email Templates & Notifications', completed: true }, { id: 'mod-1-5', title: 'Matrix/Jitsi Integration', completed: true }, { id: 'mod-1-6', title: 'Performance Tests (High-Load)', completed: false }, { id: 'mod-1-7', title: 'E2E API Contract Tests', completed: false }, ], }, { id: 'mod-2', title: 'School Service (Go) - 75% fertig', description: 'Klassen, Noten, Zeugnisse Microservice', category: 'modules', priority: 'high', status: 'in_progress', notes: 'Port 8084. 6 Test-Dateien. Zeugnis-Workflow mit RBAC (Fachlehrer, Klassenlehrer, Schulleitung).', subtasks: [ { id: 'mod-2-1', title: 'Klassen & Schueler Management', completed: true }, { id: 'mod-2-2', title: 'Noten-System mit Statistik', completed: true }, { id: 'mod-2-3', title: 'Zeugnis-Workflow & Rollen', completed: true }, { id: 'mod-2-4', title: 'Exam Variant Generation (LLM)', completed: true }, { id: 'mod-2-5', title: 'Seed Data Generator', completed: true }, { id: 'mod-2-6', title: 'Integration Tests zwischen Services', completed: false }, { id: 'mod-2-7', title: 'Performance Tests (grosse Klassen)', completed: false }, { id: 'mod-2-8', title: 'Trend-Analyse & Comparative Analytics', completed: false }, ], }, { id: 'mod-3', title: 'Billing Service (Go) - 80% fertig', description: 'Stripe Integration & Task-Based Billing', category: 'modules', priority: 'high', status: 'in_progress', notes: 'Port 8083. 5 Test-Dateien. Task-Konsum mit 5-Monats-Carryover, Fair Use Mode.', subtasks: [ { id: 'mod-3-1', title: 'Subscription Lifecycle', completed: true }, { id: 'mod-3-2', title: 'Stripe Checkout & Webhooks', completed: true }, { id: 'mod-3-3', title: 'Task-Based Consumption Tracking', completed: true }, { id: 'mod-3-4', title: 'Feature Gating / Entitlements', completed: true }, { id: 'mod-3-5', title: 'Customer Portal Integration', completed: true }, { id: 'mod-3-6', title: 'Refund & Chargeback Handling', completed: false }, { id: 'mod-3-7', title: 'Advanced Analytics & Reporting', completed: false }, ], }, { id: 'mod-4', title: 'Klausur Service (Python) - 70% fertig', description: 'BYOEH Abitur-Klausurkorrektur System', category: 'modules', priority: 'critical', status: 'in_progress', notes: 'Port 8086. 2 Test-Dateien. BYOEH mit AES-256-GCM Encryption, Qdrant Vector DB, Key-Sharing.', subtasks: [ { id: 'mod-4-1', title: 'BYOEH Upload & Encryption', completed: true }, { id: 'mod-4-2', title: 'Key-Sharing zwischen Pruefern', completed: true }, { id: 'mod-4-3', title: 'Qdrant RAG Integration', completed: true }, { id: 'mod-4-4', title: 'RBAC fuer Pruefer-Rollen', completed: true }, { id: 'mod-4-5', title: 'OCR Pipeline Implementation', completed: false }, { id: 'mod-4-6', title: 'KI-gestuetzte Korrektur API', completed: false }, { id: 'mod-4-7', title: 'Gutachten-Generierung', completed: false }, { id: 'mod-4-8', title: 'Frontend: KorrekturPage fertigstellen', completed: false }, ], }, { id: 'mod-5', title: 'Admin Frontend (Next.js) - 60% fertig', description: 'Next.js 15 Admin Dashboard', category: 'modules', priority: 'high', status: 'in_progress', notes: 'Port 3000. Nur 1 Test-Datei! Viele Admin-Seiten sind nur Skelett-Implementierungen.', subtasks: [ { id: 'mod-5-1', title: 'AdminLayout & Navigation', completed: true }, { id: 'mod-5-2', title: 'SBOM & Architecture Pages', completed: true }, { id: 'mod-5-3', title: 'Security Dashboard', completed: true }, { id: 'mod-5-4', title: 'Backlog Page', completed: true }, { id: 'mod-5-5', title: 'Consent Management Page', completed: true }, { id: 'mod-5-6', title: 'Edu-Search Implementation', completed: false }, { id: 'mod-5-7', title: 'DSMS Page Implementation', completed: false }, { id: 'mod-5-8', title: 'Component Unit Tests', completed: false }, { id: 'mod-5-9', title: 'E2E Tests mit Playwright', completed: false }, { id: 'mod-5-10', title: 'Authentication Implementation', completed: false }, ], }, { id: 'mod-6', title: 'Backend Studio (Python) - 65% fertig', description: 'Lehrer-Frontend Module (FastAPI)', category: 'modules', priority: 'medium', status: 'in_progress', notes: 'Port 8000. Keine dedizierten Tests! Integration mit allen APIs.', subtasks: [ { id: 'mod-6-1', title: 'Studio Router & Module Loading', completed: true }, { id: 'mod-6-2', title: 'School Module UI', completed: true }, { id: 'mod-6-3', title: 'Meetings/Jitsi Integration', completed: true }, { id: 'mod-6-4', title: 'Customer Portal (Slim)', completed: true }, { id: 'mod-6-5', title: 'Dev Admin Panel', completed: true }, { id: 'mod-6-6', title: 'Component Unit Tests', completed: false }, { id: 'mod-6-7', title: 'UI Component Dokumentation', completed: false }, { id: 'mod-6-8', title: 'Accessibility Compliance', completed: false }, ], }, { id: 'mod-7', title: 'DSMS/IPFS Service - 40% fertig', description: 'Dezentrales Speichersystem', category: 'modules', priority: 'low', status: 'not_started', notes: 'Port 8082. Keine Tests! Grundstruktur vorhanden aber Core-Logic fehlt.', subtasks: [ { id: 'mod-7-1', title: 'Service Struktur', completed: true }, { id: 'mod-7-2', title: 'IPFS Configuration', completed: true }, { id: 'mod-7-3', title: 'Upload/Download Handlers', completed: false }, { id: 'mod-7-4', title: 'Encryption/Decryption Layer', completed: false }, { id: 'mod-7-5', title: 'Pinning Strategy', completed: false }, { id: 'mod-7-6', title: 'Replication Logic', completed: false }, { id: 'mod-7-7', title: 'Tests & Dokumentation', completed: false }, ], }, { id: 'mod-8', title: 'Security Module (Python) - 75% fertig', description: 'DevSecOps Dashboard & Scans', category: 'modules', priority: 'medium', status: 'in_progress', notes: 'Teil von Backend. Keine dedizierten Tests! Gitleaks, Semgrep, Bandit, Trivy Integration.', subtasks: [ { id: 'mod-8-1', title: 'Security Tool Status API', completed: true }, { id: 'mod-8-2', title: 'Findings Aggregation', completed: true }, { id: 'mod-8-3', title: 'Report Parsing (alle Tools)', completed: true }, { id: 'mod-8-4', title: 'SBOM Generation (CycloneDX)', completed: true }, { id: 'mod-8-5', title: 'Scan Triggering', completed: true }, { id: 'mod-8-6', title: 'Unit Tests fuer Parser', completed: false }, { id: 'mod-8-7', title: 'Vulnerability Tracking', completed: false }, { id: 'mod-8-8', title: 'Compliance Reporting (SOC2)', completed: false }, ], }, // ==================== TESTING & QUALITY ==================== { id: 'test-1', title: 'Test Coverage Erhöhen - Consent Service', description: 'Integration & E2E Tests fuer produktionskritischen Service', category: 'testing', priority: 'high', status: 'not_started', subtasks: [ { id: 'test-1-1', title: 'E2E API Tests mit echter DB', completed: false }, { id: 'test-1-2', title: 'Load Testing mit k6 oder vegeta', completed: false }, { id: 'test-1-3', title: 'Edge Cases in DSR Workflow', completed: false }, ], }, { id: 'test-2', title: 'Admin Frontend Test Suite', description: 'Component & E2E Tests fuer Next.js Admin', category: 'testing', priority: 'critical', status: 'not_started', notes: 'Aktuell nur 1 Test-Datei! Kritischer Mangel.', subtasks: [ { id: 'test-2-1', title: 'Jest/Vitest fuer Component Tests', completed: false }, { id: 'test-2-2', title: 'Playwright E2E Setup', completed: false }, { id: 'test-2-3', title: 'API Mock Layer', completed: false }, { id: 'test-2-4', title: 'Visual Regression Tests', completed: false }, ], }, { id: 'test-3', title: 'Klausur Service Tests erweitern', description: 'OCR & KI-Korrektur Pipeline testen', category: 'testing', priority: 'high', status: 'not_started', subtasks: [ { id: 'test-3-1', title: 'BYOEH Encryption Tests', completed: true }, { id: 'test-3-2', title: 'Key-Sharing Tests', completed: true }, { id: 'test-3-3', title: 'OCR Pipeline Integration Tests', completed: false }, { id: 'test-3-4', title: 'Large File Upload Tests', completed: false }, ], }, { id: 'test-4', title: 'Security Module Unit Tests', description: 'Parser-Funktionen und Findings-Aggregation testen', category: 'testing', priority: 'medium', status: 'not_started', subtasks: [ { id: 'test-4-1', title: 'Gitleaks Parser Tests', completed: false }, { id: 'test-4-2', title: 'Trivy Parser Tests', completed: false }, { id: 'test-4-3', title: 'SBOM Generation Tests', completed: false }, { id: 'test-4-4', title: 'Mock Security Reports', completed: false }, ], }, // ==================== CI/CD PIPELINES ==================== { id: 'cicd-1', title: 'GitHub Actions Workflow Setup', description: 'Basis CI/CD Pipeline mit GitHub Actions aufsetzen', category: 'cicd', priority: 'critical', status: 'completed', notes: 'Implementiert in .github/workflows/ci.yml - Go, Python, Node.js Tests, Docker Build & Push zu GHCR, Staging/Production Deployment', subtasks: [ { id: 'cicd-1-1', title: 'Build-Job fuer alle Services (Go, Python, Node)', completed: true }, { id: 'cicd-1-2', title: 'Test-Job mit Coverage Report', completed: true }, { id: 'cicd-1-3', title: 'Docker Image Build & Push', completed: true }, { id: 'cicd-1-4', title: 'Deploy to Staging Environment', completed: true }, ], }, { id: 'cicd-2', title: 'Staging Environment einrichten', description: 'Separate Staging-Umgebung fuer Pre-Production Tests', category: 'cicd', priority: 'high', status: 'not_started', subtasks: [ { id: 'cicd-2-1', title: 'Staging Server/Cluster provisionieren', completed: false }, { id: 'cicd-2-2', title: 'Staging Datenbank mit anonymisierten Daten', completed: false }, { id: 'cicd-2-3', title: 'Automatisches Deployment bei Merge to main', completed: false }, ], }, { id: 'cicd-3', title: 'Production Deployment Pipeline', description: 'Kontrolliertes Deployment in Production mit Rollback', category: 'cicd', priority: 'critical', status: 'not_started', subtasks: [ { id: 'cicd-3-1', title: 'Blue-Green oder Canary Deployment Strategy', completed: false }, { id: 'cicd-3-2', title: 'Automatischer Rollback bei Fehlern', completed: false }, { id: 'cicd-3-3', title: 'Health Check nach Deployment', completed: false }, { id: 'cicd-3-4', title: 'Deployment Notifications (Slack/Email)', completed: false }, ], }, // Security & Vulnerability { id: 'sec-1', title: 'Dependency Vulnerability Scanning', description: 'Automatische Pruefung auf bekannte Schwachstellen in Dependencies', category: 'security', priority: 'critical', status: 'completed', notes: 'Implementiert in .github/dependabot.yml - Go, Python, npm, GitHub Actions und Docker Dependencies werden woechentlich geprueft', subtasks: [ { id: 'sec-1-1', title: 'Dependabot fuer Go aktivieren', completed: true }, { id: 'sec-1-2', title: 'Dependabot fuer Python aktivieren', completed: true }, { id: 'sec-1-3', title: 'Dependabot fuer npm aktivieren', completed: true }, { id: 'sec-1-4', title: 'CI-Job: Block Merge bei kritischen Vulnerabilities', completed: true }, ], }, { id: 'sec-2', title: 'Container Image Scanning', description: 'Sicherheitspruefung aller Docker Images vor Deployment', category: 'security', priority: 'high', status: 'completed', notes: 'Implementiert in .github/workflows/security.yml - Trivy scannt alle Docker Images', subtasks: [ { id: 'sec-2-1', title: 'Trivy oder Snyk in CI integrieren', completed: true }, { id: 'sec-2-2', title: 'Base Image Policy definieren', completed: true }, { id: 'sec-2-3', title: 'Scan Report bei jedem Build', completed: true }, ], }, { id: 'sec-3', title: 'SAST (Static Application Security Testing)', description: 'Code-Analyse auf Sicherheitsluecken', category: 'security', priority: 'high', status: 'completed', notes: 'Implementiert in .github/workflows/security.yml - Gosec, Bandit, npm audit', subtasks: [ { id: 'sec-3-1', title: 'CodeQL fuer Go/Python aktivieren', completed: true }, { id: 'sec-3-2', title: 'Semgrep Regeln konfigurieren', completed: false }, { id: 'sec-3-3', title: 'OWASP Top 10 Checks integrieren', completed: true }, ], }, { id: 'sec-4', title: 'Secret Scanning', description: 'Verhindern, dass Secrets in Git landen', category: 'security', priority: 'critical', status: 'completed', notes: 'Implementiert in .github/workflows/security.yml - TruffleHog und GitLeaks scannen nach Secrets', subtasks: [ { id: 'sec-4-1', title: 'GitHub Secret Scanning aktivieren', completed: true }, { id: 'sec-4-2', title: 'Pre-commit Hook mit gitleaks', completed: true }, { id: 'sec-4-3', title: 'Historische Commits scannen', completed: true }, ], }, // RBAC & Access Control { id: 'rbac-1', title: 'GitHub Team & Repository Permissions', description: 'Team-basierte Zugriffsrechte auf Repository', category: 'rbac', priority: 'high', status: 'not_started', subtasks: [ { id: 'rbac-1-1', title: 'Team "Maintainers" erstellen (Full Access)', completed: false }, { id: 'rbac-1-2', title: 'Team "Developers" erstellen (Write Access)', completed: false }, { id: 'rbac-1-3', title: 'Team "Reviewers" erstellen (Read + Review)', completed: false }, { id: 'rbac-1-4', title: 'External Collaborators Policy', completed: false }, ], }, { id: 'rbac-2', title: 'Infrastructure Access Control', description: 'Zugriffsrechte auf Server und Cloud-Ressourcen', category: 'rbac', priority: 'critical', status: 'not_started', subtasks: [ { id: 'rbac-2-1', title: 'SSH Key Management Policy', completed: false }, { id: 'rbac-2-2', title: 'Production Server Access Audit Log', completed: false }, { id: 'rbac-2-3', title: 'Database Access nur ueber Jump Host', completed: false }, { id: 'rbac-2-4', title: 'Secrets Management (Vault/AWS Secrets)', completed: false }, ], }, { id: 'rbac-3', title: 'Admin Panel Access Control', description: 'Rollenbasierte Zugriffsrechte im Admin Frontend', category: 'rbac', priority: 'medium', status: 'not_started', subtasks: [ { id: 'rbac-3-1', title: 'Admin Authentication implementieren', completed: false }, { id: 'rbac-3-2', title: 'Role-based Views (Admin vs. Support)', completed: false }, { id: 'rbac-3-3', title: 'Audit Log fuer Admin-Aktionen', completed: false }, ], }, // Git & Branch Protection { id: 'git-1', title: 'Protected Branches Setup', description: 'Schutz fuer main/develop Branches', category: 'git', priority: 'critical', status: 'not_started', subtasks: [ { id: 'git-1-1', title: 'main Branch: No direct push', completed: false }, { id: 'git-1-2', title: 'Require PR with min. 1 Approval', completed: false }, { id: 'git-1-3', title: 'Require Status Checks (CI muss gruen sein)', completed: false }, { id: 'git-1-4', title: 'Require Signed Commits', completed: false }, ], }, { id: 'git-2', title: 'Pull Request Template', description: 'Standardisierte PR-Beschreibung mit Checkliste', category: 'git', priority: 'medium', status: 'not_started', subtasks: [ { id: 'git-2-1', title: 'PR Template mit Description, Testing, Checklist', completed: false }, { id: 'git-2-2', title: 'Issue Template fuer Bugs und Features', completed: false }, { id: 'git-2-3', title: 'Automatische Labels basierend auf Aenderungen', completed: false }, ], }, { id: 'git-3', title: 'Code Review Guidelines', description: 'Dokumentierte Richtlinien fuer Code Reviews', category: 'git', priority: 'medium', status: 'not_started', subtasks: [ { id: 'git-3-1', title: 'Code Review Checklist erstellen', completed: false }, { id: 'git-3-2', title: 'Review Turnaround Time Policy', completed: false }, { id: 'git-3-3', title: 'CODEOWNERS Datei pflegen', completed: false }, ], }, // Release Management { id: 'rel-1', title: 'Semantic Versioning Setup', description: 'Automatische Versionierung nach SemVer', category: 'release', priority: 'high', status: 'not_started', subtasks: [ { id: 'rel-1-1', title: 'Conventional Commits erzwingen', completed: false }, { id: 'rel-1-2', title: 'semantic-release oder release-please einrichten', completed: false }, { id: 'rel-1-3', title: 'Automatische Git Tags', completed: false }, ], }, { id: 'rel-2', title: 'Changelog Automation', description: 'Automatisch generierte Release Notes', category: 'release', priority: 'medium', status: 'not_started', subtasks: [ { id: 'rel-2-1', title: 'CHANGELOG.md automatisch generieren', completed: false }, { id: 'rel-2-2', title: 'GitHub Release mit Notes erstellen', completed: false }, { id: 'rel-2-3', title: 'Breaking Changes hervorheben', completed: false }, ], }, { id: 'rel-3', title: 'Release Branches Strategy', description: 'Branching-Modell fuer Releases definieren', category: 'release', priority: 'medium', status: 'not_started', subtasks: [ { id: 'rel-3-1', title: 'Git Flow oder GitHub Flow definieren', completed: false }, { id: 'rel-3-2', title: 'Hotfix Branch Process', completed: false }, { id: 'rel-3-3', title: 'Release Branch Protection', completed: false }, ], }, // Data Protection { id: 'data-1', title: 'Database Backup Strategy', description: 'Automatische Backups mit Retention Policy', category: 'data', priority: 'critical', status: 'not_started', subtasks: [ { id: 'data-1-1', title: 'Taegliche automatische Backups', completed: false }, { id: 'data-1-2', title: 'Point-in-Time Recovery aktivieren', completed: false }, { id: 'data-1-3', title: 'Backup Encryption at Rest', completed: false }, { id: 'data-1-4', title: 'Backup Restore Test dokumentieren', completed: false }, ], }, { id: 'data-2', title: 'Customer Data Protection', description: 'Schutz von Stammdaten, Consent & Dokumenten', category: 'data', priority: 'critical', status: 'not_started', subtasks: [ { id: 'data-2-1', title: 'Stammdaten: Encryption at Rest', completed: false }, { id: 'data-2-2', title: 'Consent-Daten: Audit Log fuer Aenderungen', completed: false }, { id: 'data-2-3', title: 'Dokumente: Secure Storage (S3 mit Encryption)', completed: false }, { id: 'data-2-4', title: 'PII Data Masking in Logs', completed: false }, ], }, { id: 'data-3', title: 'Migration Safety', description: 'Sichere Datenbank-Migrationen ohne Datenverlust', category: 'data', priority: 'high', status: 'not_started', subtasks: [ { id: 'data-3-1', title: 'Migration Pre-Check Script', completed: false }, { id: 'data-3-2', title: 'Rollback-faehige Migrationen', completed: false }, { id: 'data-3-3', title: 'Staging Migration Test vor Production', completed: false }, ], }, { id: 'data-4', title: 'Data Anonymization', description: 'Anonymisierte Daten fuer Staging/Test', category: 'data', priority: 'medium', status: 'not_started', subtasks: [ { id: 'data-4-1', title: 'Anonymisierungs-Script fuer Staging DB', completed: false }, { id: 'data-4-2', title: 'Test-Datengenerator', completed: false }, { id: 'data-4-3', title: 'DSGVO-konforme Loeschung in Test-Systemen', completed: false }, ], }, // Compliance & SBOM { id: 'sbom-1', title: 'Software Bill of Materials (SBOM) erstellen', description: 'Vollstaendige Liste aller Open Source Komponenten', category: 'compliance', priority: 'high', status: 'completed', notes: 'Implementiert in /admin/sbom - 70+ Komponenten dokumentiert inkl. Docker Services, Security Tools, Python/Go/Node Packages', subtasks: [ { id: 'sbom-1-1', title: 'Go Dependencies auflisten (go.mod)', completed: true }, { id: 'sbom-1-2', title: 'Python Dependencies auflisten (requirements.txt)', completed: true }, { id: 'sbom-1-3', title: 'npm Dependencies auflisten (package.json)', completed: true }, { id: 'sbom-1-4', title: 'Docker Base Images dokumentieren', completed: true }, { id: 'sbom-1-5', title: 'SBOM in CycloneDX/SPDX Format exportieren', completed: true }, ], }, { id: 'sbom-2', title: 'Open Source Lizenz-Compliance', description: 'Pruefung aller Lizenzen auf Kompatibilitaet', category: 'compliance', priority: 'high', status: 'in_progress', subtasks: [ { id: 'sbom-2-1', title: 'Alle Lizenzen identifizieren (MIT, Apache, GPL, etc.)', completed: true }, { id: 'sbom-2-2', title: 'Lizenz-Kompatibilitaet pruefen', completed: false }, { id: 'sbom-2-3', title: 'LICENSES.md Datei erstellen', completed: false }, { id: 'sbom-2-4', title: 'Third-Party Notices generieren', completed: false }, ], }, { id: 'sbom-3', title: 'Open Source Policy', description: 'Richtlinien fuer Verwendung von Open Source', category: 'compliance', priority: 'medium', status: 'not_started', subtasks: [ { id: 'sbom-3-1', title: 'Erlaubte Lizenzen definieren', completed: false }, { id: 'sbom-3-2', title: 'Genehmigungsprozess fuer neue Dependencies', completed: false }, { id: 'sbom-3-3', title: 'Automatische Lizenz-Checks in CI', completed: false }, ], }, { id: 'sbom-4', title: 'Aktuelle Open Source Komponenten dokumentieren', description: 'BreakPilot Open Source Stack dokumentieren', category: 'compliance', priority: 'medium', status: 'completed', notes: 'Implementiert in /admin/sbom und /admin/architecture - 32 Docker Services, 14 Security Tools, 26+ Libraries', subtasks: [ { id: 'sbom-4-1', title: 'Backend: FastAPI, Pydantic, httpx, anthropic', completed: true }, { id: 'sbom-4-2', title: 'Go Services: Gin, GORM, goquery', completed: true }, { id: 'sbom-4-3', title: 'Frontend: Next.js, React, Tailwind', completed: true }, { id: 'sbom-4-4', title: 'Infrastructure: PostgreSQL, OpenSearch, Ollama', completed: true }, ], }, // Approval Workflow { id: 'appr-1', title: 'Release Approval Gates', description: 'Mehrstufige Freigabe vor Production Deploy', category: 'approval', priority: 'critical', status: 'not_started', subtasks: [ { id: 'appr-1-1', title: 'QA Sign-off erforderlich', completed: false }, { id: 'appr-1-2', title: 'Security Review fuer kritische Aenderungen', completed: false }, { id: 'appr-1-3', title: 'Product Owner Freigabe', completed: false }, { id: 'appr-1-4', title: 'GitHub Environments mit Required Reviewers', completed: false }, ], }, { id: 'appr-2', title: 'Deployment Windows', description: 'Definierte Zeitfenster fuer Production Deployments', category: 'approval', priority: 'medium', status: 'not_started', subtasks: [ { id: 'appr-2-1', title: 'Deployment-Kalender definieren', completed: false }, { id: 'appr-2-2', title: 'Freeze Periods (z.B. vor Feiertagen)', completed: false }, { id: 'appr-2-3', title: 'Emergency Hotfix Process', completed: false }, ], }, { id: 'appr-3', title: 'Post-Deployment Verification', description: 'Checks nach erfolgreichem Deployment', category: 'approval', priority: 'high', status: 'not_started', subtasks: [ { id: 'appr-3-1', title: 'Smoke Tests automatisieren', completed: false }, { id: 'appr-3-2', title: 'Error Rate Monitoring (erste 30 Min)', completed: false }, { id: 'appr-3-3', title: 'Rollback-Kriterien definieren', completed: false }, ], }, ] const statusLabels: Record = { not_started: { label: 'Nicht begonnen', color: 'bg-slate-100 text-slate-600' }, in_progress: { label: 'In Arbeit', color: 'bg-blue-100 text-blue-700' }, review: { label: 'In Review', color: 'bg-yellow-100 text-yellow-700' }, completed: { label: 'Abgeschlossen', color: 'bg-green-100 text-green-700' }, blocked: { label: 'Blockiert', color: 'bg-red-100 text-red-700' }, } const priorityLabels: Record = { critical: { label: 'Kritisch', color: 'bg-red-500 text-white' }, high: { label: 'Hoch', color: 'bg-orange-500 text-white' }, medium: { label: 'Mittel', color: 'bg-yellow-500 text-white' }, low: { label: 'Niedrig', color: 'bg-slate-500 text-white' }, } export default function BacklogPage() { const [items, setItems] = useState(initialBacklogItems) const [selectedCategory, setSelectedCategory] = useState(null) const [selectedPriority, setSelectedPriority] = useState(null) const [expandedItems, setExpandedItems] = useState>(new Set()) const [searchQuery, setSearchQuery] = useState('') // Load saved state from localStorage useEffect(() => { const saved = localStorage.getItem('backlogItems') if (saved) { try { setItems(JSON.parse(saved)) } catch (e) { console.error('Failed to load backlog items:', e) } } }, []) // Save state to localStorage useEffect(() => { localStorage.setItem('backlogItems', JSON.stringify(items)) }, [items]) const filteredItems = items.filter((item) => { if (selectedCategory && item.category !== selectedCategory) return false if (selectedPriority && item.priority !== selectedPriority) return false if (searchQuery) { const query = searchQuery.toLowerCase() return ( item.title.toLowerCase().includes(query) || item.description.toLowerCase().includes(query) || item.subtasks?.some((st) => st.title.toLowerCase().includes(query)) ) } return true }) const toggleExpand = (id: string) => { const newExpanded = new Set(expandedItems) if (newExpanded.has(id)) { newExpanded.delete(id) } else { newExpanded.add(id) } setExpandedItems(newExpanded) } const updateItemStatus = (id: string, status: BacklogItem['status']) => { setItems(items.map((item) => (item.id === id ? { ...item, status } : item))) } const toggleSubtask = (itemId: string, subtaskId: string) => { setItems( items.map((item) => { if (item.id !== itemId) return item return { ...item, subtasks: item.subtasks?.map((st) => st.id === subtaskId ? { ...st, completed: !st.completed } : st ), } }) ) } const getProgress = () => { const total = items.length const completed = items.filter((i) => i.status === 'completed').length return { total, completed, percentage: Math.round((completed / total) * 100) } } const getCategoryProgress = (categoryId: string) => { const categoryItems = items.filter((i) => i.category === categoryId) const completed = categoryItems.filter((i) => i.status === 'completed').length return { total: categoryItems.length, completed } } const progress = getProgress() return ( {/* Overall Progress */}

Gesamtfortschritt

{progress.completed} von {progress.total} Aufgaben abgeschlossen

{progress.percentage}%
{/* Category Cards */}
{categories.map((cat) => { const catProgress = getCategoryProgress(cat.id) return ( ) })}
{/* Filters & Search */}
setSearchQuery(e.target.value)} className="w-full px-4 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500" />
{(selectedCategory || selectedPriority || searchQuery) && ( )}
{/* Backlog Items */}
{filteredItems.map((item) => { const category = categories.find((c) => c.id === item.category) const isExpanded = expandedItems.has(item.id) const completedSubtasks = item.subtasks?.filter((st) => st.completed).length || 0 const totalSubtasks = item.subtasks?.length || 0 return (
toggleExpand(item.id)} >
{/* Expand Icon */} {/* Content */}

{item.title}

{priorityLabels[item.priority].label}

{item.description}

{category?.name} {totalSubtasks > 0 && ( {completedSubtasks}/{totalSubtasks} Teilaufgaben )}
{/* Status */}
{/* Progress Bar for subtasks */} {totalSubtasks > 0 && (
)}
{/* Expanded Subtasks */} {isExpanded && item.subtasks && item.subtasks.length > 0 && (

Teilaufgaben

    {item.subtasks.map((subtask) => (
  • toggleSubtask(item.id, subtask.id)} className="w-4 h-4 rounded border-slate-300 text-primary-600 focus:ring-primary-500" /> {subtask.title}
  • ))}
)}
) })}
{filteredItems.length === 0 && (
Keine Aufgaben gefunden. Versuche einen anderen Filter.
)} {/* Info Box */}

Wichtiger Hinweis

Diese Backlog-Liste muss vollstaendig abgearbeitet sein, bevor BreakPilot in den Produktivbetrieb gehen kann. Alle kritischen Items muessen abgeschlossen sein. Der Fortschritt wird lokal im Browser gespeichert.

) }