Zweiter Schritt aus firebase-einrichtung.md Schritt 9 — alle sieben
onCall-Functions (identifyPlant, diagnosePlant, analyzeLocation,
assessPlantFit, joinHousehold, leaveHousehold, removeMember) lehnen
nach dem Deploy Aufrufe ohne gültiges App-Check-Token ab. Bewusst noch
nicht deployt: Chris muss vorher in der Firebase-Console bestätigen,
dass "Verified requests" für beide Apps ankommen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Letzter Roadmap-Punkt von V3. Foto-basierte Lichtverhältnis-Analyse pro
Stellplatz (Cloud Function analyzeLocation) und darauf aufbauende, rein
textbasierte Eignungs-Bewertung einer Pflanze (assessPlantFit) — beides
ausschließlich auf Abruf, nicht automatisch (Kostenkontrolle, eigener
Anthropic-Key). Neue Stellplatz-Detailseite, Verlinkung im Pflanzen-Detail,
Erkennung veralteter Bewertungen bei Umzug/Neuanalyse.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Dritter Aufgabentyp repotting im Intervall-Modell: optionales
repottingIntervalMonths + lastRepotted/By am Pflanzenprofil, Formular
mit Intervall-Feld und Datums-Auswahl, Umtopf-Zeile im Detail,
Aufgaben in Checkliste und Sammel-Push (reminders.ts gespiegelt),
Sitter dürfen bestätigen (Rules-Allowlist). Monats-Arithmetik kürzt
den 31. auf den Monatsletzten. Ende-zu-Ende-Widget-Test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Die angegebene Art ist jetzt eine unbestätigte Angabe: Claude prüft
selbst, welche Pflanze zu sehen ist, beurteilt bei Abweichung die
Pflanze im Bild und meldet matchesSpecies=false — die App zeigt dann
einen Warnhinweis im Ergebnis-Sheet. Prompt verbietet HTML/Markdown
(kein <br>) und schreibt durchgängiges Duzen vor.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Neue Cloud Function diagnosePlant: Foto + optionale Art an Claude,
deutsches JSON-Ergebnis (Befund/Ursache/Behandlung/Vorbeugung).
App: PlantDiagnosisService + Untersuchen-Sektion im Pflanzen-Detail
mit Ergebnis-Bottom-Sheet und KI-Disclaimer. askClaude max_tokens
1024→2048 (adaptives Denken zählt mit ins Limit). Deploy steht aus.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- ownerUid je Haushalt (Alt-Haushalte: erster memberUids-Eintrag = Ersteller);
Besitzer-Anzeige in Mitglieder- und Haushaltsliste
- Haushalt umbenennen (Dialog im Haushalts-Screen); Rules erlauben Clients am
Haushalts-Dokument nur noch das Namensfeld
- Cloud Functions leaveHousehold (selbst austreten, auch als Sitter) und
removeMember (nur Besitzer); beide biegen den aktiven Zeiger des Betroffenen
um und legen notfalls einen frischen eigenen Haushalt an
- Haushalts-Wechsler im Drawer (PopupMenu, ab zwei Haushalten)
- Tages-Checkliste und nächste Fälligkeit aggregieren über alle Haushalte,
mit Zwischenüberschrift je Haushalt; Bestätigen schreibt in den
Herkunfts-Haushalt der Aufgabe
- Widget-Tests: Gruppierung, Besitzer-Rechte, Umbenennen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- memberUids ist Quelle der Wahrheit, users.householdId nur noch aktiver Zeiger
- Haushalts-Screen: Liste „Meine Haushalte" mit Rolle, Aktiv-Markierung und Wechsel per Tipp
- Beitritts-Dialog warnt nicht mehr vor Datenverlust, sondern erklärt das Zurückwechseln
- sendDailyReminders sammelt fällige Aufgaben aus allen Haushalten des Nutzers
- FirebaseFunctions im HouseholdRepository lazy erzeugt (Widget-Tests ohne Firebase-Init)
- Drawer-Titel mit Ellipsis gegen Overflow auf schmalen Breiten
- Widget-Test für den Haushaltswechsel
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Einladen per einmaligem 6-stelligem Code (7 Tage gültig), wahlweise als Mitglied oder Pflanzen-Sitter
- Beitritt über Cloud Function joinHousehold (Transaktion, Admin-Rechte)
- Security Rules: Sitter dürfen an Pflanzen nur Bestätigungs-Felder ändern; invites nur erstellen, nie lesen
- Haushalts-Screen: Mitgliederliste mit Rollen, Einladen, Beitreten mit Wechsel-Warnung
- UI-Gating: Sitter sehen keine Anlegen-/Bearbeiten-/Löschen-Aktionen
- Bestätigungen speichern den Namen (lastWateredBy/lastFertilizedBy), Anzeige im Profil
- Tests: Members-Map im Seed, neuer Sitter-Test
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
registerDevice lief nur bei Auth-Änderungen (ref.listen) – bestand der Login
schon beim App-Start, wurde nie ein FCM-Token gespeichert. Jetzt reaktiv über
pushSetupProvider (ref.watch). Zusätzlich: temporäre debugReminders-Function
zur Diagnose der Push-Strecke.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Function läuft alle 15 Min (europe-west3): prüft Erinnerungszeit pro Nutzer (Zeitzonen-korrekt), berechnet fällige Aufgaben, schickt eine Sammel-Push pro Tag, räumt ungültige Tokens auf
- App registriert Gerät nach Login (Berechtigung, Token, Zeitzone), Erinnerungszeit wird ins Nutzer-Dokument synchronisiert
- Doku Schritt 6 inkl. APNs-Anleitung für iOS (sobald Developer Account da ist)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Cloud Function (europe-west3): PlantNet-Erkennung mit Claude-Fallback, deutsches Pflegeprofil von Claude, Keys als Secrets
- Pflanzen-Formular: Foto aufnehmen/wählen, Felder werden automatisch vorbefüllt
- Fotos in Storage unter households/{id}/plant-photos, Anzeige in Liste und Profil
- storage.rules mit Haushalts-Prinzip, iOS-Berechtigungstexte für Kamera/Fotos
- Doku Schritt 5: Storage aktivieren, PlantNet-Key, Secrets setzen
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>