Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Das Format basiert auf Keep a Changelog, und dieses Projekt folgt Semantic Versioning.
- Code-Qualität: Formatier-Utilities deduplizieren (lib/utils/format_utils.dart)
- Cloud-Backup (Google Drive / iCloud)
- Mehrsprachigkeit (i18n / l10n)
- iOS Geofence-Parität
- Apple Watch / Wear OS Companion
- WiFi Fingerprinting: Orte anhand der WLAN-Umgebung erkennen ohne GPS und ohne Anmeldung. Kalibrierung: 3 gemittelte Scans pro Ort (Name frei wählbar, z.B. "Büro"). Matching: Euklidische Distanz im RSSI-Vektorraum über alle sichtbaren BSSIDs (fehlende APs = -100 dBm Penalty). Live-Erkennung alle 10 Sekunden mit Konfidenz-Anzeige (0–100%). Zugang über Einstellungen → WiFi-Positionierung. Neues Hive-Modell
WifiFingerprint(typeId: 8),wifi_scan-Package.
- Crash-Loop: GeofenceForegroundService NPE — Update auf
geofence_foreground_service1.1.6. Root Cause: wenn Android den Foreground-Service nach einem Kill neu startet, übergibt ernullals Intent; Plugin 1.1.5 crashte mit NPE (!!-Dereferenzierung inonStartCommand). 1.1.6 rekonstruiert den Intent aus SharedPreferences (intent ?: run { storedConfig... }).
- Backup-Restore UI: "Wiederherstellen"-Button öffnet FilePicker (
.zip+.enc); automatische Format-Erkennung —.encfragt nach Passwort → AES-256-GCM Entschlüsselung,.zipdirekt restore; Ergebnis-SnackBar mit Zusammenfassung der wiederhergestellten Daten
- S1 — Verschlüsseltes Backup: Neues "Verschlüsseltes Backup"-Feature mit AES-256-GCM + PBKDF2-SHA256 (200.000 Iterationen); Passwort-Dialog mit Bestätigungsfeld;
.enc-Format mit JSON-Envelope (salt, nonce, mac, ciphertext) - S2 — mounted-Guard:
_syncPendingEvents()inhome_screen.dartprüft nunif (!mounted) return;vor async-Operationen (verhindert Fehler nach Widget-Dispose) - P1 — _loadHolidays aus build(): Initialer Holiday-Load in
initStateviaaddPostFrameCallback; Bundesland-Änderungen überref.listen— kein async-Aufruf mehr direkt inbuild() - Lint: Ungenutzten
headerStyleinpdf_export_service.dartentfernt
- Monatsabschluss (31 Tests):
Settings.monthKey,isMonthLocked,lockMonth/unlockMonthinkl. Idempotenz, kombinierte Sequenzen, Schaltjahr, Jahreswechsel - PDF-Export + Stundensatz (35 Tests): PDF-Magic-Bytes, Netto-Berechnung mit/ohne Pausen, Eintrags-Filterung, Projekt-Referenzen, Saldo-Szenarien, Grenzwerte
- PDF-Arbeitszeitnachweis: Monatlicher Nachweis als A4-PDF (Tabelle: Datum/Beginn/Ende/Pause/Netto/Projekt/Notizen, Soll/Ist/Saldo-Übersicht, Unterschriftenfelder). Export via System-Sharesheet (Druck, Mail, …). Report-Screen Monat-Tab: Download-Icon öffnet Popup "Excel / PDF".
- Stundensatz pro Projekt: Neues Feld
hourlyRate (€/h)im Projekt-Dialog (Anlegen + Bearbeiten). Report → Projekte-Tab zeigtXh × Y€/h = Z€pro Projekt und Gesamtsumme "Abrechenbar" in der Summary-Card.
- Monatsabschluss: Monate im Report-Screen (Monat-Tab) abschließen und wieder entsperren. Gesperrte Monate: nicht editierbar/löschbar in History und EntryEdit (oranges Banner, gesperrte Buttons), 🔒-Icon auf Gruppen-Headern in der History. Bulk-Delete überspringt gesperrte Einträge mit Hinweis. Persistenz als
List<String>in Settings (HiveField 31), Backup-kompatibel.
- Ongoing Notification Chronometer: Ankerpunkt
when = entry.start + completedPauseDuration— native Android-Chronometer zeigt korrekte Netto-Arbeitszeit (Pausen ausgeschlossen) live ohne Flutter-Timer. Während Pause: statischer Pause-Start-Timestamp. Body-Text-Refresh jede Minute für alle Zustände.
- PC-Präsenzerkennung: TCP-Probe auf konfigurierbaren Host/Port erkennt ob der Arbeits-PC im Netzwerk aktiv ist. Periodischer Watcher während laufender Session. SnackBar-Aktionen "Pause starten/beenden". Port-Presets (SMB 445, RDP 3389, VNC 5900, SSH 22). Test-Button in Einstellungen. Energieverbrauch: ~1ms TCP-Handshake pro Prüfung.
- BSSID-basierte Raumerkennung: Geofence-Zonen können zusätzlich zum SSID auch einen BSSID (MAC-Adresse des Access Points) zugewiesen bekommen. "Aktuelles Netz anzeigen"-Button im Zonen-Dialog lädt SSID + BSSID live und bietet "Übernehmen"-Buttons. Matching-Priorität: BSSID > SSID.
- WiFi-SSID-Zonen-Erkennung: Geofence-Zonen können einem WiFi-SSID zugeordnet werden. Event-driven via
connectivity_plus-Stream (near-zero Energieverbrauch). Bei ENTER/EXIT gleicher Verarbeitungspfad wie GPS-Geofencing (Re-Entry-Merge, WorkMode, Notifications).
- Swipe-to-Delete + Bulk-Selektion in der History: Einträge einzeln via Swipe löschen (mit Bestätigung) oder per Long-Press in Bulk-Selektion wechseln und mehrere gleichzeitig löschen.
- Automatische Pausenerkennung: Wenn die App X Minuten im Hintergrund war (konfigurierbar, Standard 15 min) und eine Session lief, wird beim Wiederkehren ein Pause-Dialog angeboten.
- Überstunden-Warnungen: Push-Notifications wenn das Überstundenkonto konfigurierbare Schwellenwerte über- oder unterschreitet (Standard: +40h / -8h). Zone-basiert (nur bei Zonenübergang, kein Spam).
- Einträge zusammenführen: Neuer Screen zum Mergen fragmentierter Arbeitszeiten
- Erkennt automatisch zusammenführbare Einträge (gleicher Tag, gleicher Modus, max. 5 min Lücke)
- Zeigt Vorschau der Zusammenführung mit Zeitspannen
- Lücken zwischen Einträgen werden als Pausen erfasst
- Zugang über Einstellungen → Daten & Backup
- Hilfe-Dialog im Geofence Debug: Erklärt häufige Probleme und Lösungen
- Warum Arbeitszeit nicht automatisch erfasst wird
- Bedeutung der Akkuoptimierung
- Bekanntes Package-Problem dokumentiert
- Debug-Informationen erklärt
- Bug Report für geofence_foreground_service Package erstellt
- Alternativen-Analyse dokumentiert (native_geofence, flutter_background_geolocation)
- Akkuoptimierung-Check: Diagnose und Einstellungen im Geofence Debug Screen
- Zeigt ob Akkuoptimierung deaktiviert ist (erforderlich für zuverlässiges Geofencing)
- Button zum direkten Öffnen der Android-Einstellungen
- Erklärt warum der Geofence-Service von Android gekillt werden kann
- Geofence Service Crash: Bug im
geofence_foreground_servicePackage- Wenn Android den Service wegen Speicherdruck killt, crasht er beim Neustart
- Workaround: Akkuoptimierung für VibedTracker deaktivieren
- Issue wurde an Package-Maintainer gemeldet
- Sofortige Notification bei Geofence-Events: Push-Benachrichtigung auch bei geschlossener App
- "
▶️ Arbeitszeit automatisch gestartet" beim Betreten der Zone - "⏹️ Arbeitszeit automatisch gestoppt" beim Verlassen der Zone
- Erscheint sofort in der Statusleiste, auch wenn App nicht geöffnet ist
- Keine Notification bei ignorierten Events (Bounce-Protection)
- "
- Geofence-Status wird nicht angezeigt: Home Screen zeigt jetzt immer Zone-Status
- Auto-Refresh alle 10 Sekunden für Geofence-Status und laufende Arbeitszeit
- Robustere Initialisierung - einzelne Service-Fehler blockieren nicht die UI
- Status wird immer geladen, auch wenn andere Services fehlschlagen
- UI erkennt automatisch wenn Arbeitszeit im Hintergrund gestartet wurde
- Zerstückelte Einträge bei Geofence: Bounce-Protection hinzugefügt
- EXIT→ENTER oder ENTER→EXIT Events innerhalb von 5 Minuten werden ignoriert
- Verhindert fragmentierte Einträge bei GPS-Fluktuation an der Zonengrenze
- Einträge werden nicht angezeigt: Type Error bei workModeIndex behoben
- Hive-Adapter kann jetzt String und Int für workModeIndex verarbeiten
- Fehler "Type string is not a subtype of type 'int'" behoben
- Geofence Service nicht gefunden: Kritischer Fix für automatische Zeiterfassung
- Service-Deklaration in AndroidManifest.xml hinzugefügt
- ProGuard-Regel hinzugefügt um Obfuscation des Services zu verhindern
- Fehler "Unable to start service R0.d not found" behoben
- Statusleisten-Anzeige: Persistente Notification in der Android-Statusleiste
- Zeigt "
▶️ Arbeitszeit läuft" mit Netto-Arbeitszeit und Startzeit - Zeigt "⏸️ Pause" mit Pausendauer bei aktiver Pause
- Aktualisiert sich automatisch alle 30 Sekunden
- Kann nicht weggewischt werden (ongoing notification)
- Verschwindet automatisch beim Stoppen der Arbeitszeit
- Zeigt "
- Geofence Debug Screen: Erweiterte Diagnose-Funktionen
- Neuer "Events jetzt verarbeiten" Button (Force Sync)
- Arbeitszeit-Status Anzeige (läuft/gestoppt)
- Laufzeit-Anzeige bei aktiver Arbeitszeit
- Letzter Sync-Ergebnis Anzeige
- Test-Events nutzen jetzt echte Zone-IDs
- Bessere Hinweise warum Events nicht verarbeitet werden
- Geofence Debug Screen: Umfangreicher Diagnose-Bildschirm für GPS/Geofencing
- Berechtigungsstatus (Location, Notifications, etc.)
- Aktuelle GPS-Position mit Genauigkeit
- Konfigurierte Zonen mit Entfernungsberechnung
- Event-Queue Status und Historie
- Debug-Log mit Export-Funktion
- Test-Aktionen (ENTER/EXIT Events simulieren)
- Link zum Debug-Screen in Einstellungen → Arbeitsorte
- Geofence funktioniert nicht: Fehlende Android-Berechtigungen im Manifest hinzugefügt
ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION,ACCESS_BACKGROUND_LOCATIONFOREGROUND_SERVICE,FOREGROUND_SERVICE_LOCATIONPOST_NOTIFICATIONS,RECEIVE_BOOT_COMPLETED,WAKE_LOCK
- GitHub Community-Dateien: LICENSE (MIT), CONTRIBUTING.md, CODE_OF_CONDUCT.md, Issue-Templates
- Go REST API für Cloud-Sync
- Auth: Register, Login, JWT + Refresh Token
- Sync: Push/Pull verschlüsselter Daten (Zero-Knowledge)
- Devices: Geräteverwaltung
- Admin: User-Freischaltung, Sperren, Löschen
- Admin Dashboard (HTML/JS)
- User-Liste mit Status (ausstehend, freigeschalten, gesperrt)
- Statistiken (User, Geräte, Sync-Items)
- Ein-Klick Freischaltung/Sperrung
- Docker Deployment
docker-compose.ymlfür Developmentdocker-compose.prod.ymlfür Traefik/HTTPSdeploy.shScript für einfaches Deployment
- PostgreSQL Datenbank mit Migrationen
- Traefik-Integration für automatisches HTTPS
0.1.0-beta.12 - 2026-01-07
- Backup-System: Export/Import aller Daten als ZIP-Datei
- Enthält: Einträge, Urlaub, Kontingente, Projekte, Perioden, Zonen, Settings
- Teilen über Share-Dialog
- Urlaubsanspruch pro Jahr: Dedizierter Screen zur Verwaltung
- Nur 3 Jahre anzeigen (Vorjahr, aktuell, nächstes)
- Manuell genommene Tage für Migration aus anderen Systemen
- Navigation zu Urlaubsanspruch aus Einstellungen
- Urlaubsanspruch-Anzeige verbessert (Eingetragen vs. Manuell)
0.1.0-beta.11 - 2026-01-07
- CI Release-Workflow Permissions (workflow-level
contents: write) - Doppelte Release-Erstellung durch CI entfernt
0.1.0-beta.9 - 2026-01-07
- VibedTracker App-Icon: Neues adaptives Icon
- Lila-blauer Gradient-Hintergrund
- Weißes Design: Uhr + V-Checkmark + Vibrations-Wellen
- App-Name geändert von "time_tracker" zu "VibedTracker"
0.1.0-beta.8 - 2026-01-07
- Urlaubsanspruch pro Jahr: Individueller Anspruch statt globalem Wert
VacationQuotaScreenfür Jahr-für-Jahr-Verwaltung- Settings zeigt nur noch Resturlaub (read-only)
- Arbeitszeit-Perioden: Automatisches Beenden alter Perioden
- Neue Periode beendet automatisch vorherige unbefristete
- ProGuard-Regeln für flutter_local_notifications (R8 TypeToken Fix)
- Wöchentliche Arbeitszeit nur noch über Perioden einstellbar
- Settings-Screen zeigt Badge mit aktueller Stundenzahl
- GitHub Actions CI/CD Pipeline
flutter_ci.yml: Analyze & Test bei Push/PRrelease.yml: Automatischer Release-Build bei Tags
- Excel-Export: Monatlicher Arbeitszeitbericht als .xlsx
- Spalten: Datum, Wochentag, Start, Ende, Brutto, Pausen, Netto, Modus, Projekt, Notizen
- Zusammenfassung mit Soll/Ist-Vergleich
- Geofence-Benachrichtigungen: Einspruch-Button zum Rückgängigmachen
- Abwesenheits-Prioritäten: Feiertag überschreibt Urlaub visuell
- Heiligabend & Silvester: Konfigurierbar als frei/halber Tag/voller Tag
- Urlaubsverwaltung:
- Jahresanspruch konfigurierbar
- Resturlaub-Übertrag optional
- Statistik-Karte im Abwesenheits-Screen
- Arbeitszeit-Eingabe: Textfeld statt Slider (z.B. "38,5")
- App-Sperre: PIN und Biometrie (Fingerabdruck/Face ID)
- Security Settings Screen: Konfiguration der Sicherheitsoptionen
- Auto-Lock: Nach Inaktivität oder App-Wechsel
- Biometrie-Button auf Lock Screen
- Google Kalender Integration: Termine anzeigen (nur lesen)
- Erinnerungen: Tägliche Benachrichtigung für fehlende Einträge
- Bundesland-Auswahl: Regionale Feiertage
- Arbeitsmodi: Normal, Deep Work, Meeting, Support, Administration
- Projekte: Zuordnung von Einträgen zu Projekten
- Dark Mode: System/Hell/Dunkel wählbar
- Wochenberichte: Soll/Ist-Vergleich mit Überstunden
- Monatsübersicht: Aggregierte Statistiken
- Kalenderansicht: Alle Einträge im Überblick
- Initiale Version
- Geofence-basierte automatische Zeiterfassung
- Manuelle Arbeitszeiteinträge (Start/Stop/Pausen)
- Urlaubsverwaltung (Urlaubstage eintragen)
- Feiertage (deutsche Feiertage via API)
- Hive-Datenbank für lokale Speicherung
- Grundlegende Einstellungen