Eine native, deutschsprachige Android-App für kleine Schritte und große Serien. Kotlin · Jetpack Compose · Room · DataStore. Ab Android 8 (API 26), vollständig offline, ohne Konto, Werbung oder Tracking.
  • Kotlin 58.3%
  • Python 41.2%
  • Shell 0.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-20 20:46:38 +02:00
app feat weekly extra 2026-09-20 20:46:38 +02:00
deliverables init 2026-09-16 20:29:06 +02:00
docs init 2026-09-16 20:29:06 +02:00
gradle init 2026-09-16 20:29:06 +02:00
tools init 2026-09-16 20:29:06 +02:00
.gitignore init 2026-09-16 20:29:06 +02:00
build.gradle.kts feat weekly extra 2026-09-20 20:46:38 +02:00
gradle.properties init 2026-09-16 20:29:06 +02:00
gradlew init 2026-09-16 20:29:06 +02:00
gradlew.bat init 2026-09-16 20:29:06 +02:00
README.md feat weekly extra 2026-09-20 20:46:38 +02:00
settings.gradle.kts init 2026-09-16 20:29:06 +02:00

Streak me

Eine native, deutschsprachige Android-App für kleine Schritte und große Serien. Kotlin · Jetpack Compose · Room · DataStore. Ab Android 8 (API 26), vollständig offline, ohne Konto, Werbung oder Tracking.

Ausprobieren

Die fertig gebaute APK liegt unter deliverables/Streak-me-debug.apk. Auf ein Android-Gerät kopieren, öffnen und die Installation für die verwendete Datei-App erlauben. Es handelt sich um eine installierbare Debug-Version, nicht um ein für den Play Store signiertes Release.

Die App startet ohne Beispieldaten. Unter Einstellungen lassen sich bis zu zehn aktive Vorsätze anlegen. Heute enthält tägliche Ja/Nein-Antworten und das Plus für Wochenvorsätze. Kalender zeigt tatsächliche Erfüllungen und Joker; das Erfolgsbuch bewahrt alle gesammelten Tiere dauerhaft auf.

Ansichten

Heute · Kalender · Erfolgsbuch · Einstellungen

Bauen

Voraussetzungen: JDK 25, Android SDK Platform 36, Android SDK Build Tools, akzeptierte SDK-Lizenzen. Das Android-Studio-Projekt im Stammverzeichnis öffnen. Android Studio erstellt local.properties mit dem lokalen SDK-Pfad. Alternativ ANDROID_HOME auf das SDK setzen. Abhängigkeiten werden beim ersten Build heruntergeladen; die App selbst benötigt kein Netzwerk.

./gradlew assembleDebug
./gradlew testDebugUnitTest lintDebug
python3 tools/verify_catalog.py

Build-Ausgabe: app/build/outputs/apk/debug/app-debug.apk. Der Gradle Wrapper einschließlich JAR und Windows-Skript ist enthalten. Versionen sind im Build festgelegt; die Room-Schemadatei ist eingecheckt. Gradle 9.6.0 und die Kotlin/Java-Toolchain verwenden JDK 25. gradle/gradle-daemon-jvm.properties legt die Build-JVM auf 25 fest; in Android Studio ebenfalls JDK 25 als Gradle-JDK auswählen. Java-/Kotlin-Bytecode bleibt für die Android-Dex-Verarbeitung auf Zielversion 17. Gradle-Kompatibilität.

Regeln

  • Täglich: Montag–Freitag oder Montag–Sonntag. Ja zählt +1. Nein und abgeschlossene unbeantwortete Tage verbrauchen zuerst einen der 1–3 wöchentlichen Joker. Ein Joker bewahrt den Streak, zählt aber keinen Tag. Ohne Joker beginnt der nächste Erfolg wieder bei 1.
  • Wöchentlich: Ziel 1–7 Tage; pro Datum höchstens eine Erfüllung, auch über das Wochenziel hinaus. Neue Vorsätze üben bis zum nächsten Montag. Danach zählt jeder zusätzliche erfüllte Tag über dem Ziel sofort +1 zum Streak und löst Feuerwerk aus (bei „Weniger Bewegung“ ohne Animation). Jede abgeschlossene erfolgreiche Montag–Sonntag-Woche zählt zusätzlich +7; eine verfehlte Woche setzt den Streak auf 0. Korrekturen berechnen auch die zusätzlichen Streaktage neu.
  • Nachtragen: Heute ist immer bearbeitbar; gestern nur bei aktivierter Einstellung. Korrekturen berechnen betroffene Tage und Wochen neu und geben gegebenenfalls Joker zurück. Ältere und zukünftige Tage sind nicht bearbeitbar.
  • Ändern: Name, Farbe und Symbol gelten sofort. Änderungen an Rhythmus, Wochenziel oder Jokeranzahl gelten ab dem nächsten Montag; bis dahin kann dieselbe vorgemerkte Änderung angepasst werden. Der Wechsel zwischen täglich und wöchentlich beginnt am Gültigkeitstag einen neuen Streak. Bereits belohnte Schwellen bleiben dem Vorsatz zugeordnet.
  • Archiv: Beendet einen Vorsatz und gibt einen aktiven Platz frei. Historie, Tiere und bisherige Daten bleiben erhalten. Eine Wiederaufnahme ist in Version 1 nicht vorgesehen.

