Files

26 KiB
Raw Permalink Blame History

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