• 0.4.0 4769a8d70d

    0.4.0 Stable

    Pablo1732 released this 2026-11-09 12:01:49 +00:00 | 0 commits to master since this release

    Änderungen

    • Übersicht am Rand: Eine Leiste links zeigt je Jahrgang / Stunde / Lehrkraft, ob der Abschnitt schon durchgelaufen ist, gerade zu sehen ist oder noch kommt. Bei wenigen Gruppen als mitlaufende Kästchen, bei vielen (Lehrkräfte) als Register mit Balken über den sichtbaren. Pro Ansicht (Schüler / Lehrer) in den Einstellungen ein- und ausschaltbar.
    • Lehrer-Kürzel (Verwaltung → Einstellungen): Namen werden automatisch aus den Plänen gesammelt. Kürzel zuordnen, nicht mehr vorhandene Lehrkräfte entfernen, Warnung bei doppelten Kürzeln, ausblendbarer Hinweis bei neuen Lehrkräften ohne Kürzel. Import/Export als CSV/TXT, volle Namen werden zugeordnet.
    • Ohne Kürzel: Kurzform des Nachnamens mit Großbuchstaben (z. B. „Must", bei Gleichstand „MusA").
    • Abstände immer kompakt, Kopfabstand angeglichen.
    • Verwaltung am Handy: größere Eingaben und Knöpfe, kein iOS-Zoom.

    Update: Image-Tag auf 0.4.0 setzen, dann docker compose pull && docker compose up -d. Einstellungen und Aushänge bleiben erhalten. Die Übersicht am Rand ist nach dem Update an; Kürzel per Import nachtragen.

    Downloads
  • 0.3.7 ecf1ea506c

    0.3.7 Stable

    Pablo1732 released this 2026-11-09 09:28:47 +00:00 | 1 commits to master since this release

    Änderungen

    • Lehrer nach Lehrkraft: Vertretungen stehen jetzt bei der alten und der neuen Lehrkraft (vorher nur bei der neuen). So sieht jede Lehrkraft alle sie betreffenden Stunden in ihrer eigenen Gruppe. „Einträge" zählt weiterhin jeden Eintrag nur einmal.
    • Kein Wackeln mehr: Ist der Plan nur ein paar Pixel zu lang (nur Zellenabstand/Linie abgeschnitten), bleibt er stehen statt endlos hoch und runter zu scrollen. Ab 24 px Überhang wird immer gescrollt.
    • Pausen bei schnellem Scrollen: Die schnelleren Tempo-Stufen warten oben/unten länger (+0,8 s bzw. +1,8 s bei max). Standard und langsamer unverändert.

    Update: Image-Tag auf 0.3.7 setzen, dann docker compose pull && docker compose up -d. Einstellungen und Aushänge bleiben erhalten.

    Downloads
  • 0.3.6 f15dd8d1bf

    0.3.6 Stable

    Pablo1732 released this 2026-09-18 10:09:25 +00:00 | 2 commits to master since this release

    Update von 0.3.5: nur das Image-Tag in der docker-compose.yml auf 0.3.6 setzen. Keine neuen Einstellungen nötig, die Anzeige sieht danach aus wie vorher.

    Admin-Panel

    • Einstellungen (Zahnrad oben): Scrollgeschwindigkeit und Textgröße der Tabellen, getrennt für Schüler- und Lehreransicht.
      • Je 5 Stufen, dazu ein „Standard"-Knopf.
      • Wird erst mit „Speichern" übernommen.
      • Größere Schrift macht Ränder und Spaltenabstände automatisch etwas enger.
    • Plan-Hinweise oben im Panel (unter einem Alarm-Banner): Störung, veraltet, unvollständig, unsicher, jeweils mit Details zur Fehlersuche. Beispiele: Datei fehlt, Parser-Fehlermeldung mit Quelle, neuester Tag in der Datei.
    • Einheitliche Kopfzeile, Status-Anzeige „Kein Aushang".

    Anzeige

    • Neues Badge „Server nicht erreichbar – Anzeige evtl. veraltet":
      • erscheint nach 1 min ohne Server-Antwort
      • hat Vorrang vor allen anderen Hinweisen, auch im Vollbild-Aushang
      • blinkt ab 15 min ruhig rot/orange
    • Hinweis-Badges stehen jetzt rechts vom Trennstrich statt unter der Uhr.
    • Kürzere Texte. Beide Störungsfälle heißen auf dem Bildschirm „Störung: Plan konnte nicht gelesen werden".
    • Aushang-Bilder und PDF-Seiten werden vorgeladen: Die Diashow läuft bei einem Serverausfall komplett weiter. Nicht ladbare Bilder zeigen „Aushang kann nicht geladen werden" statt einer weißen Fläche.

    Server / Betrieb

    • Der Server prüft die vertretungen.json alle 20 s. Neue Hinweise stehen im Log, Störungen als FEHLER, alles andere als WARNUNG. Behobene Hinweise werden ebenfalls geloggt.
    • Neue Endpunkte /api/anzeige und /api/status, beide nur mit Anmeldung.

    Alarm-Logik unverändert gegenüber 0.3.5, erneut auf Fehlalarm getestet.

    Downloads
  • 0.3.5 924c64588d

    0.3.5 Stable

    Pablo1732 released this 2026-09-16 19:33:03 +00:00 | 3 commits to master since this release

    ⚠️ Vor dem Update lesen

    • ADMIN_PASSWORD: "bitte-aendern" sperrt ab jetzt den Login. Wer noch das Beispiel-Passwort nutzt, vorher ein eigenes in der docker-compose.yml setzen.
    • Neue docker-compose.yml übernehmen (Log-Begrenzung + LOG_LEVEL) oder die Blöcke von Hand ergänzen.

    Alarm (Feueralarm / Lockdown)

    • Kein Fehlalarm beim Laden: Alarm-Overlays blitzen nicht mehr auf und erscheinen auch bei abgebrochener Verbindung, fehlendem Skript oder kaputter Server-Antwort nie.
    • Bestätigungsdialog vor dem Auslösen; Beenden weiterhin sofort.
    • Doppeltipp schaltet den Alarm nicht mehr versehentlich zurück.
    • Mehrere Geräte: Wurde der Alarm woanders geändert, wird nichts überschrieben – das Panel zeigt den echten Zustand und warnt.
    • Hängende Verbindung blockiert das Alarm-Panel nicht mehr (Abbruch nach 8 s mit Hinweis).
    • Das Panel gleicht Alarm und Aushang alle 4 s mit dem Server ab.

    Admin-Panel

    • Responsive: gut bedienbar auf Handy, Tablet und kleinen Fenstern.
    • Stift- und Mülleimer-Symbole statt Text-Buttons.
    • Ungespeicherte Änderungen bleiben bei abgelaufener Anmeldung und bei Änderungen von anderen Geräten erhalten (mit Hinweis).
    • Hinweis, wenn ein PDF mehr als 20 Seiten hat, und wenn Dateien beim Veröffentlichen nicht übernommen wurden.
    • Große Sperranzeige beim Login, solange das Standard-Passwort gesetzt ist.

    Server / Betrieb

    • LOG_LEVEL (debug / info / warning / error, Standard warning): keine Log-Zeile mehr pro Anfrage; Alarme und Fehlversuche bleiben sichtbar.
    • Log-Begrenzung in der docker-compose.yml (max. 30 MB).
    • Große PDFs: nur die ersten 20 Seiten werden gerendert (kein Timeout mehr).
    • Frisch hochgeladene, noch nicht veröffentlichte Dateien werden 7 Tage aufbewahrt.
    • Unterstrichen im Texteditor bleibt erhalten.
    • Schriften lokal im Image – keine Anfragen an Google, voll offline.
    • POLL_SECONDS unter 1 wird abgefangen; Version im Image korrekt gesetzt.

    Anzeige

    • Weniger Neuzeichnen (Uhr springt pünktlich zur Minute).
    Downloads
  • 0.3.4 83ca5bfbeb

    0.3.4 Stable

    Pablo1732 released this 2026-09-16 09:16:21 +00:00 | 4 commits to master since this release

    Mehr Platz für den Vertretungsplan.

    • Legende neben dem Trennstrich: Die Legende (Entfall / Vertretung / Raumänderung) steht jetzt links auf Höhe des schwarzen Strichs unter dem Kopf, der Strich beginnt rechts daneben. Die eigene Legenden-Zeile entfällt, die Tabellen beginnen dadurch 20 px weiter oben. Gilt für Schüler- und beide Lehreransichten.
    • Vollbild-Aushang unverändert: Legende und Strich werden dort weiterhin ausgeblendet.
    • Credits klein und unauffällig unten links in allen Ansichten; belegt keinen Platz im Plan.
    • Rein anzeigeseitig, keine neue Einstellung. Update: docker compose pull && docker compose up -d.
    Downloads
  • 0.3.3 d218c1162d

    0.3.3 Stable

    Pablo1732 released this 2026-09-15 12:33:34 +00:00 | 5 commits to master since this release

    Weichere Übergänge beim Ein-/Ausblenden des Aushangs.

    • Crossfade (320 ms) beim Ein- und Ausblenden des Aushangs im Intervall. Statt
      hart zwischen Vertretungsplan und Aushang umzuschalten, wird der Aushang jetzt
      sanft ein- und ausgeblendet: er liegt als Ebene über dem Plan, der Plan bleibt
      darunter sichtbar, sodass ein echter Crossfade entsteht (Aushang blendet über den
      Plan ein / gibt ihn beim Ausblenden wieder frei) – gilt für Seiten-Aushang
      (links/rechts) wie Vollbild.
    • Diashow bleibt unverändert: der Wechsel zwischen mehreren Dateien innerhalb
      einer Einblendung schaltet weiterhin hart um. Der Crossfade betrifft ausschließlich
      das Ein-/Ausblenden des Aushangs, nicht die Diashow.
    • Rein anzeigeseitig, ohne neue Einstellung; der übrige Aushang-/Plan-Aufbau bleibt
      gleich.
    Downloads
  • 0.3.2 2eee345ccf

    0.3.2 Stable

    Pablo1732 released this 2026-09-15 12:33:34 +00:00 | 6 commits to master since this release

    Diashow im Intervall sinnvoller getaktet.

    • Intervall-Diashow: „Bilder pro Einblendung" statt Sekunden. Im Intervall-Modus
      wird die Diashow nicht mehr nach einer festen Sekunden-Zeit weitergeschaltet
      (die passte nie sauber zu den Einblende-Fenstern und führte nach dem
      Wiedereinblenden zu kurzem Zucken), sondern über die Anzahl der Bilder, die
      pro Einblendung durchlaufen. Die Einblende-Dauer wird gleichmäßig auf sie
      aufgeteilt – immer volle Slots, kein Rest über die Pause hinweg, und jedes Bild
      kommt der Reihe nach dran.
      • Neues Dropdown im Admin-Panel (nur im Intervall sichtbar, an Stelle des
        Sekunden-Sliders, weiterhin unter „Diashow-Wechsel"). Die Auswahl zeigt die
        resultierende Zeit je Bild, z. B. „3,4 sek (5 Einblendungen)". Obergrenze
        skaliert linear mit der Einblende-Dauer: 10 s → 2, 300 s → 25. Das Dropdown
        zeigt höchstens 10 Einträge – die kleinen (aussagekräftigen) bleiben, oben
        wird ausgedünnt; der Höchstwert bleibt wählbar.
      • Dauerhaft bleibt unverändert (weiterhin „Diashow-Wechsel" in Sekunden).
    Downloads
  • 0.3.1 161aa071f8

    0.3.1 Stable

    Pablo1732 released this 2026-09-15 12:33:34 +00:00 | 7 commits to master since this release

    Verbesserungen am Admin-Panel (auf 0.3.0 aufbauend).

    • Drag-and-Drop: Dateien können jetzt direkt auf die Upload-Zone gezogen
      werden (mit optischer Hervorhebung beim Drüberziehen) – zusätzlich zum
      Auswählen-Knopf. Läuft durch denselben Weg (25-MB-Limit, PDF→PNG, Ziel-Auswahl).
    • Überarbeiteter Text-Editor für Textmeldungen:
      • Symbol-Werkzeugleiste statt Text-Knöpfen (B / I / U, Ausrichtung und
        Aufzählung als Icons, „T✕" zum Formatieren-Entfernen), in Gruppen mit
        vertikalen Trennstrichen.
      • Live-Hervorhebung der aktiven Formate: markierter Text zeigt (hellblau),
        was gerade an ist – zuverlässig über selectionchange.
      • Schriftgröße als Auswahl mit Live-Anzeige der aktuellen Größe; bei
        gemischter Markierung erscheint „?".
      • Textfarbe als Dropdown mit 10 Farben; der Trigger zeigt die aktuelle
        Farbe als Kreis – bei mehreren Farben einen Kreis mit „?".
    Downloads
  • 0.3.0 289c571ea2

    0.3.0 Stable

    Pablo1732 released this 2026-09-15 12:33:34 +00:00 | 8 commits to master since this release

    Admin-Panel für Aushänge („Werbung") und Alarme – serverseitig, gerätübergreifend.

    Admin-Panel & gemeinsamer Zustand

    • Neues Admin-Panel unter /admin (Login + Verwaltung). Die Schulleitung kann
      Bilder/PDFs/Textmeldungen als Aushang auf die Aula-Anzeige schalten
      (Platzierung links/rechts/vollbild, dauerhaft oder im Intervall, Diashow,
      Enddatum) und die Alarme Feueralarm und Amok/Lockdown ein-/ausschalten.
    • Serverseitiger gemeinsamer Zustand statt Browser-localStorage: Aushang- und
      Alarmzustand liegen im Container (/data/userdata/state.json + media/) und
      werden über eine kleine API geteilt (/api/state, /api/aushang, /api/notfall,
      /api/upload, /api/login). Dadurch steuert die Schulleitung von einem anderen
      Gerät
      aus, was am Aula-Display erscheint. Zustand übersteht einen Neustart.
    • Schulname im Kopf über SCHULNAME in der Compose einstellbar
      (Default „Johannes-Gutenberg-Gymnasium").

    Sicherheit

    • Echte Anmeldung mit Zugangsdaten aus der docker-compose.yml
      (ADMIN_USER / ADMIN_PASSWORD, alternativ ADMIN_PASSWORD_HASH = PBKDF2;
      Hash erzeugen mit server.py --hash 'passwort'). Session-Cookie (HttpOnly,
      SameSite=Strict), Ablauf über SESSION_HOURS.
    • Brute-Force-Schutz: Fehlversuche pro IP werden gezählt, ab LOGIN_MAX_FAILS
      greift eine ansteigende Sperre, plus feste Verzögerung; Passwortvergleich in
      konstanter Zeit (kein Timing-Oracle für den Benutzernamen).
    • Textmeldungen werden serverseitig bereinigt (Allowlist): nur harmlose
      Formatier-Tags + gefilterte Inline-Styles; script/Event-Handler/iframe/
      javascript:-URLs werden entfernt. Kein Skript kann auf die Anzeige gelangen.
    • Server-Härtung: Socket-Timeout gegen hängende Verbindungen, Aufräumen von
      Sessions/Sperr-Einträgen. (Noch kein HTTPS – im LAN Klartext; TLS später per
      Reverse-Proxy davor, dann IP-Sperre auf X-Forwarded-For umstellen.)

    Uploads & PDF

    • Uploads als Dateien im neuen Volume ./data/vplan-websrv-userdata
      (bis 25 MB pro Datei, JPG/PNG/WebP/PDF), über /media/<id> ausgeliefert und
      browser-cachebar.
    • PDFs werden serverseitig in Seiten-PNGs umgewandelt (poppler-utils/
      pdftoppm) – identische Darstellung in jedem Browser (kein Firefox-Toolbar/Zoom),
      ermöglicht mehrseitige Aushänge. Im Vollbild werden 2 Seiten nebeneinander
      gezeigt und paarweise durchgewechselt; sonst je 1 Seite.
    • Zuverlässiges Aufräumen: nicht mehr referenzierte Dateien werden entfernt –
      auch verwaiste Dateien direkt von der Platte (mit Alters-Schutz für laufende
      Uploads) sowie beim Start.

    Anzeige

    • Neue Aushang-Anzeige neben/über dem Plan; Textmeldungen scrollen bei
      Überlänge automatisch durch (wie die Vertretungen).
    • Diashow-Timing gefixt: im Intervall zählt nur die sichtbare Zeit, dadurch
      kommt jede Datei dran (vorher konnte eine genau in die Pause fallen).
    • Der Plan scrollt nach einem Vollbild-/Intervall-Aushang genau dort weiter, wo
      er war (statt oben neu zu starten).
    • Vollbild-Feinschliff: minimaler Kopf (nur Schule + Uhr; ohne Mittel-Titel,
      Trennlinie und „Plan veraltet"), heller Rand statt dunkel, „Aktualisiert" zeigt
      die Aushang-Zeit, bei mehreren Seiten steht mittig klein „Aushang x / y".
    • Am Vertretungsplan selbst ändert sich sonst nichts: ohne veröffentlichten
      Aushang und ohne Alarm ist die Anzeige identisch zu 0.2.0.

    Alarme

    • Feueralarm/Amok werden bewusst über das Admin-Panel geschaltet und kommen
      ausschließlich aus dem Server-Zustand – so kann bei Lade-/Verbindungsproblemen
      niemals versehentlich ein Alarm erscheinen.
    Downloads
  • 0.2.0 d71f6a96f0

    0.2.0 Stable

    Pablo1732 released this 2026-09-15 12:33:33 +00:00 | 9 commits to master since this release

    • Ferien-Banner („Nächste Ferien" / Sommerferien-Countdown) im Kopf komplett
      entfernt
      (Markup + Berechnung).
    • Lehreransichten: die „Lehrkraft"-Spalte zeigt jetzt Lehrkraft alt→neu
      (ursprüngliche → vertretende Lehrkraft), analog zur „Lehrer alt→neu"-Spalte der
      Schüleransicht.
    • Farbkategorien Betreuung, EVA und Verlegung entfernt und in Vertretung
      zusammengefasst (Legende, Klassifizierung artVon, Farbtabelle). Es bleiben nur
      noch drei Farben: Entfall, Vertretung, Raumänderung. Ein etwaiger Hinweis (z. B.
      „EVA") steht ohnehin im Text und wird weiterhin in der Spalte „Information"
      angezeigt; die „entfällt"-Kennzeichnung bleibt unverändert.
    Downloads