69bcc3e342
- Add source maps and web renderer build arguments with defaults - Configure Caddy with CSP headers, cache policies, and service worker handling - Defer loading of import screen for performance optimization - Add semantic labels to icons for accessibility - Update web index.html with Swedish language, meta tags, and description - Add robots.txt and lighthouse configuration - Add new planning documents and archive entries
5.8 KiB
5.8 KiB
Plan: Anpassad multiplattformsplan for recipe-app
Mal
Gora Flutter-klienten i flutter/ till en riktig multiplattformsklient (web + Android + iOS) utan att bryta befintligt webbflode via Docker/Caddy, och med tydlig miljohantering for API-anrop pa mobil.
Nulagesanalys (projektanpassad)
- Flutter-projektet ar i praktiken web-only just nu:
flutter/saknarandroid/ochios/. - Webbbygget ar redan etablerat och stabilt via Docker:
flutter/Dockerfilebyggerflutter build web --dart-define=API_BASE_URL=/api.compose.flutter.ymlochflutter/Caddyfileproxar/api/*tillrecipe-api:8080.
- API-basurl hanteras redan med
--dart-define(bra grund for multiplattform):flutter/lib/core/api/api_client.dartflutter/lib/features/import/data/import_repository.dart
- Token-lagring ar forberedd for mobil men inte implementerad:
flutter/lib/core/platform/token_storage.dartflutter/lib/core/platform/platform_providers.dart(har TODO om secure storage).
Viktig skillnad mot gamla planen
- Ingen hardkodad
Config.apiUrlmed fasta domaner ska inforas som huvudlosning. - Projektet anvander redan
String.fromEnvironment('API_BASE_URL'); vi behaller detta och utokar till mobil. - Befintlig Docker-setup for web ska inte ersattas, bara kompletteras med mobil-byggflode.
Foreslagen implementation
Fas 1: Aktivera plattformsstommar utan att rora webdeploy
- Skapa Android/iOS-mappar i
flutter/:flutter create --platforms android,ios .
- Verifiera att webfiler och befintliga Dart-filer inte overskrivs pa ett destruktivt satt.
- Bekrafta att Docker-webbygget fortfarande fungerar oforandrat.
Leverabel: Projektet innehaller flutter/android/ och flutter/ios/ samtidigt som webflodet ar intakt.
Fas 2: Plattformsaker konfiguration av API-basurl
- Standardisera API-konfiguration kring en enda kontraktspunkt:
- Behall
API_BASE_URLvia--dart-define.
- Behall
- Satt tydliga miljoer:
- Web i Docker:
API_BASE_URL=/api(som idag). - Android emulator lokalt: t.ex.
http://10.0.2.2:8080/api(vid lokal backend utan reverse proxy). - Fysisk mobil/test/prod: publik HTTPS-url (doman som ar natbar utanfor Docker).
- Web i Docker:
- Se over alla direkta API-basar i Flutter-koden sa att de gar via samma pattern (inga hardkodade hostnamn).
Leverabel: Samma kodbas fungerar pa web och mobil genom miljoinjektering, inte forks av API-klient.
Fas 3: Mobilanpassad auth/tokenlagring
- Implementera
SecureTokenStoragemedflutter_secure_storagefor mobil. - Uppdatera
platform_providers.darttill plattformsval:- Web -> befintlig
WebTokenStorage. - Android/iOS ->
SecureTokenStorage.
- Web -> befintlig
- Verifiera att inloggning/logout/session beter sig lika mellan web och mobil.
Leverabel: JWT lagras sakert pa mobil, befintligt webbeteende bibehalls.
Fas 4: UI- och UX-hardning for mindre skarmar
- Identifiera skarmar med hog informationsdensitet (admin/import/tabeller).
- Lagg in responsiva brytpunkter med
LayoutBuilder/MediaQuerydar det behovs. - Prioritera funktionellt minimum for mobil i forsta iteration:
- Login
- Inventarie
- Receptlista
- Grundlaggande importfloden
- Markera admin-tunga vyer som sekundara om de inte ar mobilkritiska i fas 1.
Leverabel: Nyckelfloden ar anvandbara pa telefon utan horisontell overflow eller blockerande layoutfel.
Fas 5: Build- och releaseflode (utan att blanda ihop med Docker-runtime)
- Dokumentera separata kommandon:
- Web (befintligt): Docker/compose.
- Android:
flutter build apk --release(och ev.appbundle). - iOS:
flutter build ios --release(kraver macOS/Xcode).
- Behall principen: mobilappar kor inte i Docker; Docker far anvandas som byggmiljo dar det ar rimligt.
- Om CI ska byggas senare: separera web-jobb och mobil-jobb for tydlighet.
Leverabel: Reproducerbar byggprocess for web och mobil med tydlig ansvarsskillnad.
Fas 6: Test- och verifieringsplan
- Statisk kvalitet:
flutter analyzeflutter test
- Plattformsverifiering:
- Web via befintlig container
- Android emulator + fysisk enhet
- iOS simulator (pa macOS)
- Natverksverifiering:
- Bekrafta att mobil kan na vald
API_BASE_URLover HTTPS/CORS/proxyregler.
- Bekrafta att mobil kan na vald
- Regression:
- Inloggning, token-refresh/logout
- CRUD i inventarie/recept
- Importendpoints med storre payloads
Leverabel: Checklista med passerade verifieringspunkter innan distribution.
Konkreta filer som sannolikt berors
flutter/pubspec.yaml(nytt beroende for secure storage)flutter/lib/core/platform/platform_providers.dartflutter/lib/core/platform/token_storage.dart(ev. endast kontraktsjustering)- Ny fil:
flutter/lib/core/platform/secure_token_storage.dart - Mobilplattformar som genereras:
flutter/android/**,flutter/ios/** - Dokumentation:
README.mdoch/ellerTEKNISK_BESKRIVNING.md(kommandon och miljoexempel)
Risker och hantering
- iOS-bygg kan inte verifieras i Windows/Linux-miljo -> hanteras med separat macOS-steg.
- Hardkodade URL:er kan smyga sig in i featurekod -> hanteras med kodsok + central konfigpolicy.
- UI-regression pa web vid responsiva andringar -> hanteras med web-regressionstest av kritiska vyer.
Prioriterad ordning for implementation
- Fas 1 (plattformsstommar)
- Fas 2 (API-konfiguration)
- Fas 3 (secure token storage)
- Fas 6 del 1 (analyze/test tidigt)
- Fas 4 (mobil UI-hardning)
- Fas 5 + Fas 6 slutlig verifiering och dokumentation
Definition of Done
- Flutter-projektet bygger for web + android (och ios dar macOS finns).
- Mobil och web anvander samma API-konfigmodell via
--dart-define. - Mobil lagrar token sakert; webflodet ar oforandrat.
- Minst nyckelfloden login/inventarie/recept/import ar verifierade pa mobil.
- Dokumentationen beskriver exakt hur man bygger och kor respektive plattform i detta repo.