# 3D Project Manager Eine kleine Docker-basierte Webanwendung, um 3D-Druck-Projekte zu verwalten: Projekte anlegen, STL-/3MF-Dateien per Drag & Drop hochladen und direkt im Browser als 3D-Vorschau betrachten. ## Setup 1. `.env.example` nach `.env` kopieren und zwei Werte setzen: - `PROJECTS_DIR`: Ordner auf deiner Festplatte, in dem deine Projekte als normale Unterordner angelegt werden — den kannst du auch direkt im Dateimanager oder Slicer öffnen. ``` PROJECTS_DIR=/home/deinname/3d-projects ``` - `PASSWORD_SHA256`: SHA256-Hash deines gewünschten Login-Passworts. Erzeugen z. B. mit: ``` echo -n "meinPasswort" | sha256sum ``` Nur den resultierenden Hex-Hash in die `.env` eintragen, nicht das Passwort selbst. 2. Container bauen und starten: ``` docker compose up --build -d ``` 3. Im Browser öffnen: [http://localhost:8080](http://localhost:8080) — du wirst zur Login-Seite weitergeleitet und musst das Passwort eingeben. ## Login - Es gibt nur ein Passwort, keinen Nutzernamen. Wer das Passwort kennt, hat Zugriff. - Nach erfolgreichem Login wird eine signierte, `HttpOnly`-Session-Cookie gesetzt (30 Tage gültig). Der Signierschlüssel liegt im `app-settings`-Volume und bleibt über Container-Neustarts hinweg gleich, d. h. du bleibst eingeloggt. - "Abmelden" oben rechts löscht die Session. - Nach 5 Fehlversuchen in Folge wird der Login für 30 Sekunden gesperrt. - **Wichtig:** Diese Anwendung ist für den Einsatz auf deinem eigenen Desktop/Heimnetz gedacht. Für Zugriff über das Internet solltest du zusätzlich HTTPS (z. B. über einen Reverse Proxy) einrichten, da das Passwort sonst unverschlüsselt übertragen wird. ## Wie es funktioniert - **Projekt anlegen** → im Container wird `PROJECTS_DIR/` erstellt (durch den Bind-Mount landet das direkt auf deiner Platte). - **Dateien hochladen** → per Drag & Drop oder Klick auf die Upload-Fläche, nur `.stl` und `.3mf` werden akzeptiert. Sie werden 1:1 in den Projektordner kopiert. - **3D-Vorschau** → beim Öffnen eines Projekts wird für jede Datei ein eigener Three.js-Viewer (mit Zoom/Rotation per Maus) im Grid angezeigt. - **App-Einstellungen/Metadaten** liegen ausschließlich im `app-settings`-Docker-Volume, nicht in deinem Projektordner. Aktuell benötigt die App noch keine eigene Konfiguration, aber der Ordner ist für spätere Erweiterungen (z. B. Nutzerverwaltung) bereits vorbereitet. ## Projektstruktur auf der Festplatte ``` / Gehäuse-Prototyp/ deckel.stl boden.3mf Ersatzteil/ halterung.stl ``` Reine Ordner mit deinen Dateien — du kannst sie auch außerhalb der App öffnen, kopieren oder in deinen Slicer ziehen. Lösch- und Umbenennungen über den Dateimanager wirken sich beim nächsten Laden der Seite ebenfalls auf die App aus. ## Bekannte Grenzen (erster Wurf) - Single-User, kein Login. - Projekt-/Dateinamen sind auf Buchstaben, Zahlen, Leerzeichen, `-` und `_` beschränkt (Schutz gegen Pfad-Tricks). - Kein Undo beim Löschen — es wird aber vorher immer nachgefragt. ## Stack - Backend: FastAPI (Python), liefert API + statische Frontend-Dateien aus einem einzigen Container. - Frontend: reines HTML/CSS/JS, 3D-Rendering mit Three.js (STLLoader / 3MFLoader) via CDN. - Docker Compose mit Bind-Mount für Projekte und separatem Volume für App-Settings.