ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Ein Tipp zeigt der Klasse, wer gerade gut arbeitet. Dazu der Fokus-Wald für ruhige Stillarbeit.
Translation pending
EducationJavaScript · CSSGitHub @sauterjoshuaOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Kanban-Board für Unterrichtsverhalten: Schüler*innen wechseln zwischen „Da geht mehr“, „Du arbeitest gut“ und „Du arbeitest großartig“, die App misst die Zeit pro Spalte. Vanilla JS auf GitHub Pages mit Supabase als Backend.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Die Startseite zeigt, was BehaviourTracker kann. Ohne Konto gehen: • Unterricht ausprobieren (app.html#/ausprobieren): Vornamen eintippen (oder Beispielnamen einsetzen), Kanban oder sortierte Ansicht wählen und das Board ausprobieren. Nach dem Beenden stehen die Zeiten der Stunde da. Nichts wird gespeichert – der Probe-Unterricht liegt nur im Arbeitsspeicher des Tabs; vor dem Neuladen fragt der Browser nach. • Fokus-Wald (app.html#/focus): Klassen nur mit Namen anlegen, Bäume pflanzen, Ranking, Belohnung und alle Wälder.Read the full README ↗
Klassenschwung ist eine Web-App für Lehrkräfte mit zwei Werkzeugen: dem Fokus-Wald für ruhige Stillarbeit und einem Board für den Unterricht, das zeigt, wer gerade gut arbeitet. Beides läuft direkt im Browser, ohne Installation.
Der Fokus-Wald ist ein Lautstärke-Monitor für den Beamer. Solange es in der Klasse ruhig ist, wächst ein Baum, und wird es zu laut, vertrocknet er. Jeder fertige Baum kommt dauerhaft in den Wald der Klasse. Kurze Ziele ergeben schnell wachsende Arten wie die Birke, lange Ziele die langsamen Riesen bis zum Mammutbaum, und zu jeder Art gibt es einen Steckbrief zum Vorlesen. Beim offenen Ziel zählt der Timer hoch: Aus der Birke wird ein Kirschbaum, dann ziehen Amseln ein, bauen ein Nest und werden mit der Zeit immer mehr. Die Klassen vergleichen sich in einem Ranking und arbeiten auf eine selbst gewählte Belohnung hin. Das Mikrofon misst nur die Lautstärke im Browser, es wird nichts aufgenommen. Der Fokus-Wald funktioniert auch ohne Konto.
Im Unterricht hat jede Schülerin und jeder Schüler einen von drei Zuständen: "Start", "Du arbeitest gut" oder "Du arbeitest großartig". Die Lehrkraft zieht die Namen auf dem Tablet in die passende Spalte oder tippt sie in einer sortierten Ansicht an. Die App misst dabei, wie lange jemand gut oder großartig gearbeitet hat. Die Zeit im Startzustand wird nicht gespeichert. Dazu kommen eine Auswertung je Klasse mit Export als PDF oder CSV, ein Sitzplan, der Import von Klassenliste und Stundenplan und eine Klassenansicht für den Beamer. Für den Unterricht braucht man ein Konto, das Board lässt sich aber ohne Anmeldung ausprobieren.
Die Startseite zeigt, was Klassenschwung kann. Ohne Konto gehen:
app.html#/ausprobieren): Vornamen eintippen
(oder Beispielnamen einsetzen), Kanban oder sortierte Ansicht wählen und
das Board ausprobieren. Nach dem Beenden stehen die Zeiten der Stunde da.
Nichts wird gespeichert – der Probe-Unterricht liegt nur im
Arbeitsspeicher des Tabs; vor dem Neuladen fragt der Browser nach.app.html#/focus): Klassen nur mit Namen anlegen, Bäume
pflanzen, Ranking, Belohnung und alle Wälder. Gespeichert wird das im
Browser (localStorage, Schlüssel bt.gast.wald), nicht auf dem Server.Ohne Anmeldung baut die App keine Verbindung zu Supabase auf; die Aufrufe
laufen über guestApi in app.js.
Klassenschwung ist derzeit ein privates Projekt (siehe unten): Ein
Konto anlegen kann nur, wer einen Einladungslink bekommen hat
(app.html?einladung=…). Wer ohne Link auf Anmelden tippt, sieht
zuerst diesen Hinweis und die Links zu den Funktionen ohne Konto, darunter
das Anmeldeformular. Mit Link öffnet sich gleich „Registrieren“.
Link oben öffnen und auf Anmelden tippen. Die App selbst liegt unter
app.html; alte Lesezeichen auf …/#/… werden automatisch dorthin
weitergeleitet.
Mit E-Mail und Passwort anmelden. Beim ersten Mal die Nutzungsbedingungen bestätigen.
Nach dem Login erscheint Heute. Oben in der Kopfzeile:
Eine Klasse hat die Reiter Schüler · Sitzplan · Auswertung · Wald. Während eines Unterrichts ist die Kopfzeile auf das Nötigste reduziert.
Klassenschwung macht gutes Arbeiten im Unterricht sichtbar. Jede Person hat einen von drei Zuständen:
| Zustand | Darstellung | Zeit wird gespeichert |
|---|---|---|
| Start | neutral grau | nein |
| Du arbeitest gut | helle Akzentfarbe | ja |
| Du arbeitest großartig | kräftige Akzentfarbe | ja |
„Start“ ist kein Urteil, sondern der Ausgangspunkt: Wer nicht angetippt wurde, hat einfach noch keine Rückmeldung bekommen. Deshalb speichert die App nur, wie lange jemand „gut“ oder „großartig“ gearbeitet hat.
Die Farben hängen von der gewählten Farbwelt ab: Standard ist Salbei (gedämpftes Waldgrün), unter Konto-Menü → Einstellungen lassen sich Tafelgrün, Tinte und Bernstein wählen. Die Wahl wird im Konto gespeichert und gilt auf allen Geräten.
Beim Start eines Unterrichts wählt man eine von zwei Ansichten:
Beide Ansichten sind nur unterschiedliche Darstellungen derselben Daten – die App misst in beiden automatisch, wie lange jede Person „gut“ oder „großartig“ gearbeitet hat, und die Auswertung macht keinen Unterschied zwischen ihnen.
import-export.js, PDF ohne fremde Bibliothek).Kurzablauf im Unterricht:
Im laufenden Unterricht oben Wer ist da? (mit Zähler, z. B. „23/25“). Wer fehlt, wird angetippt und aus dem Unterricht genommen: Die Person sammelt keine Zeit und der Unterricht zählt für sie in der Auswertung nicht mit. Eine Abwesenheit wird nicht gespeichert – die Person steht dann einfach nicht in diesem Unterricht. Schon gesammelte Zeit bleibt, z. B. wenn jemand früher geht. Wer später kommt, wird wieder angetippt und startet im Startzustand. Auch wer erst nach dem Start in die Klasse eingetragen wurde, lässt sich so dazunehmen.
Antippen und Verschieben wirken sofort. Die Änderungen gehen über eine Warteschlange (localStorage, nur IDs, Zustand und Zeitpunkt, keine Namen) an den Server; ist die Verbindung weg, steht im Board „Keine Verbindung · 2 Änderungen warten“, und die App sendet nach, sobald das WLAN wieder da ist – auch nach dem Neuladen der Seite. Der Server trägt dabei den Zeitpunkt des Antippens ein, nicht den des Nachsendens (höchstens 15 Minuten zurück). Gemessen wird nur, wie lange die Änderung schon zurückliegt, deshalb spielt eine falsch gehende Geräteuhr keine Rolle. Genauso werden im Fokus-Wald gepflanzte Bäume nachgesendet. Beenden lässt sich ein Unterricht erst, wenn alles übertragen ist.
Für „Wer ist da?“ und die genauen Zeiten beim Nachsenden muss einmalig
supabase/migrations/0009_presence_and_offline.sql im Supabase SQL-Editor
ausgeführt werden (setzt 0008 voraus). Ohne sie funktioniert das Nachsenden
trotzdem, nur mit dem Zeitpunkt des Nachsendens.
Im laufenden Unterricht oben Klassenansicht wählen:
Die Klassenansicht öffnet sich in einem eigenen Fenster, das man auf den Beamer zieht (Bildschirm erweitern, nicht spiegeln) und mit Vollbild groß macht. Bedient wird weiter im Board, z. B. auf dem Tablet. Alternativ öffnet man auf dem Rechner am Beamer denselben Unterricht und dort die Klassenansicht. Oben lässt sich jederzeit zwischen „Mit Namen“ und „Nur Anzahl“ wechseln.
Änderungen kommen live an (Supabase Realtime). Zusätzlich lädt die Ansicht alle 15 Sekunden, nach WLAN-Aussetzern und beim Zurückkehren in den Tab neu; ist die Verbindung weg, steht das oben im Status.
Wird das Gerät nur gespiegelt, sieht die Klasse genau das, was die Lehrkraft sieht – „Nur Anzahl“ braucht deshalb einen zweiten Bildschirm.
Am 1. August werden alle Unterrichte des abgelaufenen Schuljahres mit
ihren Zuständen und Zeiten gelöscht. Klassen, Schüler, Sitzplan und
Fokus-Wald bleiben. Das erledigt ein täglicher Job in der Datenbank
(pg_cron, Job loesche-vergangene-schuljahre); zusätzlich räumt die App
beim Anmelden die eigenen alten Unterrichte auf. Im Juli erinnert ein
Hinweis auf Heute und in der Auswertung daran, vorher zu
exportieren. Die Regel steht auch in der Auswertung, unter
Einstellungen → Konto & Daten, in der Datenschutzerklärung und in
§ 5 der Nutzungsbedingungen.
Einmalig muss dafür supabase/migrations/0008_positive_only_and_yearly_purge.sql
im Supabase SQL-Editor ausgeführt werden. Sie löscht dabei auch die bisher
gespeicherten Zeiten im Startzustand und schaltet Realtime für die
Klassenansicht ein.
Unter Konto-Menü → Einstellungen. Wer nichts einrichtet, bei dem bleibt alles wie gewohnt (außer dem 50-Minuten-Ende, siehe unten).
Unterricht automatisch beenden (gilt für Kanban und sortierte Ansicht):
| Einstellung | Wirkung |
|---|---|
| Spätestens 50 min nach dem Start (Standard) | eine Schulstunde + 5 min |
| Ende der Stunde laut Stundenplan + n min | z. B. 7a dienstags 11:00–11:45, n = 5 → Ende 11:50; ohne passende Stunde nach 50 min |
| Nicht nach Zeit beenden | läuft, bis man ihn selbst beendet |
| zusätzlich: beim Schließen der Seite | beendet die im Tab geöffneten Unterrichte; bloßes Neuladen setzt sie fort |
Das zeitliche Ende passiert auf dem Server: Ist die Seite zu, wird der Unterricht beim nächsten Öffnen der App rückwirkend genau zum Endzeitpunkt abgeschlossen, und die Auswertung zählt ohnehin nur bis dahin. Fortsetzen setzt einen neuen Endzeitpunkt nach derselben Regel.
Einmalig muss dafür supabase/migrations/0007_schedule_autoend.sql im
Supabase SQL-Editor ausgeführt werden.
Einstellungen → Stundenplan importieren: eine iCal-Datei (.ics) aus
WebUntis (eigenen Stundenplan einer Woche exportieren) oder aus einem
Kalender auswählen. Die App
Gelesen wird die Datei nur im Browser; gespeichert werden nur Stundenzeiten und Wochenplan, keine Fächer, Räume oder Namen.
Unter Klassen → Klasse → Klassenliste importieren: eine Datei
(CSV, Excel .xlsx, Text – z. B. die Schülerliste aus Untis/WebUntis)
auswählen oder Namen einfügen (etwa aus Excel kopiert).
Ältere Excel-Dateien (.xls) bitte als .xlsx oder .csv speichern.
Unter Klassen → Klasse öffnen → Sitzplan.
Einmalig müssen dafür supabase/migrations/0004_seating.sql und
0005_seat_rotation.sql im Supabase SQL-Editor ausgeführt werden.
Für Stillarbeit auf dem Beamer, aufgebaut wie Mio's Monster Meter – nur mit einem Baum statt eines Monsters, damit es auch bei älteren Klassen zieht.
| Lautstärke | Wirkung |
|---|---|
| ruhig (grün) | Timer läuft, der Baum wächst |
| unruhig (gelb) | Timer pausiert |
| zu laut (rot, länger als ca. 1,5 s) | Baum vertrocknet, ein neuer Samen startet |
Jeder erreichte Timer pflanzt den Baum dauerhaft im Wald der Klasse. Während der Fokus-Phase steht der bisherige Wald der Klasse blass im Hintergrund.
Jedes Ziel hat eine eigene heimische Baumart mit Steckbrief (Höhe, Alter, ein Fakt zum Vorlesen). Wie in einem echten Wald kommen zuerst die schnell wachsenden Pionierbäume, zuletzt die langsamen Riesen:
| Ziel | Baum |
|---|---|
| 3 min | Hänge-Birke |
| 5 min | Vogelkirsche |
| 10 min | Berg-Ahorn |
| 15 min | Gemeine Fichte |
| 20 min | Rotbuche |
| 30 min | Stiel-Eiche |
| 45 min | Riesenmammutbaum |
Der Fakt zur aktuellen Art steht während der Fokus-Phase dezent unter dem Timer und beim Pflanzen in der Erfolgsmeldung.
Ziel Offen: Der Timer zählt hoch. Erst wächst eine Birke, ab 5 min ein Kirschbaum. Ab 10 min kommen zwei Amseln. Ab 12 min fliegen sie abwechselnd los, bringen Zweige und bauen langsam ihr Nest, das mit 15 min fertig ist. Ab 20 min kommt alle 5 min ein Vogel dazu (erst Küken, dann weitere Amseln). Die Vögel kommen angeflogen und leben danach im Wald weiter: Sie picken, schauen sich um, schütteln das Gefieder, die Küken betteln (nicht bei „Bewegung reduzieren“). Mit Baum pflanzen (ab 3 min) wird er mit der erreichten Zeit gepflanzt. Wird es ab 3 min zu laut, vertrocknet der Baum nicht, sondern die zuletzt erreichte Stufe wird gepflanzt und ein neuer Samen startet.
Die Klassen werden in einem Ranking nach Fokus-Minuten verglichen.
Alle Wälder erkunden (Fokus-Wald → oben rechts): alle Klassenwälder nebeneinander in einer Landschaft, jeweils mit Schild über dem Wald. Die größten, am längsten erarbeiteten Bäume stehen hinten in der Mitte, die schnell gewachsenen vorne am Rand. Seitlich wischen oder mit der Maus ziehen, um durch die Wälder zu gehen; ein angetippter Baum zeigt seinen Steckbrief. Darunter steht das Baum-Lexikon mit allen Arten.
Pro Klasse lässt sich eine Belohnung festlegen, z. B. „bei 20 Bäumen: Musik in der Stillarbeit“.
Beim Erklären auf Pause tippen (oder Leertaste), damit die eigene Stimme nicht mitzählt. Die Empfindlichkeit lässt sich im Probelauf ohne Klasse einstellen.
Das Mikrofon misst nur die Lautstärke direkt im Browser – es wird nichts
aufgenommen, gespeichert oder übertragen. Gespeichert wird nur der fertige
Baum. Einmalig müssen dafür supabase/migrations/0003_focus.sql und
supabase/migrations/0010_focus_open_trees.sql im Supabase SQL-Editor
ausgeführt werden. Ohne 0010 werden offene Bäume trotzdem gepflanzt, stehen
im Wald aber ohne Vögel und als die Art, die zur Zeit eines festen Ziels gehört.
impressum.html, datenschutz.html und
nutzungsbedingungen.html im Repo und sind im Footer jeder Seite verlinkt.
Platzhalter wie {{NAME}} lassen den Deploy (Netlify-build.sh)
bewusst abbrechen.docs/verarbeitungsverzeichnis.md. Die Seite läuft bisher nicht öffentlich
oder kommerziell; vor einer öffentlichen Nutzung ausfüllen. Jeder Deploy
gibt dazu eine Warnung aus.user_metadata des Kontos.supabase/migrations/0006_delete_account.sql im Supabase
SQL-Editor ausgeführt werden.fonts/) und Supabase-Bibliothek (vendor/) liegen im Repo. hCaptcha
wird nur geladen, wenn HCAPTCHA_SITE_KEY gesetzt ist – dann vorher in
datenschutz.html ergänzen.<meta> im
Kopf): Skripte nur von hier, Verbindungen nur zu Supabase. Inline-Skripte
sind deshalb tabu, neue Skripte als eigene Datei einbinden. Netlify
liefert zusätzlich die Header aus _headers; in einem fremden Frame
startet die App nicht (Schutz vor Clickjacking).docs/verarbeitungsverzeichnis.md. Bei neuen Funktionen, die
Daten speichern, diese Datei und datenschutz.html mitpflegen.Erweitertungen:
Yt video geben -> Fragebogen/Quiz daraus erstellen
Derzeit: öffentliche Startseite, Konten nur auf Einladung. Startseite, Fokus-Wald und Probe-Unterricht sind für alle offen; anmelden können nur Personen mit Einladungslink.
Achtung Impressum: Mit der öffentlichen Startseite und den Funktionen ohne Anmeldung ist die Seite ein Angebot an Dritte und dient nicht mehr ausschließlich persönlichen oder familiären Zwecken. Die Ausnahme nach § 18 Abs. 1 MStV, auf die
impressum.htmlsich beruft, greift dann nicht mehr – Name und ladungsfähige Anschrift gehören ins Impressum (oder ein Impressum-Service mit c/o-Adresse, oder eine Organisation betreibt die Seite). Siehe Schritt 4 unten.
index.html ist die normale Produktseite, weiterhin mit
noindex (nicht in Suchmaschinen).supabase/migrations/0011_invites.sql im Supabase SQL-Editor ausführen,
dann sich selbst als Admin eintragen:
insert into public.admins (auth_user_id)
select id from auth.users where email = '[email protected]';
Danach im Supabase-Dashboard unter Authentication → Sign In / Providers
„Allow new users to sign up“ einschalten. Die Sperre sitzt in der
Datenbank (Trigger auf auth.users): Ohne gültigen Code schlägt jede
Registrierung fehl, auch direkt über die API.Ganz öffentlich machen (z. B. wenn das Projekt größer wird):
startseite-oeffentlich).SIGNUP_OPEN = true in app.js, in Supabase „Allow new users to sign up“
einschalten.noindex aus den HTML-Seiten und X-Robots-Tag aus _headers entfernen.