feat(web): improve web build configuration and accessibility
- 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
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
# 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/` saknar `android/` och `ios/`.
|
||||
- Webbbygget ar redan etablerat och stabilt via Docker:
|
||||
- `flutter/Dockerfile` bygger `flutter build web --dart-define=API_BASE_URL=/api`.
|
||||
- `compose.flutter.yml` och `flutter/Caddyfile` proxar `/api/*` till `recipe-api:8080`.
|
||||
- API-basurl hanteras redan med `--dart-define` (bra grund for multiplattform):
|
||||
- `flutter/lib/core/api/api_client.dart`
|
||||
- `flutter/lib/features/import/data/import_repository.dart`
|
||||
- Token-lagring ar forberedd for mobil men inte implementerad:
|
||||
- `flutter/lib/core/platform/token_storage.dart`
|
||||
- `flutter/lib/core/platform/platform_providers.dart` (har TODO om secure storage).
|
||||
|
||||
## Viktig skillnad mot gamla planen
|
||||
- Ingen hardkodad `Config.apiUrl` med 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
|
||||
1. Skapa Android/iOS-mappar i `flutter/`:
|
||||
- `flutter create --platforms android,ios .`
|
||||
2. Verifiera att webfiler och befintliga Dart-filer inte overskrivs pa ett destruktivt satt.
|
||||
3. 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
|
||||
1. Standardisera API-konfiguration kring en enda kontraktspunkt:
|
||||
- Behall `API_BASE_URL` via `--dart-define`.
|
||||
2. 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).
|
||||
3. 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
|
||||
1. Implementera `SecureTokenStorage` med `flutter_secure_storage` for mobil.
|
||||
2. Uppdatera `platform_providers.dart` till plattformsval:
|
||||
- Web -> befintlig `WebTokenStorage`.
|
||||
- Android/iOS -> `SecureTokenStorage`.
|
||||
3. 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
|
||||
1. Identifiera skarmar med hog informationsdensitet (admin/import/tabeller).
|
||||
2. Lagg in responsiva brytpunkter med `LayoutBuilder`/`MediaQuery` dar det behovs.
|
||||
3. Prioritera funktionellt minimum for mobil i forsta iteration:
|
||||
- Login
|
||||
- Inventarie
|
||||
- Receptlista
|
||||
- Grundlaggande importfloden
|
||||
4. 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)
|
||||
1. Dokumentera separata kommandon:
|
||||
- Web (befintligt): Docker/compose.
|
||||
- Android: `flutter build apk --release` (och ev. `appbundle`).
|
||||
- iOS: `flutter build ios --release` (kraver macOS/Xcode).
|
||||
2. Behall principen: mobilappar kor inte i Docker; Docker far anvandas som byggmiljo dar det ar rimligt.
|
||||
3. 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
|
||||
1. Statisk kvalitet:
|
||||
- `flutter analyze`
|
||||
- `flutter test`
|
||||
2. Plattformsverifiering:
|
||||
- Web via befintlig container
|
||||
- Android emulator + fysisk enhet
|
||||
- iOS simulator (pa macOS)
|
||||
3. Natverksverifiering:
|
||||
- Bekrafta att mobil kan na vald `API_BASE_URL` over HTTPS/CORS/proxyregler.
|
||||
4. 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.dart`
|
||||
- `flutter/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.md` och/eller `TEKNISK_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
|
||||
1. Fas 1 (plattformsstommar)
|
||||
2. Fas 2 (API-konfiguration)
|
||||
3. Fas 3 (secure token storage)
|
||||
4. Fas 6 del 1 (analyze/test tidigt)
|
||||
5. Fas 4 (mobil UI-hardning)
|
||||
6. 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.
|
||||
Reference in New Issue
Block a user