Przeglądanie przepisów po kategoriach
S-05: Category Browse
Cel
Mama może otworzyć kategorię (Obiady / Zupy / Desery / Śniadania / Przekąski / Wegetariańskie / Napoje / Inne) i zobaczyć tylko przepisy z tej kategorii — kategoria była przypisana automatycznie przez LLM podczas ekstrakcji w S-01..S-04.
Wymagania wstępne
- S-01: Complete (schema with category enum, extraction assigns categories)
Fazy implementacji
Faza 1: Category selector UI
- Create
src/app/components/category-filter.tsx:- Render 8 category buttons (obiady, zupy, desery, sniadania, przekaski, wegetarianskie, napoje, inne)
- Active state styling
- Click handler passes category to parent component (or URL param)
- Add to
/recipespage above recipe grid
Faza 2: Category list page — POMINIĘTA (zastąpiona chipsami)
Create— nie wdrożone.src/app/(authenticated)/recipes/categories/page.tsx- Inline chipsy z Fazy 1 (ikona + licznik per kategoria, na
/recipes) realizują cel „przeglądaj po kategorii” bez osobnej strony-landingu. DoD spełnione bez niej. - Faza była oznaczona „Optional” — świadomie pominięta.
Faza 3: Category query + filtering
- Update
src/app/(authenticated)/recipes/page.tsx:- Accept
?category=XURL param - If param present: add WHERE clause
category = Xto Supabase query - If no param: show all (current behavior)
- Accept
- Display active category in UI (breadcrumb or tab)
Faza 4: Recipe detail → category context
- Update
src/app/(authenticated)/recipes/[slug]/page.tsx:- When viewing recipe, show “Kategoria: Obiady” as badge
- Optional: add “Więcej z kategorii” link → back to category view
Checklist testowania
Konwencja:
- [ ]oczekujące,- [x]wykonane.— <sha>przy realizacji. Zaimplementowane w PR #50 (50f5e44filtr+URL param+badge,7017829/8de5176ikony).
- Build succeeds — 50f5e44
- Category buttons render on /recipes (
CategoryFilter, chipsy z ikonami + licznikami) — 50f5e44 - Click category → filters recipes (
router.push('/recipes?category=…'), toggle off na aktywnej) — 50f5e44 - URL param works: /recipes?category=zupy (server-side
eq('category', activeCategory)) — 50f5e44 - All 8 categories have correct recipe counts (
categoryCountsz osobnego query) — 50f5e44 - Detail page shows recipe category (badge linkujący do
/recipes?category=X) — 50f5e44 - Empty state: category with no recipes („Brak przepisów w tej kategorii.”) — 50f5e44
Ryzyka
- Category consistency: LLM may assign same recipe differently on re-run (S-05 audit first ~20 recipes)
- Missing category: If LLM extraction fails, category defaults to ‘inne’ — may clutter “Other”
Open questions
- Should categories be user-customizable (S-02 follow-up) or fixed MVP?
- Icon set for categories — emoji or SVG icons?
Definition of Done
- PR merged to master
- Category filter on /recipes page working
- All 8 categories filterable
- URL params (?category=X) work
- Recipe detail shows category
- Documented in README (S-05 section)