Browser-BIM (cad): semantisches Modell, abgeleitete 2D/3D-Sichten, Zeichenwerkzeuge

Standalone-Browser-Port von DOSSIER. Enthaelt das semantische Modell mit
Plan-/3D-Ableitung, Zeichen- und Editierwerkzeuge, Rhino-artiges Befehlssystem,
dockbares Panel-System, Resource-Manager, DXF/.lin/.pat-Import, i18n (de/en)
sowie Projektdokumentation und Probe-Harness.
This commit is contained in:
2026-06-30 20:52:27 +02:00
commit ca859c4aa4
157 changed files with 37921 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
# Backend & Kollaboration — Architekturentscheidung
> Stand: 2026-06-29 · Ziel: komplett self-hosted, kollaborations-offen
## Grundsatz
So lange wie möglich **client-only** bleiben; das Backend additiv einführen, ohne
den Kern umzubauen. Die Pure-Ableitungs-Architektur (ein serialisierbares Modell,
alle Sichten abgeleitet) ist bereits kollaborations-freundlich.
## Phasen
| Phase | Persistenz / Backend |
|---|---|
| **03** (Modellierer) | **Client-only**: IndexedDB + Datei-Export/Import (JSON). Offline-fähig (PWA möglich). Kein Server. |
| **5** (Konten/Persistenz) | **Supabase self-hosted** (Docker Compose): Postgres + Auth + Storage. Projekte, Versionen, Dateien (IFC/Pläne/Assets). Row-Level-Security pro Nutzer/Projekt. |
| **6** (Kollaboration) | **Yjs (CRDT)** + **Hocuspocus** Sync-Server (Container), persistiert Snapshots nach Postgres. Presence/Cursors. Optional Supabase-Realtime nur für leichte Broadcasts. |
## Warum Yjs/Hocuspocus statt reinem Supabase-Realtime
Gleichzeitiges Editieren eines strukturierten Dokuments braucht Konfliktauflösung
(CRDT). Yjs ist dafür Standard; Hocuspocus ist der self-hostbare Server dazu und
kann nach Postgres (Supabase) persistieren. Supabase-Realtime allein wäre nur
Pub/Sub ohne Merge-Semantik.
## Was wir JETZT schon richtig machen (damit Collab nicht blockiert)
- Dokumentmodell rein **JSON-serialisierbar**, keine Zyklen, stabile IDs.
- Edits immutable über `setProject` → später leicht auf Yjs-Doc abbildbar
(`Y.Map`/`Y.Array` je Sammlung: drawingLevels, layers, components, walls …).
- Kein Wahrheits-Zustand im Three.js-Scene-Graph oder im DOM — alles ableitbar.
- Ressourcen (Components/Hatches/Lines) als referenzierte Bibliotheken (IDs) →
gut mergebar.
## Self-hosted Stack (Skizze, Phase 5/6)
```
docker-compose:
supabase (postgres, gotrue auth, storage, kong gateway, studio)
hocuspocus (yjs websocket sync, persist -> postgres)
web (vite build, statisch via nginx/caddy)
```
Alles auf eigener Infrastruktur lauffähig; keine externe Cloud nötig.
## Offene Punkte
- Granularität der CRDT-Struktur (pro Sammlung vs. pro Element).
- Datei-Storage (Supabase Storage vs. S3-kompatibel/MinIO im selben Stack).
- Auth-Modell (E-Mail, OIDC/SSO fürs Büro).