chore: App-Fundament – Flutter-Gerüst und Supabase-Konfiguration #31

Closed
opened 2026-11-02 19:03:49 +00:00 by cschlaefke · 0 comments
Owner

Ziel

Das technische Fundament für die erste App-Story schaffen. Das Verzeichnis app/ existiert noch nicht, supabase/config.toml fehlt. Dieses Issue liefert Projektgerüst, Konfiguration, Routing, l10n, Theme-Basis, Logger, Test-Grundlagen und CI-Anpassungen. Es enthält keine fachlichen Funktionen.

Herkunft: Spec docs/specs/1-auth-registrierung-anmeldung.md § 8.1. Entscheidung von Chris (2026-11-02): Das Fundament wird ein eigenes Chore-Issue vor #1. Begründung: KAT-01/KAT-02 brauchen das Gerüst auch ohne Anmeldung, und die PRs bleiben klein und prüfbar.

Planung

  • Etappe: R1.1 Fundament
  • Blockiert: #1 (KTO-01); danach auch #3, #4, #28
  • Branch: chore/31-app-fundament

Aufgaben

  • F1 (devops): supabase init ausführen und supabase/config.toml committen (Auth-Anpassungen folgen in #1). .gitignore ergänzen: app/env/*.json mit Ausnahme !app/env/*.example.json, außerdem supabase/.temp/ und supabase/.branches/. Hintergrund: env/*.json greift nur im Repo-Root. CI-Pfade prüfen.
  • F2 (flutter-dev): flutter create app für iOS, Android und Web. Bundle-/Application-ID work.cshomelabs.shuffle und App-Name „Shuffle“ sind Platzhalter: zentral und leicht änderbar halten, die Bundle-ID wird vor dem Store-Release festgelegt. pubspec.yaml mit gepinnten Paketen laut Spec § 5.7: supabase_flutter, flutter_riverpod, riverpod_annotation, riverpod_generator, go_router, freezed, freezed_annotation, json_serializable, json_annotation, build_runner, logging, flutter_localizations, intl, mocktail (dev). Strikte analysis_options.yaml, Ordner core/ und features/.
  • F3 (flutter-dev): core/config: AppConfig aus --dart-define-from-file mit SUPABASE_URL, SUPABASE_ANON_KEY, SITE_URL (Platzhalter-Domain shuffle.cshomelabs.work), LEGAL_PRIVACY_URL, LEGAL_TERMS_URL (Platzhalter-URLs, bis Chris die Rechtstexte liefert), TERMS_VERSION. Dateien app/env/dev.example.json und app/env/ci.example.json anlegen. Außerdem core/logging (Wrapper um package:logging, kein print, keine personenbezogenen Daten im Log), globale Fehlerbehandlung, supabaseClientProvider und ein eigener Result-Typ.
  • F4 (flutter-dev): core/routing: go_router-Provider, usePathUrlStrategy, Redirect-Hook mit austauschbarer Auth-Quelle, Startseite / als Platzhalter, 404-Seite.
  • F5 (flutter-dev): core/l10n: gen-l10n, app_de.arb und app_en.arb, englischer Fallback (QUE-05 Kriterium 4), appLocaleProvider (Gerätesprache de/en, sonst en).
  • F6 (ui-designer): Theme-Basis in Material 3: Farbschema mit geprüften AA-Kontrasten, Typografie, Abstände, Breakpoints 600/1024 dp, Fokus-Stil für das Web.
  • F7 (test-engineer): Test-Grundlagen: test/helpers/pump_app.dart (l10n, ProviderScope-Overrides), Beispiel-Unit- und -Widget-Test, Test für den l10n-Fallback.
  • F8 (devops): CI: Der Flutter-Job läuft mit app/ (env/ci.example.json), supabase-tests läuft mit der committeten config.toml.

Reihenfolge

F1 → F2 → parallel F3, F4, F5 (flutter-dev) und F6 (ui-designer) → F7, F8.

Definition of Done

  • dart format --set-exit-if-changed . und flutter analyze ohne Befund, flutter test grün
  • flutter build web sowie Start auf Android und iOS möglich (oder Abweichung im PR begründet)
  • Keine hartkodierten UI-Strings, keine Secrets im Repo
  • CI grün
## Ziel Das technische Fundament für die erste App-Story schaffen. Das Verzeichnis `app/` existiert noch nicht, `supabase/config.toml` fehlt. Dieses Issue liefert Projektgerüst, Konfiguration, Routing, l10n, Theme-Basis, Logger, Test-Grundlagen und CI-Anpassungen. Es enthält **keine fachlichen Funktionen**. Herkunft: Spec `docs/specs/1-auth-registrierung-anmeldung.md` § 8.1. Entscheidung von Chris (2026-11-02): Das Fundament wird ein eigenes Chore-Issue vor #1. Begründung: KAT-01/KAT-02 brauchen das Gerüst auch ohne Anmeldung, und die PRs bleiben klein und prüfbar. ## Planung - Etappe: R1.1 Fundament - Blockiert: #1 (KTO-01); danach auch #3, #4, #28 - Branch: `chore/31-app-fundament` ## Aufgaben - [ ] **F1 (devops):** `supabase init` ausführen und `supabase/config.toml` committen (Auth-Anpassungen folgen in #1). `.gitignore` ergänzen: `app/env/*.json` mit Ausnahme `!app/env/*.example.json`, außerdem `supabase/.temp/` und `supabase/.branches/`. Hintergrund: `env/*.json` greift nur im Repo-Root. CI-Pfade prüfen. - [ ] **F2 (flutter-dev):** `flutter create app` für iOS, Android und Web. Bundle-/Application-ID `work.cshomelabs.shuffle` und App-Name „Shuffle“ sind **Platzhalter**: zentral und leicht änderbar halten, die Bundle-ID wird vor dem Store-Release festgelegt. `pubspec.yaml` mit gepinnten Paketen laut Spec § 5.7: supabase_flutter, flutter_riverpod, riverpod_annotation, riverpod_generator, go_router, freezed, freezed_annotation, json_serializable, json_annotation, build_runner, logging, flutter_localizations, intl, mocktail (dev). Strikte `analysis_options.yaml`, Ordner `core/` und `features/`. - [ ] **F3 (flutter-dev):** `core/config`: `AppConfig` aus `--dart-define-from-file` mit `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `SITE_URL` (Platzhalter-Domain `shuffle.cshomelabs.work`), `LEGAL_PRIVACY_URL`, `LEGAL_TERMS_URL` (Platzhalter-URLs, bis Chris die Rechtstexte liefert), `TERMS_VERSION`. Dateien `app/env/dev.example.json` und `app/env/ci.example.json` anlegen. Außerdem `core/logging` (Wrapper um `package:logging`, kein `print`, keine personenbezogenen Daten im Log), globale Fehlerbehandlung, `supabaseClientProvider` und ein eigener `Result`-Typ. - [ ] **F4 (flutter-dev):** `core/routing`: go_router-Provider, `usePathUrlStrategy`, Redirect-Hook mit austauschbarer Auth-Quelle, Startseite `/` als Platzhalter, 404-Seite. - [ ] **F5 (flutter-dev):** `core/l10n`: gen-l10n, `app_de.arb` und `app_en.arb`, englischer Fallback (QUE-05 Kriterium 4), `appLocaleProvider` (Gerätesprache de/en, sonst en). - [ ] **F6 (ui-designer):** Theme-Basis in Material 3: Farbschema mit geprüften AA-Kontrasten, Typografie, Abstände, Breakpoints 600/1024 dp, Fokus-Stil für das Web. - [ ] **F7 (test-engineer):** Test-Grundlagen: `test/helpers/pump_app.dart` (l10n, ProviderScope-Overrides), Beispiel-Unit- und -Widget-Test, Test für den l10n-Fallback. - [ ] **F8 (devops):** CI: Der Flutter-Job läuft mit `app/` (`env/ci.example.json`), `supabase-tests` läuft mit der committeten `config.toml`. ## Reihenfolge F1 → F2 → parallel F3, F4, F5 (flutter-dev) und F6 (ui-designer) → F7, F8. ## Definition of Done - `dart format --set-exit-if-changed .` und `flutter analyze` ohne Befund, `flutter test` grün - `flutter build web` sowie Start auf Android und iOS möglich (oder Abweichung im PR begründet) - Keine hartkodierten UI-Strings, keine Secrets im Repo - CI grün
cschlaefke added this to the R1 milestone 2026-11-02 19:03:49 +00:00
cschlaefke added the
type/tech
prio/must
size/l
epic/querschnitt
labels 2026-11-02 19:03:49 +00:00
cschlaefke added a new dependency 2026-11-02 19:03:51 +00:00
Sign in to join this conversation.
No description provided.