Commit graph

19 commits

Author SHA1 Message Date
cschlaefke
9aa49c641d iOS/TestFlight: App-Check-Release-Provider, App-Icon, Datenschutz-Hosting
- main.dart: App-Check-Provider per kReleaseMode umgeschaltet (Release =
  PlayIntegrity/AppAttest, Debug = Debug-Provider). Nötig, da die Functions
  App Check erzwingen — ein Release-Build mit Debug-Provider würde auf
  fremden Geräten bei jedem Function-Aufruf scheitern.
- App-Icon aus assets/icon/icon.png via flutter_launcher_icons generiert
  (iOS-Set + Android-Mipmaps).
- docs/legal/datenschutz.html: Platzhalter ausgefüllt, interner Hinweis raus.
- firebase.json: hosting-Block (public: docs/legal, Redirect / -> /datenschutz).
  URL: https://leaf-it-to-me-app.web.app/datenschutz
- Doku: firebase-einrichtung.md Schritt 9/10 + Hosting fortgeschrieben,
  handoff.md aktualisiert (iOS/TestFlight abgeschlossen, nur noch Android offen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CMRhL16hB14xcfef1qez7N
2026-09-08 20:37:49 +02:00
cschlaefke
8d2b10b9ee Doku: App Check abgeschlossen, Hosting-Anleitung auf Cloudflare/Hetzner zugeschnitten
App Check ist jetzt vollständig live und gerätegetestet (Deploy 49b7f44,
Bestätigung durch Chris). Die Datenschutz-Hosting-Anleitung ersetzt den
vagen Platzhalter-Vorschlag durch Chris' konkretes Setup: eigene Domain
über Cloudflare vor dem Hetzner-VPS, inkl. Origin-Certificate und
nginx-Vorlage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 19:27:19 +02:00
cschlaefke
d4b72637ba Doku: erwartete App-Check-DeviceCheck-Warnung beim iOS-Kaltstart erklärt
Chris meldete die Fehlermeldung trotz hinterlegtem Debug-Token — Ursache
ist eine bekannte Race im firebase_app_check-Plugin (nativer Standard-
Provider "deviceCheck" vor dem Dart-seitigen activate()-Aufruf), nicht
ein Konfigurationsfehler. Einmalig, ohne Funktionsauswirkung.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 12:23:50 +02:00
cschlaefke
7d9754282f App-Store-Vorbereitung: App Check, Release-Signing, Datenschutz, Doku
Ziel fürs Erste: TestFlight + Play-Internal-Testing (kein öffentlicher
Store-Eintrag). Code-seitig vorbereitet, alle Konsolen-Schritte für
Chris in firebase-einrichtung.md (Schritt 9-11) dokumentiert:

- App Check Client-Integration (Debug-Provider), Functions erzwingen
  es noch nicht (zweistufiger Rollout, siehe Doku)
- iOS: ITSAppUsesNonExemptEncryption gesetzt
- Android: Release-Signing über key.properties vorbereitet (Upload-Key
  fehlt noch bewusst, Erzeugung ist Chris' Schritt)
- flutter_launcher_icons vorbereitet für künftiges echtes App-Icon
- Datenschutzerklärung entworfen (docs/legal/datenschutz.html)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 00:09:39 +02:00
cschlaefke
36c2d5d19e Doku: SHA-Hinweis beim Google-Aktivieren erklärt; Debug-Fingerprints im Projekt hinterlegt
Der Konsolen-Hinweis betrifft nur den nativen google_sign_in-Flow; unser
Browser-Flow braucht kein SHA-1. Debug-SHA-1/SHA-256 trotzdem per
firebase apps:android:sha:create registriert (für später, z. B. App Check).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:59:21 +02:00
cschlaefke
bc0588f358 V2.x: Anmelden mit Google (iOS + Android)
Wie Apple über den eingebauten GoogleAuthProvider (Browser-Flow über den
Firebase-Auth-Handler, kein Zusatz-Paket). Gemeinsamer Provider-Handler
im Login-Screen, l10n-Strings, iOS-URL-Scheme (Encoded App ID) für den
Rückweg aus dem Browser, Doku Schritt 8. Der reaktive Haushalts-Bootstrap
deckt den ersten Google-Login automatisch ab. Offen: Google-Provider in
der Firebase-Konsole aktivieren + Gerätetest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 21:54:32 +02:00
cschlaefke
798912cb03 V2.x: Anmelden mit Apple (iOS + Android)
- AuthRepository.signInWithApple() via eingebautem AppleAuthProvider
  (nativ auf iOS, Web-Flow über Firebase-Handler auf Android, ohne Zusatzpaket)
- Haushalts-Bootstrap in gemeinsamen Helper _bootstrapHouseholdIfNeeded
  ausgelagert; beim ersten Apple-Login wird Profil + Haushalt idempotent angelegt
- LoginScreen: "oder"-Trenner + "Mit Apple anmelden"-Button, Abbruch ohne Fehlermeldung
- l10n: signInWithApple, orDivider, authErrorAppleFailed
- iOS: Entitlement com.apple.developer.applesignin ergänzt
- Doku: firebase-einrichtung.md Schritt 7 (Apple-Login) mit Portal-/Console-Anleitung

Noch offen: Apple-Portal (Services-ID, Sign-in-Key), Firebase-Console-Provider,
Xcode-Capability — danach Ende-zu-Ende auf iOS+Android testen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 16:52:49 +02:00
cschlaefke
da12e3e5ab iOS-Push aktiviert: APNs/Entitlements + Doku
- Push Notifications & Background Mode (remote-notification) als iOS-Capability
  ergänzt (Runner.entitlements, Info.plist, project.pbxproj)
- Apple Developer Account freigeschaltet, APNs-Schlüssel in Firebase hinterlegt
- Doku: firebase-einrichtung.md Schritt 6 auf "erledigt" + Stolperfalle
  "Personal Team versteckt Push-Capability" festgehalten
- Handoff: V1 nun auch iOS vollständig, iOS-Push aus Offen-Liste entfernt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 16:47:05 +02:00
cschlaefke
edc4ecf405 Fix: Besitzer-Anzeige in Alt-Haushalten – eigene E-Mail wird nachgetragen
Haushalte aus der V1-Zeit haben keinen members-Eintrag für ihren Ersteller,
die Besitzer-Anzeige blieb dadurch leer. Die App trägt die eigene E-Mail
jetzt beim Start in allen eigenen Haushalten nach; die Rules erlauben dafür
nur den eigenen members-Eintrag ohne Rollenwechsel. Bis dahin zeigt die UI
„?" statt einer leeren Stelle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 00:50:22 +02:00
cschlaefke
778b3bd34d V2.2: Besitzer-Konzept, Haushalte umbenennen, Austreten/Entfernen, Checkliste über alle Haushalte
- 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>
2026-07-19 21:39:10 +02:00
cschlaefke
1ca02f224b V2.1: Mehrere Haushalte je Nutzer – Mitgliedschaft bleibt beim Beitritt erhalten
- 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>
2026-07-19 21:18:25 +02:00
cschlaefke
1b2c880c89 V2: Haushalt teilen – Einladungscodes, Mitglieder- und Sitter-Rolle, sichtbare Bestätigungen
- 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>
2026-07-19 19:14:34 +02:00
cschlaefke
7d45724ef2 Doku: App-Check-Warnung erklärt, als spätere Härtung notiert
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 14:45:31 +02:00
cschlaefke
52e72c25b1 Push-Erinnerungen: FCM-Registrierung in der App, geplante Function sendDailyReminders
- 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>
2026-07-19 13:06:02 +02:00
cschlaefke
41e31bed88 Foto-Flow mit KI-Erkennung: Kamera, Cloud Function identifyPlant, Storage für Fotos
- 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>
2026-07-19 00:05:46 +02:00
cschlaefke
53ee30c598 Firestore und Auth: echte Daten statt Demo, Login mit E-Mail+Passwort, Security Rules
- Datenmodell: users/{uid}, households/{id} mit memberUids, plants/locations als Subcollections
- StreamProvider liefern Live-Daten, Repositories kapseln Schreibzugriffe
- Login-Screen mit Registrierung (legt Haushalt automatisch an), Logout in Einstellungen
- Router-Redirect bei Login/Logout, firestore.rules mit Haushalts-Prinzip
- Tests auf firebase_auth_mocks + fake_cloud_firestore umgestellt
- Verifiziert: analyze/test grün, Android-Debug-Build erfolgreich

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 22:53:09 +02:00
cschlaefke
4390949c7e Firebase angebunden: Projekt leaf-it-to-me-app, App-Registrierung iOS/Android, Initialisierung beim Start
- flutterfire configure: firebase_options.dart, google-services.json, GoogleService-Info.plist
- firebase_core eingebunden, Firebase.initializeApp in main.dart
- Doku firebase-einrichtung.md auf aktuellen Stand gebracht
- Verifiziert: flutter analyze/test grün, Android-Debug-Build erfolgreich

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 22:44:24 +02:00
cschlaefke
a5b79193dd Projekt in leafittome umbenannt (App-Name LeafItToMe, Bundle-ID dev.leafittome.app)
- pubspec, Paket-Imports, App-Klasse, ARB-Titel, iOS/Android-Konfiguration
- README und Doku auf neuen Namen und Repo leafittome umgestellt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 22:25:41 +02:00
cschlaefke
6e22d9c3aa Projekt-Gerüst: Flutter-App mit Heute-Checkliste, Pflanzenverwaltung, Stellplätzen und Einstellungen
- Flutter/Dart (iOS + Android), Riverpod, go_router, i18n via ARB (deutsch)
- Feature-Struktur: today, plants, locations, household (V2-Platzhalter), settings
- Intervall-Modell: Aufgaben werden aus lastWatered/lastFertilized + Intervall berechnet
- In-Memory-Demo-Daten, Firebase-Anbindung folgt im nächsten Block
- Doku: Architektur, Firebase-Einrichtung, Forgejo-Git-Hosting

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 21:13:18 +02:00