feat(vad-ska-vi-ata): identisk vy i alla flikar + enhetliga rutor

Alla kategori-flikar anvander nu SAMMA rekommendations-motor (what-to-eat)
som 'Rekommenderat', sa vyn blir identisk overallt:
- sok fungerar i alla flikar, %-hemma och stjarnor visas, samma kort-layout,
  och samma paginering med 'Visa fler' (5 at gangen).
- Backend: what-to-eat tar nu valfri ?tag= (Baka-fliken filtrerar pa 'baking'
  i stallet for maltidstyp; mealType styr bara poangsattningen).
- Enhetliga chip-rutor: Button far en style-prop, flikarna ligger i 2 kolumner
  med lika bred ruta (48%), centrerad text som krymper vid behov.
- 'Toppval' visas bara pa forsta sidan. 'Alla recept & sok' kvar som lank.

Full typecheck 20/20.
This commit is contained in:
Claude
2026-08-19 12:29:21 +00:00
parent 0a16f1fefa
commit 3d8bd68fe0
4 changed files with 147 additions and 170 deletions
+4 -1
View File
@@ -1,5 +1,5 @@
import { z } from "zod";
import { MEAL_TYPES } from "@app/shared-types";
import { MEAL_TYPES, RECIPE_TAGS } from "@app/shared-types";
/**
* "Vad ska vi äta?" (spec §18) + "Jag är sugen på" (spec §19).
@@ -7,6 +7,9 @@ import { MEAL_TYPES } from "@app/shared-types";
*/
export const whatToEatQuerySchema = z.object({
mealType: z.enum(MEAL_TYPES).default("dinner"),
/** Filtrera kandidater på en recept-tagg (t.ex. "baking" för Baka-fliken)
* i stället för måltidstyp. mealType används fortfarande för poängsättning. */
tag: z.enum(RECIPE_TAGS).optional(),
persons: z.coerce.number().int().min(1).max(20).optional(),
maxMinutes: z.coerce.number().int().min(5).max(600).optional(),
maxCostMinorPerPortion: z.coerce.number().int().min(0).max(100_000).optional(),