Files
web-cad/BAUPLAN.md
T

705 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Bauplan web-cad-neu
**Komplett funktionierende 2D-CAD Software für Event-Bestuhlungspläne**
Basierend auf: Pflichtenheft v4 (633 Zeilen) + UI-Mockup Iteration 9
---
## 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
```