- Kotlin 58.3%
- Python 41.2%
- Shell 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| app | ||
| deliverables | ||
| docs | ||
| gradle | ||
| tools | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
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.
- Gesamter Katalog mit Namen und Reihenfolge
- Interaktive Kontaktübersicht im Browser
- Kontaktbogen 1, 2, 3, 4
- Silhouettenübersicht · Prüfung aller nahen Bildpaare
tools/animals.tsv: dauerhafte Tier-IDs und anatomische Merkmaletools/achievement-order.json: feste, gemischte Sammelreihenfolgetools/animal_art.py: überarbeitete Tierformen und Posentools/generate_animals.py: reproduzierbarer Generator für Android XML, SVG-Vorschauen und Kotlin-Katalog
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.