2026-06-26 10:50:24 +02:00
# Bauplan – web-cad-neu
**Komplett funktionierende 2D-CAD Software für Event-Bestuhlungspläne **
Basierend auf: Pflichtenheft v4 (633 Zeilen) + UI-Mockup Iteration 9
---
2026-06-30 11:09:56 +02:00
## ⚠️ Audit-Stand 2026-06-30
**Dieses Projekt wurde am 2026-06-29 einem brutal-honest Code-Audit unterzogen. **
**Ergebnis ** : 50 Probleme identifiziert (8 CRITICAL, 13 HIGH, 15 MEDIUM, 14 LOW).
**Stand ** : 11 von 50 Issues gefixt (alle CRITICAL + 3 HIGH).
**Verbleibend ** : 39 Issues — siehe `docs/FIXPLAN.md` für Details.
**HEAD ** : `4a5377c` (main, origin/main).
---
2026-06-26 10:50:24 +02:00
## Technologie-Stack
| Schicht | Technologie | Lizenz |
|---------|-------------|--------|
| Frontend | React 18 + TypeScript + Vite | MIT |
| Rendering | Canvas 2D + rbush (R-Tree) | MIT |
| CRDT/Sync | Yjs + y-websocket | MIT |
| Backend | Node 20 + TypeScript + Fastify | MIT |
| Datenbank | SQLite (better-sqlite3) | Public Domain |
| DXF | dxf-parser + dxf-writer | MIT |
| PDF | pdf-lib | MIT |
| Auth | bcrypt | Apache |
| KI | OpenAI-kompatibler Endpoint (user-provided) | – |
| Deployment | Docker + Coolify | Open Source |
---
## Phasen-Übersicht
| Phase | Titel | Anforderungen | Status |
|-------|-------|---------------|--------|
| 0 | Projekt-Setup & Config | – | ✅ Angelegt |
| 1 | Core Types & Canvas Engine | F-CAD-01, F-CAD-04 | ⬜ |
| 2 | UI-Gerüst nach Mockup | F-UI-01 bis F-UI-08 | ⬜ |
| 3 | Zeichen-Tools | F-CAD-01, F-CAD-11, F-CAD-12 | ⬜ |
| 4 | Bearbeitungs-Tools | F-CAD-02, F-CAD-07, F-CAD-08 | ⬜ |
| 5 | Auswahl & Snap | F-CAD-04, F-CAD-07 | ⬜ |
| 6 | Layer-System | F-LAY-01 bis F-LAY-06 | ⬜ |
| 7 | Block-Bibliothek | F-LIB-01 bis F-LIB-07 | ⬜ |
| 8 | Bestuhlungs-Tools | F-EVT-01 bis F-EVT-05 | ⬜ |
| 9 | Bemaßung & Text | F-CAD-03, F-CAD-11 | ⬜ |
| 10 | Hintergrund & Grundriss | F-BG-01 bis F-BG-04 | ⬜ |
| 11 | Undo/Redo & History | F-CAD-09, F-CAD-10 | ⬜ |
| 12 | Command Line | F-CAD-05, F-UI-04 | ⬜ |
| 13 | Import/Export | F-IMP-01 bis F-IMP-04, F-EXP-01 bis F-EXP-04 | ⬜ |
| 14 | Backend & REST-API | F-INT-01, F-INT-02, F-INT-04 | ⬜ |
| 15 | Auth & Benutzerverwaltung | F-AUTH-01 bis F-AUTH-05 | ⬜ |
| 16 | Multi-User & Kollaboration | F-MU-01 bis F-MU-07 | ⬜ |
| 17 | KI Copilot | F-AI-01 bis F-AI-15 | ⬜ |
| 18 | Plugin-System | F-EXT-01 bis F-EXT-08 | ⬜ |
| 19 | Theme & Responsive | F-UI-05, F-UI-06, F-UI-10 | ⬜ |
| 20 | Docker & Deployment | NF-DEP-01 bis NF-DEP-05 | ⬜ |
| 21 | Tests & QA | NF-PERF-01 bis NF-PERF-05 | ⬜ |
---
## Phase 0: Projekt-Setup & Config ✅
**Ziel: ** Saubere Projektstruktur, Config-Dateien, keine Duplikate
**Dateien: **
- `package.json` (root, frontend, backend)
- `tsconfig.json` (frontend, backend)
- `vite.config.ts`
- `docker-compose.yml` (eine Datei, nicht 5)
- `Dockerfile` (frontend, backend)
- `nginx.conf`
- `.gitignore`
- `README.md`
- `frontend/index.html`
- `frontend/src/types/cad.types.ts` – Alle Core Types
**Erledigt: ** ✅ Struktur, Config, Types, Canvas Core (SpatialIndex, ZoomPanController, LayerManager)
---
## Phase 1: Core Types & Canvas Engine
**Anforderungen: ** F-CAD-01 (Grundelemente), F-CAD-04 (Raster & Fang)
**Dateien: **
- `frontend/src/canvas/RenderEngine.ts` – Haupt-Renderer mit Canvas 2D, Viewport-Culling, Layer-basiertem Rendering, Grid
- `frontend/src/canvas/SpatialIndex.ts` – ✅ Angelegt (rbush R-Tree)
- `frontend/src/canvas/ZoomPanController.ts` – ✅ Angelegt (Zoom, Pan, screenToWorld, worldToScreen, zoomFit)
- `frontend/src/canvas/LayerManager.ts` – ✅ Angelegt (CRUD, Visibility, Lock, Active Layer)
- `frontend/src/interaction/SnapEngine.ts` – Snap-to-Grid, Endpoint, Midpoint, Intersection, Ortho, Polar
- `frontend/src/interaction/SelectionEngine.ts` – Einzelauswahl, Fenster-Auswahl, Kreuz-Auswahl
**RenderEngine muss: **
- Canvas 2D Context verwalten
- requestAnimationFrame Render-Loop
- Zoom/Pan Transform anwenden
- Grid rendern (minor + major lines)
- Viewport-Culling via SpatialIndex
- Elemente nach Layer-Reihenfolge rendern
- Element-Typen rendern: line, circle, arc, rect, polygon, polyline, text, dimension, block_instance, chair
- Selection-Highlights rendern
- Snap-Points visuell hervorheben
- 50.000+ Elemente bei 60fps
---
## Phase 2: UI-Gerüst nach Mockup
**Anforderungen: ** F-UI-01 bis F-UI-08
**Referenz: ** `/a0/usr/workdir/web-cad-neu/mockup/editor.html` (Iteration 9)
**Komponenten: **
- `frontend/src/App.tsx` – Root, ThemeProvider, Layout-Container
- `frontend/src/main.tsx` – React Entry Point
- `frontend/src/styles/theme.css` – Design Tokens (CSS Custom Properties), Dark/Light Theme
- `frontend/src/styles/layout.css` – Layout-Regeln aus Mockup layout.css (1298 Zeilen)
- `frontend/src/styles/styles.css` – Base Styles aus Mockup styles.css (195 Zeilen)
- `frontend/src/components/Topbar.tsx` – Logo, Projektname, Saved-Badge, Undo/Redo, Version, Share, Theme, Hilfe, Sprache, Avatar
- `frontend/src/components/RibbonBar.tsx` – 6 Tabs (Start, Einfügen, Format, Ansicht, Extras, KI) mit Ribbon-Groups
- `frontend/src/components/LeftSidebar.tsx` – 4 Sektionen (Auswählen, Zeichnen, Bearbeiten, Bestuhlung), 20 Tools als Buttons mit SVG-Icons
- `frontend/src/components/CanvasArea.tsx` – Canvas-Container, Koordinaten-Display, View-Tabs (2D/ISO/Front/Top)
- `frontend/src/components/RightSidebar.tsx` – 4 Tabs: Properties, Layer (Tree), Bibliothek (Tree), KI Copilot
- `frontend/src/components/PropertiesPanel/PropertiesPanel.tsx` – Geometrie, Darstellung, Block-Info
- `frontend/src/components/LayerPanel.tsx` – Tree-Struktur mit Ordnern, Visibility-Toggle, Lock-Toggle, Add-Button
- `frontend/src/components/BlockLibrary.tsx` – Tree-Struktur, Suchfeld, Kategorie-Filter, Draggable Leafs
- `frontend/src/components/KICopilot.tsx` – Chat-UI, Schnell-Aktionen, Voice-Input, Send-Button
- `frontend/src/components/CommandLine.tsx` – History + Input mit Autovervollständigung
- `frontend/src/components/StatusBar.tsx` – SNAP/ORTHO/POLAR/GRID, Koordinaten, Layer, Werkzeug, Online
- `frontend/src/components/TreeView.tsx` – Generische Tree-Komponente (collapsible, draggable)
- `frontend/src/components/MobileDrawers.tsx` – Hamburger-Drawer + Right-Tab-Bar + Slide-in (≤768px)
**UI muss exakt dem Mockup entsprechen: **
- Topbar → Ribbon → (LeftSidebar | CanvasArea | RightSidebar) → CommandLine → StatusBar
- Inter/JetBrains Mono Fonts
- CSS Custom Properties für Theme
- SVG Icons aus Mockup übernehmen
- Responsive: Desktop ≥1280px, Mobile Drawers ≤768px
---
## Phase 3: Zeichen-Tools
**Anforderungen: ** F-CAD-01, F-CAD-11, F-CAD-12
**Dateien: **
- `frontend/src/tools/Tool.ts` – Base Tool Interface (onMouseDown, onMouseMove, onMouseUp, onKeyDown, render)
- `frontend/src/tools/ToolManager.ts` – Active Tool, Tool-Switching, Tool-Events
- `frontend/src/tools/drawing/LineTool.ts` – Linie (L): 2 Punkte → Linie
- `frontend/src/tools/drawing/PolylineTool.ts` – Polylinie (PL): Multiple Punkte → Polyline
- `frontend/src/tools/drawing/RectTool.ts` – Rechteck (REC): 2 Punkte → Rechteck
- `frontend/src/tools/drawing/CircleTool.ts` – Kreis (C): Center + Radius
- `frontend/src/tools/drawing/ArcTool.ts` – Bogen (A): Center + StartAngle + EndAngle
- `frontend/src/tools/drawing/PolygonTool.ts` – Polygon: Multiple Punkte → Geschlossen
- `frontend/src/tools/drawing/TextTool.ts` – Text (T): Position + Text + FontSize
- `frontend/src/tools/drawing/DimensionTool.ts` – Bemaßung (DIM): 2 Punkte + Maßlinie
- `frontend/src/tools/drawing/HatchTool.ts` – Schraffur (H): Fläche + Muster
- `frontend/src/tools/drawing/index.ts` – Export aller Tools
**Jedes Tool: **
- Mouse-Events (down/move/up) verarbeiten
- Snap-Engine nutzen
- Preview während des Zeichnens
- Element auf aktiver Ebene erstellen
- Undo-Historie aktualisieren
---
## Phase 4: Bearbeitungs-Tools
**Anforderungen: ** F-CAD-02, F-CAD-07, F-CAD-08
**Dateien: **
- `frontend/src/tools/modification/MoveTool.ts` – Verschieben (M): Basispunkt + Ziel
- `frontend/src/tools/modification/CopyTool.ts` – Kopieren (CO): Basispunkt + Ziel
- `frontend/src/tools/modification/RotateTool.ts` – Rotieren (RO): Basispunkt + Winkel
- `frontend/src/tools/modification/ScaleTool.ts` – Skalieren (SC): Basispunkt + Faktor
- `frontend/src/tools/modification/MirrorTool.ts` – Spiegeln (MI): Spiegelachse
- `frontend/src/tools/modification/TrimTool.ts` – Trimmen (TR): Schneiden an Grenzelementen
- `frontend/src/tools/modification/ExtendTool.ts` – Verlängern (EX): Bis zu Grenzelement
- `frontend/src/tools/modification/FilletTool.ts` – Abrunden (F): Radius + 2 Elemente
- `frontend/src/tools/modification/OffsetTool.ts` – Versatz (O): Parallelverschiebung
- `frontend/src/tools/modification/DeleteTool.ts` – Löschen (E)
- `frontend/src/tools/modification/index.ts` – Export
**Gruppierung: **
- `frontend/src/tools/GroupTool.ts` – Gruppe erstellen/auflösen
- Gruppen können verschachtelt werden
- Gruppen in Bibliothek speicherbar
---
## Phase 5: Auswahl & Snap
**Anforderungen: ** F-CAD-04, F-CAD-07
**Dateien: **
- `frontend/src/interaction/SelectionEngine.ts` – Einzelauswahl (Klick), Fenster-Auswahl (Links-Rechts), Kreuz-Auswahl (Rechts-Links), Quick-Select (Eigenschafts-basiert)
- `frontend/src/interaction/SnapEngine.ts` – Snap-to-Grid, Endpoint, Midpoint, Intersection, Ortho-Modus, Polar-Tracking
- `frontend/src/interaction/index.ts` – Export
**Snap-Engine: **
- Snap-Modi umschaltbar (F3)
- Visuelle Hervorhebung der Snap-Punkte
- Ortho-Modus (F8): Nur horizontal/vertikal
- Polar-Tracking: Winkel-Snaps (0°, 30°, 45°, 60°, 90°)
---
## Phase 6: Layer-System
**Anforderungen: ** F-LAY-01 bis F-LAY-06
**Dateien: **
- `frontend/src/canvas/LayerManager.ts` – ✅ Angelegt, erweitern um: Baumstruktur (parentId), Filter, Duplizieren
- `frontend/src/components/LayerPanel.tsx` – Tree-Widget mit Parent-Child, Visibility/Lock/Color/LineType/Transparency pro Ebene
- `frontend/src/components/TreeView.tsx` – Generische Tree-Komponente
**Funktionen: **
- Ebenen als Baumstruktur (Parent-Child)
- Eigenschaften pro Ebene: Name, Visibility, Lock, Color, LineType, Transparency
- Operationen: Erstellen, Löschen, Umbenennen, Verschieben im Baum, Duplizieren
- Element-Zuordnung: Drag-and-Drop zwischen Ebenen
- Aktive Ebene markieren
- Ebenen-Filter nach Eigenschaften
---
## Phase 7: Block-Bibliothek
**Anforderungen: ** F-LIB-01 bis F-LIB-07
**Dateien: **
- `frontend/src/components/BlockLibrary.tsx` – Tree mit Ordnern, Suchfeld, Kategorie-Filter, Draggable Leafs
- `frontend/src/services/blockService.ts` – Block CRUD, SVG-Import, Block-Definition vs. Referenz
- `frontend/src/types/cad.types.ts` – BlockDefinition Type ✅
**Funktionen: **
- Bibliothek als Baumstruktur (Ordner + Unterordner)
- SVG-Import in Bibliothek
- Gruppen als Blöcke speichern
- Drag-and-Drop in Zeichenbereich
- Block-Bearbeitung (Skalieren, Rotieren, Spiegeln)
- Block-Verwaltung (Umbenennen, Duplizieren, Löschen, Verschieben)
- Block-Definition vs. Referenz (Änderung an Definition → alle Instanzen aktualisieren)
---
## Phase 8: Bestuhlungs-Tools
**Anforderungen: ** F-EVT-01 bis F-EVT-05
**Dateien: **
- `frontend/src/tools/drawing/ChairTool.ts` – Einzelner Stuhl
- `frontend/src/tools/drawing/SeatingRowTool.ts` – Reihen-Bestuhlung (R): Reihe mit Anzahl, Abstand, Ausrichtung
- `frontend/src/tools/drawing/SeatingBlockTool.ts` – Block-Bestuhlung (B): Rechteck-Bereich mit Reihen, Spalten, Abständen
- `frontend/src/tools/drawing/TableTool.ts` – Tisch (TAB)
- `frontend/src/tools/drawing/StageTool.ts` – Bühne (S)
- `frontend/src/tools/drawing/SeatingTemplateTool.ts` – Bestuhlungs-Vorlagen
**Funktionen: **
- Reihen-Bestuhlung: Anzahl, Abstand, Ausrichtung konfigurierbar
- Block-Bestuhlung: Reihen × Spalten, Abstände, Versatz
- Stuhl-Typ aus Bibliothek wählbar
- Parameter im Nachhinein änderbar
- Einzelne Stühle hinzufügen/entfernen/verschieben
- Automatische Zählung (pro Reihe, Block, Gesamt)
---
## Phase 9: Bemaßung & Text
**Anforderungen: ** F-CAD-03, F-CAD-11
**Dateien: **
- `frontend/src/tools/drawing/DimensionTool.ts` – Lineare, winkelige, radiale Bemaßung
- `frontend/src/tools/drawing/TextTool.ts` – Einzel- und Mehrzeilentext
- `frontend/src/tools/drawing/LeaderTool.ts` – Leaders (MLEADER)
- `frontend/src/tools/drawing/RevCloudTool.ts` – Revision Clouds (REVCLOUD)
**Bemaßung: **
- Maßberechnung basierend auf Hintergrund-Maßstab
- Werte in realen Maßeinheiten (m/cm)
- Lineare, winkelige, radiale Bemaßung
---
## Phase 10: Hintergrund & Grundriss
**Anforderungen: ** F-BG-01 bis F-BG-04
**Dateien: **
- `frontend/src/services/backgroundService.ts` – Laden, Positionieren, Skalieren von Hintergrundbildern
- `frontend/src/components/BackgroundImport.tsx` – Upload-Dialog
**Funktionen: **
- PNG, JPG, SVG, PDF-Seite als Hintergrund laden
- Maßstab definieren (1:100, Referenzstrecke)
- Hintergrund verschieben, rotieren, skalieren
- Sichtbarkeit ein/aus
---
## Phase 11: Undo/Redo & History
**Anforderungen: ** F-CAD-09, F-CAD-10
**Dateien: **
- `frontend/src/history/HistoryManager.ts` – Undo/Redo Stack mit beliebig vielen Schritten
- `frontend/src/history/index.ts` – Export
**Funktionen: **
- Jede Operation erzeugt History-Eintrag
- Undo (Strg+Z) / Redo (Strg+Y)
- Historie einsehbar
- Kopieren zwischen Dateien via Zwischenablage
---
## Phase 12: Command Line
**Anforderungen: ** F-CAD-05, F-UI-04
**Dateien: **
- `frontend/src/components/CommandLine.tsx` – History + Input mit Autovervollständigung
- `frontend/src/services/commandRegistry.ts` – Befehls-Registry (L, PL, C, REC, M, CO, RO, SC, MI, TR, O, DIM, H, BESTUHLUNG, etc.)
**Funktionen: **
- Befehlseingabe via Tastatur (AutoCAD-Style)
- Autovervollständigung
- Befehls-History
- Tastatur-Shortcuts (L, C, M, CO, RO, SC, MI, PL, H, etc.)
---
## Phase 13: Import/Export
**Anforderungen: ** F-IMP-01 bis F-IMP-04, F-EXP-01 bis F-EXP-04
**Dateien: **
- `frontend/src/services/importService.ts` – DXF, SVG, PDF, JSON Import
- `frontend/src/services/exportService.ts` – DXF, SVG, PDF, PNG, JSON Export
- `frontend/src/services/dxfParser.ts` – DXF Parsing (dxf-parser library)
- `frontend/src/services/dxfWriter.ts` – DXF Writing
- `frontend/src/services/pdfExport.ts` – PDF mit pdf-lib
**Formate: **
- Import: DXF, SVG, PDF (optional DWG via libredwg), JSON
- Export: DXF, SVG, PDF, PNG, JSON
- JSON enthält alle Daten (Layers, Elements, Blocks, Background)
---
## Phase 14: Backend & REST-API
**Anforderungen: ** F-INT-01, F-INT-02, F-INT-04, F-INT-07
**Dateien: **
- `backend/src/index.ts` – Fastify Server Start
- `backend/src/server.ts` – Server-Konfiguration (CORS, Static, WebSocket)
- `backend/src/database/DatabaseInterface.ts` – Abstrahierte DB-Schicht
- `backend/src/database/SqliteAdapter.ts` – SQLite Implementation
- `backend/src/database/schema.sql` – Schema: users, projects, drawings, blocks, layers, elements, settings
- `backend/src/database/migrations.ts` – Migration-Runner
- `backend/src/routes/index.ts` – Route-Registration
- `backend/src/routes/projects.ts` – CRUD für Projekte
- `backend/src/routes/drawings.ts` – CRUD für Zeichnungen
- `backend/src/routes/layers.ts` – CRUD für Layer
- `backend/src/routes/elements.ts` – CRUD für Elemente
- `backend/src/routes/blocks.ts` – CRUD für Blöcke
- `backend/src/routes/export.ts` – Export-Endpunkte
- `backend/src/routes/import.ts` – Import-Endpunkte
- `backend/src/routes/settings.ts` – App-Settings (KI-Config, etc.)
- `backend/src/routes/users.ts` – User-Verwaltung
**API-First: **
- Alle Funktionen über REST-API erreichbar
- OpenAPI/Swagger Dokumentation
- Headless-Modus (nur API, keine UI)
- Webhook-Support
---
## Phase 15: Auth & Benutzerverwaltung
**Anforderungen: ** F-AUTH-01 bis F-AUTH-05, NF-SEC-01, NF-SEC-02
**Dateien: **
- `backend/src/auth/AuthService.ts` – Register, Login, Password-Reset, Session-Management
- `backend/src/routes/auth.ts` – Auth-Endpunkte
- `frontend/src/contexts/AuthContext.tsx` – Auth-State Management
- `frontend/src/pages/Login.tsx` – Login-Seite
- `frontend/src/pages/Register.tsx` – Registrierung
- `frontend/src/pages/Dashboard.tsx` – Projekt-Übersicht
**Funktionen: **
- E-Mail/Passwort-Login (bcrypt)
- Passwort-Reset via E-Mail
- Session-Management (HTTP-only Cookies, CSRF-Schutz)
- Rollen: Planer, Betrachter, Admin, Gast
- Gast-Zugänge für spezifische Pläne
---
## Phase 16: Multi-User & Kollaboration
**Anforderungen: ** F-MU-01 bis F-MU-07
**Dateien: **
- `backend/src/websocket/yjsServer.ts` – Yjs WebSocket Server mit Persistenz
- `frontend/src/crdt/YjsDocument.ts` – Yjs Document Wrapper
- `frontend/src/crdt/WebSocketProvider.ts` – WebSocket-Verbindung
- `frontend/src/crdt/AwarenessManager.ts` – Nutzer-Anwesenheit, Cursor-Positionen
- `frontend/src/crdt/useYjsBinding.ts` – React Hook für Yjs-Binding
**Funktionen: **
- Echtzeit-Kollaboration (Yjs CRDT)
- Konfliktfreie Bearbeitung
- Nutzer-Anwesenheit (Avatar/Farbe)
- Cursor-Anzeige anderer Nutzer
- Berechtigungs-System (Rollen)
- Offline-Unterstützung (IndexedDB)
- Versionshistorie
---
## Phase 17: KI Copilot
**Anforderungen: ** F-AI-01 bis F-AI-15
**Dateien: **
- `backend/src/routes/ai.ts` – KI-Proxy-Endpoint (leitet an OpenAI-kompatiblen API weiter)
- `frontend/src/services/aiService.ts` – KI-Client (sendet an Backend, Backend leitet weiter)
- `frontend/src/services/functionRegistry.ts` – CAD-Function-Registry (alle CAD-Operationen als Functions)
- `frontend/src/components/KICopilot.tsx` – Chat-UI, Schnell-Aktionen, Voice-Input
**Architektur: **
```
User Input → Backend → OpenAI-kompatibler API-Endpoint
→ LLM generiert Function Call (z.B. draw_line(x1,y1,x2,y2))
→ Function-Registry führt Function aus
→ Canvas aktualisiert sich
→ Ergebnis an LLM → Bestätigung an User
```
**Functions (registriert): **
- draw_line, draw_circle, draw_rect, draw_arc, draw_polyline, draw_text, draw_dimension
- move, copy, rotate, scale, mirror, trim, offset, delete
- create_layer, delete_layer, set_active_layer, toggle_layer_visibility
- insert_block, create_block, delete_block
- seating_row, seating_block, count_seats
- export_dxf, export_svg, export_pdf, import_dxf, import_svg
- undo, redo
- get_context (aktuelle Zeichnung, Selektion, Layer, Zoom)
**Guardrails: **
- Destruktive Operationen erfordern Bestätigung
- Function-Validation vor Ausführung
- Safety-Checks (nicht "Lösche alles" ohne Bestätigung)
**Context Injection: **
- Aktuelle Zeichnung (Summary, nicht alle Elemente)
- Selektion
- Aktive Ebene
- Zoom-Bereich
- Maßstab
---
## Phase 18: Plugin-System
**Anforderungen: ** F-EXT-01 bis F-EXT-08
**Dateien: **
- `frontend/src/services/pluginRegistry.ts` – Plugin-Registration, Lifecycle, Isolation
- `frontend/src/types/plugin.types.ts` – Plugin-Manifest, Tool-API Interface
- `frontend/src/components/PluginSettings.tsx` – Plugin-Verwaltung UI
**Funktionen: **
- Plugin-Manifest (Name, Version, Dependencies)
- Tool-API (Zeichnen, Bearbeiten, Bibliothek, Export, UI)
- Plugin-Isolation (try-catch, kein Core-Crash)
- Aktivieren/Deaktivieren ohne Neustart
- Plugin-UI-Integration (Ribbon-Tabs, Panels, Dialoge)
- Laufzeit-Laden
---
## Phase 19: Theme & Responsive
**Anforderungen: ** F-UI-05, F-UI-06, F-UI-10
**Dateien: **
- `frontend/src/contexts/ThemeContext.tsx` – Dark/Light Theme Toggle
- `frontend/src/styles/theme.css` – CSS Custom Properties für beide Themes
- Mobile Drawers aus Mockup übernehmen
**Funktionen: **
- Dark- und Light-Mode
- Responsive: Desktop ≥1280px (alle Panels)
- Mobile ≤768px: Hamburger-Drawer + Right-Tab-Bar + Slide-in Drawers
- Voice Input (Web Speech API, optional)
---
## Phase 20: Docker & Deployment
**Anforderungen: ** NF-DEP-01 bis NF-DEP-05
**Dateien: **
- `docker-compose.yml` – ✅ Angelegt (frontend + backend)
- `frontend/Dockerfile` – ✅ Angelegt (Node build + nginx)
- `backend/Dockerfile` – ✅ Angelegt (Node + tsx)
- `docker-compose.coolify.yml` – Coolify-spezifische Config
**Deployment: **
- 2 Container: Frontend (nginx) + Backend (Node)
- SQLite als Volume
- WebSocket-Proxy via Traefik
- SSL via Let's Encrypt
- Env-Variablen: API_URL, API_KEY, DB_PATH, JWT_SECRET
- Coolify-kompatibel
---
## Phase 21: Tests & QA
**Anforderungen: ** NF-PERF-01 bis NF-PERF-05, NF-SEC-01 bis NF-SEC-05
**Tests: **
- `frontend/src/tools/__tests__/` – Tool-Tests (Zeichnen, Bearbeiten)
- `backend/src/routes/__tests__/` – API-Tests
- `backend/src/auth/__tests__/` – Auth-Tests
- Performance-Benchmark: 50.000 Elemente bei 60fps
- Lighthouse-Score ≥ 80
- Security-Tests: Input-Validierung, CSRF, Auth
---
## Build-Reihenfolge
```
Phase 0 ✅ Setup
Phase 1 ⬜ Canvas Engine (RenderEngine, SnapEngine, SelectionEngine)
Phase 2 ⬜ UI-Gerüst (alle Komponenten nach Mockup)
Phase 3 ⬜ Zeichen-Tools (Line, Circle, Rect, Arc, Polyline, Polygon, Text, Dimension, Hatch)
Phase 4 ⬜ Bearbeitungs-Tools (Move, Copy, Rotate, Scale, Mirror, Trim, Extend, Fillet, Offset, Delete)
Phase 5 ⬜ Auswahl & Snap (Selection, Snap-Modes, Ortho, Polar)
Phase 6 ⬜ Layer-System (Tree, Eigenschaften, Operationen)
Phase 7 ⬜ Block-Bibliothek (Tree, SVG-Import, Drag-and-Drop, Definition/Referenz)
Phase 8 ⬜ Bestuhlungs-Tools (Reihe, Block, Tisch, Bühne, Zählung)
Phase 9 ⬜ Bemaßung & Text (Linear, Winkel, Radial, MTEXT, Leader, RevCloud)
Phase 10 ⬜ Hintergrund (Laden, Maßstab, Positionieren)
Phase 11 ⬜ Undo/Redo (History-Stack, Zwischenablage)
Phase 12 ⬜ Command Line (Befehlseingabe, Autovervollständigung, Shortcuts)
Phase 13 ⬜ Import/Export (DXF, SVG, PDF, PNG, JSON)
Phase 14 ⬜ Backend & REST-API (Fastify, SQLite, CRUD, OpenAPI)
Phase 15 ⬜ Auth (Login, Register, Rollen, Sessions)
Phase 16 ⬜ Multi-User (Yjs, WebSocket, Cursor, Awareness, Offline)
Phase 17 ⬜ KI Copilot (Function Calling, Context, Guardrails)
Phase 18 ⬜ Plugin-System (Manifest, API, Isolation, UI)
Phase 19 ⬜ Theme & Responsive (Dark/Light, Mobile Drawers)
Phase 20 ⬜ Docker & Deployment (Coolify, SSL, Env)
Phase 21 ⬜ Tests & QA (Unit, Integration, Performance, Security)
```
---
## Verzeichnis-Struktur (Final)
```
web-cad-neu/
├── package.json
├── docker-compose.yml
├── docker-compose.coolify.yml
├── .gitignore
├── README.md
├── BAUPLAN.md
├── mockup/ # UI-Referenz (Iteration 9)
│ ├── editor.html
│ └── assets/
├── frontend/
│ ├── package.json
│ ├── tsconfig.json
│ ├── vite.config.ts
│ ├── Dockerfile
│ ├── nginx.conf
│ ├── index.html
│ └── src/
│ ├── main.tsx
│ ├── App.tsx
│ ├── types/
│ │ ├── cad.types.ts
│ │ └── plugin.types.ts
│ ├── canvas/
│ │ ├── RenderEngine.ts
│ │ ├── SpatialIndex.ts
│ │ ├── ZoomPanController.ts
│ │ └── LayerManager.ts
│ ├── interaction/
│ │ ├── SnapEngine.ts
│ │ ├── SelectionEngine.ts
│ │ └── index.ts
│ ├── tools/
│ │ ├── Tool.ts
│ │ ├── ToolManager.ts
│ │ ├── drawing/
│ │ │ ├── LineTool.ts
│ │ │ ├── PolylineTool.ts
│ │ │ ├── RectTool.ts
│ │ │ ├── CircleTool.ts
│ │ │ ├── ArcTool.ts
│ │ │ ├── PolygonTool.ts
│ │ │ ├── TextTool.ts
│ │ │ ├── DimensionTool.ts
│ │ │ ├── HatchTool.ts
│ │ │ ├── ChairTool.ts
│ │ │ ├── SeatingRowTool.ts
│ │ │ ├── SeatingBlockTool.ts
│ │ │ ├── TableTool.ts
│ │ │ ├── StageTool.ts
│ │ │ └── index.ts
│ │ └── modification/
│ │ ├── MoveTool.ts
│ │ ├── CopyTool.ts
│ │ ├── RotateTool.ts
│ │ ├── ScaleTool.ts
│ │ ├── MirrorTool.ts
│ │ ├── TrimTool.ts
│ │ ├── ExtendTool.ts
│ │ ├── FilletTool.ts
│ │ ├── OffsetTool.ts
│ │ ├── DeleteTool.ts
│ │ └── index.ts
│ ├── components/
│ │ ├── Topbar.tsx
│ │ ├── RibbonBar.tsx
│ │ ├── LeftSidebar.tsx
│ │ ├── CanvasArea.tsx
│ │ ├── RightSidebar.tsx
│ │ ├── CommandLine.tsx
│ │ ├── StatusBar.tsx
│ │ ├── LayerPanel.tsx
│ │ ├── BlockLibrary.tsx
│ │ ├── KICopilot.tsx
│ │ ├── TreeView.tsx
│ │ ├── MobileDrawers.tsx
│ │ ├── PropertiesPanel/
│ │ │ └── PropertiesPanel.tsx
│ │ └── pages/
│ │ ├── Login.tsx
│ │ ├── Register.tsx
│ │ └── Dashboard.tsx
│ ├── services/
│ │ ├── api.ts
│ │ ├── blockService.ts
│ │ ├── importService.ts
│ │ ├── exportService.ts
│ │ ├── backgroundService.ts
│ │ ├── aiService.ts
│ │ ├── functionRegistry.ts
│ │ ├── commandRegistry.ts
│ │ └── pluginRegistry.ts
│ ├── history/
│ │ ├── HistoryManager.ts
│ │ └── index.ts
│ ├── crdt/
│ │ ├── YjsDocument.ts
│ │ ├── WebSocketProvider.ts
│ │ ├── AwarenessManager.ts
│ │ └── useYjsBinding.ts
│ ├── contexts/
│ │ ├── AuthContext.tsx
│ │ └── ThemeContext.tsx
│ └── styles/
│ ├── theme.css
│ ├── layout.css
│ └── styles.css
├── backend/
│ ├── package.json
│ ├── tsconfig.json
│ ├── Dockerfile
│ └── src/
│ ├── index.ts
│ ├── server.ts
│ ├── auth/
│ │ ├── AuthService.ts
│ │ └── authPlugin.ts
│ ├── database/
│ │ ├── DatabaseInterface.ts
│ │ ├── SqliteAdapter.ts
│ │ ├── schema.sql
│ │ └── migrations.ts
│ ├── routes/
│ │ ├── index.ts
│ │ ├── auth.ts
│ │ ├── projects.ts
│ │ ├── drawings.ts
│ │ ├── layers.ts
│ │ ├── elements.ts
│ │ ├── blocks.ts
│ │ ├── export.ts
│ │ ├── import.ts
│ │ ├── settings.ts
│ │ ├── users.ts
│ │ └── ai.ts
│ └── websocket/
│ └── yjsServer.ts
└── specs/
└── requirements.md # Kopie des Pflichtenhefts
```
2026-06-30 11:09:56 +02:00
## Phase 22: Audit & Hardening Phase 1 (2026-06-29) ✅
**Trigger ** : Codebase-Audit am 2026-06-29 durch Codebase Explorer (brutally-honest mode).
**Quelle ** : `CODE_ANALYSIS.md` (Audit-Report) + `docs/FIXPLAN.md` (50-Issue-Liste mit Status).
**Verdict ** : Funktionaler Prototyp mit kritischen Security-Lücken, gebrochener Collab-Sync und systemischer Architektur-Schuld — **NICHT production-ready ** .
### Issues-Übersicht
| Schweregrad | Total | Fixed | Open |
|---|---|---|---|
| CRITICAL | 8 | 8 ✅ | 0 |
| HIGH | 13 | 3 ✅ | 10 |
| MEDIUM | 15 | 0 | 15 |
| LOW | 14 | 0 | 14 |
| **Total ** | **50 ** | **11 ** | **39 ** |
### Fixes Phase 1 (alle 8 CRITICAL + 3 HIGH)
| Commit | Issues | Inhalt |
|---|---|---|
| `2e9dfdf` | #1 , #3 | Auth middleware auf allen CRUD Routes + CORS restrict |
| `cf62a77` | #2 , #4 , #5 | WebSocket auth + Yjs persistence + doc retention |
| `8493138` | #6 | CRDT sync groups + bgConfig via Yjs |
| `275b863` | #7 , #8 | loadFromState race + plugin stale closure |
| `baba0cb` | #9 , #10 , #11 | Remote sync + save all elements + block drop sync |
| `4a5377c` | #9 , #10 , #11 | Quality-Review-Fixes (local-first merge) |
### Verifikation
- ✅ Backend `tsc --noEmit` clean
- ✅ Frontend `tsc --noEmit` clean
- ✅ Backend `npm run build` erfolgreich
- ✅ Frontend `vite build` erfolgreich (341 modules)
- ✅ Server startet ohne Fehler
- ✅ Health endpoint `GET /api/health` → 200
- ✅ WS ohne Token → Close code 4001 "Authentication required"
- ✅ WS mit invalid Token → Close code 4001 "Invalid or expired session"
- ✅ WS mit valid Token → accepted, initial state sync
- ✅ Register + Login funktional
### Verbleibende Brocken (für Phase 23+)
- **App.tsx Refactoring** (Issue #22 , 1207-Zeilen-Monolith in Module)
- **Block-Persistence** (Issues #16 , #17 — Rename + Duplicate)
- **Layer-Persistence** (Issue #15 )
- **GROUP Command** (Issue #18 — No-Op)
- **Image Insert / Paste / SVG-Import** (Issues #28 , #32 , #34 )
- **listProjects Owner-Filterung** (Issue #21 )
- **Input Validation** auf allen Backend-Routes (Issue #33 )
- **Cursor-Storage** in Y.Doc (Issue #19 )
- Diverse MEDIUM + LOW Cleanups
**Detaillierter Fixplan ** : siehe `docs/FIXPLAN.md` (alle 50 Issues mit Severity, Status, Test-Coverage).