- API: översatt title/displayName/toName läggs nu bredvid Sv-fälten i favoriter,
receptvarianter, /scaled, skapar-profiler, topplistor, memory-impact,
substitutions — samt de denormaliserade titlarna (min dag, historik, matlådor,
matlåde-förslag, veckoplan) via nullable recipeId med svensk fallback.
10 endpoints, batchade resolvers (ett anrop per endpoint).
- Mobil: konsumerar de nya fälten med ?? Sv-fallback (swap-meal, sparade recept,
varianter, min dag, logg, matlådor, veckoplan, inköpslista). Hårdkodade
strängar -> t() (kitchen, scan-review, register, recept protein/Skapat av);
decimalkomma -> Intl.NumberFormat. Allergen-etiketter -> t() (+5 nya nycklar).
11 nya nycklar i alla 12 språk.
- i18n-vakt härdad: fångar nu hårdkodad svenska i prop={`...`}-mallliteraler
(blind fläck förr). Verifierat att den fäller men inte ger falska positiv.
- whySv var redan lokaliserad (buildWhy med språktagg) - orörd.
- typecheck grönt (alla paket), vakt grön (603 nycklar).
Co-Authored-By: Claude <noreply@anthropic.com>
- Säsong/högtidschippen på "Vad ska vi äta?" visade marknadens namn på svenska
även för icke-svenska språk (SE-marknadens event saknar nameLocalized). Nu
renderas de via i18n-nyckeln season.<slug> (t med defaultValue -> serverns namn
som fallback för egennamn m.m.). SE-marknadens 14 event översatta i alla 12
språk; egennamn (Navidad, Midsommar, Lucia...) behålls, beskrivande översätts
(Kräftskiva, Skolstart, Grillsäsong...).
- Kok-läget: den boxade ⏱-rutan (såg ut som en knapp/timer och kunde misstas för
en riktig timer) ersatt med en diskret rad "⏱ Ungefär {time}". Döda nycklar
cooking.timer/timerDone/timerRunning borttagna; cooking.timerHint -> approxTime.
- Städat 2 dubblettnycklar i alla 12 locale-filer (mealbox.eatBy, common.remove)
som låg kvar sedan tidigare leveranser (i18next tog sista värdet ändå).
- Vakt + typecheck gröna. 591 nycklar.
Co-Authored-By: Claude <noreply@anthropic.com>
- 💡 why-texten: what-to-eat skickar nu användarens languageTag till motorn;
scoring använder buildWhy(..., ctx.languageTag) i stället för hårdkodat buildWhySv.
WHY_TEMPLATES har redan alla 12 språk – felet var bara att sv-SE var fast.
Default sv-SE = oförändrat beteende (säkert). (Rest: utgår-ingrediensens NAMN
i meningen är fortf. svenskt – motorn har bara svenska namn; noterat.)
- meal-box-förslagens text: whySv-sträng -> useByUrgent-flagga + mealbox.eatBy/ready
i alla 12 språk (klienten renderar via t()).
Co-Authored-By: Claude <noreply@anthropic.com>
- Svepte 51 hårdkodade strängar -> t() över konto, sök/bläddra, sparade recept,
kök, planera, skanna, byt måltid, inköp, minne, cooking, api-fel (+ locLabel/
kategorier via nycklar). 47 nya nycklar, översatta till alla 12 språk.
- NY: apps/mobile/scripts/i18n-check.mjs (i18n:check) – fäller bygget om ett språk
saknar en nyckel, en använd nyckel saknas, eller det finns hårdkodad UI-text.
Wire:ad i CI (.github/workflows/ci.yml) efter typecheck. => 'lägg till språk'
blir: kör vakten, den listar exakt vad som fattas. Aldrig mer leta för hand.
- Prettier-fixade 5 filer från tidigare leveranser så format:check blir grön.
- submit-recipe fri-text-payload + firebase dev-stubs markerade // i18n-ignore.
Co-Authored-By: Claude <noreply@anthropic.com>
Felstavade kocknamn hittar ratt kock: aliaslista (remsey/ramsey -> Gordon
Ramsay) + trigram word_similarity (ramzay/otolengi). Ger nolltraffar ett
'Menade du <term>?'-forslag (tappbart) mot titlar, kocknamn, ingredienser.
Kvitto-skanning (rapporterad krasch 'svar matchar inte schema … invalid value'):
- AI-skan-enheter (kvitto/kyl/maltid) normaliseras nu fore validering:
'st'->COUNT, 'kg'->KILOGRAM, 'forp'/'pase'->PACKAGE osv. Okand enhet -> null
i stallet for att falla hela svaret. Skarpt kvitto-prompt med exakt enhetslista.
17 nya tester bevisar normaliseringen.
Sok pa 'Vad ska vi ata':
- Endast TITELN (inte beskrivningen) -> 'pannkaka' ger inte langre appelkompott
(som bara namnde pannkakor i beskrivningen).
- Stavningstolerant via trigram-similarity: 'pankakor' hittar pannkakor.
Hogtidsknapparna (kraftskiva/grill/jul ...):
- Filtrerar nu pa recept-holidayTag (slug) i stallet for en titelsok som gav
tomt. Har event inga recept an visas ett arligt tomt-lage.
Full typecheck gron, ai-contracts 24 tester grona.
- 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.
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.
- KRITISKT: what-to-eat-anropet hade limit=30 men schemat tillater max 20
-> 400 Bad Request -> tom sida med 'nagot gick fel'. Det var alltsa INTE
uppkopplingen. Andrat till limit=20.
- Kategori-flikarna (Frukost/Lunch/Middag/Mellanmal/Efterratt/Baka) filtrerar
nu recepten PA SAMMA sida i stallet for att navigera till bladdra-vyn.
'Rekommenderat' visar de personliga forslagen som forut.
- ErrorView visar nu riktig HTTP-status (t.ex. [400]) sa fel gar att diagnosa.
- '/recipes' finns kvar via 'Alla recept & sok' for full bladdring + sok.
Mobil 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.