Commit Graph

128 Commits

Author SHA1 Message Date
Claude 2f596060b4 feat(streckkod): okand produkt -> fota forpackning -> spara i delad katalog
Okand streckkod erbjuder nu 'Fota forpackningen' direkt i streckkodsvyn.
Fotot lases av (naring/allergener/innehall) och produkten UPSERTas i den
DELADE products-katalogen kopplat till GTIN (dataSource=user_scanned,
verificationStatus=unverified, createdByUserId=anvandaren) sa nasta person
som skannar samma kod far den direkt. Produkten laggs INTE till i lagret.

Naringsdeklaration-knappen tas bort som egen ingang - flodet vavs in i
streckkodsskanningen. product_package/nutrition_label -> READ_NUTRITION_LABEL
avslutar som 'completed' med result.product (ingen awaiting_confirmation).

- validation: barcode-falt i createScanInput.context
- worker: ny gren i processScanJob som skriver till products + returnerar tidigt
- mobil: inline contributePhoto (fota -> ladda upp -> polla -> visa info)
- scan: ta bort naringsdeklaration-knappen
- i18n: barcode.contributing.* + uppdaterad unknownBody pa 12 sprak

Verifierat: typecheck (validation/worker/api/mobil), worker 23/23, api 104/104,
och repro mot testdatabas (products-upsert, ingen inventory, idempotent aterskann).
2026-08-20 11:57:58 +00:00
Claude 3fa5a878f1 feat(priser): schablonpris pa alla ingredienser (44 saknade)
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.
2026-08-20 01:00:55 +00:00
Claude 0c614e0920 feat(sasong): 13 fler grillsasong- & kraftskiva-recept
Grillsasong (+8): grillad entrecote m. potatisgratang, grillkorv m.
potatissallad, hemgjorda hamburgare, grillad kyckling m. klyftpotatis,
grillspett, majskolv, halloumi, grillad lax. Kraftskiva (+5): toast
skagen, vasterbottenpaj m. kantareller, agghalvor m. rakor, knackebrod
m. vasterbottenost, kraftsallad. Ratt ASCII-slug (grillsasong/kraftskiva).
Verifierat: grillsasong 5->13, kraftskiva 4->9, seed gron (406 recept).
2026-08-20 01:00:55 +00:00
Claude ceceb63e8e fix(veckoplan): byt-ratt-fel, navigera veckor, lagg till maltid manuellt
- Byt rätt gav 'något gick fel': limit=30 översteg schemats tak (20).
  Höjt taket till 50, byt rätt hämtar 40 + sök vilken rätt som helst.
- Veckonavigering: pilarna byter nu VECKA (weekOffset) i stället för att
  bara flytta markerad dag -> går att planera nästa vecka. Titel visar
  veckans datumintervall; bakåt spärras före denna vecka.
- Lägg till måltid: ny POST /v1/week-plans/:id/entries + knapp 'Lägg till
  måltid' (väljer måltidstyp -> receptväljaren i lägg-till-läge) + knapp
  'Planera om veckan'. Går nu att fylla en tom dag igen.
