4.4 KiB
4.4 KiB
Handoff: LeafItToMe (Pflanzenpflege-App)
Stand: 2026-07-19. Sprache mit dem Nutzer (Chris): Deutsch.
Projekt in einem Satz
Private Flutter-App (iOS+Android) zur Pflanzenpflege für Haushalt + Pflanzen-Sitter: Foto-Erkennung (PlantNet + Claude), Gieß-/Düngeplan mit Tages-Checkliste, tägliche Sammel-Push, Haushalt-Teilen per Einladungscode mit Rollen.
Wo alles liegt
- Code:
~/Documents/Projekte/Planty(Ordner heißt noch Planty, Projekt heißt seit Umbenennungleafittome, App-Name „LeafItToMe", Bundle-ID-Platzhalterdev.leafittome.app) - Git-Remote: selbst gehostetes Forgejo
https://git.cshomelabs.work/cschlaefke/leafittome.git(HTTPS + Token im macOS-Schlüsselbund,git pushläuft ohne Abfrage) - Doku (im Repo, deutsch, aktuell halten!):
README.md,docs/architektur.md,docs/firebase-einrichtung.md(Schritt-für-Schritt-Historie aller Backend-Einrichtungen),docs/git-forgejo.md - Claude-Memory: Projektplan, Nutzerprofil und Backlog liegen im persistenten Memory-Verzeichnis dieser Claude-Code-Installation (werden automatisch geladen)
- Firebase-Projekt:
leaf-it-to-me-app(Blaze aktiv, Budget-Alarm eingerichtet; Firebase CLI ist eingeloggt) - Functions:
functions/(TypeScript, Node 22, Region europe-west3):identifyPlant(PlantNet + Claude, SecretsPLANTNET_API_KEY/ANTHROPIC_API_KEYim Secret Manager),sendDailyReminders(alle 15 Min),joinHousehold(Einladungs-Einlösung)
Verifizierter Stand
- V1 komplett und auf Android Ende-zu-Ende getestet: Foto → Erkennung → vorbefülltes Profil; Tages-Checkliste; Sammel-Push kam im regulären Scheduler-Lauf auf dem Sperrbildschirm an. iOS-App läuft ebenfalls (Login, Pflanzen, Fotos) — nur iOS-Push fehlt (braucht Apple Developer Account, Beantragung scheiterte bisher an Apples Webseite; Schritte stehen in
docs/firebase-einrichtung.mdSchritt 6). - V2 implementiert und deployt (Commit
1b2c880), vom Nutzer noch nicht getestet: Einladungscodes (member/sitter),joinHousehold-Function, Rules-Enforcement für Sitter, „bestätigt von"-Anzeige. Testplan wurde dem Nutzer genannt (iPhone-Konto lädt Android-Konto ein — er hat versehentlich zwei getrennte Konten/Haushalte).
Offen / Nächstes
- Rückmeldung zum V2-Test abwarten, Bugs fixen.
- iOS-Push, sobald Apple Developer Account existiert.
- V3: Krankheits-Diagnose per Foto, Stellplatz-Bewertung (Standort-Analyse pro Stellplatz + Eignungs-Sterne pro Pflanze — Zwei-Ebenen-Konzept siehe Memory), Umtopf-Erinnerungen.
- Backlog: Button „KI-Zweitmeinung" bei unbefriedigendem PlantNet-Ergebnis; Push-Anzeige auch bei App im Vordergrund; App Check vor App-Store-Release; Englisch (
app_en.arb).
Stolperfallen (teuer erkauft, nicht erneut zahlen)
firebase functions:loghinkt 15–20 Minuten hinterher — „keine Läufe" heißt meist nur Log-Verzögerung. Scheduler-Status im Cloud-Scheduler-Console prüfen lassen.- Android zeigt FCM-Pushes nur bei App im Hintergrund.
flutter_timezone≥5 liefertTimezoneInfo-Objekt →.identifierverwenden (Objekt crasht Firestore-Writes still).- Storage-Rules mit
firestore.get()brauchen die IAM-Rolle „Firebase Rules Firestore Service Agent" fürs Storage-Dienstkonto (wurde manuell erteilt). - Erster Functions-Deploy in frischem Projekt kann mit 403
iam.serviceaccounts.actAsscheitern → wenige Minuten warten, erneut deployen. - Analyzer:
build/undios/build/sind inanalysis_options.yamlausgeschlossen (SwiftPM legt dort Fremdcode ab). - Nutzer wünscht zu jedem Backend-Baustein begleitende deutsche Doku in
docs/(keine Firebase-Vorerfahrung).
Arbeitsabläufe
- Prüfen:
flutter analyze && flutter test(Tests mocken Firebase viafirebase_auth_mocks/fake_cloud_firestore); Android-Verifikation:flutter build apk --debug - Texte: nur in
lib/l10n/app_de.arb(typografische Anführungszeichen „…“ verwenden, gerade"brechen das JSON), dannflutter gen-l10n - Deploy:
firebase deploy --only functions|firestore|storage --project leaf-it-to-me-app; nach jedem Arbeitsstand committen +git push
Suggested skills
/verify— nach nichttrivialen Änderungen den echten Flow treiben (Gerät/Simulator), nicht nur Tests/code-review— vor größeren Merges über den Diff laufen lassen/run— App starten/screenshotten, wenn Änderungen sichtbar geprüft werden sollen