feat: update next steps documentation with user-scope decisions, UI/UX improvements, and sprint planning
This commit is contained in:
+158
-14
@@ -16,27 +16,170 @@ Relaterade dokument:
|
|||||||
- [teknisk_beskrivning_flutter.md](teknisk_beskrivning_flutter.md)
|
- [teknisk_beskrivning_flutter.md](teknisk_beskrivning_flutter.md)
|
||||||
- [TEKNISK_BESKRIVNING.md](TEKNISK_BESKRIVNING.md)
|
- [TEKNISK_BESKRIVNING.md](TEKNISK_BESKRIVNING.md)
|
||||||
|
|
||||||
## Icke-forhandlingsbara ramar
|
## Icke-förhandlingsbara ramar
|
||||||
|
|
||||||
1. Inget ska tas bort eller andras i `recipe-api` utom explicit beslutade backend-andringar for anvandarscope i pantry och matplan.
|
1. Inget ska tas bort eller ändras i `recipe-api` utom explicit beslutade backend-ändringar för användarscope i pantry och matplan.
|
||||||
2. Inget ska tas bort eller andras i `recipe-frontend`.
|
2. Inget ska tas bort eller ändras i `recipe-frontend`.
|
||||||
3. Migreringen sker i Flutter-sparet som separat klient mot befintliga API-kontrakt.
|
3. Migreringen sker i Flutter-spåret som separat klient mot befintliga API-kontrakt.
|
||||||
4. Next-frontend kor parallellt tills Flutter har verifierad parity i karnfloden.
|
4. Next-frontend körs parallellt tills Flutter har verifierad parity i kärnflöden.
|
||||||
|
|
||||||
## Beslut 2026-04-22 - User-scope for pantry och matplan
|
## Beslut 2026-04-22 - User-scope för pantry och matplan
|
||||||
|
|
||||||
- Pantry och matplan ska vara per anvandare, inte globala.
|
- Pantry och matplan ska vara per användare, inte globala.
|
||||||
- Detta kraver backend-andringar i `recipe-api` innan Flutter kan na full parity for dessa floden.
|
- Detta kräver backend-ändringar i `recipe-api` innan Flutter kan nå full parity för dessa flöden.
|
||||||
- Flutter ska folja de nya kontrakten nar de finns pa plats, utan klientspecifik speciallogik.
|
- Flutter ska följa de nya kontrakten när de finns på plats, utan klientspecifik speciallogik.
|
||||||
|
|
||||||
## Malbild for v1 (funktionell parity)
|
## Malbild för v1 (funktionell parity)
|
||||||
|
|
||||||
For v1 ska dessa floden vara stabila i Flutter:
|
För v1 ska dessa flöden vara stabila i Flutter:
|
||||||
- [x] Auth: login, session, logout, auth-guard.
|
- [x] Auth: login, session, logout, auth-guard.
|
||||||
- [x] Recept: lista, detalj, skapa, uppdaters, ta bort.
|
- [x] Recept: lista, detalj, skapa, uppdatera, ta bort.
|
||||||
- [x] Inventarie: lista, skapa, uppdatera, konsumera, historik.
|
- [x] Inventarie: lista, skapa, uppdatera, konsumera, historik.
|
||||||
- [x] Matplan: veckovy, val av recept per dag, portionsjustering, inkopslista, inventariejamforelse.
|
- [x] Matplan: veckovy, val av recept per dag, portionsjustering, inköpslista, inventariejämförelse.
|
||||||
- [x] Import: quick-import + parse-markdown-flode.
|
- [x] Import: quick-import + parse-markdown-flöde.
|
||||||
|
- [x] Produktadmin: lista, sök, sortera, filtrera, AI-kategorisering, merge, restore, inline kategori.
|
||||||
|
- [x] Användaradmin: lista, premium, e-post, skapa, ta bort, återställ lösenord.
|
||||||
|
|
||||||
|
## Arbetsordning för nästa sprint (2026-04-25)
|
||||||
|
|
||||||
|
### 1. Kvittoimport (OCR, bulk-spara)
|
||||||
|
- [ ] Implementera granskningssteg för kvittoimport.
|
||||||
|
- [ ] Bulk-spara för bekräftade rader.
|
||||||
|
- [ ] Säkerställa att `file_picker: ^8.0.0` är integrerat för filval på Flutter Web.
|
||||||
|
|
||||||
|
### 2. UI/UX-förbättringar
|
||||||
|
- [ ] **Adminpaneler:**
|
||||||
|
- [ ] Lägg till tydlig placeholder-text i sökfältet.
|
||||||
|
- [ ] Gör filtreringsalternativen mer visuellt tydliga.
|
||||||
|
- [ ] Lägg till bekräftelsedialog för bulk-åtgärder.
|
||||||
|
- [ ] Förbättra laddningsindikatorn för AI-kategorisering.
|
||||||
|
- [ ] **Receptvy:**
|
||||||
|
- [ ] Lägg till tydlig växlingsknapp för grid- och listvy.
|
||||||
|
- [ ] Implementera sorteringsalternativ.
|
||||||
|
- [ ] Förbättra det tomma tillståndet med en tydlig CTA.
|
||||||
|
- [ ] **Receptdetaljvy:**
|
||||||
|
- [ ] Lägg till stöd för att visa receptbilder i större format.
|
||||||
|
- [ ] Gör ingredienslistan mer läsbar.
|
||||||
|
- [ ] **Gemensamma UI-komponenter:**
|
||||||
|
- [ ] Förbättra felmeddelanden med tydliga instruktioner.
|
||||||
|
- [ ] Använd en visuellt tilltalande laddningsindikator.
|
||||||
|
- [ ] **Allmänt:**
|
||||||
|
- [ ] Säkerställa tillgänglighet med tydliga `tooltip`-texter och tillräcklig kontrast.
|
||||||
|
- [ ] Lägg till bekräftelsemeddelanden efter åtgärder.
|
||||||
|
|
||||||
|
### 3. Förbättra konverteringsvägen och onboarding
|
||||||
|
- **Mål:** Säkerställa att användare snabbt får värde och förstår appens fördelar.
|
||||||
|
|
||||||
|
- **Åtgärder:**
|
||||||
|
- **CTA (Call-to-Action):**
|
||||||
|
- [ ] Skapa tydliga och lockande CTAs som "Se vad du kan laga med det du har hemma."
|
||||||
|
- [ ] Placera CTAs strategiskt i appen för att maximera synlighet.
|
||||||
|
|
||||||
|
- **Förenkla onboarding:**
|
||||||
|
- [ ] Implementera en gästinloggning eller demo-läge så att användare kan prova appen utan att registrera sig direkt.
|
||||||
|
- [ ] Minska antalet obligatoriska fält vid registrering och implementera sociala inloggningar (t.ex. Google, Facebook).
|
||||||
|
- [ ] Skapa en kort välkomstguide för nya användare som visar de viktigaste funktionerna.
|
||||||
|
- [ ] Använd pop-up-tips eller tooltips för att visa hur man använder olika funktioner.
|
||||||
|
|
||||||
|
- **Snabb start med exempeldata:**
|
||||||
|
- [ ] Låt användare börja med förifyllt exempeldata, t.ex. en standardinköpslista eller vanliga ingredienser.
|
||||||
|
- [ ] Lägg till en "Snabbstart"-knapp som automatiskt fyller i exempeldata och visar receptförslag.
|
||||||
|
|
||||||
|
- **Fokusera på "Aha!"-momentet:**
|
||||||
|
- [ ] Visa omedelbara receptförslag när användaren lägger till sina första ingredienser.
|
||||||
|
- [ ] Generera en automatisk inköpslista baserad på de recept användaren väljer.
|
||||||
|
|
||||||
|
- **Tydliga instruktioner och feedback:**
|
||||||
|
- [ ] Visa tydliga instruktioner för varje steg i onboarding-processen.
|
||||||
|
- [ ] Ge omedelbar feedback när användaren utfört en åtgärd.
|
||||||
|
|
||||||
|
- **Användarvänlig design:**
|
||||||
|
- [ ] Håll gränssnittet enkelt och fokuserat på kärnfunktioner.
|
||||||
|
- [ ] Visa endast de viktigaste funktionerna för nya användare.
|
||||||
|
|
||||||
|
- **Möjlighet att hoppa över onboarding:**
|
||||||
|
- [ ] Lägg till en knapp som låter användare hoppa över onboarding och börja använda appen direkt.
|
||||||
|
|
||||||
|
### 4. Testa och iterera
|
||||||
|
- **Mål:** Identifiera friktion och förbättra konverteringsvägen.
|
||||||
|
|
||||||
|
- **Åtgärder:**
|
||||||
|
- [ ] Gå igenom appen som en ny användare för att identifiera eventuella problem.
|
||||||
|
- [ ] A/B-testa olika CTAs och onboarding-flöden för att se vad som fungerar bäst.
|
||||||
|
- [ ] Implementera analytik för att spåra var användare hoppar av och varför.
|
||||||
|
|
||||||
|
### 5. Anpassa till målgruppen
|
||||||
|
- **Mål:** Se till att marknadsföring och CTAs talar direkt till målgruppen.
|
||||||
|
|
||||||
|
- **Åtgärder:**
|
||||||
|
- [ ] Anpassa marknadsföring och CTAs till målgruppen (t.ex. familjer, matintresserade, meal preppers).
|
||||||
|
- [ ] Var tydlig med appens värdeproposition, t.ex. "Slipp slösa mat – vi visar vad du kan laga med det du har hemma."
|
||||||
|
|
||||||
|
### 3. Avancerade adminfunktioner
|
||||||
|
- [ ] Implementera "Visa endast ändrade rader" i produktadmin.
|
||||||
|
- [ ] Säkerställa att AI-integration för kategorisering är robust.
|
||||||
|
|
||||||
|
### 4. Dokumentation och testning
|
||||||
|
- [ ] Uppdatera `README.md` med senaste ändringar.
|
||||||
|
- [ ] Lägg till testfall för nya funktioner.
|
||||||
|
- [ ] Validera med `flutter analyze` och fixa eventuella varningar.
|
||||||
|
|
||||||
|
### 5. Övrigt
|
||||||
|
- [ ] Säkerställa att alla containrar är uppdaterade för robust bildhantering.
|
||||||
|
|
||||||
|
## Prioriterad plan (ordning)
|
||||||
|
|
||||||
|
## Fas 0 - Backend-förarbete för user-scope (KLAR 2026-04-22)
|
||||||
|
- [x] Gör `PantryItem` user-scopad (userId + productId unik per användare).
|
||||||
|
- [x] Gör matplan user-scopad och filtrera list/upsert/delete per inloggad användare.
|
||||||
|
- [x] Uppdatera matplanens inventory-jämförelse till användarspecifikt pantry.
|
||||||
|
- [x] Publicera uppdaterade API-kontrakt innan vidare Flutter-parity för matplan/baslager.
|
||||||
|
- [x] Migration 20260422130000_user_scope_pantry_meal_plan applicerad.
|
||||||
|
|
||||||
|
## Fas 1 - Stabil app-shell (KLAR 2026-04-22)
|
||||||
|
- [x] Bygg tydlig auth-gate i router.
|
||||||
|
- [x] Centralisera API-fel (401/403/500) i ett gemensamt lager (`mapErrorToUserMessage`).
|
||||||
|
- [x] Skapa gemensamma UI-komponenter för loading, empty, error.
|
||||||
|
- [x] Sätt en enhetlig navigationsstruktur (web först, mobil-redo).
|
||||||
|
- [x] Lokalisering: ARB-infrastruktur på plats (`flutter_localizations`, `l10n.yaml`, `app_sv.arb`, `synthetic-package: false`, `flutter gen-l10n` i Dockerfile).
|
||||||
|
- [x] Regressionstest för svenska strängkvalitet tillagd.
|
||||||
|
|
||||||
|
## Fas 2 - Auth parity (KLAR 2026-04-22)
|
||||||
|
- [x] Hårdna loginflödet (tydliga felmeddelanden, retries där relevant).
|
||||||
|
- [x] Verifiera token-livscykel (reload/hard refresh/logout).
|
||||||
|
- [x] Implementera automatisk hantering av utgången token (401 -> logout -> login).
|
||||||
|
|
||||||
|
## Fas 3 - Recept parity (KLAR 2026-04-22)
|
||||||
|
- [x] Lista -> detalj -> skapa -> redigera -> ta bort.
|
||||||
|
- [x] Knyt ihop med parse-markdown-proxy.
|
||||||
|
- [x] Behåll backend som enda plats för matchning, validering och affärslogik.
|
||||||
|
|
||||||
|
## Fas 4 - Inventarie parity (KLAR 2026-04-22)
|
||||||
|
- [x] Lista med filter/sortering (plats + sort via Riverpod-querystate).
|
||||||
|
- [x] Skapa och uppdatera inventariepost.
|
||||||
|
- [x] Konsumtion och konsumtionshistorik.
|
||||||
|
|
||||||
|
## Fas 5 - Matplan parity (KLAR 2026-04-22)
|
||||||
|
- [x] Veckovy med receptval per dag mot user-scopat `GET /api/meal-plan?from=&to=`.
|
||||||
|
- [x] Portionsjustering per dag.
|
||||||
|
- [x] Inköpslista och inventariejämförelse mot användarens pantry.
|
||||||
|
|
||||||
|
## Fas 6 - Import parity
|
||||||
|
|
||||||
|
### 6a — Recept-import
|
||||||
|
- [x] URL via JSON-body `{ input: string }`.
|
||||||
|
- [x] Svar: `{ markdown: string, source: 'ica'|'pdf'|'image'|'other', imageUrl?: string }`.
|
||||||
|
- [x] På lyckat resultat: navigera till `/recipes/create` med markdown-texten förifylld.
|
||||||
|
|
||||||
|
### 6b — Kvittoimport
|
||||||
|
- [ ] Endpoint: `POST /api/receipt-import`
|
||||||
|
- [ ] Läge: filuppladdning, `multipart/form-data`, fält `file`, max 15 MB.
|
||||||
|
- [ ] Svar: `ParsedReceiptItem[]` med fälten `rawName`, `quantity`, `unit`, `suggestedProductId?`, `suggestedProductName?`, `categorySuggestion?`.
|
||||||
|
- [ ] På lyckat resultat: granskningssteg där användaren bekräftar/skippar rader.
|
||||||
|
|
||||||
|
## UI/UX-förbättringar (KLAR 2026-04-22)
|
||||||
|
- [x] Produktval med bottenark (ProductPickerField) i inventarie/pantry.
|
||||||
|
- [x] Swipe-för-±1 på inventarielistan (SwipeableInventoryTile med visuell ledtråd).
|
||||||
|
|
||||||
## Prioriterad plan (ordning)
|
## Prioriterad plan (ordning)
|
||||||
|
|
||||||
@@ -176,3 +319,4 @@ En feature ar klar nar allt nedan ar uppfyllt:
|
|||||||
- Fortsatt användartestning av nya navigationsflöden och insamling av feedback.
|
- Fortsatt användartestning av nya navigationsflöden och insamling av feedback.
|
||||||
- Finslipa UI och tillgänglighet i samband med de nya navigationsmöjligheterna.
|
- Finslipa UI och tillgänglighet i samband med de nya navigationsmöjligheterna.
|
||||||
- Färdigställ kvittoimport och adminfunktioner enligt plan.
|
- Färdigställ kvittoimport och adminfunktioner enligt plan.
|
||||||
|
- Lägg till snabbfilter i Produkt-admin: "Visa endast ändrade rader" för inline-kategoribyten (planerad förbättring till nästa pass).
|
||||||
|
|||||||
Reference in New Issue
Block a user