Verifierat: swap 200 (40 varierade), add-entry 201, delete 200, api 104/104.
2026-08-20 00:54:32 +00:00
Claude fbf5c82ccc feat(prenumeration): egna recept endast for betalande kunder - inte trial
communityPublish satts till false aven under trial (ovriga premium-
funktioner ingar fortfarande i provperioden). Endast betalda planer
(household/family/large_household) far skicka in egna recept. Uppdaterat
premium-meddelandet i appen (11 sprak + sv) sa det inte langre antyder
att provperioden lases upp funktionen. Verifierat: subscriptions 10/10,
api 104/104, typecheck gron.
2026-08-19 23:44:08 +00:00
Claude d96b119e67 feat(kockrecept): 16 fler signaturratter (omgang 2, 56 totalt)
Fish and chips, caesarsallad, ugnslax, korv & mos, kikartscurry,
brownies, mascarponepasta, linssallad, aubergine med yoghurt,
jordnotsgryta, lasagne, tomatrisotto, cajunkyckling, parmesankyckling,
fransk loksoppa, fiskbullar - egna formuleringar, diskret krediterade.
Verifierat: ids/enheter ok, seed gron (393 recept), typecheck gron.
2026-08-19 23:33:32 +00:00
Claude 5867a95d64 fix(byt-ratt): bredda urvalet - alla lampliga ratter, inte bara det man har hemma
Ny 'swap'-vy i rekommendationsmotorn med lag tackningsvikt (30->6) sa
betyg/smak/ratt maltidstyp styr i stallet for 'har hemma'. Byt rätt-
skarmen anropar view=swap, kringgar vardags-tidsgransen och hojer limit
till 20. Loser: bara ~5 val vid byte.
2026-08-19 23:33:32 +00:00
Claude e3e3fdfd73 feat(kockrecept): 30 fler signaturratter fran 10 kockar (egna formuleringar)
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.
2026-08-19 22:06:51 +00:00
Claude 38c882e743 feat(katalog): utoka ingredienskatalogen 145 -> 362 (bred tackning)
217 nya vanliga svenska livsmedel med standardiserade schablonvarden per
100 g (seed_estimate): mejeri/ostar, kott & fagel (styckdetaljer, farser,
korv), chark, fisk & skaldjur, mycket gronsaker/frukt/bar, baljvaxter,
spannmal/pasta, brod, bakning, notter/fron, oljor/vinager/saser, torkade
kryddor samt dryck. Ratt enhet + densitet/styckvikt, korrekta allergener
och kost-/religionsflaggor. Verifierat: seed gron (362), typecheck gron,
Atwater-rimlighetskoll (avvikelser bara dar fiber/syror forklarar dem).
2026-08-19 21:38:30 +00:00
Claude 2a7f366f6a feat(kockrecept): 10 kockars signaturratter, diskret krediterade
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.
2026-08-19 20:18:03 +00:00
Claude 0571234871 fix(recept): döp om 'Pastasallad i matlådan' → 'Matig pastasallad med fetaost'
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.
2026-08-19 15:11:30 +00:00
Claude 2e702d6582 fix(rekommendationer): vardagens tidsgräns gömmer inte längre högtids-/bakrecept
Buggen: när användaren uttryckligen valde en högtid (t.ex. Kräftskiva), en
tagg (Baka) eller sökte, hårdfiltrerade scoreCandidate bort alla recept vars
totalTimeMinutes översteg hushållets maxCookingMinutesWeekday (parts.time=-1,
rankAll släpper <0). De smala högtidspoolerna kollapsade då till 0-1 recept
trots att flera fanns korrekt taggade.

Reproducerat mot riktig seedad databas: med en 20-min vardagsgräns gav
kräftskiva 2, grillsäsong 2, skolstart 0, bak nästan tomt. Med fixen ger de
4, 5, 3 respektive 18 – medan standardvyn "Rekommenderat" fortfarande
respekterar tidsgränsen (3 snabba middagar).

Fix: uttrycklig avsikt (holiday/tag/search) förbigår vardagens tidsgräns –
tiden blir mjuk rankning i stället för hårt filter. En uttrycklig q.maxMinutes
i förfrågan respekteras fortfarande. Regressionstest låser mekanismen.
2026-08-19 15:10:04 +00:00
Claude d267effd6c fix(hogtider): alla svenska hogtider visar relevanta recept
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).
2026-08-19 14:39:32 +00:00
Claude de279a7c01 fix(skan+sok): robust kvitto-enheter, titel-/fuzzy-sok, hogtidsfilter
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.
2026-08-19 14:09:45 +00:00
Claude dc5df13f25 fix(vad-ska-vi-ata): fungerande titelsok, hogtider under sokrutan, ratta bakverk, ta bort separata bladdra-lankar
- 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.
2026-08-19 12:58:59 +00:00
Claude 3d8bd68fe0 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.
2026-08-19 12:29:21 +00:00
Claude e25bdca4fa feat(recept): stor pafyllning i alla kategorier (+30 recept, totalt 59 extra)
Bred handskriven batch sa alla kategorier ar valfyllda (var extremt
middagstung forut):
- Frukost: omelett, amerikanska pannkakor, yoghurt m granola, avokadomacka,
  blabarssmoothie.
