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.
This commit is contained in:
Claude
2026-08-18 23:50:23 +00:00
parent 100d70dc2d
commit 654174e188
3 changed files with 878 additions and 31 deletions
@@ -23,7 +23,7 @@ export const EXTRA_RECIPES: SeedRecipe[] = [
descriptionSv:
"Mjuka, saftiga bullar med smörig kanelfyllning den självklara fikan att baka en söndag.",
cuisine: "swedish",
mealTypes: ["snack", "dessert"],
mealTypes: ["snack"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["oven"],
equipment: ["oven"],
@@ -74,7 +74,7 @@ export const EXTRA_RECIPES: SeedRecipe[] = [
titleSv: "Kardemummabullar",
descriptionSv: "Doftande bullar där kardemumman får ta plats både i degen och i fyllningen.",
cuisine: "swedish",
mealTypes: ["snack", "dessert"],
mealTypes: ["snack"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["oven"],
equipment: ["oven"],
@@ -439,9 +439,9 @@ export const EXTRA_RECIPES: SeedRecipe[] = [
slug: "risgrynsgrot",
titleSv: "Risgrynsgröt",
descriptionSv:
"Krämig risgrynsgröt kokt på mjölk, serverad med kanel, socker och en klick smör.",
"Krämig risgrynsgröt kokt på mjölk, serverad med kanel och socker. Klassisk frukost och självklar på julbordet.",
cuisine: "swedish",
mealTypes: ["dessert", "breakfast"],
mealTypes: ["breakfast"],
tags: ["vegetarian", "kid_friendly", "budget"],
methods: ["stovetop"],
equipment: ["stove"],
@@ -453,7 +453,7 @@ export const EXTRA_RECIPES: SeedRecipe[] = [
mealPrepFriendly: true,
freezerFriendly: false,
peakSeasons: ["winter"],
holidayTags: [],
holidayTags: ["jul"],
variantType: "standard",
dnaCarb: "rice_white",
dnaVegetables: [],
@@ -679,4 +679,562 @@ export const EXTRA_RECIPES: SeedRecipe[] = [
{ text: "Toppa salladen med den varma halloumin och servera direkt." },
],
},
// ---------------------------------------------------------------------------
// BAK & EFTERRÄTT (möjliga tack vare den breddade katalogen)
// ---------------------------------------------------------------------------
{
slug: "kladdkaka",
titleSv: "Kladdkaka",
descriptionSv:
"Seg, kladdig chokladkaka med krispig yta klar på en kvart plus ugnstid. Godast lite kladdig i mitten.",
cuisine: "swedish",
mealTypes: ["dessert"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "beginner",
prepMin: 10,
cookMin: 20,
portions: 8,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: true,
peakSeasons: [],
holidayTags: ["fika"],
variantType: "standard",
dnaCarb: "flour_wheat",
dnaVegetables: [],
dnaFlavor: ["sweet", "chocolate"],
verificationStatus: "editorial",
ingredients: [
{ ing: "butter", nameSv: "Smör", qty: 100, unit: "GRAM", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 250, unit: "GRAM", optional: false },
{ ing: "egg", nameSv: "Ägg", qty: 2, unit: "COUNT", optional: false },
{ ing: "flour_wheat", nameSv: "Vetemjöl", qty: 120, unit: "GRAM", optional: false },
{ ing: "cocoa", nameSv: "Kakao", qty: 40, unit: "GRAM", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
{ ing: "salt", nameSv: "Salt", qty: 0.5, unit: "TEASPOON", optional: false },
],
steps: [
{ text: "Smält smöret och låt svalna något. Vispa ihop socker och ägg." },
{
text: "Rör ner mjöl, kakao, vaniljsocker och salt och blanda i det smälta smöret till en slät smet.",
},
{ text: "Häll smeten i en smord och bröad form.", tip: "Använd en form på cirka 24 cm." },
{
text: "Grädda mitt i ugnen tills ytan stelnat men mitten fortfarande är kladdig, cirka 1820 minuter. Låt kallna helt innan servering.",
temperatureC: 175,
},
],
},
{
slug: "chokladbollar",
titleSv: "Chokladbollar",
descriptionSv:
"Klassiska, snabba chokladbollar rullade i kokos inget bak, bara att röra ihop.",
cuisine: "swedish",
mealTypes: ["snack"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["no_cook"],
equipment: [],
difficulty: "beginner",
prepMin: 15,
cookMin: 0,
portions: 20,
spiceLevel: 0,
mealPrepFriendly: true,
freezerFriendly: true,
peakSeasons: [],
holidayTags: ["fika"],
variantType: "standard",
dnaCarb: "oats",
dnaVegetables: [],
dnaFlavor: ["sweet", "chocolate"],
verificationStatus: "editorial",
ingredients: [
{ ing: "oats", nameSv: "Havregryn", qty: 300, unit: "GRAM", optional: false },
{ ing: "butter", nameSv: "Smör", qty: 100, unit: "GRAM", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 100, unit: "GRAM", optional: false },
{ ing: "cocoa", nameSv: "Kakao", qty: 30, unit: "GRAM", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
{ ing: "desiccated_coconut", nameSv: "Kokosflingor", qty: 50, unit: "GRAM", optional: false },
],
steps: [
{ text: "Rör ihop mjukt smör, socker, kakao och vaniljsocker till en slät smet." },
{ text: "Blanda i havregrynen och arbeta ihop till en fast massa." },
{ text: "Rulla bollar och rulla dem i kokos. Låt stelna i kylen minst 30 minuter." },
],
},
{
slug: "blabarssmulpaj",
titleSv: "Blåbärssmulpaj",
descriptionSv:
"Söta blåbär under ett gyllene smul av smör och havregryn sommarens självklara paj.",
cuisine: "swedish",
mealTypes: ["dessert"],
tags: ["baking", "vegetarian"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "beginner",
prepMin: 15,
cookMin: 25,
portions: 6,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: true,
peakSeasons: ["summer"],
holidayTags: [],
variantType: "standard",
dnaCarb: "oats",
dnaVegetables: [],
dnaFlavor: ["sweet", "fruity"],
verificationStatus: "editorial",
ingredients: [
{ ing: "blueberry", nameSv: "Blåbär", qty: 500, unit: "GRAM", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 80, unit: "GRAM", optional: false },
{ ing: "butter", nameSv: "Smör", qty: 100, unit: "GRAM", optional: false },
{ ing: "flour_wheat", nameSv: "Vetemjöl", qty: 150, unit: "GRAM", optional: false },
{ ing: "oats", nameSv: "Havregryn", qty: 80, unit: "GRAM", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
],
steps: [
{ text: "Fördela blåbären i en smord form och strö över hälften av sockret." },
{
text: "Nyp ihop smör, mjöl, havregryn, vaniljsocker och resten av sockret till ett grovt smul.",
},
{
text: "Fördela smulet över bären och grädda mitt i ugnen tills gyllene, cirka 25 minuter.",
temperatureC: 200,
},
{ text: "Servera ljummen med vispad grädde eller vaniljyoghurt." },
],
},
{
slug: "sockerkaka",
titleSv: "Sockerkaka",
descriptionSv:
"Luftig, saftig sockerkaka den enklaste kakan att baka och alltid lika uppskattad till fikat.",
cuisine: "swedish",
mealTypes: ["snack"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "beginner",
prepMin: 15,
cookMin: 40,
portions: 10,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: true,
peakSeasons: [],
holidayTags: ["fika"],
variantType: "standard",
dnaCarb: "flour_wheat",
dnaVegetables: [],
dnaFlavor: ["sweet", "vanilla"],
verificationStatus: "editorial",
ingredients: [
{ ing: "egg", nameSv: "Ägg", qty: 3, unit: "COUNT", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 200, unit: "GRAM", optional: false },
{ ing: "flour_wheat", nameSv: "Vetemjöl", qty: 180, unit: "GRAM", optional: false },
{ ing: "baking_powder", nameSv: "Bakpulver", qty: 10, unit: "GRAM", optional: false },
{ ing: "butter", nameSv: "Smör", qty: 100, unit: "GRAM", optional: false },
{ ing: "milk_3", nameSv: "Mjölk", qty: 1, unit: "DECILITER", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
],
steps: [
{ text: "Vispa ägg och socker riktigt pösigt och ljust." },
{ text: "Smält smöret tillsammans med mjölken och låt svalna något." },
{
text: "Vänd ner mjöl, bakpulver och vaniljsocker i äggsmeten och rör sedan i smör och mjölk.",
},
{
text: "Häll smeten i en smord och bröad sockerkaksform och grädda i nedre delen av ugnen tills en sticka kommer ut torr, cirka 40 minuter.",
temperatureC: 175,
},
],
},
{
slug: "morotskaka",
titleSv: "Morotskaka",
descriptionSv: "Saftig, kryddig morotskaka med valnötter mumsig till kaffet.",
cuisine: "swedish",
mealTypes: ["dessert"],
tags: ["baking", "vegetarian"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "medium",
prepMin: 20,
cookMin: 35,
portions: 12,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: true,
peakSeasons: [],
holidayTags: ["fika"],
variantType: "standard",
dnaCarb: "flour_wheat",
dnaVegetables: ["carrot"],
dnaFlavor: ["sweet", "cinnamon", "nutty"],
verificationStatus: "editorial",
ingredients: [
{ ing: "carrot", nameSv: "Morot", qty: 4, unit: "COUNT", optional: false },
{ ing: "egg", nameSv: "Ägg", qty: 3, unit: "COUNT", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 200, unit: "GRAM", optional: false },
{ ing: "rapeseed_oil", nameSv: "Rapsolja", qty: 1.5, unit: "DECILITER", optional: false },
{ ing: "flour_wheat", nameSv: "Vetemjöl", qty: 200, unit: "GRAM", optional: false },
{ ing: "baking_powder", nameSv: "Bakpulver", qty: 10, unit: "GRAM", optional: false },
{ ing: "cinnamon", nameSv: "Kanel", qty: 2, unit: "TEASPOON", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
{ ing: "walnut", nameSv: "Valnötter", qty: 75, unit: "GRAM", optional: true },
],
steps: [
{ text: "Riv morötterna fint. Vispa ägg, socker och olja pösigt." },
{
text: "Blanda i mjöl, bakpulver, kanel och vaniljsocker och rör sedan ner morötter och hackade valnötter.",
},
{
text: "Häll smeten i en smord form och grädda mitt i ugnen tills en sticka kommer ut torr, cirka 35 minuter.",
temperatureC: 175,
},
],
},
{
slug: "vaniljbullar",
titleSv: "Vaniljbullar",
descriptionSv: "Mjuka bullar med vaniljfyllning och pärlsocker ett annat namn på söndagsmys.",
cuisine: "swedish",
mealTypes: ["snack"],
tags: ["baking", "vegetarian", "kid_friendly"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "medium",
prepMin: 45,
cookMin: 12,
portions: 24,
spiceLevel: 0,
mealPrepFriendly: true,
freezerFriendly: true,
peakSeasons: [],
holidayTags: ["fika"],
variantType: "standard",
dnaCarb: "flour_wheat",
dnaVegetables: [],
dnaFlavor: ["sweet", "vanilla", "buttery"],
verificationStatus: "editorial",
ingredients: [
{ ing: "flour_wheat", nameSv: "Vetemjöl", qty: 650, unit: "GRAM", optional: false },
{ ing: "milk_3", nameSv: "Mjölk", qty: 3, unit: "DECILITER", optional: false },
{ ing: "yeast_fresh", nameSv: "Jäst", qty: 25, unit: "GRAM", optional: false },
{ ing: "butter", nameSv: "Smör", qty: 175, unit: "GRAM", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 150, unit: "GRAM", optional: false },
{ ing: "cardamom", nameSv: "Kardemumma", qty: 2, unit: "GRAM", optional: false },
{ ing: "salt", nameSv: "Salt", qty: 1, unit: "TEASPOON", optional: false },
{ ing: "egg", nameSv: "Ägg", qty: 1, unit: "COUNT", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 20, unit: "GRAM", optional: false },
{ ing: "pearl_sugar", nameSv: "Pärlsocker", qty: 30, unit: "GRAM", optional: true },
],
steps: [
{
text: "Smält 75 g smör, rör ner mjölken och värm till fingervarmt. Lös upp jästen i vätskan.",
},
{
text: "Blanda i hälften av sockret, kardemumma, salt och mjölet. Arbeta degen smidig och låt jäsa 40 minuter.",
},
{
text: "Kavla ut, bred på resten av det mjuka smöret och strö över resten av sockret blandat med vaniljsocker.",
},
{ text: "Rulla ihop, skär 24 bullar och jäs 30 minuter till." },
{
text: "Pensla med uppvispat ägg, strö över pärlsocker och grädda gyllenbruna mitt i ugnen.",
temperatureC: 225,
},
],
},
// ---------------------------------------------------------------------------
// EFTERRÄTT & FRUKOST/MELLANMÅL (fler alternativ)
// ---------------------------------------------------------------------------
{
slug: "fruktsallad",
titleSv: "Fruktsallad",
descriptionSv: "Fräsch fruktsallad med äpple, päron, apelsin och blåbär nyttig och snabb.",
cuisine: "international",
mealTypes: ["dessert", "snack"],
tags: ["vegan", "kid_friendly", "quick"],
methods: ["no_cook"],
equipment: [],
difficulty: "beginner",
prepMin: 10,
cookMin: 0,
portions: 4,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: false,
peakSeasons: [],
holidayTags: [],
variantType: "standard",
dnaVegetables: [],
dnaFlavor: ["fruity", "fresh", "sweet"],
verificationStatus: "editorial",
ingredients: [
{ ing: "apple", nameSv: "Äpple", qty: 1, unit: "COUNT", optional: false },
{ ing: "pear", nameSv: "Päron", qty: 1, unit: "COUNT", optional: false },
{ ing: "orange", nameSv: "Apelsin", qty: 1, unit: "COUNT", optional: false },
{ ing: "banana", nameSv: "Banan", qty: 1, unit: "COUNT", optional: false },
{ ing: "blueberry", nameSv: "Blåbär", qty: 100, unit: "GRAM", optional: false },
],
steps: [
{ text: "Tärna äpple, päron och banan. Skala och dela apelsinen i bitar." },
{
text: "Blanda frukten med blåbären och pressa gärna över lite apelsinsaft. Servera direkt.",
},
],
},
{
slug: "rabarberkompott",
titleSv: "Rabarberkompott",
descriptionSv: "Syrlig-söt rabarberkompott god till gröt, yoghurt eller glass.",
cuisine: "swedish",
mealTypes: ["dessert"],
tags: ["vegan", "quick"],
methods: ["stovetop"],
equipment: ["stove"],
difficulty: "beginner",
prepMin: 5,
cookMin: 15,
portions: 4,
spiceLevel: 0,
mealPrepFriendly: true,
freezerFriendly: true,
peakSeasons: ["spring", "summer"],
holidayTags: [],
variantType: "standard",
dnaVegetables: [],
dnaFlavor: ["fruity", "tart", "sweet"],
verificationStatus: "editorial",
ingredients: [
{ ing: "rhubarb", nameSv: "Rabarber", qty: 500, unit: "GRAM", optional: false },
{ ing: "sugar", nameSv: "Strösocker", qty: 100, unit: "GRAM", optional: false },
{ ing: "vanilla_sugar", nameSv: "Vaniljsocker", qty: 10, unit: "GRAM", optional: false },
],
steps: [
{ text: "Skölj och skär rabarbern i bitar." },
{ text: "Lägg rabarber, socker, vaniljsocker och en skvätt vatten i en kastrull." },
{
text: "Sjud under lock tills rabarbern faller sönder, cirka 1015 minuter. Servera ljummen eller kall.",
},
],
},
{
slug: "keso-med-bar-och-notter",
titleSv: "Keso med bär och nötter",
descriptionSv: "Proteinrik frukost eller mellanmål: krämig keso med bär, valnötter och honung.",
cuisine: "international",
mealTypes: ["breakfast", "snack"],
tags: ["vegetarian", "high_protein", "quick"],
methods: ["no_cook"],
equipment: [],
difficulty: "beginner",
prepMin: 3,
cookMin: 0,
portions: 1,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: false,
peakSeasons: [],
holidayTags: [],
variantType: "standard",
dnaVegetables: [],
dnaFlavor: ["creamy", "fruity", "nutty"],
verificationStatus: "editorial",
ingredients: [
{ ing: "cottage_cheese", nameSv: "Keso", qty: 200, unit: "GRAM", optional: false },
{ ing: "blueberry", nameSv: "Blåbär", qty: 75, unit: "GRAM", optional: false },
{ ing: "raspberry", nameSv: "Hallon", qty: 50, unit: "GRAM", optional: true },
{ ing: "walnut", nameSv: "Valnötter", qty: 20, unit: "GRAM", optional: false },
{ ing: "honey", nameSv: "Honung", qty: 15, unit: "GRAM", optional: true },
],
steps: [
{ text: "Lägg upp keson i en skål." },
{ text: "Toppa med blåbär, hallon, hackade valnötter och en skvätt honung." },
],
},
// ---------------------------------------------------------------------------
// LUNCH & MIDDAG (mer variation)
// ---------------------------------------------------------------------------
{
slug: "tonfiskrora",
titleSv: "Tonfiskröra på macka",
descriptionSv: "Snabb och matig tonfiskröra med majs och rödlök god på rostat bröd.",
cuisine: "international",
mealTypes: ["lunch"],
tags: ["high_protein", "quick", "budget"],
methods: ["no_cook"],
equipment: [],
difficulty: "beginner",
prepMin: 10,
cookMin: 0,
portions: 2,
spiceLevel: 0,
mealPrepFriendly: false,
freezerFriendly: false,
peakSeasons: [],
holidayTags: [],
variantType: "standard",
dnaProtein: "tuna_canned",
dnaVegetables: [],
dnaFlavor: ["savory", "fresh"],
verificationStatus: "editorial",
ingredients: [
{ ing: "tuna_canned", nameSv: "Tonfisk", qty: 200, unit: "GRAM", optional: false },
{ ing: "mayonnaise", nameSv: "Majonnäs", qty: 40, unit: "GRAM", optional: false },
{ ing: "red_onion", nameSv: "Rödlök", qty: 0.5, unit: "COUNT", optional: false },
{ ing: "corn", nameSv: "Majs", qty: 100, unit: "GRAM", optional: true },
{ ing: "bread_sourdough", nameSv: "Surdegsbröd", qty: 2, unit: "COUNT", optional: false },
{ ing: "black_pepper", nameSv: "Svartpeppar", qty: 1, unit: "MILLILITER", optional: false },
],
steps: [
{ text: "Låt tonfisken rinna av och blanda med majonnäs, finhackad rödlök och majs." },
{ text: "Smaka av med svartpeppar och bred på rostat bröd." },
],
},
{
slug: "couscoussallad",
titleSv: "Couscoussallad med fetaost",
descriptionSv: "Matig couscoussallad med krispiga grönsaker, fetaost och citrondressing.",
cuisine: "international",
mealTypes: ["lunch", "dinner"],
tags: ["vegetarian", "budget", "batch_cooking"],
methods: ["stovetop"],
equipment: ["stove"],
difficulty: "beginner",
prepMin: 15,
cookMin: 5,
portions: 4,
spiceLevel: 0,
mealPrepFriendly: true,
freezerFriendly: false,
peakSeasons: ["summer"],
holidayTags: [],
variantType: "standard",
dnaCarb: "couscous",
dnaVegetables: ["tomato", "cucumber"],
dnaFlavor: ["fresh", "savory"],
verificationStatus: "editorial",
ingredients: [
{ ing: "couscous", nameSv: "Couscous", qty: 250, unit: "GRAM", optional: false },
{ ing: "cucumber", nameSv: "Gurka", qty: 0.5, unit: "COUNT", optional: false },
{ ing: "tomato", nameSv: "Tomat", qty: 2, unit: "COUNT", optional: false },
{ ing: "feta", nameSv: "Fetaost", qty: 150, unit: "GRAM", optional: false },
{ ing: "olive_oil", nameSv: "Olivolja", qty: 2, unit: "TABLESPOON", optional: false },
{ ing: "lemon", nameSv: "Citron", qty: 0.5, unit: "COUNT", optional: false },
{ ing: "parsley", nameSv: "Persilja", qty: 10, unit: "GRAM", optional: true },
{ ing: "salt", nameSv: "Salt", qty: 0.5, unit: "TEASPOON", optional: false },
],
steps: [
{
text: "Koka upp 3 dl vatten, häll över couscousen, lägg på lock och låt svälla 5 minuter. Rör upp med en gaffel.",
},
{ text: "Tärna gurka och tomat och smula fetaosten." },
{ text: "Blanda couscous med grönsaker, olja, pressad citron, hackad persilja och salt." },
],
},
{
slug: "blomkalssoppa",
titleSv: "Krämig blomkålssoppa",
descriptionSv: "Len, matig blomkålssoppa med en klick grädde god med rostat bröd.",
cuisine: "swedish",
mealTypes: ["lunch", "dinner"],
tags: ["vegetarian", "budget"],
methods: ["stovetop"],
equipment: ["stove", "blender"],
difficulty: "beginner",
prepMin: 10,
cookMin: 20,
portions: 4,
spiceLevel: 0,
mealPrepFriendly: true,
freezerFriendly: true,
peakSeasons: ["autumn", "winter"],
holidayTags: [],
variantType: "standard",
dnaVegetables: ["cauliflower", "onion"],
dnaFlavor: ["savory", "creamy"],
verificationStatus: "editorial",
ingredients: [
{ ing: "cauliflower", nameSv: "Blomkål", qty: 600, unit: "GRAM", optional: false },
{ ing: "onion", nameSv: "Gul lök", qty: 1, unit: "COUNT", optional: false },
{ ing: "garlic", nameSv: "Vitlök", qty: 2, unit: "COUNT", optional: false },
{
ing: "vegetable_stock_cube",
nameSv: "Grönsaksbuljongtärning",
qty: 2,
unit: "COUNT",
optional: false,
},
{
ing: "cooking_cream",
nameSv: "Matlagningsgrädde",
qty: 1,
unit: "DECILITER",
optional: false,
},
{ ing: "olive_oil", nameSv: "Olivolja", qty: 1, unit: "TABLESPOON", optional: false },
{ ing: "salt", nameSv: "Salt", qty: 1, unit: "TEASPOON", optional: false },
{ ing: "black_pepper", nameSv: "Svartpeppar", qty: 1, unit: "MILLILITER", optional: false },
],
steps: [
{ text: "Fräs hackad lök och vitlök mjuka i oljan." },
{
text: "Tillsätt blomkål i buketter, smulade buljongtärningar och 7 dl vatten. Sjud tills blomkålen är mjuk, cirka 15 minuter.",
},
{ text: "Mixa soppan slät, rör i grädden och smaka av med salt och peppar." },
],
},
{
slug: "ugnsbakad-sotpotatis-kikartor",
titleSv: "Ugnsbakad sötpotatis med kikärtor",
descriptionSv:
"Matig, kryddig plåtmiddag med sötpotatis, kikärtor och fetaost vegetariskt och mättande.",
cuisine: "international",
mealTypes: ["dinner", "lunch"],
tags: ["vegetarian", "high_protein"],
methods: ["oven"],
equipment: ["oven"],
difficulty: "beginner",
prepMin: 10,
cookMin: 30,
portions: 2,
spiceLevel: 1,
mealPrepFriendly: true,
freezerFriendly: false,
peakSeasons: [],
holidayTags: [],
variantType: "standard",
dnaVegetables: ["sweet_potato"],
dnaFlavor: ["savory", "spiced"],
verificationStatus: "editorial",
ingredients: [
{ ing: "sweet_potato", nameSv: "Sötpotatis", qty: 2, unit: "COUNT", optional: false },
{ ing: "chickpeas_canned", nameSv: "Kikärtor", qty: 200, unit: "GRAM", optional: false },
{ ing: "olive_oil", nameSv: "Olivolja", qty: 2, unit: "TABLESPOON", optional: false },
{ ing: "paprika_powder", nameSv: "Paprikapulver", qty: 2, unit: "TEASPOON", optional: false },
{ ing: "cumin", nameSv: "Spiskummin", qty: 1, unit: "TEASPOON", optional: false },
{ ing: "salt", nameSv: "Salt", qty: 1, unit: "TEASPOON", optional: false },
{ ing: "feta", nameSv: "Fetaost", qty: 100, unit: "GRAM", optional: true },
],
steps: [
{ text: "Skala och tärna sötpotatisen. Låt kikärtorna rinna av." },
{
text: "Blanda sötpotatis och kikärtor med olja, paprikapulver, spiskummin och salt på en plåt.",
},
{
text: "Rosta i ugnen tills sötpotatisen är mjuk och får färg, cirka 30 minuter. Smula över fetaost före servering.",
temperatureC: 200,
},
],
},
];
+313 -24
View File
@@ -174,7 +174,14 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
shelfLifeGuidance: { fridge: 7 },
defaultPriceMinorPerKg: 5500,
}),
ing("creme_fraiche", "Crème fraiche", "Crème fraîche", "mejeri", { aliases: ["creme fraiche", "crème fraiche 32%", "creme fraiche 32%", "crème fraiche 32 %", "creme fraiche 32 %"],
ing("creme_fraiche", "Crème fraiche", "Crème fraîche", "mejeri", {
aliases: [
"creme fraiche",
"crème fraiche 32%",
"creme fraiche 32%",
"crème fraiche 32 %",
"creme fraiche 32 %",
],
...vgt,
defaultUnit: "DECILITER",
densityGPerMl: 1,
@@ -193,7 +200,16 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
defaultPriceMinorPerKg: 4500,
aliases: ["kesella"],
}),
ing("yoghurt_natural", "Naturell yoghurt 3 %", "Plain yogurt", "mejeri", { aliases: ["yoghurt", "yogurt", "naturell yoghurt", "grekisk yoghurt", "greek yogurt", "grekisk style yoghurt", "greek style yogurt"],
ing("yoghurt_natural", "Naturell yoghurt 3 %", "Plain yogurt", "mejeri", {
aliases: [
"yoghurt",
"yogurt",
"naturell yoghurt",
"grekisk yoghurt",
"greek yogurt",
"grekisk style yoghurt",
"greek style yogurt",
],
...vgt,
defaultUnit: "DECILITER",
densityGPerMl: 1.03,
@@ -392,7 +408,8 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
shelfLifeGuidance: { pantry: 60 },
defaultPriceMinorPerKg: 9000,
}),
ing("carrot", "Morot", "Carrot", "gronsaker", { aliases: ["morötter", "morotter", "carrots"],
ing("carrot", "Morot", "Carrot", "gronsaker", {
aliases: ["morötter", "morotter", "carrots"],
...veg,
defaultUnit: "COUNT",
gramsPerPiece: 125,
@@ -471,7 +488,7 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
}),
ing("dill", "Dill (färsk)", "Dill", "gronsaker", {
...veg,
gramsPerPiece: 25,
gramsPerPiece: 25,
densityGPerMl: 0.12,
n: { kcal: 40, p: 3.5, k: 5, f: 0.8, fib: 2.5 },
shelfLifeGuidance: { fridge: 5 },
@@ -480,7 +497,7 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
}),
ing("parsley", "Persilja (färsk)", "Parsley", "gronsaker", {
...veg,
gramsPerPiece: 25,
gramsPerPiece: 25,
densityGPerMl: 0.12,
n: { kcal: 45, p: 3.7, k: 6, f: 0.9, fib: 3.5 },
shelfLifeGuidance: { fridge: 5 },
@@ -640,7 +657,8 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
shelfLifeGuidance: { pantry: 365 },
defaultPriceMinorPerKg: 3000,
}),
ing("bread_sourdough", "Surdegsbröd", "Sourdough bread", "brod", { gramsPerPiece: 40,
ing("bread_sourdough", "Surdegsbröd", "Sourdough bread", "brod", {
gramsPerPiece: 40,
...veg,
containsGluten: true,
allergens: ["gluten"],
@@ -970,24 +988,295 @@ export const SEED_INGREDIENTS: SeedIngredient[] = [
shelfLifeGuidance: { pantry: 1095 },
defaultPriceMinorPerKg: 35000,
}),
ing("saffron", "Saffran", "Saffron", "krydda", { n: { kcal: 310, p: 11, k: 65, f: 6 }, isVegan: true, isVegetarian: true }),
ing("yeast_fresh", "Jäst", "Fresh yeast", "skafferi", { n: { kcal: 105, p: 9, k: 19, f: 2 }, isVegan: true, isVegetarian: true }),
ing("cooked_ham", "Kokt skinka (julskinka)", "Cooked ham", "chark", { n: { kcal: 145, p: 18, k: 1, f: 8, mf: 3, salt: 2 }, isPork: true }),
ing("crayfish", "Kräftor", "Crayfish", "skaldjur", { n: { kcal: 77, p: 16, k: 0, f: 1 }, allergens: ["crustaceans"] }),
ing("cardamom", "Kardemumma", "Cardamom", "krydda", { densityGPerMl: 0.45, n: { kcal: 311, p: 11, k: 68, f: 7 }, isVegan: true, isVegetarian: true }),
ing("almond_paste", "Mandelmassa", "Almond paste", "bakning", { n: { kcal: 430, p: 9, k: 45, f: 24, s: 40 }, allergens: ["tree_nuts"], isVegetarian: true }),
ing("red_cabbage", "Rödkål", "Red cabbage", "gronsaker", { n: { kcal: 31, p: 1.4, k: 7, f: 0.2, fib: 2 }, isVegan: true, isVegetarian: true }),
ing("lingonberry_jam", "Lingonsylt", "Lingonberry jam", "skafferi", { n: { kcal: 200, p: 0.3, k: 49, f: 0.2, s: 45 }, isVegan: true, isVegetarian: true }),
ing("prinskorv", "Prinskorv", "Cocktail sausage", "chark", { n: { kcal: 280, p: 11, k: 3, f: 25, mf: 9, salt: 2 }, isPork: true }),
ing("rye_flour", "Rågmjöl", "Rye flour", "skafferi", { n: { kcal: 325, p: 9, k: 60, f: 2, fib: 14 }, containsGluten: true, allergens: ["gluten"], isVegan: true, isVegetarian: true }),
ing("grape", "Vindruvor", "Grapes", "frukt", { n: { kcal: 69, p: 0.7, k: 18, f: 0.2, fib: 0.9, s: 15 }, isVegan: true, isVegetarian: true, aliases: ["druvor", "vindruva", "roda druvor", "röda druvor", "grona druvor", "gröna druvor", "drue druvor", "drue", "grapes"] }),
ing("beetroot", "Rödbetor", "Beetroot", "gronsaker", { n: { kcal: 43, p: 1.6, k: 10, f: 0.2, fib: 2.8, s: 7 }, isVegan: true, isVegetarian: true, aliases: ["rödbeta", "rodbeta", "rödbetor", "rodbetor", "inlagda rödbetor", "inlagda rodbetor", "skivad rödbeta", "skivade rödbetor", "beetroot", "beets", "red beets"] }),
ing("pea_shoots", "Ärtskott", "Pea shoots", "gronsaker", { n: { kcal: 42, p: 4, k: 4, f: 0.5, fib: 2 }, isVegan: true, isVegetarian: true, aliases: ["ärtskott", "artskott", "ertskott", "artiskott", "pea shoots"] }),
ing("balsamic_vinegar", "Balsamvinäger", "Balsamic vinegar", "skafferi", { n: { kcal: 88, p: 0.5, k: 17, f: 0, s: 15 }, isVegan: true, isVegetarian: true, aliases: ["balsamvinäger", "balsamvinager", "balsamico", "balsamic vinegar", "vinäger"] }),
ing("strawberry_jam", "Jordgubbssylt", "Strawberry jam", "skafferi", { n: { kcal: 200, p: 0.3, k: 49, f: 0.2, s: 45 }, isVegan: true, isVegetarian: true, aliases: ["jordgubbssylt", "jordgubbsylt", "strawberry jam"] }),
ing("fish_stock", "Fiskfond", "Fish stock", "skafferi", { n: { kcal: 15, p: 1.5, k: 1, f: 0.5, salt: 6 }, allergens: ["fish"], aliases: ["fiskfond", "fisk fond", "fish stock"] }),
ing("lobster_stock", "Hummerfond", "Lobster stock", "skafferi", { n: { kcal: 20, p: 2, k: 1.5, f: 0.7, salt: 6 }, allergens: ["crustaceans"], aliases: ["hummerfond", "hummer fond", "lobster stock"] }),
ing("cornichons", "Cornichoner", "Cornichons", "skafferi", { n: { kcal: 11, p: 0.5, k: 2, f: 0.1, fib: 1, salt: 2 }, isVegan: true, isVegetarian: true, aliases: ["cornichons", "cornicher", "cornichoner", "ättiksgurka", "inlagd gurka", "små gurkor", "gherkins"] }),
ing("saffron", "Saffran", "Saffron", "krydda", {
n: { kcal: 310, p: 11, k: 65, f: 6 },
isVegan: true,
isVegetarian: true,
}),
ing("yeast_fresh", "Jäst", "Fresh yeast", "skafferi", {
n: { kcal: 105, p: 9, k: 19, f: 2 },
isVegan: true,
isVegetarian: true,
}),
ing("cooked_ham", "Kokt skinka (julskinka)", "Cooked ham", "chark", {
n: { kcal: 145, p: 18, k: 1, f: 8, mf: 3, salt: 2 },
isPork: true,
}),
ing("crayfish", "Kräftor", "Crayfish", "skaldjur", {
n: { kcal: 77, p: 16, k: 0, f: 1 },
allergens: ["crustaceans"],
}),
ing("cardamom", "Kardemumma", "Cardamom", "krydda", {
densityGPerMl: 0.45,
n: { kcal: 311, p: 11, k: 68, f: 7 },
isVegan: true,
isVegetarian: true,
}),
ing("almond_paste", "Mandelmassa", "Almond paste", "bakning", {
n: { kcal: 430, p: 9, k: 45, f: 24, s: 40 },
allergens: ["tree_nuts"],
isVegetarian: true,
}),
ing("red_cabbage", "Rödkål", "Red cabbage", "gronsaker", {
n: { kcal: 31, p: 1.4, k: 7, f: 0.2, fib: 2 },
isVegan: true,
isVegetarian: true,
}),
ing("lingonberry_jam", "Lingonsylt", "Lingonberry jam", "skafferi", {
n: { kcal: 200, p: 0.3, k: 49, f: 0.2, s: 45 },
isVegan: true,
isVegetarian: true,
}),
ing("prinskorv", "Prinskorv", "Cocktail sausage", "chark", {
n: { kcal: 280, p: 11, k: 3, f: 25, mf: 9, salt: 2 },
isPork: true,
}),
ing("rye_flour", "Rågmjöl", "Rye flour", "skafferi", {
n: { kcal: 325, p: 9, k: 60, f: 2, fib: 14 },
containsGluten: true,
allergens: ["gluten"],
isVegan: true,
isVegetarian: true,
}),
ing("grape", "Vindruvor", "Grapes", "frukt", {
n: { kcal: 69, p: 0.7, k: 18, f: 0.2, fib: 0.9, s: 15 },
isVegan: true,
isVegetarian: true,
aliases: [
"druvor",
"vindruva",
"roda druvor",
"röda druvor",
"grona druvor",
"gröna druvor",
"drue druvor",
"drue",
"grapes",
],
}),
ing("beetroot", "Rödbetor", "Beetroot", "gronsaker", {
n: { kcal: 43, p: 1.6, k: 10, f: 0.2, fib: 2.8, s: 7 },
isVegan: true,
isVegetarian: true,
aliases: [
"rödbeta",
"rodbeta",
"rödbetor",
"rodbetor",
"inlagda rödbetor",
"inlagda rodbetor",
"skivad rödbeta",
"skivade rödbetor",
"beetroot",
"beets",
"red beets",
],
}),
ing("pea_shoots", "Ärtskott", "Pea shoots", "gronsaker", {
n: { kcal: 42, p: 4, k: 4, f: 0.5, fib: 2 },
isVegan: true,
isVegetarian: true,
aliases: ["ärtskott", "artskott", "ertskott", "artiskott", "pea shoots"],
}),
ing("balsamic_vinegar", "Balsamvinäger", "Balsamic vinegar", "skafferi", {
n: { kcal: 88, p: 0.5, k: 17, f: 0, s: 15 },
isVegan: true,
isVegetarian: true,
aliases: ["balsamvinäger", "balsamvinager", "balsamico", "balsamic vinegar", "vinäger"],
}),
ing("strawberry_jam", "Jordgubbssylt", "Strawberry jam", "skafferi", {
n: { kcal: 200, p: 0.3, k: 49, f: 0.2, s: 45 },
isVegan: true,
isVegetarian: true,
aliases: ["jordgubbssylt", "jordgubbsylt", "strawberry jam"],
}),
ing("fish_stock", "Fiskfond", "Fish stock", "skafferi", {
n: { kcal: 15, p: 1.5, k: 1, f: 0.5, salt: 6 },
allergens: ["fish"],
aliases: ["fiskfond", "fisk fond", "fish stock"],
}),
ing("lobster_stock", "Hummerfond", "Lobster stock", "skafferi", {
n: { kcal: 20, p: 2, k: 1.5, f: 0.7, salt: 6 },
allergens: ["crustaceans"],
aliases: ["hummerfond", "hummer fond", "lobster stock"],
}),
ing("cornichons", "Cornichoner", "Cornichons", "skafferi", {
n: { kcal: 11, p: 0.5, k: 2, f: 0.1, fib: 1, salt: 2 },
isVegan: true,
isVegetarian: true,
aliases: [
"cornichons",
"cornicher",
"cornichoner",
"ättiksgurka",
"inlagd gurka",
"små gurkor",
"gherkins",
],
}),
// --- Utökning: bakning (för riktiga kakor/pajer/bullar) ---
ing("vanilla_sugar", "Vaniljsocker", "Vanilla sugar", "bakning", {
n: { kcal: 400, p: 0, k: 99, f: 0, s: 98 },
isVegan: true,
isVegetarian: true,
aliases: ["vaniljsocker", "vanillasocker", "vanilla sugar"],
}),
ing("baking_powder", "Bakpulver", "Baking powder", "bakning", {
n: { kcal: 53, p: 0, k: 28, f: 0, salt: 25 },
isVegan: true,
isVegetarian: true,
aliases: ["bakpulver", "baking powder"],
}),
ing("baking_soda", "Bikarbonat", "Baking soda", "bakning", {
n: { kcal: 0, p: 0, k: 0, f: 0, salt: 27 },
isVegan: true,
isVegetarian: true,
aliases: ["bikarbonat", "natriumbikarbonat", "baking soda"],
}),
ing("cocoa", "Kakao", "Cocoa powder", "bakning", {
n: { kcal: 350, p: 20, k: 58, f: 14, mf: 8, fib: 33 },
isVegan: true,
isVegetarian: true,
aliases: ["kakao", "kakaopulver", "cocoa", "cocoa powder"],
}),
ing("dark_chocolate", "Mörk choklad", "Dark chocolate", "bakning", {
n: { kcal: 550, p: 6, k: 46, f: 38, mf: 24, s: 40 },
isVegan: true,
isVegetarian: true,
aliases: ["mörk choklad", "mork choklad", "choklad", "dark chocolate", "chocolate"],
}),
ing("powdered_sugar", "Florsocker", "Powdered sugar", "bakning", {
n: { kcal: 390, p: 0, k: 100, f: 0, s: 99 },
isVegan: true,
isVegetarian: true,
aliases: ["florsocker", "powdered sugar", "icing sugar"],
}),
ing("pearl_sugar", "Pärlsocker", "Pearl sugar", "bakning", {
n: { kcal: 400, p: 0, k: 100, f: 0, s: 100 },
isVegan: true,
isVegetarian: true,
aliases: ["pärlsocker", "parlsocker", "pearl sugar"],
}),
ing("desiccated_coconut", "Kokosflingor", "Desiccated coconut", "bakning", {
n: { kcal: 660, p: 7, k: 24, f: 64, mf: 57, fib: 16 },
isVegan: true,
isVegetarian: true,
aliases: ["kokosflingor", "kokos", "riven kokos", "desiccated coconut"],
}),
ing("raisins", "Russin", "Raisins", "bakning", {
n: { kcal: 299, p: 3, k: 79, f: 0.5, fib: 4, s: 59 },
isVegan: true,
isVegetarian: true,
aliases: ["russin", "raisins"],
}),
// --- Utökning: frukt & bär ---
ing("blueberry", "Blåbär", "Blueberries", "frukt", {
n: { kcal: 57, p: 0.7, k: 12, f: 0.3, fib: 2.4, s: 10 },
isVegan: true,
isVegetarian: true,
aliases: ["blåbär", "blabar", "blueberries", "blueberry"],
}),
ing("raspberry", "Hallon", "Raspberries", "frukt", {
n: { kcal: 52, p: 1.2, k: 8, f: 0.7, fib: 6.5, s: 4 },
isVegan: true,
isVegetarian: true,
aliases: ["hallon", "raspberries", "raspberry"],
}),
ing("pear", "Päron", "Pear", "frukt", {
defaultUnit: "COUNT",
gramsPerPiece: 170,
n: { kcal: 57, p: 0.4, k: 15, f: 0.1, fib: 3, s: 10 },
isVegan: true,
isVegetarian: true,
aliases: ["päron", "paron", "pear"],
}),
ing("orange", "Apelsin", "Orange", "frukt", {
defaultUnit: "COUNT",
gramsPerPiece: 180,
n: { kcal: 47, p: 0.9, k: 12, f: 0.1, fib: 2.4, s: 9 },
isVegan: true,
isVegetarian: true,
aliases: ["apelsin", "orange"],
}),
ing("rhubarb", "Rabarber", "Rhubarb", "frukt", {
n: { kcal: 21, p: 0.9, k: 4.5, f: 0.2, fib: 1.8, s: 1 },
isVegan: true,
isVegetarian: true,
aliases: ["rabarber", "rhubarb"],
}),
// --- Utökning: nötter ---
ing("walnut", "Valnötter", "Walnuts", "skafferi", {
n: { kcal: 654, p: 15, k: 14, f: 65, mf: 6, fib: 7 },
allergens: ["tree_nuts"],
isVegan: true,
isVegetarian: true,
aliases: ["valnötter", "valnotter", "valnöt", "walnuts", "walnut"],
}),
ing("hazelnut", "Hasselnötter", "Hazelnuts", "skafferi", {
n: { kcal: 628, p: 15, k: 17, f: 61, mf: 4, fib: 10 },
allergens: ["tree_nuts"],
isVegan: true,
isVegetarian: true,
aliases: ["hasselnötter", "hasselnotter", "hazelnuts", "hazelnut"],
}),
// --- Utökning: grönsaker ---
ing("cauliflower", "Blomkål", "Cauliflower", "gronsaker", {
n: { kcal: 25, p: 1.9, k: 5, f: 0.3, fib: 2 },
isVegan: true,
isVegetarian: true,
aliases: ["blomkål", "blomkal", "cauliflower"],
}),
ing("sweet_potato", "Sötpotatis", "Sweet potato", "gronsaker", {
defaultUnit: "COUNT",
gramsPerPiece: 200,
n: { kcal: 86, p: 1.6, k: 20, f: 0.1, fib: 3 },
isVegan: true,
isVegetarian: true,
aliases: ["sötpotatis", "sotpotatis", "batat", "sweet potato"],
}),
ing("kale", "Grönkål", "Kale", "gronsaker", {
n: { kcal: 49, p: 4.3, k: 9, f: 0.9, fib: 4 },
isVegan: true,
isVegetarian: true,
aliases: ["grönkål", "gronkal", "kale"],
}),
ing("white_cabbage", "Vitkål", "White cabbage", "gronsaker", {
n: { kcal: 25, p: 1.3, k: 6, f: 0.1, fib: 2.5 },
isVegan: true,
isVegetarian: true,
aliases: ["vitkål", "vitkal", "kål", "kal", "white cabbage", "cabbage"],
}),
ing("green_beans", "Haricots verts", "Green beans", "gronsaker", {
n: { kcal: 31, p: 1.8, k: 7, f: 0.1, fib: 3.4 },
isVegan: true,
isVegetarian: true,
aliases: ["haricots verts", "gröna bönor", "grona bonor", "skärbönor", "green beans"],
}),
// --- Utökning: protein & övrigt ---
ing("tuna_canned", "Tonfisk (burk)", "Canned tuna", "fisk", {
n: { kcal: 116, p: 26, k: 0, f: 1 },
allergens: ["fish"],
aliases: ["tonfisk", "tonfisk i vatten", "tonfisk på burk", "canned tuna", "tuna"],
}),
ing("couscous", "Couscous", "Couscous", "spannmal", {
n: { kcal: 376, p: 13, k: 77, f: 0.6, fib: 5 },
containsGluten: true,
allergens: ["gluten"],
isVegan: true,
isVegetarian: true,
aliases: ["couscous", "kuskus"],
}),
ing("cottage_cheese", "Keso", "Cottage cheese", "mejeri", {
n: { kcal: 98, p: 11, k: 3.4, f: 4.3, mf: 2 },
allergens: ["milk"],
containsLactose: true,
isVegetarian: true,
aliases: ["keso", "cottage cheese", "grynig färskost"],
}),
ing("turkey_breast", "Kalkonfilé", "Turkey breast", "kott_fagel", {
n: { kcal: 105, p: 24, k: 0, f: 1 },
aliases: ["kalkon", "kalkonfilé", "kalkonfile", "kalkonbröst", "turkey", "turkey breast"],
}),
];
export const SEED_INGREDIENT_IDS = new Set(SEED_INGREDIENTS.map((i) => i.id));
+2 -2
View File
@@ -32,8 +32,8 @@ function sourcesFor(
}
describe("extrarecept seed-invarianter", () => {
it("har minst 16 recept", () => {
expect(EXTRA_RECIPES.length).toBeGreaterThanOrEqual(16);
it("har minst 29 recept", () => {
expect(EXTRA_RECIPES.length).toBeGreaterThanOrEqual(29);
});
it("alla ingrediens-id:n finns i katalogen (run.ts rad 675)", () => {