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:
@@ -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 18–20 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 10–15 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,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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)", () => {
|
||||
|
||||
Reference in New Issue
Block a user