- Lunch: broccolisoppa, grekisk sallad, kycklingwrap, tomat-linssoppa,
  varm skinkmacka.
- Mellanmal: hummus, gronsaksstavar m dipp, notmix, fruktspett.
- Efterratt: chokladdoppade jordgubbar, hallonsorbet, chokladpudding,
  appelkompott, bar m vaniljyoghurt.
- Bak (sub-typer): vitt formbrod + scones (bread), havreflarn (cookie),
  blabarsmuffins + chokladtarta (cake), rabarberpaj (pie).
- Middag: ugnsbakad lax, kremig kycklinggryta, pastagratang, fiskgryta m kokos,
  korv-potatisgratang.

Alla med verifierade ingredienser + berakningsbara enheter + ratt kategori.
Ravaror med genomstekning/genomkokning har explicit matsakerhetssteg.
Invariant-testet kor riktig computeRecipeNutrition pa alla 59 (grona).
Typecheck gront.
2026-08-19 01:00:29 +00:00
Claude 242e09d59b fix(recept): bakverk ur mellanmal + sub-kategorier, bladdra pa forstasidan, relevantare forslag
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.
2026-08-19 00:20:30 +00:00
Claude 654174e188 feat(recept): bredda ingredienskatalogen (+25) + 13 nya recept, ratta kategorier
- Katalog 120 -> 145 ingredienser: vaniljsocker, bakpulver, bikarbonat, kakao,
  mork choklad, flor-/parlsocker, kokos, russin, blabar, hallon, paron, apelsin,
  rabarber, valnot, hasselnot, blomkal, sotpotatis, gronkal, vitkal, haricots
  verts, tonfisk, couscous, keso, kalkon. Rimliga seed_estimate-varden.
- 13 nya recept (nu mojliga tack vare katalogen): kladdkaka, chokladbollar,
  blabarssmulpaj, sockerkaka, morotskaka, vaniljbullar, fruktsallad,
  rabarberkompott, keso m. bar, tonfiskrora, couscoussallad, blomkalssoppa,
  ugnsbakad sotpotatis. Totalt 29 extrarecept.
- Rattade kategorier (din notis): risgrynsgrot -> frukost (+jul), inte efterratt;
  kanel-/kardemummabullar -> mellanmal (inte efterratt).
- Endast verifierade ingredienser + berakningsbara enheter. Invariant-testet
  kor riktiga computeRecipeNutrition pa alla 29 (grona). Typecheck grront.
2026-08-18 23:50:23 +00:00
Claude 100d70dc2d feat(recept): Baka-kategori + 16 nya redaktionella recept
- 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.
2026-08-18 23:35:47 +00:00
Claude 2587ff539b feat(diet): lagg till nordisk/carnivore/paleo + LCHF som matvanor med mjuk rankning
- DIET_PATTERNS: +nordic, +carnivore, +paleo (migration 0029). Ingen separat
  "lchf" - LCHF tacks av befintliga "low_carb" for att undvika dubblett med
  keto/low_carb. UI visar low_carb med etiketten "LCHF".
- Mobil onboarding + profil: 9 rena val (allatare..carnivore), 12 sprak.
- recommendation-engine: ny mjuk dietAffinity-poangterm (0-1, neutral 0.5).
  Rankar recept mot matvanan - ALDRIG hart filter (uteslutande matvanor,
  religion, allergener hanteras redan deterministiskt i sakerhetsfiltret).
  low_carb/keto: lag kolhydrat. carnivore: hog protein + lag kolhydrat.
  paleo: glutenfri/laktosfri-proxyer. nordic: svenskt/nordiskt kok + sasong.
