26 KiB
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-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.tsdocker-compose.yml(eine Datei, nicht 5)Dockerfile(frontend, backend)nginx.conf.gitignoreREADME.mdfrontend/index.htmlfrontend/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, Gridfrontend/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, Polarfrontend/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-Containerfrontend/src/main.tsx– React Entry Pointfrontend/src/styles/theme.css– Design Tokens (CSS Custom Properties), Dark/Light Themefrontend/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, Avatarfrontend/src/components/RibbonBar.tsx– 6 Tabs (Start, Einfügen, Format, Ansicht, Extras, KI) mit Ribbon-Groupsfrontend/src/components/LeftSidebar.tsx– 4 Sektionen (Auswählen, Zeichnen, Bearbeiten, Bestuhlung), 20 Tools als Buttons mit SVG-Iconsfrontend/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 Copilotfrontend/src/components/PropertiesPanel/PropertiesPanel.tsx– Geometrie, Darstellung, Block-Infofrontend/src/components/LayerPanel.tsx– Tree-Struktur mit Ordnern, Visibility-Toggle, Lock-Toggle, Add-Buttonfrontend/src/components/BlockLibrary.tsx– Tree-Struktur, Suchfeld, Kategorie-Filter, Draggable Leafsfrontend/src/components/KICopilot.tsx– Chat-UI, Schnell-Aktionen, Voice-Input, Send-Buttonfrontend/src/components/CommandLine.tsx– History + Input mit Autovervollständigungfrontend/src/components/StatusBar.tsx– SNAP/ORTHO/POLAR/GRID, Koordinaten, Layer, Werkzeug, Onlinefrontend/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-Eventsfrontend/src/tools/drawing/LineTool.ts– Linie (L): 2 Punkte → Liniefrontend/src/tools/drawing/PolylineTool.ts– Polylinie (PL): Multiple Punkte → Polylinefrontend/src/tools/drawing/RectTool.ts– Rechteck (REC): 2 Punkte → Rechteckfrontend/src/tools/drawing/CircleTool.ts– Kreis (C): Center + Radiusfrontend/src/tools/drawing/ArcTool.ts– Bogen (A): Center + StartAngle + EndAnglefrontend/src/tools/drawing/PolygonTool.ts– Polygon: Multiple Punkte → Geschlossenfrontend/src/tools/drawing/TextTool.ts– Text (T): Position + Text + FontSizefrontend/src/tools/drawing/DimensionTool.ts– Bemaßung (DIM): 2 Punkte + Maßliniefrontend/src/tools/drawing/HatchTool.ts– Schraffur (H): Fläche + Musterfrontend/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 + Zielfrontend/src/tools/modification/CopyTool.ts– Kopieren (CO): Basispunkt + Zielfrontend/src/tools/modification/RotateTool.ts– Rotieren (RO): Basispunkt + Winkelfrontend/src/tools/modification/ScaleTool.ts– Skalieren (SC): Basispunkt + Faktorfrontend/src/tools/modification/MirrorTool.ts– Spiegeln (MI): Spiegelachsefrontend/src/tools/modification/TrimTool.ts– Trimmen (TR): Schneiden an Grenzelementenfrontend/src/tools/modification/ExtendTool.ts– Verlängern (EX): Bis zu Grenzelementfrontend/src/tools/modification/FilletTool.ts– Abrunden (F): Radius + 2 Elementefrontend/src/tools/modification/OffsetTool.ts– Versatz (O): Parallelverschiebungfrontend/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-Trackingfrontend/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, Duplizierenfrontend/src/components/LayerPanel.tsx– Tree-Widget mit Parent-Child, Visibility/Lock/Color/LineType/Transparency pro Ebenefrontend/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 Leafsfrontend/src/services/blockService.ts– Block CRUD, SVG-Import, Block-Definition vs. Referenzfrontend/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 Stuhlfrontend/src/tools/drawing/SeatingRowTool.ts– Reihen-Bestuhlung (R): Reihe mit Anzahl, Abstand, Ausrichtungfrontend/src/tools/drawing/SeatingBlockTool.ts– Block-Bestuhlung (B): Rechteck-Bereich mit Reihen, Spalten, Abständenfrontend/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ßungfrontend/src/tools/drawing/TextTool.ts– Einzel- und Mehrzeilentextfrontend/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 Hintergrundbildernfrontend/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 Schrittenfrontend/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ändigungfrontend/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 Importfrontend/src/services/exportService.ts– DXF, SVG, PDF, PNG, JSON Exportfrontend/src/services/dxfParser.ts– DXF Parsing (dxf-parser library)frontend/src/services/dxfWriter.ts– DXF Writingfrontend/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 Startbackend/src/server.ts– Server-Konfiguration (CORS, Static, WebSocket)backend/src/database/DatabaseInterface.ts– Abstrahierte DB-Schichtbackend/src/database/SqliteAdapter.ts– SQLite Implementationbackend/src/database/schema.sql– Schema: users, projects, drawings, blocks, layers, elements, settingsbackend/src/database/migrations.ts– Migration-Runnerbackend/src/routes/index.ts– Route-Registrationbackend/src/routes/projects.ts– CRUD für Projektebackend/src/routes/drawings.ts– CRUD für Zeichnungenbackend/src/routes/layers.ts– CRUD für Layerbackend/src/routes/elements.ts– CRUD für Elementebackend/src/routes/blocks.ts– CRUD für Blöckebackend/src/routes/export.ts– Export-Endpunktebackend/src/routes/import.ts– Import-Endpunktebackend/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-Managementbackend/src/routes/auth.ts– Auth-Endpunktefrontend/src/contexts/AuthContext.tsx– Auth-State Managementfrontend/src/pages/Login.tsx– Login-Seitefrontend/src/pages/Register.tsx– Registrierungfrontend/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 Persistenzfrontend/src/crdt/YjsDocument.ts– Yjs Document Wrapperfrontend/src/crdt/WebSocketProvider.ts– WebSocket-Verbindungfrontend/src/crdt/AwarenessManager.ts– Nutzer-Anwesenheit, Cursor-Positionenfrontend/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, Isolationfrontend/src/types/plugin.types.ts– Plugin-Manifest, Tool-API Interfacefrontend/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 Togglefrontend/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-Testsbackend/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