200 tierische Erfolge

Jeder Vorsatz belohnt jede Schwelle nur einmal: 5, 10, 25, 50, 100, 150, 200, 300, 333, 400, 500, 600, 666, 700, 750, 800, 900, 1000, danach 1100, 1200 usw. Jede neue Schwelle vergibt das nächste Tier des gemeinsamen Buchs. Mehrere Freischaltungen sind möglich; bei einer gemeinsamen Nachberechnung werden Datum, Vorsatz-ID und Schwelle aufsteigend sortiert. Einmal vergebene Tiere werden nie entzogen. Ihre dauerhafte Tier-ID bleibt auch bei einer neuen Anordnung des Buchs erhalten. Bei 200 ist das Buch vollständig, die Streaks laufen weiter.

Alle Bilder sind eigene lokale Vektorgrafiken. Sie werden ohne Bilddienst und ohne Rastergrafik im Android-Build verwendet. Die 200 Tierarten teilen eine grafische Sprache, haben aber unterschiedliche geometrische Motive und Merkmale.

Die Zeilen in animals.tsv, Tier-IDs und Ressourcennamen dürfen nicht umsortiert oder neu vergeben werden. Nur achievement-order.json bestimmt die Buchplätze. Version 1.1.0 erhält alle bisherigen Tiere samt Sammeldatum; ihre Plätze im Buch ändern sich. Neue Erfolge überspringen bereits gesammelte Tier-IDs. Der Generator wird gegen den unveränderten Katalog der Erstversion geprüft. python3 tools/generate_animals.py benötigt nur Python 3; die optionale PNG-Kontaktübersicht über tools/render_contact_sheet.py benötigt zusätzlich ImageMagick und Pillow.

Erinnerungen und Datenschutz

Die Erinnerung ist zunächst ausgeschaltet. Beim Einschalten fragt Android gegebenenfalls nach der Benachrichtigungsberechtigung. Standardzeit ist 20:00 Uhr. Ein Tippen auf die Benachrichtigung öffnet die gemeinsame Abfrage der heute fälligen Tagesvorsätze. Beantwortete Vorsätze bleiben mit ihrer gewählten Antwort sichtbar und können direkt korrigiert werden. Darunter erscheinen die aktiven Wochenvorsätze mit Wochenfortschritt und einem Plus für heute, das sich auch wieder zurücknehmen lässt. Bei sichtbarer App erscheint die Abfrage zur konfigurierten Zeit direkt.

Minutengenaue Alarme können in den Einstellungen separat erlaubt werden. Ohne Sonderzugriff nutzt die App Androids zeitlich ungenauere Alarme. Es wird keine Aktivität ungefragt über andere Apps gelegt. Nach Geräte-Neustart, Zeit- oder Zeitzonenwechsel werden Alarme neu geplant. Ausgeschaltete Geräte und Androids „Beenden erzwingen“ können keine Benachrichtigungen empfangen; beim nächsten Öffnen werden fehlende Wertungen nachgeholt.

Es gibt keine Internetberechtigung. Cloud-Backup und Geräteübertragung der Daten sind deaktiviert. Bei Deinstallation oder Löschen der App-Daten gehen die lokalen Daten verloren; Export und Synchronisierung gehören nicht zu dieser Version.

Technische Grundlagen: Android-Alarme, Benachrichtigungsberechtigung, Android-Testbibliotheken.

Tests und Architektur

Die reine Fachlogik in domain/StreakEngine.kt verwendet lokale Kalendertage und eine injizierbare Uhr. Room-Transaktionen schützen Einträge, Schwellen und Tiere gegen doppelte Verarbeitung. Die Oberfläche beobachtet vollständige Datenbanksnapshots; DataStore verwaltet die Einstellungen. Es werden keine künstlichen Tageserfüllungen für Wochenboni gespeichert.

JVM-Tests liegen in app/src/test, Geräte- und Compose-Tests in app/src/androidTest. Geräte-Tests löschen Test-App-Daten; daher auf einem separaten Emulator ausführen:

./tools/test_emulator.sh emulator-5580

Das Skript akzeptiert ausschließlich Emulator-Seriennummern und schreibt das Ergebnis nach app/build/reports/device-tests.txt. Weitere Abnahmeschritte und konkrete Ergebnisse stehen in docs/VALIDATION.md.