Interner Projektbericht

Echo-Station

Eine stationäre Such- und Kopierstation für Predigten und andere Audiobeiträge der Gemeinde. Besucher suchen, filtern und kopieren Inhalte am Touchscreen auf einen USB-Stick – ohne technische Vorkenntnisse.

Stand: 19. Juni 2026 Statuslabel v0.5.0-beta.1 · App-Code 9384f7e · Produktdocs 4323201 Backend/Kiosk aktiv · Kiosk-Unlock getrennt · Hardening & Fernzugriff fertig Andreas Driss

Funktionsübersicht

Überblick über alle Bereiche des Projekts mit aktuellem Status. Stand jetzt: Besucher-MVP ist auf dem Pi lauffähig, die Station läuft im Kiosk-Probebetrieb, die Admin-NAS-UI mit echtem DB-Backup-Gate ist deployt, die Kiosk-Bildschirmsperre ist abgenommen, das Kiosk-Hardening ist nach Reboot technisch grün und der Fernzugriff für Wartung ist eingerichtet.

📋 Inhaltsliste anzeigen
Fertig
Besucher sehen eine vollständige Liste verfügbarer Audiobeiträge mit Titel, Sprecher, Kategorie und Datum.
🔍 Suche & Filter
Fertig
Suchfeld, Backend-Volltextsuche, Kategorie-Filter und Sortierung sind im Besucher-Frontend aktiv. Das Suchfenster scrollt jetzt auch per Finger-/Pointer-Drag auf dem Kiosk-Panel.
🤖 KI-Unterstützung
Geplanter Case
KI ersetzt „Musik hören“ als nächster fachlicher Case: bessere Suche, Vorschläge, Kategorisierung und Admin-Assistenz. Nicht MVP-blockierend; der Besucher-MVP bleibt USB-Export.
💾 USB-Stick kopieren
MVP + Abziehfall abgenommen
USB-Export ist grün: echter Stick bereit, Einzel- und Mehrfachkopie, wiederholtes Kopieren mit konfliktfreien Dateinamen, Abziehen während der Kopie sowie externe Datei- und Abspielprüfung sind bestanden.
🔄 Daten-Synchronisation
Fertig
Audiodateien werden aus lokalem Ordner und NAS eingelesen, ausgewertet und in der Datenbank gespeichert. Produktiv verifiziert.
🗄️ NAS als Quelle
Ein Event belegt
Die NAS bleibt Quelle der Audio-Daten. Admin-Status, Event-Auswahl, DB-Backup, Dry-Run-Ergebnis, produktive Ein-Event-Freigabe, Scheduler-Status und Run-History sind deployt; ein breiter produktiver 2026_MP3-Lauf ist nicht freigegeben.
🏷️ Inhaltstypen
Fertig
Predigt, Lied, Bibelarbeit, Zeugnis, Moderation und weitere werden automatisch erkannt und in der Datenbank gespeichert.
🔐 Admin-Bereich
NAS + Sperre live
PIN-basierte Admin-Auth ist am echten Kiosk in Betrieb. Kiosk-Unlock trennt jetzt Freigabe und Admin-Session; NAS-Status, Event-Liste, DB-Backup, Dry-Run, produktive Ein-Event-Freigabe, Admin-Lock und Freigabe-Buttons sind live.
🖥️ FullHD-Kiosk & Touch
Beta live
FullHD-Galerie, betonte Sammelleiste, Overlay-Scrolling und die finalen Lock-Screen-/Service-Scroll-Fixes sind auf dem Pi deployt. Kiosk-Flags, labwc/getty-Hardening und Fernzugriff sind abgeschlossen.
🪟 Chromium-Fensterkontrolle
Gehärtet
Der Kiosk startet mit dediziertem Chromium-Profil als App-Fenster. Chromium läuft mit Keychain-/Sync-Schutz; labwc/getty-Hardening ist live, rebootfest geprüft und ohne Desktop, Panel oder tty1-Autologin.
📅 Kalender & Kiosk-Freigabe
Sperre live
Resolver und Statusanzeige laufen am echten Kiosk. Der öffentliche Status bleibt ohne Auth erreichbar; Simple-Lock, Admin-Lock und /api/v1/kiosk/unlock sind deployt. Kalender-Sondertermine bleiben der nächste Ausbau.
🧹 Cache-Verwaltung
Teilweise
Gezielter Cache-Abruf und Bulk-Cache laufen produktiv. Cleanup-Timer, Retention-Regeln und langfristige Betriebsregeln bleiben offen.
🔧 Wartung & Fernzugriff
Fertig
Fernzugriff für Wartung ist eingerichtet und intern dokumentiert. Doku-only Pulls funktionieren; sensible Verbindungsdetails stehen bewusst nicht auf der öffentlichen Statusseite.
💿 Backup
Fertig
Automatisches Backup der Datenbank per Script und Timer ist eingerichtet. Wiederherstellung nach Fehler ist möglich.

