Schwester-Projekt zu arduino.lehrstun.de fuer die 3D-Druck-AG am Lessing-Gymnasium. Offene jahrelange Nachmittags-AG (kein Trimester), 8-10 Einzel-SuS mit optionalen 2er-Paarungen, 4 Bambu-Lab-Drucker (3 geschlossen + 1 A1 mini). Konzept v2 (Reality-Check-Iteration 2026-05-24): - Onboarding-Pfad statt Pflicht-Lektionen (L1-L3 selbst-zertifiziert) - Selbstlern-Loop als Kern: SuS-Projekte wachsen die interne Bibliothek - Drill-Down-Lehrer-Dashboard (Wer ist hier / Wartet Review / Haengt fest) - Cockpit progressiv: zeigt nur was zum Status passt - Bambu-Cloud-API fuer Drucker-Live-Status (fragil + Fallback manuell) - Three.js-Vorschau fuer Cover-aus-3D-Ansicht (Etappe 6) - Vollstaendige Doku als Obsidian-Vault (24 Markdown-Dateien) - Entscheidungen E-001 bis E-022 in docs/decisions.md Etappe 1 lauffaehig (~1800 Zeilen Code): - Blueprint-Struktur (V8): routes/oeffentlich+profil+admin+api, services/auth+bambu+datei - Komplettes Schema in database.py (14 Tabellen, idempotent) - Login mit bcrypt + persistentem Lockout in DB (V7, verbessert ggue Arduino-Kurs der In-Memory-Dict nutzt) - Admin-Login + Profile-CRUD + PIN-Reset + PIN-Karten-Druckbogen - Inline-Edit-Endpunkt mit Whitelist + Audit-Log - Seeds: AG lessing-3d-ag + 4 Drucker + Default-Einstellungen - Smoke-Test bestanden (Login, Profil-Anlage, Lockout-Logging) Nicht im Repo (.gitignore): .env, *.db, venv/, .obsidian/workspace.json
8.5 KiB
8.5 KiB
type, projekt, stand, tags
| type | projekt | stand | tags | |||
|---|---|---|---|---|---|---|
| konzept-modul | 3d.lehrstun.de | 2026-05-24 |
|
Implementierungs-Etappen
Grobe Reihenfolge zum Bauen. Detaillierte Inhalte: ../kurskonzept. V8 (../decisions#E-020): Blueprint-Struktur von Anfang an —
app.pyist Bootstrap, Routen inroutes/, externe Services inservices/.
Etappe 0 — Skelett (✓ am 2026-05-23)
- Projektordner + CLAUDE.md + README.md + CHANGELOG.md
- architektur + datenmodell + routen + druckerapi + slotsystem + sicherheit + etappen + selbstlern-loop + lehrer-dashboard
- Flask-Skelett (app.py mit Stubs, database.py, tiere.py)
- base.html portiert vom Arduino-Kurs
- ../COCKPIT als Vault-Startseite + .obsidian/-Konfig
- Reality-Check-Iteration mit Selbstlern-Loop, V1-V8 angenommen (2026-05-24)
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.pyanlegenservices/datei.pyanlegen (abstrahiertes File-Handling, Stubs)services/bambu.pyanlegen (Stub, Implementation folgt in Etappe 4)services/auth.pyanlegen (bcrypt + persistenter Lockout + Decorators)app.pyzur Bootstrap-Datei umbauen (90 Zeilen, Blueprint-Registrierung)
Schema:
init_db()aktualisieren mit allen Tabellen aus datenmodellag_mitgliedschaftInitial-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/profileListe mit aktiv-Toggle, PIN-Reset/admin/profil/neumit PIN-Generation (einmalig sichtbar via Flash)/admin/profile/kartenDruckbogen (CSS-Print)
Inline-Edit-Infrastruktur:
ERLAUBTE_INLINE_TABELLEN-Dict mit Whitelist (Backend)/admin/inline-edit-POST mit Audit-Log inaenderung_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 (1 Sitzung)
Cockpit (V1 — progressives Layout):
/cockpitrendert je nach Status:- Onboarding nicht erledigt → nur Onboarding-Karte + Check-In-Trigger
- L1 fertig → zusätzlich: Drucker-Buchung freigeschaltet
- Hat aktive Projekte → zusätzlich: eigene Projekte, Druckaufträge, Slots
- Cockpit-Banner für offene Rückfragen (V6)
- Cockpit-Banner für ungelesene Lehrer-Notizen
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 incheck_in-Tabelle
Paarung:
/cockpit/paarung/anfragen/<id>+ Bestätigungsmechanik/cockpit/paarung/aufloesen
Lehrer-Dashboard (V5, lehrer-dashboard):
/admin/dashboardmit 4 Sektionen (Wer hier / Wartet Review / Drucker-Status / Hängt fest)- Badge im Header für „wartet auf Review"-Anzahl
- „Notiz hinterlassen"-Quick-Action via
lehrer_notiz-Tabelle
Etappe 3 — Lektionen + Software-Sektion + Troubleshooting (1 Sitzung)
/lektionenmit 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)/troubleshootingmit Entscheidungsbaum- L1-L3 Inhalte ausgearbeitet (mit Markus 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_apidirekt nutzen oder Code auspybambuextrahieren
Etappe 5 — Drucker-Integration + Live-Status (1 Sitzung)
services/bambu.pyimplementieren (Poll-Funktion)- Poll-Worker als Hintergrund-Thread in Flask (oder eigener systemd-Service)
/druckerLive-View/api/drucker/statusJSON-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.pyvoll 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>/editwährendin_arbeit- Datei-Upload-UI (mit Drag&Drop, 30 MB-Limit)
/cockpit/projekt/<id>/abschlussmit V4-Checkliste (3 Pflicht-Felder)
Projekt-Katalog:
/projektemit Filter (Tag, Schwierigkeit, Erfolg, Macher)/projekte/<id>Detail-Seite/api/projekte/suchefü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-freigabeQueue/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>/erledigtals Reaktions-Endpunkt- Banner-Rendering im Cockpit
- Lehrer-Sicht der Rückfragen-Antworten
Etappe 7 — Slot-System + Druckaufträge (1 Sitzung)
Slots:
/cockpit/slotsKalender-Ansicht/cockpit/slot/reservierenmit Konflikt-Check- V2-Gate: Slot-Routen mit Decorator
@onboarding_l1_fertigschützen /admin/slot/<id>/prioritaetLehrer-Priorisierung/admin/slot/<id>/verschiebenDrucker-Wechsel bei Ausfall
Druckaufträge:
/cockpit/druckauftrag/neu(verknüpft mit Projekt + Slot)/cockpit/druckauftraegeEigene Liste/admin/druckauftraegeQueue mit Freigabe für lange Drucke
Etappe 8 — ZSL-Material-Import (1 Sitzung mit Markus)
- Markus + 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_dateiimportieren (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 (Markus pflegt Inhalte ein, während ich Code schreibe).
- Etappe 9 (Deploy) erst, wenn 1-7 lokal stabil läuft.
Querverweise
- Konzept-Übersicht: ../kurskonzept
- Datenmodell pro Etappe: datenmodell
- Routen pro Etappe: routen
- Selbstlern-Loop-Details: selbstlern-loop
- Lehrer-Dashboard: lehrer-dashboard
- Entscheidungen: decisions
- Offene Punkte: offene-fragen