Files
recipe-mockup/VIEWS_AND_SCENARIOS.md
ulfrxdev f80b115cae
All checks were successful
Build and Deploy / build-and-push (push) Successful in 23s
Reorganise the views and prepare summary
2026-03-26 22:29:06 +01:00

358 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Widoki i scenariusze — Aplikacja Kuchenna
> **Cel dokumentu:** Opis wszystkich widoków aplikacji z obecnym stanem, scenariusze użytkownika i znane problemy. Odniesienie dla dalszego rozwoju.
> **Kontekst projektu:** To jest **prototyp / mockup** — celem jest wypracowanie UX, logiki widoków i przepływów użytkownika. Finalna aplikacja będzie pisana w innym języku z backendem. Wartość tego prototypu to przede wszystkim: struktura widoków, scenariusze, model danych i decyzje UX — nie kod sam w sobie.
---
## 1. Profil użytkownika
| Cecha | Opis |
|-------|------|
| Liczba osób | 1 (gotuje dla siebie) |
| Planowanie | Elastyczne, 17 dni do przodu |
| Posiłki | 3 główne (śniadanie, obiad, kolacja) + dodatkowe przy treningu |
| Powtarzalność | Duża (zwłaszcza śniadania) — kopiowanie dnia kluczowe |
| Styl gotowania | Hybrydowy: trochę meal-prep, trochę na bieżąco |
| Zakupy | Mieszane: duże zakupy + uzupełnienia w tygodniu |
| Cel dietetyczny | Utrzymanie wagi, śledzenie per posiłek |
| Pomijanie posiłków | Jawne "pomijam" (jedzenie na mieście) |
| Przepisy | Na razie katalog wbudowany (9 przepisów), bez edytora |
### Kluczowe pain-pointy (zgłoszone)
1. Brak możliwości pominięcia slotu w planerze
2. Brak "Dodaj do planera" z widoku przepisu
3. Ilości na liście zakupów nie do edycji
4. Brak kalorii per slot w widoku dnia
5. Za dużo kliknięć w kluczowych flow
---
## 2. Przegląd widoków
### 2.1 Przepisy (`RecipeList`)
**Lokalizacja:** `js/views/RecipeList.js`
Siatka 2-kolumnowa kart przepisów generowana dynamicznie z `RECIPES`. Każda karta zawiera miniaturę (placeholder), tytuł, czas przygotowania, kalorie. Kliknięcie otwiera detal.
**Elementy:**
- Wyszukiwarka (real-time, po tytule i tagach)
- Przycisk filtrów (overlay)
- Siatka kart
**Stan:** Kompletny.
---
### 2.2 Filtry (`Filter`)
**Lokalizacja:** `js/views/Filter.js`
Overlay z chipami pór posiłku, tagami dietetycznymi i suwakiem czasu. Dynamicznie generowane z `MEAL_SLOTS` i tagów z `RECIPES`.
**Elementy:**
- Chipy: pory posiłku (z `MEAL_SLOTS`)
- Chipy: tagi dietetyczne (zbierane z `RECIPES`)
- Suwak: maksymalny czas przygotowania
- Przycisk "Wyczyść" + "Pokaż X wyników"
**Stan:** Kompletny.
---
### 2.3 Szczegóły przepisu (`RecipeDetail`)
**Lokalizacja:** `js/views/RecipeDetail.js`
Full-screen overlay z detalami przepisu. Trzy zakładki: Składniki, Kroki, Wartości.
**Elementy:**
- Hero (placeholder) + strzałka powrotu + **"Do planera"** (nowe)
- Tytuł, tagi, czas, kcal
- Selektor porcji (±) z przeliczaniem
- Zakładka Składniki: lista z checkboxami + badge stanu spiżarni + "Dodaj do listy zakupów"
- Zakładka Kroki: numerowane kroki
- Zakładka Wartości: kcal/białko/tłuszcze/węglowodany × porcje
- **Bottom sheet "Dodaj do planera"**: wybór dnia (7 dni) + slotu → zapis do planStore
**Stan:** Kompletny.
---
### 2.4 Planer posiłków (`MealPlanner`)
**Lokalizacja:** `js/views/MealPlanner.js`
Kalendarz (tydzień/miesiąc) + plan dnia z slotami posiłków.
**Elementy kalendarza:**
- Widok tygodnia ↔ miesiąca (swipe góra/dół)
- Nawigacja: ←/→ + "Dziś"
- Kropki pod dniem = zaplanowane posiłki
**Elementy planu dnia:**
- Nagłówek dnia + **"Kopiuj dzień"** (nowe)
- Karta podsumowania kalorycznego (kcal + makro, rozwijalne szczegóły)
- "Składniki na ten dzień" (badge z liczbą braków)
- Sloty posiłków (5 slotów z `MEAL_SLOTS`):
- **Kcal per slot** w nagłówku (nowe)
- Karty przepisów z porcjami, kcal, czasem, przyciskiem usuwania
- Kliknięcie nazwy przepisu → RecipeDetail
- "Dodaj przepis" / "Dodaj kolejny"
- **"Pomijam"** przy pustym slocie (nowe) → slot przygaszony z "Cofnij"
**Bottom sheety:**
1. **Picker przepisów**: wyszukiwarka + "Ostatnio używane" + lista filtrowana do `allowedSlots`
2. **Składniki i spiżarnia**: porównanie potrzeb vs zapasy + prognoza tygodnia + "Dodaj braki"
3. **Kopiuj plan dnia**: lista 13 dni (3 wstecz, 10 do przodu) → kopiuje cały dzień
**Stan:** Kompletny.
---
### 2.5 Spiżarnia (`Pantry`)
**Lokalizacja:** `js/views/Pantry.js`
Przeglądanie i edycja stanów magazynowych składników.
**Elementy:**
- Wyszukiwarka
- Chipy filtrów kategorii
- Toggle "Tylko na stanie"
- Siatka chipów składników (kolorowana wg stanu)
- Bottom sheet edycji: ±, input, wartości odżywcze, "Dodaj na listę zakupów"
**Stan:** Kompletny.
---
### 2.6 Zakupy (`Shopping`)
**Lokalizacja:** `js/views/Shopping.js`
Zarządzanie listami zakupów.
**Elementy:**
- Selektor aktywnej listy
- Przycisk "Nowa lista"
- **Pasek akcji listy kuchennej** (widoczny gdy są zaznaczone pozycje):
- "Kupione → spiżarnia" (z **potwierdzeniem** — nowe)
- "Wyczyść kupione"
- Lista kuchenna: pogrupowana po kategorii, checkbox, **edycja ilości** (klik → prompt, nowe)
- Lista freeform: tekst + notatka, checkbox
**Stan:** Kompletny.
---
## 3. Przepływy między widokami
```
Przepisy ──[klik kartę]──→ Szczegóły przepisu
├──[Dodaj do listy zakupów]──→ Zakupy (lista kuchenna)
└──[Do planera]──→ Planer (wybór dnia + slotu)
Planer ──[klik przepis w slocie]──→ Szczegóły przepisu
──[Składniki na ten dzień]──→ Sheet: porównanie z spiżarnią
──[Dodaj braki do listy]──→ Zakupy (lista kuchenna)
──[Kopiuj dzień]──→ Sheet: wybór dnia docelowego
Spiżarnia ──[Dodaj na listę zakupów]──→ Zakupy
Zakupy ──[Kupione → spiżarnia]──→ Spiżarnia (stany zaktualizowane)
```
---
## 4. Scenariusze użytkownika
### Scenariusz 1: Przeglądanie przepisów
**Cel:** Użytkownik otwiera apkę, chce zobaczyć co jest dostępne.
1. Otwiera aplikację → widzi zakładkę **Przepisy** z siatką 9 kart
2. Przewija listę, czyta opisy i kalorie na kartach
3. Klika kartę "Makaron z pomidorami i bazylią"
4. Widzi detal: składniki, kroki, wartości odżywcze
5. Zmienia liczbę porcji z 1 na 3 → składniki i kcal się przeliczają
6. Przełącza zakładkę na "Kroki" → widzi kroki
7. Przełącza na "Wartości" → widzi makroskładniki ×3
8. Wraca strzałką ← do listy
**Znane problemy:**
- Brak zdjęć (szare placeholdery) — OK dla prototypu
- Po powrocie z detalu filtr/szukajka powinny się utrzymać (utrzymują się)
---
### Scenariusz 2: Szukanie przepisu na kolację
**Cel:** Użytkownik szuka czegoś konkretnego.
1. Wpisuje "łosoś" → lista filtruje się do 1 karty
2. Kasuje tekst → wracają wszystkie
3. Klika ikonę filtrów
4. Zaznacza "Kolacja" → lista się zawęża
5. Dodatkowo zaznacza tag "Wysokobiałkowe"
6. Ustawia suwak na max 25 min
7. Klika "Pokaż X wyników" → wraca do przefiltrowanej listy
8. Wybiera przepis i otwiera detal
**Znane problemy:**
- Brak wizualnego wskaźnika aktywnych filtrów na ikonce (badge/kropka)
- Po zamknięciu filtrów ← (zamiast "Pokaż") — zachowanie może być nieintuicyjne
---
### Scenariusz 3: Planowanie posiłków na tydzień
**Cel:** Użytkownik układa menu na kilka dni.
1. Przechodzi na zakładkę **Planer**
2. Widzi dzisiejszy dzień z demo-danymi
3. Klika na przepis w slocie → otwiera się detal
4. Wraca ← do planera
5. Klika następny dzień w kalendarzu
6. Widzi puste sloty, klika "Dodaj przepis" przy Śniadaniu
7. Picker: wpisuje fragment nazwy, widzi "Ostatnio używane"
8. Wybiera przepis → pojawia się w slocie z **kcal w nagłówku**
9. Przy obiedzie klika **"Pomijam"** (je na mieście) → slot przygaszony
10. Klika "Składniki na ten dzień" → widzi braki vs spiżarnia
11. Klika "Dodaj braki na dziś do listy" → toast
12. Następnego dnia: **"Kopiuj dzień"** → wybiera dzień docelowy → gotowe
**Znane problemy:**
- Po dodaniu braków brak informacji "już dodano" — ryzyko duplikacji
- "Kopiuj dzień" kopiuje też status "Pominięto"
---
### Scenariusz 4: Zarządzanie spiżarnią
**Cel:** Użytkownik sprawdza co ma w domu.
1. Przechodzi na zakładkę **Spiżarnia**
2. Widzi chipy składników pogrupowane po kategorii
3. Włącza "Tylko na stanie" → widzi co ma
4. Klika "Płatki owsiane" → bottom sheet
5. Ustawia 500g
6. Zamyka → chip zmienił się na zielony z "500 g"
7. Chce dodać mleko na listę → klika "Dodaj na listę" w sheecie
**Znane problemy:**
- Po zamknięciu bottom sheet scroll wraca na górę (re-render)
- Brak możliwości ręcznego wpisania ilości szybko (ale jest input type=number)
---
### Scenariusz 5: Zakupy w sklepie
**Cel:** Użytkownik jest w sklepie, odznacza kupione.
1. Otwiera zakładkę **Zakupy**
2. Widzi listę kuchenną pogrupowaną po kategorii
3. Bierze mleko z półki → klika checkbox → przekreślenie
4. Widzi `sourceNote`: "Braki z planu dnia"
5. Ilość się nie zgadza — klika na **ilość** → prompt → poprawia
6. Kupuje dalsze pozycje
**Znane problemy:**
- Kupione mieszają się z niekupionymi w grupie (brak separacji)
- Brak podsumowania: "Do kupienia: 5, kupione: 3"
- Na telefonie w sklepie — elementy mogłyby być większe
---
### Scenariusz 6: Po zakupach — przeniesienie do spiżarni
**Cel:** Użytkownik wrócił ze sklepu, aktualizuje spiżarnię.
1. Otwiera **Zakupy** → widzi zaznaczone pozycje
2. Pojawia się pasek: **"Kupione → spiżarnia"** i **"Wyczyść kupione"**
3. Klika "Kupione → spiżarnia" → **potwierdzenie z podglądem** pozycji
4. Potwierdza → toast "Przeniesiono X pozycji"
5. Kupione znikają z listy
6. Przechodzi do **Spiżarni** → stany zaktualizowane
7. Wraca do **Planera** → braki zmniejszone
**Znane problemy:**
- Brak undo (cofnięcia przeniesienia)
---
### Scenariusz 7: Gotowanie z przepisu
**Cel:** Użytkownik gotuje, sprawdza przepis krok po kroku.
1. Otwiera **Planer** → dzisiejszy dzień
2. Klika przepis w slocie Kolacja
3. Otwiera się detal → przełącza na "Kroki"
4. Czyta krok po kroku
5. Sprawdza ilość składnika → przełącza na "Składniki"
6. Wraca na "Kroki"
**Znane problemy:**
- Brak trybu "krok po kroku" (full-screen, jeden krok, swipe next)
- Ekran wygasa po chwili (brak wake lock)
- Nie ma checkboxa przy krokach
---
### Scenariusz 8: "Co mogę ugotować?"
**Cel:** Użytkownik ma coś w spiżarni, chce wiedzieć co da się z tego zrobić.
1. Otwiera **Spiżarnię** → widzi co ma
2. Chciałby kliknąć "Co mogę ugotować?" → **takiej funkcji jeszcze nie ma**
3. Musi ręcznie sprawdzać przepisy
**Propozycja:** Filtr "Mam składniki" w widoku Przepisy.
---
## 5. Tabela znanych problemów i luk
| # | Problem | Scenariusz | Status |
|---|---------|-----------|--------|
| 1 | Brak wskaźnika aktywnych filtrów na ikonce | 2 | TODO |
| 2 | Podwójne dodanie braków do listy zakupów | 3 | TODO |
| 3 | Kupione mieszają się z niekupionymi (brak separacji) | 5 | TODO |
| 4 | Brak podsumowania na liście zakupów (ile kupione/do kupienia) | 5 | TODO |
| 5 | Brak undo przy "Kupione → spiżarnia" | 6 | TODO |
| 6 | Brak trybu "krok po kroku" przy gotowaniu | 7 | PROPOZYCJA |
| 7 | Brak wake lock (ekran wygasa) | 7 | PROPOZYCJA |
| 8 | Brak filtra "Mam składniki" | 8 | PROPOZYCJA |
| 9 | Scroll spiżarni resetuje się po edycji | 4 | TODO |
| 10 | Zamknięcie filtrów ← vs "Pokaż" — niespójne zachowanie? | 2 | DO WERYFIKACJI |
---
## 6. Zrealizowane w ostatniej iteracji
| # | Funkcja | Widok |
|---|---------|-------|
| P1 | "Dodaj do planera" z widoku przepisu (wybór dnia + slotu) | RecipeDetail |
| P2 | Kopiowanie planu dnia na inny dzień | MealPlanner |
| P3 | "Pomijam" w slocie planera | MealPlanner + planStore |
| P4 | Kalorie per slot w nagłówku slotu | MealPlanner |
| P5 | Edycja ilości na liście zakupów (klik → prompt) | Shopping |
| P6 | Potwierdzenie "Kupione → spiżarnia" z podglądem | Shopping |
| P7 | Lepszy picker przepisów (wyszukiwarka + ostatnio używane) | MealPlanner |
---
## 7. Stos technologiczny
| Warstwa | Technologia |
|---------|-------------|
| Frontend | Plain HTML + ES modules, imperatywna manipulacja DOM |
| Style | Tailwind CSS (CDN), Font Awesome 6 (CDN) |
| Dane | Statyczny katalog `js/data/catalog.js`, localStorage |
| PWA | manifest.webmanifest + sw.js |
| Deploy | Docker + nginx:alpine, Gitea CI/CD |
| Język UI | Polski |