Files
3d.lehrstun.de/docs/etappen.md
Hans Puettmann 76addcb846 Herr Rechmann + L3-Titel + L2-Workflow
Drei Aenderungen aus Herbs Feedback:

1. Markus -> Herr Rechmann (60 Treffer in 26 Dateien + DB-Lektionen L2/L3)
   Konvention: Herb bleibt 'Herb' (interne Anrede fuer Claude), Markus
   wird in SuS-sichtbaren Texten als 'Herr Rechmann' ausgeschrieben.
   Wo 'Herb und Markus' stand -> 'Herb und Herr Rechmann'. Wenn das
   stilistisch zu uneinheitlich wirkt, koennen wir Herb spaeter auch
   in SuS-Texten zu 'Herr Puettmann' umziehen.

2. L3-Titel: 'Customizer — parametrisches 3D-Modell anpassen'
   -> 'Mein eigenes 3D-Modell designen'
   Begruendung Herb: 'Customizer' + 'parametrisch' wirken abschreckend.
   Methode kommt in den Aufgabe-Text, nicht in den Titel.

3. L2-Inhalt komplett geschrieben (~4.8 KB):
   - 8-Schritte-Workflow vom Stoebern auf Printables bis zum
     Druck-Abholen
   - A1-mini-Spezifika klar markiert (offen → nur PLA, 18×18 cm)
   - P-Serie-Spezifika fuer groessere Drucke
   - Tipps zur Modell-Wahl (klein anfangen, 4+ Sterne)
   - Was-tun-wenn-Tabelle bei Druckproblemen
   - Lehrer-Eskalations-Pfad: pausieren via Handy-App + Lehrer rufen

   Quellenlage: PDF-Anleitung A1 mini im OneDrive + Bambu-Wiki online
   waren beide nicht maschinell zugaenglich (pdftoppm fehlt, Wiki
   gibt HTTP 402). Workflow basiert auf Standard-Bambu-Studio-Bedienung
   + Konsistenz mit der L1-P2S-Beschreibung. Herb/Herr Rechmann pruefen
   die A1-mini-Spezifika beim Lehrer-Test und korrigieren via Inline-Edit
   (oder per Migration, wenn Inline-Edit-UI noch nicht live ist).
2026-05-24 19:51:19 +02:00

9.0 KiB

type, projekt, stand, tags
type projekt stand tags
konzept-modul 3d.lehrstun.de 2026-05-24
konzept
plan
etappen

Implementierungs-Etappen