Was das System kann

Übersicht der vorhandenen und geplanten Funktionen in Kurzform.

🗂️
Medienkatalog
Alle Audiodateien werden automatisch eingelesen. Titel, Sprecher, Datum, Dauer und Kategorie werden aus den Datei-Informationen ausgelesen und gespeichert.
Aktiv
🔎
Volltextsuche
Schnelle Suche über Titel und Sprecher. Das Suchfeld nutzt die Backend-Volltextsuche, inklusive On-Screen-Tastatur und korrigiertem Finger-/Pointer-Scroll im Suchfenster.
Aktiv
📂
Kategorien & Filter
Predigt, Lied, Bibelarbeit, Zeugnis, Moderation, Geschichte, Gedicht, Einleitung, Familienvortrag. Kategoriefilter im Frontend bereits nutzbar.
Aktiv
🤖
KI-Unterstützung
Geplanter Folge-Case für bessere Suche, automatische Vorschläge, Kategorisierungshilfe und spätere Admin-Assistenz. Nicht Teil des abgenommenen USB-Besucher-MVP.
Geplant
📅
Kalender-Zeitsteuerung
Reguläre Gottesdienste steuern, wann der Kiosk freigegeben oder gesperrt ist. Resolver, öffentlicher Status-Endpunkt, Simple-Lock, Admin-Lock und Admin-Statusanzeige sind am Pi verifiziert.
Sperre live
🔐
Admin-Auth
Lokales First-Run-Setup für eine 6-stellige PIN, signiertes HttpOnly-Session-Cookie, Rate-Limit und PIN-Wechsel sind implementiert und am Touchscreen erfolgreich geprüft.
Touch abgenommen
📤
USB-Export
Besucher wählen Beiträge aus und kopieren sie auf ihren USB-Stick. Einzelkopie, Mehrfachkopie, Namenskollisionen, externe Datei-/Abspielprüfung und Auswahl-Limit-Fehlerfall sind am echten Pi bestanden.
MVP abgenommen
🖥️
Kiosk-Probebetrieb
FullHD-Layout, Sammelleiste, Suche, Sammlung und Chromium-Fensterkontrolle sind am Pi verifiziert. Der Stand ist als v0.5.0-beta.1 für Geräte- und Bedienprüfung markiert.
Beta live
🔗
NAS-Integration
Die NAS bleibt die Hauptquelle. Der lokale Pi-Katalog umfasst 4411 Einträge; ein einzelner Event wurde produktiv synchronisiert, breite Jahres- und Root-Pfade werden weiter vorsichtig behandelt.
Aktiv

Was bisher umgesetzt wurde

Alle abgeschlossenen Arbeitsschritte seit Projektbeginn – chronologisch und sachlich.

