From 6f18ab87357c402b5963d2b740b5463cd546ef90 Mon Sep 17 00:00:00 2001 From: Agent Zero Date: Fri, 19 Jun 2026 22:46:39 +0200 Subject: [PATCH] docs: add requirements specification for web-cad (Phase 1 Intake) --- docs/requirements.md | 342 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 docs/requirements.md diff --git a/docs/requirements.md b/docs/requirements.md new file mode 100644 index 0000000..7ed3f68 --- /dev/null +++ b/docs/requirements.md @@ -0,0 +1,342 @@ +# Requirements Specification – web-cad + +**Project:** web-cad – Web-basiertes 2D-CAD für Event-Bestuhlungspläne +**Phase:** 1 (Intake) +**Date:** 2026-06-19 +**Status:** Draft – ready for user review + +--- + +## 1. Vision & Ziel + +Das Ziel von **web-cad** ist eine web-basierte 2D-CAD-Anwendung, die: + +- alle grundlegenden CAD-Funktionen bereitstellt (Zeichnen, Bearbeiten, Bemaßen, Ebenen, Bibliothek, Gruppierung, Export/Import) +- spezialisierte Tools für Event-Bestuhlungspläne bietet (Reihen- und Block-Bestuhlung) +- später um weitere branchenspezifische Tools erweiterbar ist +- Multi-User-Kollaboration in Echtzeit unterstützt +- performant im Browser läuft – auch bei großen Projekten +- später auf Docker und Coolify deploybar ist + +**Referenz-UI:** AutoCAD Web +**Referenz-Architektur (Kollaboration):** Figma / Onshape (Cloud-native, Single Source of Truth) + +--- + +## 2. Nutzer & Rollen + +| Rolle | Beschreibung | +|---|---| +| **Planer** | Erstellt und bearbeitet Bestuhlungspläne, nutzt CAD-Grundfunktionen und Bestuhlungs-Tools | +| **Betrachter** | Kann Pläne ansehen, kommentieren, aber nicht bearbeiten (Read-Only-Zugriff) | +| **Admin** | Verwaltung von Projekten, Nutzern, Berechtigungen und Bibliothek | +| **Gast** | Temporärer Zugriff auf spezifische Pläne ohne Account (z. B. für Kundenfreigabe) | + +--- + +## 3. Funktionale Anforderungen + +### 3.1 CAD-Grundfunktionen + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-CAD-01 | **Zeichnen von Grundelementen:** Linie, Kreis, Bogen, Rechteck, Polygon, Ellipse | Alle genannten Elemente können erstellt, ausgewählt, verschoben und gelöscht werden | +| F-CAD-02 | **Bearbeiten:** Verschieben, Kopieren, Rotieren, Skalieren, Spiegeln, Trimmen, Verlängern, Abrunden (Fillet) | Jede Operation verändert die Geometrie korrekt und kann rückgängig gemacht werden (Undo/Redo) | +| F-CAD-03 | **Bemaßung:** Lineare, winkelige, radiale Bemaßung mit automatischer Maßberechnung basierend auf dem Hintergrund-Grundriss-Maßstab | Bemaßung zeigt korrekte Werte in realen Maßeinheiten (m/cm) an | +| F-CAD-04 | **Raster & Fang:** Rasteranzeige, Snap-to-Grid, Snap-to-Endpoint, Snap-to-Midpoint, Snap-to-Intersection, Ortho-Modus | Fangpunkte werden visuell hervorgehoben und beim Zeichnen exakt eingefangen | +| F-CAD-05 | **Eingabefeld (Command Line):** Befehlseingabe via Tastatur wie in AutoCAD (z. B. "L" für Line) | Befehle können über die Tastatur eingegeben und ausgeführt werden; Autovervollständigung vorhanden | +| F-CAD-06 | **Eigenschaften-Panel:** Anzeige und Bearbeitung von Element-Eigenschaften (Position, Größe, Winkel, Farbe, Linientyp, Linienstärke) | Eigenschaften können angezeigt und geändert werden; Änderungen sind sofort sichtbar | +| F-CAD-07 | **Auswahl-Methoden:** Einzelauswahl, Fenster-Auswahl, Kreuz-Auswahl, Selektion-Filter | Alle Auswahlmethoden funktionieren und können kombiniert werden | +| F-CAD-08 | **Gruppierung:** Elemente zu Gruppen zusammenfassen, Gruppen verschachteln, Gruppen speichern | Gruppen können erstellt, aufgelöst und in der Bibliothek gespeichert werden | +| F-CAD-09 | **Undo/Redo:** Strukturierte Undo/Redo-Historie mit beliebig vielen Schritten | Undo und Redo funktionieren für alle Operationen; Historie kann eingesehen werden | +| F-CAD-10 | **Kopieren zwischen Dateien:** Elemente können via Zwischenablage zwischen Projekten kopiert werden | Kopierte Elemente behalten ihre Eigenschaften und relative Position | + +### 3.2 Ebenen-System (Layers) + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-LAY-01 | **Ebenen als Baumstruktur:** Ebenen hierarchisch organisiert mit Parent-Child-Beziehungen | Ebenen werden in einem Baum-Widget angezeigt; Parent-Child-Beziehung sichtbar | +| F-LAY-02 | **Ebenen-Eigenschaften:** Name, Sichtbarkeit (On/Off), Sperrung (Lock/Unlock), Farbe, Linientyp | Jede Eigenschaft kann pro Ebene gesetzt werden und wirkt sich auf alle zugehörigen Elemente aus | +| F-LAY-03 | **Ebenen-Operationen:** Erstellen, Löschen, Umbenennen, Verschieben im Baum, Duplizieren | Alle Operationen funktionieren und aktualisieren den Baum in Echtzeit | +| F-LAY-04 | **Element-Zuordnung:** Elemente können zwischen Ebenen verschoben werden | Drag-and-Drop oder Kontextmenü zum Verschieben von Elementen zwischen Ebenen | +| F-LAY-05 | **Aktive Ebene:** Neue Elemente werden auf der aktiven Ebene erstellt | Aktive Ebene ist klar markiert; neue Elemente erscheinen auf der aktiven Ebene | + +### 3.3 Bibliothek (Block-Bibliothek) + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-LIB-01 | **Bibliothek als Baumstruktur:** Bibliothekselemente hierarchisch organisiert mit Ordnern und Unterordnern | Baum-Widget zeigt Ordner und Blöcke; Drag-and-Drop für Organisation | +| F-LIB-02 | **SVG-Import:** SVG-Dateien können in die Bibliothek importiert werden | SVG wird korrekt importiert, im Viewer angezeigt und als wiederverwendbarer Block gespeichert | +| F-LIB-03 | **Gruppen in Bibliothek speichern:** Im Zeichenbereich erstellte Gruppen können in die Bibliothek gespeichert werden | Gruppe wird als Block gespeichert und kann per Drag-and-Drop in den Zeichenbereich eingefügt werden | +| F-LIB-04 | **Block-Einfügen:** Blöcke aus der Bibliothek per Drag-and-Drop in den Zeichenbereich einfügen | Block wird an der Drop-Position eingefügt; Skalierung und Rotation können beim Einfügen gesetzt werden | +| F-LIB-05 | **Block-Bearbeitung:** Blöcke können nach dem Einfügen bearbeitet, skaliert, rotiert und gespiegelt werden | Alle Bearbeitungsoperationen funktionieren auf eingefügten Blöcken | +| F-LIB-06 | **Bibliotheks-Verwaltung:** Blöcke umbenennen, duplizieren, löschen, in Ordner verschieben | Alle Verwaltungsoperationen funktionieren; Änderungen werden persistent gespeichert | + +### 3.4 Hintergrund & Grundriss + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-BG-01 | **Grundriss laden:** Bild- oder Vektor-Datei (PNG, JPG, SVG, PDF-Seite) als Hintergrund laden | Datei wird als Hintergrund-Ebene geladen und im Zeichenbereich angezeigt | +| F-BG-02 | **Maßstabs-Definition:** Maßstab des Grundrisses kann definiert werden (z. B. 1:100, Referenzstrecke) | Nach Maßstabsdefinition werden Bemaßungen in realen Maßeinheiten (m/cm) angezeigt | +| F-BG-03 | **Hintergrund-Positionierung:** Hintergrund kann verschoben, rotiert und skaliert werden | Transformationen sind möglich und Bemaßungen aktualisieren sich entsprechend | +| F-BG-04 | **Hintergrund-Sichtbarkeit:** Hintergrund kann ein- und ausgeblendet werden | Sichtbarkeit kann pro Ebene oder global geschaltet werden | + +### 3.5 Bestuhlungs-Tools (Event-Spezifisch) + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-EVT-01 | **Reihen-Bestuhlung:** Automatische Platzierung von Stühlen in einer Reihe mit konfigurierbarem Abstand, Anzahl und Ausrichtung | Reihe wird mit korrekter Anzahl, Abstand und Ausrichtung generiert; Parameter sind im Nachhinein änderbar | +| F-EVT-02 | **Block-Bestuhlung:** Automatische Platzierung von Stuhl-Blöcken in einem rechteckigen Bereich mit konfigurierbaren Reihen, Spalten, Abständen | Block wird mit korrekter Reihe/Spalte-Anzahl und Abständen generiert; Parameter im Nachhinein änderbar | +| F-EVT-03 | **Bestuhlungs-Parameter:** Stuhl-Typ (aus Bibliothek), Reihe/Spalte-Anzahl, Abstand, Versatz, Ausrichtung, Block-Konfiguration | Alle Parameter können konfiguriert werden; Änderungen aktualisieren die Bestuhlung in Echtzeit | +| F-EVT-04 | **Bestuhlung bearbeiten:** Generierte Bestuhlung kann nachträglich modifiziert werden (Stühle hinzufügen/entfernen, verschieben) | Einzelne Stühle können hinzugefügt, entfernt oder verschoben werden; Gesamttbestuhlung aktualisiert sich | +| F-EVT-05 | **Bestuhlungs-Zählung:** Automatische Zählung der platzierten Stühle pro Reihe, Block und Gesamt | Zähler wird in Echtzeit aktualisiert und kann im Eigenschaften-Panel abgelesen werden | + +### 3.6 Import & Export + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-IMP-01 | **DXF-Import:** DXF-Dateien können importiert und als Zeichnung bearbeitet werden | DXF wird korrekt importiert; Layer, Blöcke und Geometrie bleiben erhalten | +| F-IMP-02 | **SVG-Import:** SVG-Dateien können als Zeichnung importiert werden | SVG wird korrekt importiert und als Vektor-Elemente bearbeitbar | +| F-IMP-03 | **DWG-Import (Optional):** DWG-Dateien können importiert werden (falls Lizenz/Library verfügbar) | DWG wird korrekt importiert oder klare Fehlermeldung bei nicht unterstützter Version | +| F-IMP-04 | **PDF-Import:** PDF-Dateien als Hintergrund oder als Vektor-Import | PDF wird geladen; Seiten können ausgewählt werden; Vektoren werden als bearbeitbare Elemente importiert | +| F-EXP-01 | **DXF-Export:** Zeichnung kann als DXF exportiert werden | Exportierte DXF-Datei kann in AutoCAD/QCAD korrekt geöffnet werden | +| F-EXP-02 | **SVG-Export:** Zeichnung kann als SVG exportiert werden | Exportierte SVG-Datei ist W3C-konform und in Browsern/Vektor-Programmen darstellbar | +| F-EXP-03 | **PDF-Export:** Zeichnung kann als PDF exportiert werden (mit Layout, Maßstab, Titelblock) | PDF wird mit korrektem Maßstab und allen Elementen generiert | +| F-EXP-03a | **PNG-Export:** Zeichnung kann als PNG exportiert werden | PNG wird in konfigurierbarer Auflösung generiert | +| F-EXP-04 | **JSON-Export (Projekt):** Vollständiges Projekt kann als JSON exportiert und wieder importiert werden | JSON enthält alle Daten (Ebenen, Elemente, Bibliothek, Grundriss); Re-Import ergibt identisches Projekt | + +### 3.7 Multi-User & Kollaboration + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-MU-01 | **Echtzeit-Kollaboration:** Mehrere Nutzer können gleichzeitig an derselben Zeichnung arbeiten | Änderungen eines Nutzers sind für alle anderen in Echtzeit (< 1 Sekunde) sichtbar | +| F-MU-02 | **Konfliktfreie Bearbeitung:** Gleichzeitige Bearbeitung desselben Elements führt nicht zu Konflikten oder Datenverlust | CRDT-basierte Synchronisation stellt Konsistenz sicher; keine Merge-Konflikte | +| F-MU-03 | **Nutzer-Anwesenheit:** Sichtbare Anzeige welcher Nutzer online ist und an welcher Zeichnung arbeitet | Avatar/Farbmarkierung pro Nutzer; Liste der aktiven Nutzer im Panel | +| F-MU-04 | **Cursor-Anzeige:** Position und Aktionen anderer Nutzer in Echtzeit sichtbar | Cursor anderer Nutzer wird mit Name/Farbe in Echtzeit angezeigt | +| F-MU-05 | **Berechtigungs-System:** Rollenbasierte Zugriffskontrolle (Planer, Betrachter, Admin, Gast) | Berechtigungen werden enforced; Betrachter kann nicht bearbeiten; Gast hat nur Zugriff auf freigegebene Pläne | +| F-MU-06 | **Offline-Unterstützung:** Offline-Änderungen werden synchronisiert, wenn Verbindung wiederhergestellt ist | Offline-Änderungen werden automatisch synchronisiert; keine Datenverluste | +| F-MU-07 | **Versionshistorie:** Änderungen werden protokolliert; Versionen können eingesehen und wiederhergestellt werden | Historie zeigt Zeitstempel und Nutzer; Versionen können wiederhergestellt werden | + +### 3.8 UI / UX + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-UI-01 | **AutoCAD Web-ähnliche Oberfläche:** Ribbon-/Menü-Band, Werkzeug-Paletten, Eigenschaften-Panel, Command-Line, Status-Bar | Layout orientiert sich an AutoCAD Web; Hauptwerkzeuge sind sichtbar und erreichbar | +| F-UI-02 | **Zeichenbereich:** Großer Canvas-Bereich mit Zoom, Pan, und View-Controls (Zoom-to-Fit, Zoom-to-Window) | Zoom und Pan funktionieren flüssig (60fps); View-Controls sind erreichbar | +| F-UI-03 | **Kontextmenüs:** Rechtsklick-Kontextmenüs mit relevanten Aktionen | Kontextmenü zeigt aktionsabhängige Einträge | +| F-UI-04 | **Tastatur-Shortcuts:** Standard-CAD-Shortcuts (z. B. L, C, M, CO, RO, SC, MI) | Shortcuts funktionieren und sind dokumentiert | +| F-UI-05 | **Responsive Design:** UI funktioniert auf Desktop-Bildschirmen (min. 1280px) | Bei 1280px Breite sind alle Panels nutzbar; kleinere Bildschirme werden in späterer Phase unterstützt | +| F-UI-06 | **Theme-Unterstützung:** Dark- und Light-Mode | Theme kann umgeschaltet werden; alle UI-Elemente passen sich an | + +### 3.9 Erweiterbarkeit + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| F-EXT-01 | **Plugin/Tool-System:** Architektur ermöglicht das Hinzufügen neuer Tools ohne Core-Änderung | Ein neues Tool kann als Plugin/Modul implementiert und registriert werden ohne Core-Code zu ändern | +| F-EXT-02 | **Tool-API:** Definierte Schnittstelle für externe Tools (Zeichnen, Bearbeiten, Bibliothek, Export) | API ist dokumentiert; ein Beispiel-Tool kann die API nutzen | +| F-EXT-03 | **Bibliothek-Erweiterung:** Neue Bibliothekstypen können hinzugefügt werden (nicht nur SVG) | Neue Typen können registriert und in der Bibliothek verwendet werden | + +--- + +## 4. Nicht-funktionale Anforderungen + +### 4.1 Performance + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| NF-PERF-01 | **Große Projekte:** Anwendung muss Projekte mit 50.000+ Elementen flüssig darstellen (60fps) | Benchmark: 50.000 Linienelemente werden bei 60fps gerendert (Canvas 2D mit Indexierung oder WebGL) | +| NF-PERF-02 | **Ladezeit:** Initiale Ladezeit < 3 Sekunden bei Standard-Internetverbindung | Lighthouse-Performance-Score >= 80; First Contentful Paint < 1,5s | +| NF-PERF-03 | **Speicher-Effizienz:** Browser-Speicherverbrauch bleibt < 500MB bei 50.000 Elementen | Speicherverbrauch wird überwacht und bleibt unter 500MB | +| NF-PERF-04 | **Kollaborations-Latenz:** Echtzeit-Synchronisation < 1 Sekunde bei normaler Netzwerkverbindung | Latenz wird gemessen und bleibt unter 1 Sekunde | + +### 4.2 Rendering-Technologie (Architektur-Empfehlung) + +Basierend auf Recherche (Stand 2025/2026): + +| Technologie | Einsatzbereich | Begründung | +|---|---|---| +| **Canvas 2D (mit Indexierung & Layer-System)** | Primärer Renderer für 2D-CAD | Kann 50.000+ Elemente bei 60fps rendern; gute Balance aus Performance und Entwicklungs-Aufwand | +| **WebGL (optional, Hybrid)** | Performance-Boost für sehr große Szenen (> 100k Elemente) | GPU-Beschleunigung; höhere Komplexität; erst bei Bedarf implementieren | +| **SVG** | NICHT als primärer Renderer geeignet | DOM-Overhead bei > 3.000-5.000 Elementen; Performance-Einbruch | +| **WebAssembly** | Berechnungsintensive Operationen (DXF-Parsing, Geometrie-Operationen) | Nahe-native Performance für Parsing und Mathematik | + +**Empfehlung:** Canvas 2D mit räumlichem Index (Quadtree/R-Tree) und Layer-basiertem Rendering als primäre Technologie. WebGL als optionale Hybrid-Schicht für extrem große Szenen reservieren. + +### 4.3 Kollaborations-Architektur (Architektur-Empfehlung) + +| Aspekt | Empfehlung | Begründung | +|---|---|---| +| **Synchronisation** | CRDT (z. B. Yjs) über WebSocket | Konfliktfreie Synchronisation; bewährt in Figma und modernen kollaborativen Apps; leichter korrekt zu implementieren als OT | +| **Transport** | WebSocket für Dokument-Daten; WebRTC optional für Cursor-Daten | WebSocket: zuverlässig, server-seitig kontrollierbar; WebRTC: niedrigere Latenz für Cursor-Positionen | +| **Persistenz** | Server-seitige Persistenz der CRDT-Dokumente | Single Source of Truth; Versionshistorie; Offline-Sync bei Reconnect | +| **Skalierung** | WebSocket-Server mit Pub/Sub pro Raum (Zeichnung) | Mehrere Zeichnungen parallel; isolierte Räume; horizontale Skalierung möglich | + +### 4.4 Sicherheit + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| NF-SEC-01 | **Authentifizierung:** Nutzer müssen sich authentifizieren (OAuth2/OIDC oder E-Mail/Passwort) | Login funktioniert; Sessions sind sicher (HTTP-only Cookies, CSRF-Schutz) | +| NF-SEC-02 | **Autorisierung:** Rollenbasierte Zugriffskontrolle für Projekte und Aktionen | Berechtigungen werden server-seitig enforced | +| NF-SEC-03 | **Daten-Transport:** HTTPS/WSS für gesamte Kommunikation | TLS für alle Verbindungen; keine unverschlüsselte Kommunikation | +| NF-SEC-04 | **Input-Validierung:** Import-Dateien werden validiert (DXF, SVG, PDF) | Maliciöse Dateien werden abgewiesen; Schema-Validierung erfolgt vor Verarbeitung | + +### 4.5 Deployment + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| NF-DEP-01 | **Docker-Deployment:** Anwendung kann in Docker-Containern betrieben werden | Dockerfile und docker-compose.yml vorhanden und funktionsfähig | +| NF-DEP-02 | **Coolify-Deployment:** Deployment via Coolify ist möglich | Coolify-kompatible Konfiguration vorhanden; Deployment-Dokumentation erstellt | +| NF-DEP-03 | **Umgebungs-Konfiguration:** Konfiguration über Umgebungsvariablen | Keine fest codierten Credentials; alle Secrets über Env-Variablen | +| NF-DEP-04 | **Datenbank:** Persistente Datenhaltung für Projekte, Nutzer, Bibliothek | Datenbank-Schema definiert; Migration-Skripte vorhanden | + +### 4.6 Plattform & Browser-Kompatibilität + +| ID | Anforderung | Akzeptanzkriterium | +|---|---|---| +| NF-PLAT-01 | **Browser-Unterstützung:** Chrome, Firefox, Edge, Safari ( aktuelle Versionen) | Anwendung läuft in allen genannten Browsern; keine Browser-spezifischen Fehler | +| NF-PLAT-02 | **WebAssembly-Unterstützung:** Browser muss WebAssembly unterstützen | Fallback-Strategie für Browser ohne WebAssembly oder klare Fehlermeldung | + +--- + +## 5. Annahmen (Assumptions) + +1. **Primär Desktop:** Die Anwendung wird primär auf Desktop-Geräten (≥1280px Breite) verwendet; mobile Unterstützung ist nicht Teil der initialen Version. +2. **Deutsche UI:** Die Benutzeroberfläche wird primär auf Deutsch entwickelt; Mehrsprachigkeit kann später hinzugefügt werden. +3. **Keine 3D:** Die Anwendung ist rein 2D; keine 3D-Modellierung oder 3D-Ansicht. +4. **DXF als primäres Austauschformat:** DXF ist das wichtigste Import/Export-Format für CAD-Interoperabilität; DWG ist optional und von Library-Verfügbarkeit abhängig. +5. **CRDT als Synchronisations-Standard:** CRDT (Yjs oder ähnlich) wird als Standard für Echtzeit-Kollaboration angenommen; OT wird nicht verwendet. +6. **Canvas 2D als primärer Renderer:** Canvas 2D mit räumlichem Index wird als primäre Rendering-Technologie angenommen; WebGL ist optional. +7. **Einzelner Server-Deployment:** Initiales Deployment ist ein einzelner Server (Docker/Coolify); horizontale Skalierung ist später möglich. +8. **SVG-Import als Bibliothekserweiterung:** SVG-Dateien werden primär für die Bibliothek importiert; SVG als Projekt-Import ist sekundär. +9. **Möglichst Open Source:** Soweit möglich sollen Open-Source-Bibliotheken verwendet werden, um Lizenzkosten zu minimieren. +10. **Bestuhlungs-Stühle als Bibliothek-Blöcke:** Stühle für Bestuhlungs-Tools werden als Blöcke in der Bibliothek definiert, nicht fest codiert. + +--- + +## 6. Non-Goals (Nicht im Scope der initialen Version) + +1. **Keine 3D-Modellierung** – rein 2D; keine 3D-Ansicht, keine Höhen, keine 3D-Renderings. +2. **Keine mobile App oder mobile-optimierte UI** – Desktop first; mobile wird erst bei Bedarf addressed. +3. **Keine lokalen Druck-/Plot-Konfigurationen** – PDF-Export ersetzt direktes Drucken in der ersten Version. +4. **Keine AutoCAD-LISP-/Macro-Skripting-Engine** – keine benutzerdefinierten Skripte in LISP/AutoLISP. +5. **Keine parametrische Modellierung** – keine Constraint-basierte Geometrie oder parametrischen Relationen. +6. **Keine BIM-Integration** – keine IFC-Importe, keine BIM-Datenmodellierung. +7. **Keine Desktop-Installation** – rein web-basiert; keine Electron-/NW.js-Desktop-App. +8. **Keine KI-gestützten Funktionen** – keine automatische Bestuhlungsvorschläge oder KI-Features in der ersten Version. +9. **Keine Multi-Tenant-Isolierung auf Organisationsebene** – initiale Version ist Single-Tenant; Multi-Tenant später. +10. **Keine erweiterten Druck-Layouts** – keine Plot-Styles, Linienstärken-Tabellen oder Print-Studio-Konfigurationen. +11. **Keine Video-/Audio-Kommunikation** – keine integrierte Video- oder Audio-Calls zwischen Nutzern. +12. **Keine automatische Flächenberechnung / Mengenermittlung** – in der ersten Version nicht enthalten. + +--- + +## 7. Offene Fragen + +| # | Frage | Priorität | Auswirkung bei Nicht-Beantwortung | +|---|---|---|---| +| Q-01 | Soll die Anwendung Open Source oder Closed Source sein? Welche Lizenz? | Hoch | Lizenzierung, Bibliotheksauswahl | +| Q-02 | Welche Authentifizierungsmethode wird bevorzugt (E-Mail/Passwort, OAuth2/OIDC, SSO)? | Hoch | Architektur, Security-Design | +| Q-03 | Welche Datenbank soll verwendet werden (PostgreSQL, SQLite, MongoDB)? | Mittel | Persistenz-Design, Deployment | +| Q-04 | Gibt es eine erwartete Nutzerzahl / Anzahl gleichzeitiger Kollaborateure pro Zeichnung? | Mittel | Skalierungs-Architektur, WebSocket-Server-Design | +| Q-05 | Soll DWG-Import unterstützt werden? Wenn ja, welche DWG-Versionen? | Mittel | Library-Auswahl, Lizenzkosten (ODA/Teigha) | +| Q-06 | Welche Stuhl-Typen / Bibliothekseinträge werden initial benötigt? | Mittel | Initial-Bibliothek, Bestuhlungs-Tool-Design | + | Q-07 | Sollen Bestuhlungs-Tools weitere Event-Elemente unterstützen (Tische, Bühnen, Absperrungen)? | Mittel | Tool-Scope, Bibliothek | +| Q-08 | Ist eine Kommentar-/Annotations-Funktion für Kollaborateure gewünscht? | Niedrig | UI-Design, Kollaborations-Features | +| Q-09 | Sollen Projekte in Ordnern/Projektgruppen organisiert werden können? | Niedrig | Projekt-Management-UI | +| Q-10 | Gibt es Anforderungen an Barrierefreiheit (WCAG 2.1 AA)? | Niedrig | UI-Design, Testing-Aufwand | +| Q-11 | Soll es ein API für externe Integrationen geben (REST/GraphQL)? | Niedrig | Architektur-Erweiterung | +| Q-12 | Welche Maßeinheiten sollen unterstützt werden (metrisch, imperial, beides)? | Niedrig | Bemaßungs-Logic, UI | + +--- + +## 8. Technologie-Recherche & Empfehlungen + +### 8.1 Rendering-Technologie + +**Recherche-Ergebnisse (Stand 2025/2026):** + +- **SVG:** Gut für einfache Grafiken; DOM-Overhead bei > 3.000-5.000 Elementen → Performance-Einbruch. **Nicht geeignet für CAD mit großen Zeichnungen.** +- **Canvas 2D:** Kann 50.000+ Elemente bei 60fps rendern, wenn räumliche Indexierung (Quadtree/R-Tree) und Layer-basiertes Culling eingesetzt werden. **Empfohlen als primärer Renderer.** +- **WebGL:** Höchste Performance für sehr große Szenen (> 100k Elemente); GPU-Beschleunigung; jedoch höherer Entwicklungs-Aufwand. **Als optionale Hybrid-Schicht reservieren.** +- **WebAssembly:** Nahe-native Performance für Berechnungen (DXF-Parsing, geometrische Operationen). **Empfohlen für rechenintensive Aufgaben.** + +**Quellen:** +- SVG Genie Blog: SVG vs Canvas vs WebGL Performance Comparison (2026) +- AlterSquare: WebGL vs Canvas for Browser-Based CAD Tools +- Medium (@codetip.top): SVG vs Canvas vs WebGL for Diagram Viewers +- PMC: Cross-Device Benchmark of Modern Web Animation Systems + +### 8.2 Multi-User Kollaboration + +**Recherche-Ergebnisse (Stand 2025/2026):** + +- **CRDT (Conflict-free Replicated Data Types):** Moderner Standard für kollaborative Anwendungen; verwendet von Figma und vielen modernen Apps; leichter korrekt zu implementieren als OT. + - **Yjs:** Beliebteste CRDT-Bibliothek; unterstützt Text, Arrays, Maps, XML; WebSocket- und WebRTC-Bindings vorhanden. + - **Automerge:** Alternative CRDT-Bibliothek; ähnliche Features. +- **OT (Operational Transformation):** Älterer Ansatz (Google Docs); komplexer korrekt zu implementieren; erfordert zentrale Server-Logik. +- **Transport:** WebSocket für Dokument-Synchronisation; WebRTC für Cursor-Positionen (niedrigere Latenz). +- **Persistenz:** Server-seitige Speicherung der CRDT-Dokumente für Single Source of Truth und Versionshistorie. + +**Empfehlung:** CRDT (Yjs) über WebSocket als primäre Kollaborations-Architektur. + +**Quellen:** +- Medium (toonsquare.tech): Real-Time Collaborative Editor with CRDT and Durable Objects +- Velt Blog: OT vs CRDT in 2026; Yjs WebSocket Server Guide +- Daydreamsoft: Real-Time Collaboration Using CRDTs and OT +- Onshape: Cloud-native CAD Collaboration + +### 8.3 Architektur-Referenzen + +- **AutoCAD Web:** Browser-basierte CAD-Oberfläche mit Ribbon-UI, DWG-Viewing, Markup-Tools. +- **Onshape:** Cloud-native CAD mit echter Multi-User-Kollaboration; Single Source of Truth; keine Datei-Kopien. +- **Figma:** Browser-basierte Design-Tool mit CRDT-basierter Kollaboration; inspirierend für UI und Sync-Architektur. +- **xDraftSight:** Cloud-basierter 2D-CAD; browser-basierte Architektur. + +--- + +## 9. Abhängigkeiten & Risiken + +| Risiko | Beschreibung | Mitigation | +|---|---|---| +| DXF/DWG-Kompatibilität | DXF-Parser in JavaScript/WebAssembly muss verschiedene DXF-Versionen korrekt verarbeiten | Open-Source-Library (dxf-parser) verwenden; Tests mit realen DXF-Dateien | +| Performance bei großen Zeichnungen | 50k+ Elemente können Browser überlasten | Canvas 2D mit räumlichem Index; Viewport-Culling; Virtualisierte Layer | +| Kollaborations-Komplexität | CRDT-Synchronisation für komplexe CAD-Daten ist nicht trivial | Yjs als bewährte Bibliothek; inkrementelle Implementierung; erst einfache Operationen, dann komplexe | +| Bibliotheks-Lizenzen | Einige CAD-Bibliotheken sind kommerziell (z. B. ODA für DWG) | Open-Source-Alternativen evaluieren; DWG als optional markieren | +| Browser-Speicherlimit | Sehr große Projekte können Browser-Speicherlimit überschreiten | Lazy-Loading; Kompression; IndexedDB für Persistenz | + +--- + +## 10. Deployment-Erwartungen + +| Aspekt | Erwartung | +|---|---| +| **Containerisierung** | Docker (Dockerfile + docker-compose.yml) | +| **Orchestrierung** | Coolify auf coolify-01 (46.225.91.159) | +| **Domain** | TBD – z. B. cad.media-on.de | +| **SSL** | Let's Encrypt via Coolify/Traefik | +| **Datenbank** | PostgreSQL (empfohlen) oder SQLite (für kleinere Deployments) | +| **WebSocket-Server** | Separater Container oder integriert; WebSocket-Proxy via Traefik | +| **Persistenz** | Docker-Volume für Datenbank und Datei-Storage (Grundrisse, Bibliothek) | +| **Skalierung** | Initiale Version: Einzelner Server; später horizontal skalierbar | + +--- + +## 11. Handoff + +### Requirements Status +- **Draft erstellt:** Ja (2026-06-19) +- **Testbare Anforderungen:** Ja – alle funktionalen und nicht-funktionalen Anforderungen haben konkrete Akzeptanzkriterien +- **Akzeptanzkriterien konkret:** Ja +- **Annahmen explizit:** Ja (10 Annahmen dokumentiert) +- **Non-Goals dokumentiert:** Ja (12 Non-Goals) +- **Offene Fragen:** 12 (davon 2 hoch, 3 mittel, 7 niedrig priorisiert) + +### Ready for Architecture +- **Bedingt bereit** – nach Beantwortung von Q-01 (Lizenz) und Q-02 (Authentifizierung) kann die Architektur-Phase starten +- Die technologischen Empfehlungen (Canvas 2D + CRDT/Yjs) sind bereits fundiert recherchiert und können als Architektur-Vorgaben dienen + +### Empfohlene nächste Schritte +1. User-Review der requirements.md +2. Beantwortung der hoch-priorisierten offenen Fragen (Q-01, Q-02) +3. Freigabe für Architektur-Phase (Phase 2) +4. Delegation an Solution Architect