Files
Cibello-app/packages/database/src/seed/data/seasonEvents.ts
T
Sven (AAMOS AI) a11267edac
CI / Typecheck, test & build (push) Failing after 43s
feat(seed): GB/US/CA-högtider inkl. Thanksgiving-datum (MIKRO C4)
2026-08-14 22:34:31 +07:00

1150 lines
30 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Seed: datadriven Season & Events Engine (spec §28).
* Datumregler beräknas av recommendation-engine (midsommar, påsk, advent).
*/
export interface SeedSeasonEvent {
id: string;
slug: string;
nameSv: string;
nameLocalized: string;
market: string;
dateRule:
| { kind: "fixed"; monthDay: string }
| { kind: "range"; startMonthDay: string; endMonthDay: string }
| { kind: "computed"; algorithm: "midsummer" | "easter" | "advent" | "custom" }
| { kind: "easter-offset"; days: number }
| { kind: "nth-weekday"; month: number; weekday: number; n: number | "last" };
leadDays: number;
foodTags: string[];
recipeSlugs: string[];
priority: number;
}
export const SEED_SEASON_EVENTS: SeedSeasonEvent[] = [
{
id: "se-midsommar",
slug: "midsommar",
nameSv: "Midsommar",
nameLocalized: "",
market: "SE",
dateRule: { kind: "computed", algorithm: "midsummer" },
leadDays: 10,
foodTags: ["sill", "färskpotatis", "jordgubbar", "grillat", "västerbottensostpaj"],
recipeSlugs: ["sill-och-farskpotatis", "vasterbottensostpaj", "kottbullar-med-potatismos"],
priority: 100,
},
{
id: "se-jul",
slug: "jul",
nameSv: "Jul",
nameLocalized: "",
market: "SE",
dateRule: { kind: "range", startMonthDay: "12-20", endMonthDay: "12-26" },
leadDays: 21,
foodTags: ["julbord", "köttbullar", "janssons", "sill", "skinka"],
recipeSlugs: ["jansons-frestelse", "kottbullar-med-potatismos"],
priority: 100,
},
{
id: "se-pask",
slug: "påsk",
nameSv: "Påsk",
nameLocalized: "",
market: "SE",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["ägg", "sill", "lamm", "lax"],
recipeSlugs: ["sill-och-farskpotatis", "ugnsbakad-lax-med-citron-och-dill"],
priority: 90,
},
{
id: "se-nyar",
slug: "nyår",
nameSv: "Nyårsafton",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["fest", "skaldjur", "lyx"],
recipeSlugs: [],
priority: 80,
},
{
id: "se-kraftskiva",
slug: "kraftskiva",
nameSv: "Kräftskivepremiär",
nameLocalized: "",
market: "SE",
dateRule: { kind: "range", startMonthDay: "08-01", endMonthDay: "08-31" },
leadDays: 7,
foodTags: ["kräftor", "västerbottensostpaj", "knäckebröd"],
recipeSlugs: ["vasterbottensostpaj"],
priority: 70,
},
{
id: "se-surstromming",
slug: "surstromming",
nameSv: "Surströmmingspremiär",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "08-15" },
leadDays: 5,
foodTags: ["surströmming", "tunnbröd", "mandelpotatis"],
recipeSlugs: [],
priority: 40,
},
{
id: "se-lucia",
slug: "lucia",
nameSv: "Lucia",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "12-13" },
leadDays: 7,
foodTags: ["lussekatter", "pepparkakor", "glögg"],
recipeSlugs: [],
priority: 60,
},
{
id: "se-valborg",
slug: "valborg",
nameSv: "Valborg",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "04-30" },
leadDays: 5,
foodTags: ["grillat", "vårmat"],
recipeSlugs: ["halloumiburgare"],
priority: 50,
},
{
id: "se-grillsasong",
slug: "grillsasong",
nameSv: "Grillsäsong",
nameLocalized: "",
market: "SE",
dateRule: { kind: "range", startMonthDay: "05-15", endMonthDay: "08-31" },
leadDays: 0,
foodTags: ["grillat", "sallad", "sommarmat"],
recipeSlugs: ["halloumiburgare", "grekisk-sallad"],
priority: 30,
},
{
id: "se-skolstart",
slug: "skolstart",
nameSv: "Skolstart",
nameLocalized: "",
market: "SE",
dateRule: { kind: "range", startMonthDay: "08-10", endMonthDay: "08-31" },
leadDays: 7,
foodTags: ["matlåda", "vardagsmat", "snabbt"],
recipeSlugs: ["spaghetti-med-kottfarssas", "chili-con-carne"],
priority: 40,
},
{
id: "se-alla-hjartans",
slug: "alla-hjartans-dag",
nameSv: "Alla hjärtans dag",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "02-14" },
leadDays: 5,
foodTags: ["middag för två", "lyx", "dessert"],
recipeSlugs: ["teriyakilax-med-ris"],
priority: 50,
},
{
id: "int-halloween",
slug: "halloween",
nameSv: "Halloween",
nameLocalized: "",
market: "SE",
dateRule: { kind: "fixed", monthDay: "10-31" },
leadDays: 7,
foodTags: ["pumpa", "barnkalas", "höstmat"],
recipeSlugs: ["tomatsoppa-med-basilika"],
priority: 40,
},
{
id: "int-oktoberfest",
slug: "oktoberfest",
nameSv: "Oktoberfest",
nameLocalized: "",
market: "SE",
dateRule: { kind: "range", startMonthDay: "09-20", endMonthDay: "10-05" },
leadDays: 5,
foodTags: ["korv", "surkål", "öl"],
recipeSlugs: [],
priority: 20,
},
{
id: "int-ramadan-eid",
slug: "eid",
nameSv: "Eid al-Fitr",
nameLocalized: "",
market: "SE",
// Rörligt datum (månkalender) uppdateras årligen av admin tills kalenderconnector finns.
dateRule: { kind: "computed", algorithm: "custom" },
leadDays: 14,
foodTags: ["fest", "lamm", "dadlar", "sötsaker"],
recipeSlugs: [],
priority: 90,
},
// --- Norge (NO) ---
{
id: "no-julaften",
slug: "julaften",
nameSv: "Julaften",
nameLocalized: "Julaften",
market: "NO",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["ribbe", "pinnekjott", "lutefisk", "surkal", "riskrem", "medisterkake"],
recipeSlugs: [],
priority: 100,
},
{
id: "no-paske",
slug: "paske",
nameSv: "Påske",
nameLocalized: "Påske",
market: "NO",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["lam", "egg", "appelsin", "marsipan", "paskeol"],
recipeSlugs: [],
priority: 90,
},
{
id: "no-sankthans",
slug: "sankthans",
nameSv: "Sankthansaften",
nameLocalized: "Sankthansaften",
market: "NO",
dateRule: { kind: "fixed", monthDay: "06-23" },
leadDays: 7,
foodTags: ["grillmat", "rommegrot", "spekemat", "jordbaer", "reker"],
recipeSlugs: [],
priority: 80,
},
{
id: "no-nyttarsaften",
slug: "nyttarsaften",
nameSv: "Nyttårsaften",
nameLocalized: "Nyttårsaften",
market: "NO",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["pinnekjott", "torsk", "reker", "kransekake"],
recipeSlugs: [],
priority: 90,
},
{
id: "no-farikal",
slug: "farikalens-festdag",
nameSv: "Fårikålens festdag",
nameLocalized: "Fårikålens festdag",
market: "NO",
dateRule: { kind: "nth-weekday", month: 9, weekday: 4, n: "last" },
leadDays: 5,
foodTags: ["far", "kal", "pepperkorn", "potet"],
recipeSlugs: [],
priority: 80,
},
// --- Danmark (DK) ---
{
id: "dk-juleaften",
slug: "juleaften",
nameSv: "Juleaften",
nameLocalized: "Juleaften",
market: "DK",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["flaeskesteg", "and", "rodkal", "brunede-kartofler", "risalamande"],
recipeSlugs: [],
priority: 100,
},
{
id: "dk-paske",
slug: "paske",
nameSv: "Påske",
nameLocalized: "Påske",
market: "DK",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 7,
foodTags: ["sild", "aeg", "lammesteg", "nye-kartofler", "snaps"],
recipeSlugs: [],
priority: 90,
},
{
id: "dk-nytarsaften",
slug: "nytarsaften",
nameSv: "Nytårsaften",
nameLocalized: "Nytårsaften",
market: "DK",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["kogt-torsk", "kransekage", "marcipan"],
recipeSlugs: [],
priority: 90,
},
{
id: "dk-julefrokost",
slug: "julefrokost",
nameSv: "Julefrokost",
nameLocalized: "Julefrokost",
market: "DK",
dateRule: { kind: "range", startMonthDay: "12-01", endMonthDay: "12-30" },
leadDays: 7,
foodTags: ["sild", "frikadeller", "leverpostej", "ribbensteg", "snaps"],
recipeSlugs: [],
priority: 80,
},
{
id: "dk-mortensaften",
slug: "mortensaften",
nameSv: "Mortensaften",
nameLocalized: "Mortensaften",
market: "DK",
dateRule: { kind: "fixed", monthDay: "11-10" },
leadDays: 7,
foodTags: ["and", "gas", "rodkal", "brunede-kartofler", "brun-sovs"],
recipeSlugs: [],
priority: 75,
},
// --- Finland (FI) ---
{
id: "fi-joulu",
slug: "joulu",
nameSv: "Jouluaatto",
nameLocalized: "Jouluaatto",
market: "FI",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["joulukinkku", "lanttulaatikko", "rosolli", "graavilohi", "joulutorttu"],
recipeSlugs: [],
priority: 100,
},
{
id: "fi-paasiainen",
slug: "paasiainen",
nameSv: "Pääsiäinen",
nameLocalized: "Pääsiäinen",
market: "FI",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 7,
foodTags: ["mammi", "pasha", "lammas", "suklaamuna"],
recipeSlugs: [],
priority: 90,
},
{
id: "fi-juhannus",
slug: "juhannus",
nameSv: "Juhannus",
nameLocalized: "Juhannus",
market: "FI",
dateRule: { kind: "computed", algorithm: "midsummer" },
leadDays: 7,
foodTags: ["grillimakkara", "uudet-perunat", "silli", "graavilohi"],
recipeSlugs: [],
priority: 85,
},
{
id: "fi-rapujuhlat",
slug: "rapujuhlat",
nameSv: "Rapujuhlat",
nameLocalized: "Rapujuhlat",
market: "FI",
dateRule: { kind: "range", startMonthDay: "07-21", endMonthDay: "09-30" },
leadDays: 7,
foodTags: ["rapu", "tilli", "ruisleipa", "snapsi"],
recipeSlugs: [],
priority: 80,
},
{
id: "fi-vappu",
slug: "vappu",
nameSv: "Vappu",
nameLocalized: "Vappu",
market: "FI",
dateRule: { kind: "fixed", monthDay: "05-01" },
leadDays: 7,
foodTags: ["sima", "tippaleipa", "munkki"],
recipeSlugs: [],
priority: 75,
},
// --- Island (IS) ---
{
id: "is-adfangadagur",
slug: "adfangadagur",
nameSv: "Aðfangadagur",
nameLocalized: "Aðfangadagur",
market: "IS",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["hamborgarhryggur", "hangikjot", "laufabraud", "rjupa"],
recipeSlugs: [],
priority: 100,
},
{
id: "is-paskar",
slug: "paskar",
nameSv: "Páskar",
nameLocalized: "Páskar",
market: "IS",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 5,
foodTags: ["lambakjot", "lambalaeri", "paskaegg"],
recipeSlugs: [],
priority: 90,
},
{
id: "is-thorrablot",
slug: "thorrablot",
nameSv: "Þorrablót",
nameLocalized: "Þorrablót",
market: "IS",
dateRule: { kind: "range", startMonthDay: "01-23", endMonthDay: "02-22" },
leadDays: 7,
foodTags: ["hakarl", "svid", "hangikjot", "hardfiskur", "brennivin"],
recipeSlugs: [],
priority: 80,
},
{
id: "is-sprengidagur",
slug: "sprengidagur",
nameSv: "Sprengidagur",
nameLocalized: "Sprengidagur",
market: "IS",
dateRule: { kind: "easter-offset", days: -47 },
leadDays: 3,
foodTags: ["saltkjot", "baunir", "gulrofa"],
recipeSlugs: [],
priority: 70,
},
{
id: "is-thorlaksmessa",
slug: "thorlaksmessa",
nameSv: "Þorláksmessa",
nameLocalized: "Þorláksmessa",
market: "IS",
dateRule: { kind: "fixed", monthDay: "12-23" },
leadDays: 5,
foodTags: ["skata", "hangikjot", "rugbraud"],
recipeSlugs: [],
priority: 70,
},
// --- Tyskland (DE) ---
{
id: "de-weihnachten",
slug: "weihnachten",
nameSv: "Weihnachten",
nameLocalized: "Weihnachten",
market: "DE",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["gans", "karpfen", "stollen", "lebkuchen", "wurstchen"],
recipeSlugs: [],
priority: 100,
},
{
id: "de-silvester",
slug: "silvester",
nameSv: "Silvester",
nameLocalized: "Silvester",
market: "DE",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 6,
foodTags: ["berliner", "raclette", "fondue", "linsen", "heringssalat"],
recipeSlugs: [],
priority: 90,
},
{
id: "de-ostern",
slug: "ostern",
nameSv: "Ostern",
nameLocalized: "Ostern",
market: "DE",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["lamm", "eier", "osterbrot", "schinken", "hefezopf"],
recipeSlugs: [],
priority: 90,
},
{
id: "de-oktoberfest",
slug: "oktoberfest",
nameSv: "Oktoberfest",
nameLocalized: "Oktoberfest",
market: "DE",
dateRule: { kind: "range", startMonthDay: "09-19", endMonthDay: "10-04" },
leadDays: 7,
foodTags: ["hendl", "schweinshaxe", "weisswurst", "brezn", "obatzda"],
recipeSlugs: [],
priority: 85,
},
{
id: "de-karneval",
slug: "karneval",
nameSv: "Karneval",
nameLocalized: "Karneval",
market: "DE",
dateRule: { kind: "easter-offset", days: -48 },
leadDays: 5,
foodTags: ["krapfen", "berliner", "mutzenmandeln"],
recipeSlugs: [],
priority: 70,
},
{
id: "de-spargelzeit",
slug: "spargelzeit",
nameSv: "Spargelzeit",
nameLocalized: "Spargelzeit",
market: "DE",
dateRule: { kind: "range", startMonthDay: "04-15", endMonthDay: "06-24" },
leadDays: 4,
foodTags: ["spargel", "sauce-hollandaise", "schinken", "kartoffeln"],
recipeSlugs: [],
priority: 75,
},
// --- Frankrike (FR) ---
{
id: "fr-reveillon-noel",
slug: "reveillon-de-noel",
nameSv: "Réveillon de Noël",
nameLocalized: "Réveillon de Noël",
market: "FR",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["huitres", "foie-gras", "chapon", "marrons", "buche"],
recipeSlugs: [],
priority: 100,
},
{
id: "fr-saint-sylvestre",
slug: "saint-sylvestre",
nameSv: "Saint-Sylvestre",
nameLocalized: "Saint-Sylvestre",
market: "FR",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["foie-gras", "huitres", "fruits-de-mer", "saumon-fume", "champagne"],
recipeSlugs: [],
priority: 90,
},
{
id: "fr-epiphanie",
slug: "epiphanie",
nameSv: "Épiphanie",
nameLocalized: "Épiphanie",
market: "FR",
dateRule: { kind: "fixed", monthDay: "01-06" },
leadDays: 5,
foodTags: ["galette-des-rois", "frangipane", "feve", "brioche"],
recipeSlugs: [],
priority: 80,
},
{
id: "fr-chandeleur",
slug: "chandeleur",
nameSv: "Chandeleur",
nameLocalized: "Chandeleur",
market: "FR",
dateRule: { kind: "fixed", monthDay: "02-02" },
leadDays: 3,
foodTags: ["crepes", "sucre", "citron", "confiture"],
recipeSlugs: [],
priority: 70,
},
{
id: "fr-paques",
slug: "paques",
nameSv: "Pâques",
nameLocalized: "Pâques",
market: "FR",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["agneau", "gigot", "oeufs-chocolat", "chocolat"],
recipeSlugs: [],
priority: 90,
},
{
id: "fr-mardi-gras",
slug: "mardi-gras",
nameSv: "Mardi Gras",
nameLocalized: "Mardi Gras",
market: "FR",
dateRule: { kind: "easter-offset", days: -47 },
leadDays: 3,
foodTags: ["beignets", "bugnes", "merveilles", "gaufres"],
recipeSlugs: [],
priority: 70,
},
// --- Nederländerna (NL) ---
{
id: "nl-sinterklaas",
slug: "sinterklaas",
nameSv: "Sinterklaas",
nameLocalized: "Sinterklaas",
market: "NL",
dateRule: { kind: "fixed", monthDay: "12-05" },
leadDays: 14,
foodTags: ["kruidnoten", "pepernoten", "chocoladeletter", "speculaas", "banketstaaf"],
recipeSlugs: [],
priority: 95,
},
{
id: "nl-kerst",
slug: "kerst",
nameSv: "Kerst",
nameLocalized: "Kerst",
market: "NL",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 14,
foodTags: ["gourmet", "rollade", "kerststol", "kerstkransjes"],
recipeSlugs: [],
priority: 100,
},
{
id: "nl-oud-en-nieuw",
slug: "oud-en-nieuw",
nameSv: "Oud en Nieuw",
nameLocalized: "Oud en Nieuw",
market: "NL",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 5,
foodTags: ["oliebollen", "appelflappen", "appelbeignets"],
recipeSlugs: [],
priority: 90,
},
{
id: "nl-pasen",
slug: "pasen",
nameSv: "Pasen",
nameLocalized: "Pasen",
market: "NL",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["eieren", "paasstol", "paasbrood", "lamsvlees"],
recipeSlugs: [],
priority: 85,
},
{
id: "nl-koningsdag",
slug: "koningsdag",
nameSv: "Koningsdag",
nameLocalized: "Koningsdag",
market: "NL",
dateRule: { kind: "fixed", monthDay: "04-27" },
leadDays: 5,
foodTags: ["tompouce", "oranje", "gebak"],
recipeSlugs: [],
priority: 65,
},
// --- Spanien (ES) ---
{
id: "es-navidad",
slug: "navidad",
nameSv: "Navidad",
nameLocalized: "Navidad",
market: "ES",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["turron", "mazapan", "polvorones", "cordero", "langostinos", "besugo"],
recipeSlugs: [],
priority: 100,
},
{
id: "es-nochevieja",
slug: "nochevieja",
nameSv: "Nochevieja",
nameLocalized: "Nochevieja",
market: "ES",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["uvas", "cava", "langostinos", "marisco", "jamon"],
recipeSlugs: [],
priority: 90,
},
{
id: "es-reyes",
slug: "reyes",
nameSv: "Día de Reyes",
nameLocalized: "Día de Reyes",
market: "ES",
dateRule: { kind: "fixed", monthDay: "01-06" },
leadDays: 5,
foodTags: ["roscon", "nata", "chocolate", "fruta-escarchada"],
recipeSlugs: [],
priority: 85,
},
{
id: "es-semana-santa",
slug: "semana-santa",
nameSv: "Semana Santa",
nameLocalized: "Semana Santa",
market: "ES",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["torrijas", "bacalao", "garbanzos", "pestinos", "potaje"],
recipeSlugs: [],
priority: 90,
},
{
id: "es-san-juan",
slug: "san-juan",
nameSv: "Noche de San Juan",
nameLocalized: "Noche de San Juan",
market: "ES",
dateRule: { kind: "fixed", monthDay: "06-23" },
leadDays: 5,
foodTags: ["coca", "sardinas", "cava", "pinones"],
recipeSlugs: [],
priority: 75,
},
{
id: "es-la-castanada",
slug: "la-castanada",
nameSv: "La Castañada",
nameLocalized: "La Castañada",
market: "ES",
dateRule: { kind: "fixed", monthDay: "11-01" },
leadDays: 5,
foodTags: ["castanas", "panellets", "boniatos", "huesos-de-santo"],
recipeSlugs: [],
priority: 70,
},
// --- Italien (IT) ---
{
id: "it-natale",
slug: "natale",
nameSv: "Natale",
nameLocalized: "Natale",
market: "IT",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 21,
foodTags: ["panettone", "pandoro", "tortellini", "baccala", "cotechino", "arista"],
recipeSlugs: [],
priority: 100,
},
{
id: "it-capodanno",
slug: "capodanno",
nameSv: "Capodanno",
nameLocalized: "Capodanno",
market: "IT",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["cotechino", "zampone", "lenticchie", "spumante"],
recipeSlugs: [],
priority: 90,
},
{
id: "it-epifania",
slug: "epifania",
nameSv: "Epifania",
nameLocalized: "Epifania",
market: "IT",
dateRule: { kind: "fixed", monthDay: "01-06" },
leadDays: 5,
foodTags: ["befanini", "carbone-dolce", "panettone"],
recipeSlugs: [],
priority: 75,
},
{
id: "it-carnevale",
slug: "carnevale",
nameSv: "Carnevale",
nameLocalized: "Carnevale",
market: "IT",
dateRule: { kind: "easter-offset", days: -47 },
leadDays: 7,
foodTags: ["chiacchiere", "castagnole", "frittelle"],
recipeSlugs: [],
priority: 75,
},
{
id: "it-pasqua",
slug: "pasqua",
nameSv: "Pasqua",
nameLocalized: "Pasqua",
market: "IT",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 14,
foodTags: ["agnello", "colomba", "torta-pasqualina", "casatiello", "pastiera"],
recipeSlugs: [],
priority: 90,
},
{
id: "it-ferragosto",
slug: "ferragosto",
nameSv: "Ferragosto",
nameLocalized: "Ferragosto",
market: "IT",
dateRule: { kind: "fixed", monthDay: "08-15" },
leadDays: 5,
foodTags: ["grigliata", "pollo-ai-peperoni", "anguria", "pasta-fredda"],
recipeSlugs: [],
priority: 80,
},
// --- Portugal (PT) ---
{
id: "pt-natal",
slug: "natal",
nameSv: "Natal",
nameLocalized: "Natal",
market: "PT",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["bacalhau", "polvo", "rabanadas", "filhoses", "bolo-rei", "arroz-doce"],
recipeSlugs: [],
priority: 100,
},
{
id: "pt-ano-novo",
slug: "ano-novo",
nameSv: "Ano Novo",
nameLocalized: "Ano Novo",
market: "PT",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 7,
foodTags: ["passas", "bacalhau", "peru", "roupa-velha", "espumante"],
recipeSlugs: [],
priority: 85,
},
{
id: "pt-dia-de-reis",
slug: "dia-de-reis",
nameSv: "Dia de Reis",
nameLocalized: "Dia de Reis",
market: "PT",
dateRule: { kind: "fixed", monthDay: "01-06" },
leadDays: 5,
foodTags: ["bolo-rei", "bolo-rainha", "fruta-cristalizada"],
recipeSlugs: [],
priority: 75,
},
{
id: "pt-pascoa",
slug: "pascoa",
nameSv: "Páscoa",
nameLocalized: "Páscoa",
market: "PT",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 14,
foodTags: ["cordeiro", "cabrito", "folar", "amendoas", "pao-de-lo"],
recipeSlugs: [],
priority: 90,
},
{
id: "pt-santos-populares",
slug: "santos-populares",
nameSv: "Santos Populares",
nameLocalized: "Santos Populares",
market: "PT",
dateRule: { kind: "range", startMonthDay: "06-12", endMonthDay: "06-29" },
leadDays: 5,
foodTags: ["sardinhas", "caldo-verde", "bifana", "pao-com-chourico"],
recipeSlugs: [],
priority: 85,
},
{
id: "pt-sao-martinho",
slug: "sao-martinho",
nameSv: "São Martinho",
nameLocalized: "São Martinho",
market: "PT",
dateRule: { kind: "fixed", monthDay: "11-11" },
leadDays: 5,
foodTags: ["castanhas", "agua-pe", "jeropiga"],
recipeSlugs: [],
priority: 70,
},
// --- Polen (PL) ---
{
id: "pl-wigilia",
slug: "wigilia",
nameSv: "Wigilia",
nameLocalized: "Wigilia",
market: "PL",
dateRule: { kind: "fixed", monthDay: "12-24" },
leadDays: 21,
foodTags: ["barszcz", "pierogi", "karp", "kapusta-z-grzybami", "sledz", "kutia"],
recipeSlugs: [],
priority: 100,
},
{
id: "pl-boze-narodzenie",
slug: "boze-narodzenie",
nameSv: "Boże Narodzenie",
nameLocalized: "Boże Narodzenie",
market: "PL",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 14,
foodTags: ["bigos", "kielbasa", "pieczen", "zurek", "schab"],
recipeSlugs: [],
priority: 90,
},
{
id: "pl-wielkanoc",
slug: "wielkanoc",
nameSv: "Wielkanoc",
nameLocalized: "Wielkanoc",
market: "PL",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 14,
foodTags: ["zurek", "biala-kielbasa", "jajka", "cwikla", "mazurek", "babka"],
recipeSlugs: [],
priority: 90,
},
{
id: "pl-tlusty-czwartek",
slug: "tlusty-czwartek",
nameSv: "Tłusty Czwartek",
nameLocalized: "Tłusty Czwartek",
market: "PL",
dateRule: { kind: "easter-offset", days: -52 },
leadDays: 3,
foodTags: ["paczki", "faworki", "chrust"],
recipeSlugs: [],
priority: 75,
},
{
id: "pl-sylwester",
slug: "sylwester",
nameSv: "Sylwester",
nameLocalized: "Sylwester",
market: "PL",
dateRule: { kind: "fixed", monthDay: "12-31" },
leadDays: 5,
foodTags: ["sledz", "tatar", "barszcz", "kielbasa"],
recipeSlugs: [],
priority: 80,
},
// --- Storbritannien (GB) ---
{
id: "gb-christmas",
slug: "christmas",
nameSv: "Christmas",
nameLocalized: "Christmas",
market: "GB",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 21,
foodTags: [
"turkey",
"roast-potatoes",
"pigs-in-blankets",
"brussels-sprouts",
"christmas-pudding",
"mince-pies",
],
recipeSlugs: [],
priority: 100,
},
{
id: "gb-easter",
slug: "easter",
nameSv: "Easter",
nameLocalized: "Easter",
market: "GB",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 12,
foodTags: ["roast-lamb", "mint-sauce", "hot-cross-buns", "simnel-cake"],
recipeSlugs: [],
priority: 90,
},
{
id: "gb-pancake-day",
slug: "pancake-day",
nameSv: "Pancake Day",
nameLocalized: "Pancake Day",
market: "GB",
dateRule: { kind: "easter-offset", days: -47 },
leadDays: 5,
foodTags: ["pancakes", "lemon", "sugar", "golden-syrup"],
recipeSlugs: [],
priority: 75,
},
{
id: "gb-bonfire-night",
slug: "bonfire-night",
nameSv: "Bonfire Night",
nameLocalized: "Bonfire Night",
market: "GB",
dateRule: { kind: "fixed", monthDay: "11-05" },
leadDays: 5,
foodTags: ["bonfire-toffee", "parkin", "toffee-apples", "jacket-potatoes", "sausages"],
recipeSlugs: [],
priority: 75,
},
{
id: "gb-burns-night",
slug: "burns-night",
nameSv: "Burns Night",
nameLocalized: "Burns Night",
market: "GB",
dateRule: { kind: "fixed", monthDay: "01-25" },
leadDays: 7,
foodTags: ["haggis", "neeps", "tatties", "cranachan"],
recipeSlugs: [],
priority: 70,
},
{
id: "gb-boxing-day",
slug: "boxing-day",
nameSv: "Boxing Day",
nameLocalized: "Boxing Day",
market: "GB",
dateRule: { kind: "fixed", monthDay: "12-26" },
leadDays: 3,
foodTags: ["turkey-leftovers", "bubble-and-squeak", "cold-cuts", "pork-pie"],
recipeSlugs: [],
priority: 65,
},
// --- USA (US) ---
{
id: "us-thanksgiving",
slug: "thanksgiving",
nameSv: "Thanksgiving",
nameLocalized: "Thanksgiving",
market: "US",
dateRule: { kind: "nth-weekday", month: 11, weekday: 4, n: 4 },
leadDays: 21,
foodTags: [
"turkey",
"stuffing",
"mashed-potatoes",
"gravy",
"cranberry-sauce",
"green-bean-casserole",
"pumpkin-pie",
],
recipeSlugs: [],
priority: 100,
},
{
id: "us-christmas",
slug: "christmas",
nameSv: "Christmas",
nameLocalized: "Christmas",
market: "US",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 21,
foodTags: ["ham", "prime-rib", "roast-turkey", "christmas-cookies", "eggnog"],
recipeSlugs: [],
priority: 100,
},
{
id: "us-fourth-of-july",
slug: "fourth-of-july",
nameSv: "Independence Day",
nameLocalized: "Independence Day",
market: "US",
dateRule: { kind: "fixed", monthDay: "07-04" },
leadDays: 7,
foodTags: [
"hamburgers",
"hot-dogs",
"bbq-ribs",
"corn-on-the-cob",
"potato-salad",
"apple-pie",
],
recipeSlugs: [],
priority: 85,
},
{
id: "us-super-bowl",
slug: "super-bowl",
nameSv: "Super Bowl",
nameLocalized: "Super Bowl",
market: "US",
dateRule: { kind: "nth-weekday", month: 2, weekday: 0, n: 2 },
leadDays: 5,
foodTags: ["chicken-wings", "nachos", "chili", "guacamole", "sliders"],
recipeSlugs: [],
priority: 80,
},
{
id: "us-easter",
slug: "easter",
nameSv: "Easter",
nameLocalized: "Easter",
market: "US",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["ham", "deviled-eggs", "scalloped-potatoes", "carrot-cake"],
recipeSlugs: [],
priority: 85,
},
{
id: "us-memorial-day",
slug: "memorial-day",
nameSv: "Memorial Day",
nameLocalized: "Memorial Day",
market: "US",
dateRule: { kind: "nth-weekday", month: 5, weekday: 1, n: "last" },
leadDays: 5,
foodTags: ["hamburgers", "hot-dogs", "bbq", "baked-beans", "potato-salad"],
recipeSlugs: [],
priority: 75,
},
// --- Kanada (CA) ---
{
id: "ca-thanksgiving",
slug: "thanksgiving",
nameSv: "Thanksgiving",
nameLocalized: "Thanksgiving",
market: "CA",
dateRule: { kind: "nth-weekday", month: 10, weekday: 1, n: 2 },
leadDays: 14,
foodTags: [
"turkey",
"stuffing",
"gravy",
"cranberry-sauce",
"pumpkin-pie",
"butter-tarts",
],
recipeSlugs: [],
priority: 100,
},
{
id: "ca-christmas",
slug: "christmas",
nameSv: "Christmas",
nameLocalized: "Christmas",
market: "CA",
dateRule: { kind: "fixed", monthDay: "12-25" },
leadDays: 21,
foodTags: ["turkey", "ham", "tourtiere", "butter-tarts", "nanaimo-bars"],
recipeSlugs: [],
priority: 100,
},
{
id: "ca-canada-day",
slug: "canada-day",
nameSv: "Canada Day",
nameLocalized: "Canada Day",
market: "CA",
dateRule: { kind: "fixed", monthDay: "07-01" },
leadDays: 5,
foodTags: ["bbq", "hamburgers", "hot-dogs", "poutine", "maple"],
recipeSlugs: [],
priority: 80,
},
{
id: "ca-easter",
slug: "easter",
nameSv: "Easter",
nameLocalized: "Easter",
market: "CA",
dateRule: { kind: "computed", algorithm: "easter" },
leadDays: 10,
foodTags: ["ham", "roast-lamb", "scalloped-potatoes", "hot-cross-buns"],
recipeSlugs: [],
priority: 85,
},
];