Projektstruktur angelegt
Backend, Frontend, Infrastruktur und Dokumentation klar getrennt. Qualitätsregeln eingerichtet (TypeScript, Linting, Tests, Git-Hooks).
Backend aufgebaut
API-Server mit Fehlerbehandlung, Logging und Validierung. Läuft stabil auf dem Raspberry Pi.
Datenbank erstellt
SQLite mit Migrationen für Grundmodell, Volltextsuche, Cache-Felder und Inhaltstypen. Automatisches Backup eingerichtet.
Synchronisation implementiert
Audiodateien aus lokalem Ordner und NAS werden eingelesen, analysiert und in der Datenbank gespeichert. Duplikate werden erkannt.
NAS-Anbindung produktiv verifiziert
Verbindung zur echten NAS auf dem Pi geprüft und der lokale Katalog/Cache produktiv aufgebaut. Der erste produktive Ein-Event-Sync ist kontrolliert abgeschlossen; breite Jahres- und Root-Pfade bleiben bewusst kein pauschal freigegebener Sync-Pfad.
Inhaltstypen (v1) eingeführt
Fachliche Zuordnung festgelegt und umgesetzt: Predigt, Lied, Bibelarbeit, Zeugnis, Moderation, Geschichte, Gedicht, Einleitung, Familienvortrag. Mit Tests abgesichert.
Frontend-Basis umgesetzt
Inhaltsliste mit Suchfeld, On-Screen-Tastatur, Kategoriefilter, Sortierung und Kategorieanzeige. Filter-Verhalten stabilisiert und verifiziert.
Kiosk-Betrieb eingerichtet
Raspberry Pi startet automatisch in den Vollbild-Kiosk-Modus. Systemd-Konfigurationen versioniert und dokumentiert.
Deployment-Ablauf definiert
Klarer Prozess für Updates: Entwicklung auf Mac → Git Push → Pull und Build auf dem Pi → Neustart. Übergabedokumentation gepflegt.
Projektdokumentation aufgebaut
Backlog, Architektur, Handover, NAS-Analyse und Mapping-Entscheidungen als eigene Dokumente gepflegt.
USB-Export-Flow umgesetzt
Backend-Job-API, Mehrfachauswahl, Speicherprüfung und Fortschritt per Polling im Repo umgesetzt. Musik hören am Kiosk ist bewusst aus dem MVP gestrichen.
USB-Auswahl-Bug behoben
Das USB-Status-Polling setzte die Beitragsauswahl wiederholt zurück, solange kein Stick steckte. Behoben per Flanken-Logik: Die Auswahl wird nur noch beim tatsächlichen Abziehen des Sticks geleert. Build, Lint und Format-Check sind grün.
Cache-Abruf erweitert (Backend)
Logik zum gezielten Abrufen und zum Bulk-Cachen aller Remote-Einträge ergänzt, deployed und mit Tests abgesichert.
Lokalen Katalog aufgebaut
Der produktive Katalog enthält 4411 aktive Einträge, lokal gecached, mit ca. 51.94 GB Cache-Daten.
Kiosk-Zeitstatus und Sperre live
Resolver, öffentlicher Status-Endpunkt, Admin-Statusanzeige, Simple-Lock und Admin-Lock sind auf dem echten Kiosk deployt. Die neuen Statusfelder lockMode, lockedAt, scheduleActive und scheduleActiveUntil sind live.
Admin-Auth C2 abgenommen
First-Run-PIN-Setup, Login, Statusansicht und PIN-Wechsel sind am echten Kiosk-Touchscreen erfolgreich durchgeführt. Session-Cookie, Rate-Limit und Migration 008 sind auf dem Pi aktiv.
USB-Export MVP abgenommen
Echter Stick am Pi erkannt, Einzelkopie und Mehrfachkopie bestanden, wiederholtes Kopieren erzeugt konfliktfreie Dateinamen, MP3-Dateien sind extern vorhanden und abspielbar. Abziehen während der Kopie ist mehrfach geprüft: Der Kopiervorgang stoppt, der Zustand wird auf den Stand vor dem Kopierstart zurückgesetzt, die Sammelliste kann erneut gestartet werden und es werden nur noch fehlende Dateien kopiert. Der Auswahl-Limit-Fehlerfall ist geprüft; die Grenze liegt nun bei 700 Einträgen und die Fehlermeldung ist per OK-Button schließbar.
FullHD-Kiosk-Design auf dem Pi geprüft
Galerie-Maske, Floating-Pfeile, neutrale Jahresauswahl, vereinfachte Demnächst-Karten und die deutlichere Sammelleiste sind auf dem FullHD-Kiosk deployt.
Overlay-Scroll und Chromium-Fensterkontrolle stabilisiert
Suche und Sammlung scrollen auf dem Kiosk per Pointer-Drag. Das Kiosk-Skript bereinigt verwaiste Chromium-Reste; live geprüft ist ein sichtbares App-Fenster mit aktivem kiosk.service.
NAS-Event-Sync kontrolliert abgeschlossen
Admin-API akzeptiert gezielte eventRelativeRoots und sperrt produktive Läufe ohne exakt einen geplanten Event. Nach Backup und Dry-Run wurde 2026_MP3/GD_260527_Mi_mp3_a produktiv synchronisiert: Run 99, scanned=8, updated=8, missing=0, Event-State synced.
Admin-NAS-UX mit DB-Backup-Gate deployt
App-Code 2033583 ist auf dem Pi gebaut und Backend/Kiosk wurden neu gestartet. Die UI zeigt NAS-Status, Filter, Event-Auswahl, DB-Backup, Dry-Run-Ergebnis, produktive Ein-Event-Freigabe, Scheduler-Status und Run-History; Timer v1 bleibt per Env/default deaktiviert.
Kiosk-Sperre mit Simple/Admin-Modus deployt
App-Code 359e19d ist auf dem Pi gebaut. Der dezente Button „Bildschirm sperren" im Admin-Login-Dialog, Simple-Lock, Sperrbildschirm, Admin-Freigabe und „Administrativ sperren" sind am echten Touchscreen bestanden.
Kiosk-Sicherheits-/UI-Fix deployt
App-Code 9384f7e läuft technisch auf dem Pi: /api/v1/kiosk/unlock trennt Kiosk-Freigabe und Admin-Session, Lock-Screen und Service-Scroll sind stabilisiert, Hardening-Referenzen sind versioniert.
Kiosk-Hardening rebootfest aktiviert
Chromium läuft mit --use-mock-keychain und --disable-sync; labwc startet nach Reboot nur Environment-Import und kanshi. pcmanfm, wf-panel-pi, lxsession-xdg-autostart und tty1-Autologin bleiben aus.