Grobe Reihenfolge zum Bauen. Detaillierte Inhalte: ../kurskonzept. V8 (../decisions#E-020): Blueprint-Struktur von Anfang anapp.py ist Bootstrap, Routen in routes/, externe Services in services/.

Etappe 0 — Skelett (✓ am 2026-05-23)

Etappe 1 — Basis: Blueprints + Login + Profile + Inline-Edit (✓ am 2026-05-24)

Blueprint-Refactoring (V8):

  • routes/oeffentlich.py, routes/profil.py, routes/admin.py, routes/api.py anlegen
  • services/datei.py anlegen (abstrahiertes File-Handling, Stubs)
  • services/bambu.py anlegen (Stub, Implementation folgt in Etappe 4)
  • services/auth.py anlegen (bcrypt + persistenter Lockout + Decorators)
  • app.py zur Bootstrap-Datei umbauen (90 Zeilen, Blueprint-Registrierung)

Schema:

  • init_db() aktualisieren mit allen Tabellen aus datenmodell
  • ag_mitgliedschaft Initial-Seed („lessing-3d-ag")
  • 4 Drucker-Stammdaten als Seeds
  • Default-Einstellungen (tag_vorschlaege, default_lockout_dauer_min, feedback_widget_aktiv)

Login + Profile:

  • Profil-Kacheln-Seite mit Vorname + Tier
  • PIN-Eingabe mit bcrypt-Check
  • Persistenter Login-Lockout in login_lockout-Tabelle (V7) statt In-Memory wie Arduino
  • /logout
  • Admin-Login mit Passwort aus .env

Profil-Verwaltung im Admin:

  • /admin/profile Liste mit aktiv-Toggle, PIN-Reset
  • /admin/profil/neu mit PIN-Generation (einmalig sichtbar via Flash)
  • /admin/profile/karten Druckbogen (CSS-Print)

Inline-Edit-Infrastruktur:

  • ERLAUBTE_INLINE_TABELLEN-Dict mit Whitelist (Backend)
  • /admin/inline-edit-POST mit Audit-Log in aenderung_log
  • base.html-JS für Inline-Edit-UI (kommt in Etappe 2, wenn das erste editierbare Feld in der UI sichtbar wird)
  • CSRF-Token (kommt in Etappe 2, sobald Forms wachsen)

Etappe 2 — Cockpit (progressiv) + Check-In + Paarung + Lehrer-Dashboard (✓ am 2026-05-24)

Cockpit (V1 — progressives Layout):

  • /cockpit rendert je nach Status (services/cockpit_status.py liefert das Bundle)
  • Cockpit-Banner für ungelesene Lehrer-Notizen (V5-Quick-Action)
  • Cockpit-Banner für offene Rückfragen (V6) — Render-seitig, Daten kommen mit Etappe 6
  • Cockpit-Banner für eingegangene Paarungs-Anfragen

Check-In (V3 + E-021):

  • Modal beim ersten Cockpit-Aufruf eines Besuchstages
  • Default-Option „Ich arbeite an X weiter" wenn aktives Projekt vorhanden
  • /cockpit/check-in-POST speichert in check_in-Tabelle (UNIQUE pro Tag)

Onboarding-Status:

  • /cockpit/lektion/<nr>/status (selbst-zertifiziert, E-019)
  • Onboarding-Karte mit Lektion-Status-Anzeige + Aktions-Buttons

Paarung:

  • profil_anfrage-Tabelle on-demand angelegt
  • /cockpit/paarung/anfragen/<id> mit Konflikt-Check
  • /cockpit/paarung/anfrage/<id>/annehmen|ablehnen
  • /cockpit/paarung/aufloesen

Lehrer-Dashboard (V5, lehrer-dashboard):

  • /admin/dashboard mit 4 Sektionen + Schnell-Zahlen + Rückfragen-Liste
  • „Notiz hinterlassen"-Quick-Action via lehrer_notiz-Tabelle
  • Live-Drucker-Status (kommt mit Etappe 5)

Lektion-Detail-Seite (vorgezogen aus Etappe 3):

  • /lektionen und /lektion/<nr> Minimal-Renderer mit Markdown + Status-Buttons (vollständige Version mit Inline-Edit kommt in Etappe 3)

Seeds:

  • 3 Onboarding-Lektionen mit Platzhalter-Text (Herr Rechmann fuellt mit Inline-Edit nach)

Etappe 3 — Lektionen + Software-Sektion + Troubleshooting (1 Sitzung)

  • /lektionen mit Onboarding-Pfad-Markierung
  • /lektion/<nr> mit Markdown-Rendering + Inline-Edit (für Lehrer)
  • /cockpit/lektion/<nr>/status (selbst-zertifizierend, ../decisions#E-019)
  • /software + /software/<slug> (CMS-artig, Inline-Edit)
  • /troubleshooting mit Entscheidungsbaum
  • L1-L3 Inhalte ausgearbeitet (mit Herr Rechmann zusammen, ggf. asynchron)

Etappe 4 — Drucker-API-Spike (0.5 Sitzung)

  • scripts/drucker_api_spike.py — einmalige Abfrage aller 4 Drucker
  • Bambu-Cloud-Credentials in .env
  • Validierung: Auth funktioniert, alle 4 Drucker erreichbar, welche Felder liefern sie
  • Entscheidung: bambulabs_api direkt nutzen oder Code aus pybambu extrahieren

Etappe 5 — Drucker-Integration + Live-Status (1 Sitzung)

  • services/bambu.py implementieren (Poll-Funktion)
  • Poll-Worker als Hintergrund-Thread in Flask (oder eigener systemd-Service)
  • /drucker Live-View
  • /api/drucker/status JSON-Endpunkt für Polling
  • /admin/drucker + manueller Status-Override
  • UI: „Status veraltet"-Banner wenn Poll > 5 Min alt

Etappe 6 — Selbstlern-Loop: Projekt-Katalog + Lebenszyklus + Files + Review + Three.js (2 Sitzungen)

Datenmodell + Backend:

  • Alle Selbstlern-Loop-Tabellen aus datenmodell anlegen
  • services/datei.py voll implementieren (Upload, Größen-Check, Download, Löschen)

Projekt-Workflow im Cockpit:

  • /cockpit/projekt/neu (Vorlage aus Katalog wählen oder eigene Idee)
  • /cockpit/projekt/<id>/edit während in_arbeit
  • Datei-Upload-UI (mit Drag&Drop, 30 MB-Limit)
  • /cockpit/projekt/<id>/abschluss mit V4-Checkliste (3 Pflicht-Felder)

Projekt-Katalog:

  • /projekte mit Filter (Tag, Schwierigkeit, Erfolg, Macher)
  • /projekte/<id> Detail-Seite
  • /api/projekte/suche für Live-Suche
  • „Sowas mache ich auch"-Button → neues Projekt mit vorlage_projekt_id

Three.js-Vorschau (V3-Aktion + E-018):

  • static/js/three.min.js + static/js/STLLoader.js (zwei einzelne JS-Dateien, kein npm)
  • STL-Viewer-Widget für Detail-Seite und Lehrer-Review
  • „Aus 3D-Ansicht Cover speichern"-Funktion (Canvas-Screenshot)

Lehrer-Review (V3-Aktionen + E-017):

  • /admin/projekt-freigabe Queue
  • /admin/projekt-freigabe/<id> Detail mit Three.js + Inline-Edit
  • Freigeben / Rückfrage / Hart-Löschen-Aktionen
  • Audit-Log für Löschungen

Rückfrage-Mechanik (V6):

  • /cockpit/projekt/<id>/rueckfrage/<rid>/erledigt als Reaktions-Endpunkt
  • Banner-Rendering im Cockpit
  • Lehrer-Sicht der Rückfragen-Antworten

Etappe 7 — Slot-System + Druckaufträge (1 Sitzung)

Slots:

  • /cockpit/slots Kalender-Ansicht
  • /cockpit/slot/reservieren mit Konflikt-Check
  • V2-Gate: Slot-Routen mit Decorator @onboarding_l1_fertig schützen
  • /admin/slot/<id>/prioritaet Lehrer-Priorisierung
  • /admin/slot/<id>/verschieben Drucker-Wechsel bei Ausfall

Druckaufträge:

  • /cockpit/druckauftrag/neu (verknüpft mit Projekt + Slot)
  • /cockpit/druckauftraege Eigene Liste
  • /admin/druckauftraege Queue mit Freigabe für lange Drucke

Etappe 8 — ZSL-Material-Import (1 Sitzung mit Herr Rechmann)

  • Herr Rechmann + Herb wählen 8-10 ZSL-Projekte aus
  • Pro Projekt: Beschreibung in unser Format umarbeiten (CC-BY-4.0-Nachweis als Footer)
  • Bilder + STLs in projekt_datei importieren (Initial-Seed via Admin-Upload)
  • Tag zsl-vorlage + spezifische Tags pro Projekt setzen
  • Sichtbarkeits-Test im Katalog

Etappe 9 — Deploy + Polish (0.5 Sitzung)

  • DNS-A-Record 3d.lehrstun.de → 46.225.114.15 (via Hetzner Cloud DNS-CLI)
  • Nginx vhost + Let's-Encrypt
  • systemd-Service 3d-ag.service
  • PummelHummel/Alph-Integration aus D:/Claude-Projekte/PummelHummel/
  • PIN-Karten-Druckbogen testen
  • Bambu-Cloud-Credentials produktiv setzen
  • Erste echte AG-Sitzung als Soft-Launch

Erwarteter Gesamtaufwand

8-10 Coding-Sitzungen. Davon:

  • Etappen 1-3: Grundlage (3 Sitzungen)
  • Etappen 4-5: Drucker-API (1.5 Sitzungen)
  • Etappen 6-7: Selbstlern-Loop + Slots (3 Sitzungen)
  • Etappen 8-9: Inhalte + Deploy (1.5 Sitzungen)

Reihenfolge-Hinweise

  • Etappen 1-3 zusammenhängend bauen, sonst nichts funktioniert sinnvoll.
  • Etappe 4 (Spike) früh, weil davon abhängt, ob die Drucker-Anbindung überhaupt geht.
  • Etappen 6 (Selbstlern-Loop) und 7 (Slots) sind unabhängig — können in beliebiger Reihenfolge.
  • Etappe 8 (ZSL-Inhalte) kann parallel zu 6 laufen (Herr Rechmann pflegt Inhalte ein, während ich Code schreibe).
  • Etappe 9 (Deploy) erst, wenn 1-7 lokal stabil läuft.

Querverweise