Ingredienser: fyllde luckan från 101 till 362 för da/de/es/fi/fr/it/nb/nl/pl/pt
(engelska hade redan alla 362). Nu 3982 översättningar, 11 språk kompletta – en
spansk/tysk/fransk användare ser ingrediensnamn på sitt språk, inte svenska.
Författat av språkexperter per språk, verifierat mot 362-listan + kvalitetskoll.
Recept: 407 recept har 0 översättningar (svensk källa visas). Lade till två
körbara skript för AI-pipelinen (kräver din Gemini-nyckel i workern):
- scripts/translate-recipes.ts [språk|all] – köar TRANSLATE_RECIPE för alla
publicerade recept × språk, idempotent (hoppar redan gjorda).
- scripts/publish-translations.ts [språk|all] – publicerar de utkast som klarat
den inbyggda verifieringen (numbersPreserved/stegantal/confidence); övriga
stannar som utkast för granskning.
Verifierat mot testdatabas: ingredient_translations 3982 rader/11 språk kompletta;
enqueue köar 405 jobb; processor skapar draft_ai+ok; publish publicerar; steg-
översättningar följer med och serveras.
Alla 44 ingredienser utan defaultPriceMinorPerKg har fatt rimliga
schablonpriser (kr/kg) sa det ALLTID finns en prisuppskattning; kvitto-
priser forfinar sen. Verifierat: 0 ingredienser utan pris i DB.
Utokar kock-katalogen fran 10 -> 40 recept (3-5 per kock): Gordon Ramsay,
Jamie Oliver, Nigella Lawson, Yotam Ottolenghi, Marcus Samuelsson, Giada
De Laurentiis, Emeril Lagasse, Ina Garten, Raymond Blanc, Rick Stein.
Kanda ratter (shepherd's pie, sticky toffee, shakshuka, doro wat, svenska
kottbullar, jambalaya, coq au vin, ratatouille, creme brulee, fiskcurry,
moules mariniere m.fl.) - EGNA nyskrivna formuleringar, diskret krediterade
via creatorDisplayName. Ligger bland ovriga recept, lyder diet-/allergi-
filter, sokbara pa kockens namn (aven felstavat via fuzzy-soket).
Verifierat: alla ids finns, alla enheter berakningsbara, seed gron (377
recept), typecheck gron, allergener determiniskt harledda (t.ex.
moules -> blotdjur+mjolk), alla publicerade.
Egna formuleringar av kanda signaturratter (Ramsay, Oliver, Lawson, Ottolenghi,
Samuelsson, De Laurentiis, Lagasse, Garten, Blanc, Stein). Ligger bland alla
andra recept, samma kort/vyer/filter; diskret 'Kalla: <kock>' via
creatorDisplayName, ingen flik/badge. Sokbara pa kocknamn.
Receptnamnet ska beskriva rätten, inte förvaringen. Skolstart-/matlåde-
kopplingen ligger kvar i taggar (skolstart, meal_prep) och beskrivningen.
Slug oförändrad så omseedning uppdaterar receptet på plats.
Ratta slug-bugg: recept-taggen "grillsäsong" matchade aldrig event-sluggen
"grillsasong" (ASCII) sa grillsäsong-knappen visade inget. Nu ratt.
15 nya hogtidsrecept taggade med exakt SE-event-slug: rodbetssallad, rodkal,
senapssill, stekt prinskorv, kokta kraftor med krondill, aioli, ostbricka,
farskpotatis med dill, agghalvor med rakror, rakcocktail, grillspett med
halloumi, grillad kycklingfile, pastasallad i matladan, tillbehor till
surstromming, kryddig kyckling med ris.
Omtaggar befintliga recept till ratt hogtid: vasterbottensostpaj +kraftskiva,
grekisk-sallad +grillsasong, chili/spaghetti +skolstart, chokladtarta
+alla-hjartans-dag, tomatsoppa +halloween, korvgratang +oktoberfest,
halloumiburgare +valborg.
Alla 14 SE-hogtider har nu minst ett korrekt taggat recept. Naring och
enheter ar berakningsbara for alla 74 extrarecept (invarianttest gront,
repo-typecheck gront).
- Sok fungerar nu: what-to-eat tar ?search= och filtrerar recept pa titel/
beskrivning BLAND ALLA recept (t.ex. 'pannkaka' hittar pannkakor), oavsett
vald flik. Sokrutan skickar nu search i stallet for craving.
- Hogtids-/sasongsknapparna (kraftskiva, grill, skolstart) ligger nu direkt
UNDER sokrutan, inte nere bland recept-forslagen.
- Saffransbullar + lussekatter ur 'Frukost' (mealTypes dessert+breakfast ->
dessert). Bakverk hor inte till frukost i Sverige.
- Bort med 'Alla recept & sok'-lanken pa forstasidan och 'Bladdra bland recept'
pa Hemma - allt nas nu via flikarna/soket pa 'Vad ska vi ata'.
Full typecheck gron.
Kategorisering (din notis - bakverk hor till Baka, inte mellanmal):
- Sub-typer bread/bun/pie/cake/cookie i RECIPE_TAGS.
- Bullar/kakor/pajer/chokladbollar -> dessert (inte snack) + sub-tagg; brod
-> breakfast. Befintliga lussekatter/saffransbullar taggas 'bun'.
- Browse: sub-chips under Baka (Brod/Bullar/Paj/Tartor & kakor/Smakakor).
Bladdra pa forstasidan (din onskan):
- Kategori-genvagar pa 'Vad ska vi ata' -> oppnar bladdraren forvald
(/recipes?cat=). recipes.tsx laser ?cat=.
Relevantare 'Vad ska vi ata' (snurrar samma triviala):
- view=pantry -> view=default (tackning vager tungt men inte allenaradande,
ger variation), limit 15 -> 30 (storre pool sa 'Visa fler' upprepar senare).
Felsokning inkopslista:
- Tydligare felmeddelande (HTTP-status vs natverksfel) sa root cause syns.
Full typecheck 20/20, invariant-test gront.
- Ny 'baking'-tagg (RECIPE_TAGS, text[] - ingen migration). Browse-vyn far
en 'Baka'-chip som filtrerar pa taggen; befintliga lussekatter +
saffransbullar taggas ocksa.
- extra-recipes.ts: 16 nya recept som fyller de glesa kategorierna -
4 bak (kanelbullar, kardemummabullar, appelsmulpaj, frukostfrallor),
3 frukost, 3 mellanmal (tomma kategorin -> fylld), 3 efterratt, 3 lunch.
- Endast verifierade canonical-ingredienser + berakningsbara enheter, sa
seed harleder narings-/allergendata utan att krascha (run.ts 675/691).
- Nytt rent invariant-test (ingen DB) kor riktiga computeRecipeNutrition pa
alla 16: id:n finns, naring berakningsbar, inga slug-krockar. 5 tester grona.
- Seed ar additiv (onConflictDoUpdate) - 'pnpm db:seed' lagger till + taggar
om utan dataforlust. Full typecheck 20/20.
- Convert C:\Users\Public\cibello-verified-final-result.json to
packages/database/src/seed/data/verified-recipes.ts (committed, hermetic).
- Replace/extend the 23 placeholder SEED_RECIPES via re-export.
- Upsert on slug with onConflictDoUpdate of ALL recipe fields.
- Hard-reject recipes with unmapped canonical ingredients (0 rejected this batch).
- Derive allergens and compute nutrition per portion from ingredients at seed time.
- Run food-safety lint; auto-patch 8 legacy raw-protein recipes with safe-cooking phrase.
- Resolve 4 suspected title duplicates via variantOfSlug.
- Guard brand name: creatorDisplayName uses BRAND.name, never JSON placeholder.
- Preserve verificationStatus (editorial/verified) and source-registry FKs.
- Extend allergen-invariant test to cover full 246-recipe catalog.
- Stabilise API tests by disabling file parallelism (flakiness from shared DB state).
Refs: seed pipeline, brand-guard, safety canary
- Nya toppnivåblock i /ops/v1/summary: ai_scan, aktivering, engagemang,
betalning, jobb, sakerhet. Alla värden läses från DB/cache; null där data
saknas, inga påhittade värden.
- AI-kostnad i USD mikrocent (native); intäkter fortsatt SEK-öre.
- product_analytics_events är källa för volym, latens, lyckandegrad,
felfrekvens, aktivering, retention och engagemang.
- Nya händelser: scan_started (API) och scan_failed/scan_completed med
latencyMs + felkod (worker). latencyMs flödar nu in i scan_completed.
- Safety canary-jobb varje timme: re-härleder allergener för alla recept,
räknar överifierade publika recept och food-safety-lint; skriver EN rad till
ops_safety_canary. Endpointen läser endast sista raden.
- Cache-refresh-jobb var 60 s skriver hela summariet till Redis; endpointen
serverar cachen med 503 vid cache-miss.
- Bearer-token-skydd med OPS_TOKEN; HTTPS-tvång i produktion; ingen PII.
- Tester för endpoint, auth, cache-miss och safety canary.
- processProactiveTips now iterates all expiring items sorted by urgency and
emits the first candidate with a recipe that clears 7-day dedup.
- Add pt-PT proactive-tip templates; remove en-GB duplicate; parity test
asserts against shared-types SUPPORTED_LANGUAGE_TAGS.
- Serialize DB test setup via turbo dependencies; seed truncates only *_test
DBs, guarded by both --test flag and DB name suffix.
- seed/run.ts uppdaterar nu ALLA canonical-ingrediensfält vid re-seed,
inklusive allergens (tidigare uppdaterades bara nameSv/nutritionPer100).
- seed/run.ts härleder allergener för seed-recept från ALLA ingredienser,
inte bara obligatoriska.
- verification.ts hård-avvisar inkompletta kandidater (saknar titel,
ingredienser, steg, portioner eller tider) som rejected.
- Lägger allergen-invariant-test i @app/recipe-generation som verifierar
att seed-receptens lagrade allergens matchar färsk derivering.
- Allergener omräknade för alla 246 recept; 0 mismatch återstår.
- Raderade 4 trasiga recept + 1 ordningsdubblett tidigare.