Was noch aussteht

Punkte, die für einen vollen Besucherbetrieb noch fehlen, geordnet nach Priorität.

~
Beta-Probebetrieb am Kiosk begleiten
FullHD-Layout, Sammelleiste, Suche, Sammlung und Chromium-Fensterkontrolle sind live. Offen bleibt die praktische Beobachtung im Geräte- und Besucherbetrieb.
Main-, Pi- und Doku-Stand zusammenhalten
Produktrepo/origin und Pi-Checkout sind auf Produktdocs 4323201 synchron; der laufende App-Code bleibt 9384f7e. Runtime, Pi-Checkout, Produktdocs und öffentliche Statusseite werden weiterhin getrennt benannt.
~
Interne Wartungsfreigaben zurückbauen
Kiosk-Hardening, Fernzugriff, Services, Health und USB sind fertig eingerichtet. Offen bleibt der bewusste Rückbau temporärer Wartungsfreigaben, sobald keine Live-Arbeiten mit erweiterten Rechten mehr laufen.
~
Fernzugriff intern nachhärten
Der funktionierende Fernzugriff bleibt bestehen. Zusätzliche Absicherung kann später intern geplant und getestet werden.
~
USB-Sonderfälle weiter testen
Nicht MVP-blockierend: volle oder sehr langsame Sticks, nicht beschreibbare Sticks und die zugehörigen Touchscreen-Fehlermeldungen. Abziehen während der Kopie ist bereits als kontrollierter Abbruch mit erneutem Kopieren fehlender Dateien bestätigt.
~
Sync- und Cache-Betrieb verstetigen
Der lokale Katalog/Cache ist produktiv nutzbar und die Admin-NAS-UX ist deployt. Weitere echte NAS-Event-Syncs nur eng bedienen: aktueller Dry-Run, genau ein Event, missing=0, frische DB-Sicherung, Produktivlauf, Run-History sowie Katalog-/Suchprüfung.
~
Breiten NAS-Lauf nicht freigeben
Der erste Ein-Event-Sync ist belegt. Trotzdem bleibt ein breiter produktiver 2026_MP3- oder Root-Lauf wegen Laufzeit und Traversal-Risiko nicht freigegeben.
~
Kalender-Sondertermine schreibend machen
Status, Simple-Lock, Admin-Lock und Freigabe sind live. Als Nächstes folgen geschützte Admin-Schreibpfade für Sondertermine und dauerhafte Regelverwaltung.
~
Cache-Cleanup automatisieren
Endpunkt vorhanden, automatischer Timer fehlt noch. Nötig, damit der Speicher auf dem Pi langfristig nicht voll läuft.
~
Datenmodell schärfen
Ursprünglicher NAS-Begriff, interner Typ, Herkunft und Verfügbarkeit sauber trennen. Regeln für unklare Begriffe wie „Gebet" und „Abschluss" festlegen.
KI-Case konkret schneiden
Musik hören wird nicht weiter als MVP-Ziel verfolgt. Stattdessen werden konkrete KI-Anwendungsfälle gesammelt: Suche, Vorschläge, Kategorisierung, Dublettenhinweise und Admin-Hilfe.
Weitere Admin-Schreibpfade schneiden
Admin-Login, PIN-Wechsel, Simple-Lock und Admin-Lock sind am Touchscreen erledigt. Offen sind die nächsten geschützten Schreibpfade für Kalender-Sondertermine, Regeln und Betriebsaktionen.
Betriebsregeln finalisieren
Langfristige Strategie für Speicher, Archiv, On-demand-Abruf von der NAS, Retention und Wiederaufbau des lokalen Caches noch nicht finalisiert.

