→ Projektseite mit Screenshots, Downloads und FAQ: https://kjeld76.github.io/br-log/
Lokale Desktop-App zur Zeiterfassung für Betriebsratsmitglieder. Jedes Mitglied erfasst seine BR-Zeiten tagesgenau (Stunden + Minuten). Jeder Eintrag trennt zwei Informationsebenen:
- Info für die Geschäftsleitung – Angaben, die der Arbeitgeber erfahren darf.
- Vertrauliche Tätigkeitsbeschreibung – die genaue Tätigkeit, die wegen des BR-Geheimnisses nicht an den Arbeitgeber gelangt.
Alle Daten liegen ausschließlich lokal in einer SQLite-Datei auf dem Gerät – es gibt keinen Server. Datenaustausch erfolgt nur durch bewussten Export (CSV/JSON) oder durch Kopieren der Datenbankdatei.
- Zeiteinträge mit Datum, Von/Bis oder direkter Dauer (Std:Min/Minuten), inkl. Schichten über Mitternacht und Uhrzeit-/Dauer-Schnellwahl
- Standard-Aufgaben als editierbare Schlagwörter (BR-Sitzung, Ausschuss, Fahrzeit, Schulung …), Mehrfachauswahl; archivierte, einem Eintrag bereits zugewiesene Schlagwörter bleiben sichtbar und entfernbar
- Trennung „Info für GL" vs. „Vertraulich" (BR-Geheimnis)
- Geplante Schicht (ja/nein) + Freitext zum Schichtausgleich
- Mehrere Widersprüche der Geschäftsleitung je Eintrag (Begründung + Name)
- Wiederverwendung: Eintrag duplizieren (heutiges Datum, frische ID) und „wie beim letzten Eintrag" für Schlagwörter/GL-Info übernehmen
- Nicht-blockierende Überlappungswarnung beim Speichern, wenn sich ein Zeitraum mit einem bestehenden Eintrag überschneidet
- Tastaturbedienung im Erfassungsformular: Strg/Cmd+Enter speichert, Escape bricht ab (mit Rückfrage bei ungespeicherten Änderungen), Autofokus
- Ungespeicherte Eingaben im Erfassen-Formular überstehen App-Neustarts (lokaler Zwischenstand) und lösen beim Verwerfen eine Rückfrage aus
- Volltextsuche (FTS5) – vertrauliche Treffer werden in Listen nie im Klartext gezeigt, nur als „Treffer in vertraulichem Feld"
- Schlagwort-Filter als Chips, Datums-/Zeitraumfilter, Tages-/Monatssummen
- Vollwertiger Terminkalender: Einzel- und Serientermine (täglich/wöchentlich/ monatlich/jährlich, „nur dieser / dieser und folgende / alle" bearbeiten), ganztägige und mehrtägige Termine, Wichtig-Kennzeichnung, Farben, Monats- und Agenda-Ansicht mit Termin-Suche – kombiniert mit den Tagessummen der Zeiterfassung. „Zeit buchen" legt aus einem Termin den vorbefüllten Zeiteintrag an
- Termin-Erinnerungen als Systembenachrichtigung: Desktop mit optionalem Tray-Betrieb (Schließen versteckt) und Autostart, Android mit geplanten Benachrichtigungen auch bei geschlossener App; Verpasstes wird beim nächsten Start nachgeholt. Auch Termine tragen ein vertrauliches Notizfeld nach dem BR-Geheimnis-Muster
- Export: GL-CSV (ohne Vertrauliches), Voll-CSV, JSON-Backup/Import (Merge), ICS-Export/-Import der Termine (Outlook/Thunderbird/Google-kompatibel, standardmäßig ohne vertrauliche Notizen)
Die Datenbank liegt unter Windows in:
%APPDATA%\de.betriebsrat.brzeiten\br_zeiten.db
Unter Linux liegt sie in:
~/.config/de.betriebsrat.brzeiten/br_zeiten.db
Der genaue Pfad wird in der App unter „Über / Daten" angezeigt; dort öffnet
ein Klick den Ordner im Dateimanager (für manuelle Backups). Die Datenbank ist mit
SQLCipher verschlüsselt; der Schlüssel liegt gekapselt in einer zweiten Datei
keyfile.json im selben Ordner. Für ein manuelles Backup deshalb immer
beide Dateien zusammen sichern (br_zeiten.db und keyfile.json) – eine
Kopie nur der Datenbank ist ohne die Schlüsseldatei nicht entschlüsselbar, auch
nicht mit dem Wiederherstellungs-Code (der entkapselt nur die in der
keyfile.json abgelegten Schlüsseldaten). Schlüsselunabhängig ist der
JSON-Export (App → Daten → „Sicherung & Übertragung" → JSON-Backup
speichern) – er funktioniert ohne keyfile.json und ohne Passwort und ist
damit der robustere Weg für Geräteübertragungen und Zweitsicherungen.
Zusätzlich legt die App bei jedem Entsperren automatisch ein konsistentes
Backup (Datenbank + keyfile.json zusammen) im Unterordner backups/ neben
der Hauptdatenbank an, rotierend über die letzten 5 Stände. Zum
Wiederherstellen bei geschlossener App die gewünschten Dateien aus backups/
zurück auf br_zeiten.db bzw. keyfile.json kopieren. Unter „Über / Daten"
lässt sich zusätzlich jederzeit manuell ein Backup anstoßen.
Läuft die App portabel vom USB-Stick, liegt die Datenbank stattdessen neben
der EXE in BR-Log-Data\br_zeiten.db (siehe Abschnitt Portable Version).
Auf Android liegen Datenbank, keyfile.json und der automatische
backups/-Ordner in der App-eigenen Sandbox – ohne Root-Zugriff für
Nutzer weder einsehbar noch manuell kopierbar. Beim Deinstallieren der App
werden alle drei unwiederbringlich gelöscht. Der einzige Rettungsweg ist
der JSON-Export (App → Daten → „Sicherung & Übertragung" →
JSON-Backup speichern): schlüsselunabhängig, funktioniert ohne keyfile.json
und ohne Passwort – regelmäßig exportieren und außerhalb des Geräts sichern
(z. B. Cloud-Speicher, PC). Sideload-Hinweise für Android siehe Abschnitt
Installation (Android) unten.
- Auf der GitHub-Releases-Seite den neuesten Release öffnen.
- Die Datei
BR-Log_x.y.z_x64-setup.exe(NSIS-Installer) herunterladen. - Doppelklick zum Installieren – keine Administratorrechte nötig (Installation ins Benutzerverzeichnis).
Da der Installer (noch) nicht signiert ist, zeigt Windows beim ersten Start ggf. eine SmartScreen-Warnung „Der Computer wurde durch Windows geschützt". So lässt sich die App trotzdem starten:
- Auf „Weitere Informationen" klicken.
- Anschließend auf „Trotzdem ausführen" klicken.
Dies ist nur einmalig erforderlich. (Optional kann der Installer künftig mit einem Code-Signing-Zertifikat signiert werden, dann entfällt die Warnung – siehe Abschnitt Entwicklung → Code-Signing.)
BR-Log steht für Linux als .deb-Paket (Debian/Ubuntu und Ableitungen) und als distributionsunabhängiges AppImage zur Verfügung – siehe die GitHub-Releases-Seite.
sudo apt install ./BR-Log_x.y.z_amd64.debapt install ./Datei.deb löst dabei automatisch fehlende Abhängigkeiten mit
auf – anders als das reine dpkg -i, das dafür einen zusätzlichen
apt --fix-broken install-Schritt bräuchte.
BR-Log_x.y.z_amd64.AppImagevon der Releases-Seite herunterladen.- Ausführbar machen und starten:
chmod +x BR-Log_x.y.z_amd64.AppImage
./BR-Log_x.y.z_amd64.AppImageUnter Ubuntu 22.04 und neuer fehlt libfuse2 standardmäßig (AppImages
brauchen FUSE 2 zum Einhängen); ohne das Paket startet die AppImage nicht:
sudo apt install libfuse2Der Datenspeicherort unter Linux ist in beiden Fällen identisch, siehe Abschnitt Datenspeicherort.
BR-Log steht für Android als APK zum Sideload zur Verfügung – siehe die GitHub-Releases-Seite. Kein Play-Store-Eintrag – die App ist nur für den internen BR-Kreis gedacht.
- Auf der GitHub-Releases-Seite den neuesten Release öffnen und die
Datei
BR-Log_x.y.z_android-arm64.apkherunterladen (arm64 deckt alle gängigen Android-Smartphones der letzten Jahre ab). - Beim ersten Installationsversuch fragt Android automatisch nach der Erlaubnis „Unbekannte Apps installieren" für die App, mit der die APK geöffnet wurde (Browser oder Dateimanager) – zustimmen. Alternativ vorab manuell unter Einstellungen → Apps → [Browser/Dateimanager] → Unbekannte Apps installieren.
- Die heruntergeladene APK antippen und installieren.
Da die APK nicht über den Play Store verteilt wird, warnt Play Protect beim Installieren möglicherweise vor einer App aus „unbekannter Quelle". Das ist bei jeder Sideload-Installation außerhalb des Play Store normal und kein Hinweis auf ein Sicherheitsproblem – über „Trotzdem installieren" fortfahren.
Ein Update läuft genauso: die neue APK-Version von der Releases-Seite laden
und über die bestehende Installation drüberinstallieren, nicht vorher
deinstallieren. Das funktioniert nur, weil alle BR-Log-Versionen mit
demselben Signing-Key signiert sind – Android verweigert die
Drüberinstallation, sobald sich die Signatur unterscheidet. Die App-Daten
(Datenbank, keyfile.json, backups/) bleiben dabei erhalten.
⚠️ Vor einer Deinstallation: Anders als bei Windows/Linux liegen die Daten auf Android in der App-Sandbox und werden bei einer Deinstallation unwiederbringlich gelöscht (siehe Abschnitt Datenspeicherort → Android oben). Vorher immer den JSON-Export sichern.
Hinweis: Der portable USB-Modus (Daten neben der Programmdatei, per
portable.txt-Marker erkannt) ist aktuell Windows-only. Unter Linux gibt es dafür regulär die .deb-Installation oder das AppImage (siehe Abschnitt Installation (Linux)) – beide legen die Datenbank unter~/.config/de.betriebsrat.brzeiten/ab, nicht neben der Programmdatei.
Neben dem Installer gibt es eine portable Version, die ohne Installation direkt vom USB-Stick läuft – die Daten reisen mit:
- Auf der Releases-Seite die Datei
BR-Log-portable-vX.Y.Z.zipherunterladen. - Den Inhalt auf den USB-Stick entpacken (
BR-Log.exe,portable.txt, OrdnerBR-Log-Data). BR-Log.exedirekt vom Stick starten.
Die Datenbank liegt dann neben der EXE in BR-Log-Data\br_zeiten.db und
wandert mit dem Stick mit; die zugehörige keyfile.json liegt im selben
Ordner BR-Log-Data und wandert automatisch mit. In der App zeigt „Über /
Daten" das Abzeichen „Portabel (USB)" und den tatsächlichen Pfad.
⚠️ Vertraulichkeit (BR-Geheimnis): Den Ordner nicht in einen Cloud-synchronisierten Ordner (OneDrive, Dropbox …) entpacken – sonst würde die vertrauliche Datenbank in die Cloud hochgeladen. Nur auf einen echten USB-Stick oder lokalen Datenträger.
Der portable Modus greift nur, wenn neben der EXE eine Datei portable.txt liegt,
die eine Zeile BR-Log-Portable enthält (in der mitgelieferten Datei steht
sie in der ersten Zeile). Eine leere oder fremde portable.txt aktiviert den
Modus nicht. Ist der
Stick schreibgeschützt und noch keine portable Datenbank vorhanden, fällt die App
auf den Installations-Pfad zurück. Vorhandene Stick-Daten werden dabei nie überschrieben.
Die schlanke portable Version nutzt die Microsoft Edge WebView2 Runtime des Rechners (auf Windows 11 vorhanden). Startet die App nicht, hilft die Installation der WebView2-„Evergreen"-Runtime von Microsoft. Der oben beschriebene Windows-SmartScreen-Hinweis gilt für die portable EXE genauso. Die portable Version ist nur wenige MB groß – ein einfacher USB-Stick genügt.
Voraussetzungen: Node.js 20+, Rust (stable) und unter Windows die
Visual-Studio-Build-Tools sowie WebView2. Für den verschlüsselten DB-Build
(SQLCipher via gebundeltem OpenSSL) zusätzlich ein natives Perl
(z. B. Strawberry Perl – das mit Git gelieferte msys-Perl funktioniert nicht).
NASM ist optional (ohne NASM baut OpenSSL im langsameren no-asm-Modus).
npm install
npm run tauri dev # App im Entwicklungsmodus starten
npm run tauri build # NSIS-Installer bauen (Ausgabe unter src-tauri/target/release/bundle)main– stabil/Releasesdevelop– aktive Entwicklung- Feature-Branches nach Bedarf (von
develop)
Ein Git-Tag vX.Y.Z löst den GitHub-Actions-Workflow aus, der auf
windows-latest den NSIS-Installer baut und als Release-Asset hochlädt:
git tag v1.0.0
git push --tagsDer Build ist bewusst unsigniert. Für eine Signatur künftig:
- Code-Signing-Zertifikat beschaffen.
- In
src-tauri/tauri.conf.jsonunterbundle.windowsdiecertificateThumbprint/digestAlgorithm/timestampUrlsetzen. - Neu bauen – die SmartScreen-Warnung entfällt nach Reputationsaufbau.
BR-Log ist und bleibt kostenlos – kein Verkauf, keine Paywall, kein "Pro"-Upgrade (siehe Abschnitt Lizenz). Wer das Tool nützlich findet, kann freiwillig einen Kaffee spendieren: über Ko-fi oder Buy Me a Coffee. Beides ist optional und ändert nichts am Funktionsumfang.
BR-Log steht unter der GNU General Public License v3.0 (GPLv3). © 2026 Mario König. Das heißt: Jeder darf die Software frei nutzen, verändern und weitergeben – wer eine veränderte Fassung weitergibt, muss den zugehörigen Quellcode ebenfalls unter der GPLv3 offenlegen. Der vollständige Lizenztext steht in LICENSE, Hinweise zu den verwendeten Drittanbieter-Komponenten in THIRD_PARTY_NOTICES.md.