- 6 nya tester (35 grona). Full typecheck 20/20 + mobil gron.
2026-08-18 23:03:21 +00:00
Claude ee5eb32e09 chore(modell): rikta ALLT mot gemini-3.1-flash-lite + fixa kostnadsberakning
Koden/docs pastod overallt gemini-3.5-flash-lite fast .env kor 3.1. Nu enhetligt
3.1 i .env.example, config.ts-default, gemini.ts-default, tester, eval och docs
(09 + 10). Dessutom en RIKTIG bugg: estimateCostUsd rakna pa 3.5-priser
($0,30/$2,50) medan vi kor 3.1 -> overskattade spend och troffade budgetlarmet
for tidigt. Nu 3.1-priser ($0,25/$1,50). docs/10 helt omraknad pa 3.1 (per
uppgift, per anvandare, skala, 100k-trial-scenariot). Referenslinje kvar som
visar 3.5-priset for att motivera valet.
2026-08-18 20:16:37 +00:00
Claude b24b987d29 fix(skann): begripliga mangder – vikt/volym annars antal, aldrig "0,6 paket"
Prompten bad modellen uppskatta *andel av en forpackning* (0.0-1.0), vilket gav
nonsens som "keso 0,8 paket", "smetana 0,6 paket", "matrester 0,5 paket". Ny
ordning enligt Johans onskan: 1) las vikt/volym om den syns (500 g, 4 dl) 2)
annars rakna hela forpackningar som heltal + "st" 3) oppnad vara: uppskatta
kvarvarande i dl/g 4) vet ej -> 1 st. Aldrig decimaler av paket. La ocksa till
regel: samma vara i flera foton listas EN gang. promptVersion -> gemini-fridge-v4.
2026-08-18 18:44:36 +00:00
Claude 3942890d6f fix(matlager): stada upp – flytta lager till egen vy, gruppera per plats, fixa limit-bugg
- BUGG: kitchen hamtade ?limit=500 men schemat tillat max 200 -> 400-fel nar man
  gick in i matlager / tryckte "+N till". Hojer inventoryQuerySchema.limit till 500.
- Hem: tar bort den roriga inline-listan (matlager lag kvar under Hemma). Ersatts
  med ett "Matlager"-kort med genvagsknappar per plats (Kyl/Frys/Skafferi) + "Allt".
- Matlager-skarmen: grupperad per plats med rubrik + antal, sorterad pa namn,
  plats-filter via chips ELLER djuplank (?loc=), sok, markera flera, massradering.
- Byter skarmtitel "Ditt kok" -> "Matlager".
- Fixar aven en latent hooks-ordningsbugg i home (useFocusEffect efter early return).
2026-08-18 16:02:57 +00:00
Claude 684743ae95 fix(inventory): robustare dedup vid skann + borttag pa startsidan
Dedup vid /v1/scans/:id/confirm matchade bara pa exakt (skiftlageskansligt)
namn eller identiskt katalog-id, sa omfotografering av samma hylla skapade
dubbletter. Ny normalizeItemName (gemener, accenter, storlek bort; behaller
fetthalt-siffror) + matchning pa katalog-id ELLER normaliserat namn mot
aktivt hushallslager.