Nächste Schritte

Phasenbasierter Plan ohne feste Termine. Reihenfolge orientiert sich am Nutzwert für Besucher und Betrieb.

Phase 1
Kiosk-Betrieb beobachten
v0.5.0-beta.1 ist auf dem Pi aktiv. App-Code 9384f7e läuft technisch; Kiosk-Flags, labwc/getty-Hardening und Fernzugriff sind abgeschlossen. Touch-Smokes bleiben anlassbezogen für neue UX-Änderungen.
Beta live 9384f7e
Phase 2
Main-Stand und Statusdoku aktuell halten
App-Code, reine Doku-Commits, Pi-Checkout und öffentliche Statusseite getrennt nachführen. Nach Doku-only Pulls auf dem Pi sind kein Build und kein Service-Restart nötig.
main Status
Phase 3
USB-Sonderfälle weiter abnehmen
USB-Export ist MVP-abgenommen, inklusive kontrolliertem Abbruch beim Abziehen während der Kopie und erneutem Kopieren nur fehlender Dateien. Offen bleiben volle oder sehr langsame Sticks, nicht beschreibbare Sticks und die dazugehörigen Fehlermeldungen.
USB-MVP Robustheit
Phase 4
Admin-geschützte Kalenderverwaltung bauen
Simple-Lock, Admin-Lock und Freigabe laufen, Admin-Auth ist am Touchscreen abgenommen. Nächster Schritt sind geschützte Admin-Pfade für Sondertermine und Regeln.
Kalender Admin-Session
Phase 5
Retention und Cleanup regeln
Der lokale Cache umfasst rund 52 GB. Cleanup-Timer, Retention-Regeln und Wiederaufbau aus der NAS betrieblich festlegen.
Cache Retention
Phase 6
NAS-Betrieb verstetigen
Nach dem ersten produktiven Ein-Event-Sync und der deployten Admin-NAS-UX weitere echte Events streng wiederholbar bedienen: aktueller Dry-Run, echtes DB-Backup-Gate, genau ein Event, Produktivlauf, Run-History, Katalog-/Suchprüfung und Rollback-Dokumentation. Timer v1 bleibt bis zur gezielten Freigabe deaktiviert.
NAS Betrieb
Phase 7
Datenmodell festigen
Rohen NAS-Begriff separat speichern. Herkunft, Cache und Verfügbarkeit sauber unterscheiden. Grundlage für langfristige Korrekturen legen.
Datenmodell raw_category
Phase 8
Betrieb, Wartung & Langzeit
Admin-Funktionen auf der vorhandenen PIN-Session ausbauen. Cache-Cleanup aktivieren, Backup- und Restore-Ablauf absichern und Betriebscheckliste fertigstellen.
Admin Wartung
Phase 9
KI-Unterstützung als Folge-Case schneiden
Offline-taugliche, kontrollierbare KI-Anwendungsfälle definieren. Fokus: bessere Suche, Vorschläge, Kategorisierungshilfe und Admin-Unterstützung statt Musik hören.
KI Suche

Offene Fragen & Risiken

Bekannte Unsicherheiten, die den weiteren Verlauf beeinflussen können.

⚠️
Breite NAS-Pfade
Der Ein-Event-Sync ist erfolgreich belegt. Breite Jahres- und Root-Pfade bleiben trotzdem wegen fremder Ordner, Laufzeit und Traversal-Last ein bewusst ausgeklammertes Betriebsrisiko.
⚠️
Datenqualität NAS
Bisherige Stichproben sind hilfreich strukturiert. Ältere Dateien können abweichen. „Unbekannt" bleibt nötig als sicherer Fallback für nicht erkannte Begriffe.
⚠️
USB-Robustheit
Der USB-MVP ist mit echtem Stick abgenommen; auch Abziehen während der Kopie ist als kontrollierter Abbruch mit erneutem Kopieren fehlender Dateien bestätigt. Zu langsame, volle oder nicht beschreibbare Sticks bleiben offene Sonderfalltests.
⚠️
Besucherbedienung
Die Hauptprobleme bei FullHD-Layout, Sammelleiste und Overlay-Scroll sind behoben. Im Probebetrieb müssen reale Besucherführung und Sonderfalltexte weiter beobachtet werden.
⚠️
Stand-Drift
App-Code, Doku-Commits, Pi-Checkout und Statusseite können unterschiedliche Commitstände haben. Bei jeder Übergabe muss klar sein, welcher Stand lokal, auf GitHub, auf dem Pi und öffentlich sichtbar ist.
⚠️
Kalender-Regeln
Sperr- und Freigabezeiten brauchen klare Prioritäten, konsequent geschützte Schreibpfade und Tests für Sommer-/Winterzeit, Feiertage und Sondertermine.
⚠️
Admin-Schreibpfade
Ersteinrichtung, Login und PIN-Wechsel sind erledigt. Das Risiko liegt jetzt in konsequent geschützten Schreibpfaden für Override, Sondertermine und Verwaltung.
⚠️
KI-Abgrenzung
KI darf den lokalen Offline-Betrieb, Datenschutz und die Pi-Ressourcen nicht gefährden. Der Case muss eng geschnitten und fachlich überprüfbar bleiben.
⚠️
Speicher und Retention
Der lokale Cache liegt bei ca. 51.94 GB. Ohne klare Cleanup- und Retention-Regeln kann der Pi-Speicher langfristig zum Betriebsrisiko werden.

Nicht Teil des Projekts

Folgende Punkte sind kein Ziel – jetzt und auf absehbare Zeit nicht.

Online-Streaming Inhalte bleiben lokal. Kein Cloud-Zugriff, kein öffentlicher Stream.
Benutzerkonten Für einen lokalen Kiosk nicht nötig. Keine Logins für Besucher.
Cloud-Synchronisation Die NAS bleibt die einzige Quelle. Kein Sync mit externen Diensten.
Mobile App Keine separate App. Alles läuft am stationären Kiosk-Touchscreen.
Musik hören am Kiosk Direktes Abspielen, Player und Streaming-Endpunkte sind aus dem MVP gestrichen.
Video-Inhalte Ausschließlich Audio. Keine Video-Dateien oder -Streams geplant.