Mobil: 'Ta bort' fanns bara i Ditt kok. Lade borttag pa startsidans
lager-rader (befintlig DELETE /v1/inventory/items/:id).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WZdew6cWn1MeHqoYWFfxzo
2026-08-18 14:44:03 +00:00
Claude 4ca567bba3 fix(ai): balansera datum-prompt – tolka datum med dagens datum som kontext
Forra andringen blev for strikt: modellen nollade ALLA datum eftersom svenska
stamplar (DDMMYY/YYMMDD) alltid ar "tvetydiga". Nu far modellen dagens datum
och tolkar 2-siffriga artal som narmaste rimliga ar runt idag (04-09-26 ->
2026-09-04, inte 2024). Kod-sparren isPlausibleFoodDate star kvar som skydd mot
grova fel. promptVersion -> gemini-fridge-v3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WZdew6cWn1MeHqoYWFfxzo
2026-08-18 11:42:30 +00:00
Claude 5cf9f8ab0d fix(ai): las aldrig gissade utgangsdatum – skarpt prompt + rimlighetssparr
Gemini gissade fel artal pa kryptiska tryckstamplar (t.ex. "2024" pa en farsk
gradde) vilket kan trigga falska "utgangen"-varningar. Tva lager:
- Prompt: modellen far aldrig gissa artal, returnerar null vid tvetydiga/
  kryptiska koder (buildFridgePrompt + buildExpiryPrompt).
- Kod: ny isPlausibleFoodDate() nollar orimligt gamla/framtida datum i
  toDetectedItems. Hellre inget datum an ett felaktigt (spec §13).
promptVersion -> gemini-fridge-v2. Tester 7/7 grona.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WZdew6cWn1MeHqoYWFfxzo
2026-08-18 11:29:11 +00:00
Claude e66d9aee72 fix(inventory): sluta gissa utgangsdatum + las 2-siffriga bast-fore-stamplar
CI / Typecheck, test & build (push) Failing after 46s
BUG: forseglad vara utan tryckt datum fick fabricerat utgang (purchasedAt + shelfLifeGuidance, som ar hallbarhet EFTER oppning) -> falska 'gar ut snart'-varningar OCH gav sken av att datum inte lastes. Nu: ingen data -> unknown (hedrar appens egen princip 'aldrig gissa'). parseDate laser aven YY-MM-DD/YYMMDD/YYYYMMDD (svenska stamplar) som forr slangdes. Regressionstester tillagda. 36/36 gront.
2026-08-17 19:22:54 +00:00
Claude 0ff3396d6e fix(cost): korrekt Gemini 3.5 Flash Lite priser i kod + docs
gemini.ts estimateCostUsd: 2.5-Flash-priser (0.075/0.30) -> 3.5-Flash-Lite standard (0.30/2.50). Pessimistiska per-bild-estimat 0.0015->0.004, OCR 0.001->0.002. docs/10: Claude-modelltabell + kostnad-per-uppgift omskrivna till Gemini. 36/36 gront.
2026-08-17 18:41:45 +00:00
Claude 75591bb294 fix(subscriptions): free-niva 5 AI-skanningar (beslut Johan)
Free 10->5 i kod, test, paywall-copy (12 sprak) och docs. Full trappa: free 5 / trial 14d 25 skann / premium 100/200/400.
2026-08-17 17:34:55 +00:00
Claude 88876a24b7 fix(subscriptions): trial 14 dagar konsekvent i UI/docs/legal/butik
TRIAL_DAYS var redan 14 i koden men auth.trialNote (12 sprak), butiksmetadata, juridik-utkast, API-ref, exec-summary och UX-doc sa 7. Nu 14 overallt. Rorde EJ icke-trial 7-dagar (inbjudningslank, backup, S3-lifecycle, grace, retention). Beslut: Johan (battre onboarding).
2026-08-17 17:04:00 +00:00
Claude cacca3481c fix(subscriptions): free-niva 10 AI-skanningar/man (matcha paywall + spec §46)
Koden gav 5 men paywall-copy (12 sprak), butiksmetadata (docs/22) och subscriptions-testet sager 10. Enforcement (canUseAiScan) laser konstanten dynamiskt sa en rad racker. Beslut bekraftat av Johan: free=10.
2026-08-17 16:39:52 +00:00
Sven (AAMOS AI) 260f816c83 feat(recommendations): MIKRO MEAL-1 måltids-lämplighet i rankningen (nedvikta frukost/dessert vid huvudmåltid) 2026-08-17 20:37:47 +07:00
Sven (AAMOS AI) ec0b64efe8 feat(recipes): MIKRO KRAM-1 variera Krämig-titlar (behåll ~4 genuint krämiga) 2026-08-17 19:34:42 +07:00
Sven (AAMOS AI) 97b5baa367 feat(weekplan): MIKRO WEEK-2 dagliga måltidsslots (vardag middag, helg lunch+middag) 2026-08-17 19:17:27 +07:00
Sven (AAMOS AI) 305b6d1886 feat(seed): add aliases for milk, yoghurt, crème fraiche and carrot 2026-08-16 21:23:07 +07:00
Sven (AAMOS AI) 5ad6bf6f60 feat(seed): make sourdough bread and cardamom computable (gramsPerPiece/density) 2026-08-16 21:11:48 +07:00
Sven (AAMOS AI) 70021ebdf2 feat(seed): add pantry ingredients (balsamic, strawberry jam, fish/lobster stock, cornichons) + gramsPerPiece for dill/parsley 2026-08-16 21:01:08 +07:00
Sven (AAMOS AI) c0a15bb1b5 feat: kitchen screen, scan dedup, gemini-3.5-flash-lite, seed grapes/beetroot/pea shoots 2026-08-16 20:13:49 +07:00
Sven (AAMOS AI) 3b313135d4 feat(db): firebaseUid-kolumn på users för Firebase-kundidentitet (AUTH-1) 2026-08-15 19:32:03 +07:00
Sven (AAMOS AI) 92b1ee54c6 content(seed): 5 svenska högtidsrecept (gravlax, toast skagen, julskinka, lussekatter, saffransbullar) (MIKRO INNEHÅLL-3) 2026-08-15 18:36:31 +07:00
Sven (AAMOS AI) 06891522d9 content(seed): kanoniska högtidsingredienser (saffran/jäst/skinka/kräftor m.fl.) (MIKRO INNEHÅLL-2)
CI / Typecheck, test & build (push) Failing after 48s
2026-08-14 23:21:37 +07:00
Sven (AAMOS AI) 14a4fd85aa content(seed): tagga köttbullar (jul) + sill (jul/påsk) för högtidssök (MIKRO INNEHÅLL-1)
CI / Typecheck, test & build (push) Failing after 49s
2026-08-14 23:11:37 +07:00
Sven (AAMOS AI) a11267edac feat(seed): GB/US/CA-högtider inkl. Thanksgiving-datum (MIKRO C4)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:34:31 +07:00
Sven (AAMOS AI) fe71bd0db6 feat(seed): ES/IT/PT/PL-högtider (MIKRO C3)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:26:35 +07:00
Sven (AAMOS AI) f0488eefd6 feat(seed): DE/FR/NL-högtider (MIKRO C2)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 22:19:04 +07:00
Sven (AAMOS AI) cb40170171 feat(seed): nordiska högtider (NO/DK/FI/IS) + nameLocalized (MIKRO C1)
CI / Typecheck, test & build (push) Failing after 43s
2026-08-14 22:04:15 +07:00
Sven (AAMOS AI) 61b9198d51 feat(season): nameLocalized-kolumn för högtidsnamn per marknad (MIKRO B)
CI / Typecheck, test & build (push) Failing after 44s
2026-08-14 21:56:03 +07:00
Sven (AAMOS AI) 19af7e0720 feat(season): easter-offset + nth-weekday datumregler för marknads-högtider (MIKRO A)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 21:46:17 +07:00
Sven (AAMOS AI) 33c72ddacd fix(reco): fria sökord + mjuk-filter så råvaru-sökning (kyckling) ger rätt recept (MIKRO 60)
CI / Typecheck, test & build (push) Failing after 42s
2026-08-14 20:28:56 +07:00