/* ============================================================ SWIRL MASTER — Ninja Swirl Receptencompanion Application Logic v1.0 ============================================================ */ // ============================================================ // RECIPE DATABASE — Complete recepten voor Ninja Swirl by CREAMi // ============================================================ const PROGRAMS = { ice_cream: { name: 'Ice Cream', category: 'scooped', icon: '🍨', desc: 'Romige, scooped ijs — de klassieker.' }, lite_ice_cream: { name: 'Lite Ice Cream', category: 'scooped', icon: '🥛', desc: 'Lichtere ijs met minder vet en suiker.' }, gelato: { name: 'Gelato', category: 'scooped', icon: '🇮🇹', desc: 'Italiaanse dichte, zijdezachte ijs.' }, sorbet: { name: 'Sorbet', category: 'scooped', icon: '🥭', desc: 'Fruitig, zuivelvrij en verfrissend.' }, milkshake: { name: 'Milkshake', category: 'scooped', icon: '🥤', desc: 'Dikke, drinkbare traktatie.' }, smoothie_bowl: { name: 'Smoothie Bowl', category: 'scooped', icon: '🥣', desc: 'Gezonde, lepelbare fruitschotel.' }, frozen_yogurt: { name: 'Frozen Yogurt', category: 'scooped', icon: '🥛', desc: 'Frisse, romige bevroren yoghurt.' }, soft_serve: { name: 'Soft Serve', category: 'soft', icon: '🍦', desc: 'Zachte, draaiende ijs — fair stijl.' }, froyo_soft: { name: 'Frozen Yogurt Soft', category: 'soft', icon: '🥛', desc: 'Zachte serve frozen yogurt.' }, custard: { name: 'Custard', category: 'soft', icon: '🥚', desc: 'Rijke, eidooier-gebaseerde soft serve.' }, fruit_whip: { name: 'Fruit Whip', category: 'soft', icon: '🍓', desc: 'Luchtige, fruitige soft serve.' }, high_protein: { name: 'High Protein Soft', category: 'soft', icon: '💪', desc: 'Eiwitrijke soft serve voor na de workout.' }, lite_soft: { name: 'Lite Soft Serve', category: 'soft', icon: '🌿', desc: 'Lichtere soft serve variant.' }, }; const RECIPES = [ // ============ ICE CREAM (Scooped) ============ { id: 'ic-vanilla', type: 'ice_cream', name: 'Klassieke Vanille IJs', emoji: '🍨', description: 'De ultieme basis. Romig, zoet en perfect vanille.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.9, popularity: 100, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '1 eetlepel vanille-extract', '1 theelepel vanille pasta (optioneel)', ], steps: [ 'Mix alle ingrediënten in een kom. Roer tot de suiker volledig is opgelost.', 'Giet het mengsel in een Ninja Swirl pint. Laat 2,5 cm ruimte bovenaan.', 'Plaats de deksel erop en zet in de vriezer voor minimaal 24 uur.', 'Haal de pint uit de vriezer. Plaats in de outer bowl.', 'Selecteer het "Ice Cream" programma en druk op START.', 'Na het spoelen: als het ijs te hard is, voeg dan 1 eetlepel melk toe en gebruik RE-SPIN.', 'Serveer direct of bewaar in de vriezer met de deksel.', ], mixins: ['Chocolade stukjes', 'Gehakte noten', 'Vers fruit', 'Caramel saus', 'Cookie dough stukjes'], nutrition: { calories: 320, fat: '22g', carbs: '28g', protein: '4g' }, tips: 'Gebruik echte vanille pasta voor zichtbare zaadjes. Voor rijkere smaak: vervang melk door extra room.', }, { id: 'ic-chocolate', type: 'ice_cream', name: 'Death By Chocolate IJs', emoji: '🍫', description: 'Intens chocolade voor de echte chocoholic.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.9, popularity: 95, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '⅓ kopje cacaopoeder (33g)', '1 theelepel vanille-extract', 'Snufje zout', ], steps: [ 'Zeef het cacaopoeder in een kom om klontjes te verwijderen.', 'Verwarm 1 kopje room zachtjes (niet koken) en los de suiker en cacao erin op.', 'Roer de rest van de room, melk, vanille en zout erdoor.', 'Giet in de pint, sluit af en vries 24 uur.', 'Plaats in de outer bowl, selecteer "Ice Cream" en START.', 'RE-SPIN met 1 eetlepel melk als het te vast is.', ], mixins: ['Chocolade chunks', 'Brownie stukjes', 'Oreo koekjes', 'Chocolade saus', 'Geroosterde hazelnoten'], nutrition: { calories: 340, fat: '23g', carbs: '32g', protein: '5g' }, tips: 'Voor extra donkere chocolade: gebruik ½ kopje cacao. Voeg espresso-poeder toe voor diepere smaak.', }, { id: 'ic-strawberry', type: 'ice_cream', name: 'Verse Aardbeienijs', emoji: '🍓', description: 'Romig ijs met verse aardbeien — zomer in een pint.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.8, popularity: 90, tags: ['beginner', 'gluten_free'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '1½ kopje verse aardbeien, gewassen en ontkroond (255g)', '1 theelepel vanille-extract', '1 eetlepel citroensap', ], steps: [ 'Pureer de aardbeien met citroensap in een blender tot een gladde massa.', 'Mix room, melk, suiker en vanille in een kom. Roer tot suiker oplost.', 'Roer het aardbeienpuree erdoor.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Ice Cream" programma.', 'RE-SPIN indien nodig.', ], mixins: ['Verse aardbei stukjes', 'Witte chocolade stukjes', 'Biscuit stukjes', 'Balsamico glazuur'], nutrition: { calories: 290, fat: '20g', carbs: '27g', protein: '4g' }, tips: 'Bevroren aardbeien werken ook — laat ze volledig ontdooien. Voor intensere smaak: reduceer het puree tot de helft.', }, { id: 'ic-mint-choc', type: 'ice_cream', name: 'Mint Chocolate Chip', emoji: '🌿', description: 'Verfrissende munt met knapperige chocolade stukjes.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.7, popularity: 85, tags: ['beginner', 'gluten_free'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '1½ theelepel pepermunt extract', '3 druppels groene voedselkleuring (optioneel)', '⅓ kopje donkere chocolade chips (55g)', ], steps: [ 'Mix room, melk, suiker en munt extract tot suiker oplost.', 'Voeg voedselkleuring toe voor een lichtgroene kleur (optioneel).', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Ice Cream" programma.', 'Voeg na het spoelen de chocolade chips toe via de MIX-IN functie.', ], mixins: ['Extra donkere chocolade', 'Andes munt stukjes', 'Cacao nibs', 'Oreo stukjes'], nutrition: { calories: 330, fat: '22g', carbs: '30g', protein: '4g' }, tips: 'Mint extract is sterk — begin met minder. Verse muntblaadjes in de basis trekken geeft een subtielere smaak.', }, { id: 'ic-cookies-cream', type: 'ice_cream', name: 'Cookies & Cream', emoji: '🍪', description: 'Klassieke vanille met royale stukjes chocolate cookie.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.8, popularity: 92, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '1 theelepel vanille-extract', '15 Oreo koekjes (of vergelijkbaar), grof gehakt', ], steps: [ 'Mix room, melk, suiker en vanille tot suiker oplost.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Ice Cream" programma.', 'Voeg de gehakte koekjes toe via de MIX-IN functie.', 'Bewaar een paar hele koekjes voor garnering.', ], mixins: ['Extra koekjes', 'Chocolade saus', 'Brownie stukjes', 'Marshmallow fluff'], nutrition: { calories: 380, fat: '23g', carbs: '40g', protein: '5g' }, tips: 'Hak de koekjes niet te fijn — grove stukjes geven de beste textuur. Vries koekjes vooraf voor minder papperigheid.', }, // ============ GELATO ============ { id: 'gl-vanilla-bean', type: 'gelato', name: 'Vanilla Bean Gelato', emoji: '🇮🇹', description: 'Echte Italiaanse gelato met zichtbare vanillezaadjes.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.9, popularity: 88, tags: ['gluten_free'], diet: ['gluten_free'], program: 'Gelato', ingredients: [ '2 kopjes volle melk (473ml)', '¾ kopje suiker (150g)', '4 eidooiers', '1 vanillestokje, opengesneden en uitgeschraapt', '1 eetlepel maizena (optioneel, voor binding)', ], steps: [ 'Verhit de melk met het vanillestokje en zaadjes tot net onder het kookpunt.', 'Klop eidooiers met suiker tot bleek en luchtig.', 'Giet langzaam de hete melk bij het eimengsel, al roerend.', 'Giet terug in de pan en verwarm zachtjes (au bain-marie) tot het mengsel de lepel bedekt (82°C).', 'Laat volledig afkoelen, minimaal 4 uur in de koelkast.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Gelato" programma.', ], mixins: ['Pistache noten', 'Amaretti koekjes', 'Espresso bonen', 'Karamelized amandelen'], nutrition: { calories: 280, fat: '12g', carbs: '38g', protein: '8g' }, tips: 'De custardbasis is de sleutel. Gebruik een thermometer — boven 85°C gaan de eieren stollen. Zeef voor gladheid.', }, { id: 'gl-stracciatella', type: 'gelato', name: 'Stracciatella Gelato', emoji: '🍫', description: 'Italiaanse klassieker: romige gelato met chocoladeschaafsel.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.8, popularity: 80, tags: ['gluten_free'], diet: ['gluten_free'], program: 'Gelato', ingredients: [ '2 kopjes volle melk (473ml)', '¾ kopje suiker (150g)', '4 eidooiers', '1 theelepel vanille-extract', '½ kopje gesmolten donkere chocolade (85g)', ], steps: [ 'Maak een custardbasis: verwarm melk, klop eieren met suiker, combineer en thickly.', 'Laat afkoelen en voeg vanille toe.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Gelato" programma.', 'Tijdens MIX-IN: drizzle de gesmolten chocolade erin voor dunne schilfers.', ], mixins: ['Extra chocolade vlokken', 'Hazelnoten paste', 'Espresso', 'Caramel stukjes'], nutrition: { calories: 320, fat: '16g', carbs: '36g', protein: '7g' }, tips: 'De truc is hete chocolade langzaam te drizzelen tijdens het mixen — dit creëert de dunne scherfjes.', }, { id: 'gl-pistachio', type: 'gelato', name: 'Pistache Gelato', emoji: '🟢', description: 'Rijke, nootachtige gelato met echte pistaches.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '30 min', freezeTime: '24u', totalTime: '24u 30m', servings: 4, rating: 4.9, popularity: 82, tags: ['gluten_free'], diet: ['gluten_free'], program: 'Gelato', ingredients: [ '2 kopjes volle melk (473ml)', '¾ kopje suiker (150g)', '4 eidooiers', '1 kopje gepelde pistaches (120g), licht geroosterd', '1 theelepel amandelextract', 'Snufje zout', ], steps: [ 'Maal de pistaches fijn in een food processor tot een grove pasta.', 'Verhit de melk en voeg de pistachepasta toe. Laat 15 minuten trekken.', 'Zeef de melk (voor gladde textuur) of laat voor rustieke stijl.', 'Maak de custardbasis met eidooiers en suiker.', 'Combineer, laat afkoelen, giet in pint en vries 24 uur.', 'Verwerk op "Gelato" programma.', ], mixins: ['Gehakte pistaches', 'Amaretti stukjes', 'Donkere chocolade', 'Honing-karamel'], nutrition: { calories: 360, fat: '20g', carbs: '38g', protein: '10g' }, tips: 'Gebruik ongebrande, ongezouten pistaches voor de beste smaak. Siciliaanse pistaches zijn de goudstandaard.', }, // ============ SORBET ============ { id: 'so-mango', type: 'sorbet', name: 'Mango Sorbet', emoji: '🥭', description: 'Tropische, zijdezachte sorbet met maar 2 ingrediënten.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.8, popularity: 87, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: [ '1 blik mango stukken in sap (575g) — of 2 verse mango\'s', '2 eetlepels suiker (optioneel, afhankelijk van zoetheid mango)', '1 eetlepel citroensap', ], steps: [ 'Giet het blik mango met sap in een blender. Blend tot glad.', 'Proef en voeg suiker toe indien nodig.', 'Voeg citroensap toe om de smaak op te helderen.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Sorbet" programma.', 'RE-SPIN met 1 eetlepel water als het te vast is.', ], mixins: ['Lime zeste', 'Chili vlokken', 'Kokos rasp', 'Verse munt'], nutrition: { calories: 140, fat: '0g', carbs: '35g', protein: '1g' }, tips: 'Verse mango werkt fantastisch — kies rijpe, zachte vruchten. Ananas of passievrucht mengt perfect.', }, { id: 'so-pineapple', type: 'sorbet', name: 'Ananas Sorbet', emoji: '🍍', description: 'Briljante, zonnige sorbet — puur fruit genot.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 1m', servings: 4, rating: 4.7, popularity: 75, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: [ '1 blik ananas stukken in sap (575g)', '1 eetlepel citroensap', '1 eetlepel suiker (optioneel)', ], steps: [ 'Blend ananas met sap tot glad.', 'Voeg citroensap en suiker naar smaak toe.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Sorbet" programma.', ], mixins: ['Kokosvlokken', 'Rum-karamel', 'Basilicum', 'Chili zout'], nutrition: { calories: 120, fat: '0g', carbs: '30g', protein: '1g' }, tips: 'Voor een pina colada twist: vervang de helft van de ananas door kokosmelk.', }, { id: 'so-raspberry', type: 'sorbet', name: 'Framboos Sorbet', emoji: '🫐', description: 'Intens fruitige sorbet met levendige kleur.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.8, popularity: 78, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free', 'low_sugar'], diet: ['vegan', 'dairy_free', 'gluten_free', 'low_sugar'], program: 'Sorbet', ingredients: [ '300g diepgevroren frambozen (of vers)', '½ kopje suiker (100g)', '¼ kopje water (60ml)', '1 eetlepel citroensap', ], steps: [ 'Verhit suiker met water tot een siroop. Laat afkoelen.', 'Blend frambozen met siroop en citroensap.', 'Zeef voor gladde textuur (verwijder zaadjes).', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Sorbet" programma.', ], mixins: ['Verse bessen', 'Witte chocolade', 'Munt', 'Balsamico'], nutrition: { calories: 130, fat: '0g', carbs: '32g', protein: '1g' }, tips: 'De siroop basis is belangrijk — het voorkomt kristalvorming. Agave of honing werken ook.', }, { id: 'so-lemon', type: 'sorbet', name: 'Citroen Sorbet', emoji: '🍋', description: 'Verfrissende, zurige sorbet — perfecte palate cleanser.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 65, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free', 'low_sugar'], diet: ['vegan', 'dairy_free', 'gluten_free', 'low_sugar'], program: 'Sorbet', ingredients: [ '1 kopje vers citroensap (4-5 citroenen)', '1½ kopje suiker (300g)', '2 kopjes water (473ml)', '1 eetlepel citroen zeste', ], steps: [ 'Maak een siroop: verhit water met suiker tot opgelost.', 'Voeg citroensap en zeste toe. Laat afkoelen.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Sorbet" programma.', ], mixins: ['Lavendel', 'Basilicum', 'Vodka (voor zachtere textuur)', 'Munt'], nutrition: { calories: 180, fat: '0g', carbs: '46g', protein: '0g' }, tips: 'Een scheutje vodka (1 eetlepel) verlaagt het vriespunt en maakt de sorbet smoother. Alcohol kookt niet uit — blijft aanwezig.', }, // ============ FROZEN YOGURT ============ { id: 'fy-one-ingredient', type: 'frozen_yogurt', name: 'One-Ingredient Frozen Yogurt', emoji: '🥛', description: 'Letterlijk alleen yoghurt. Simpel, snel, heerlijk.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.7, popularity: 83, tags: ['beginner', 'low_sugar'], diet: ['low_sugar'], program: 'Frozen Yogurt', ingredients: [ '1 pint (473ml) volle yoghurt (Griekse stijl)', ], steps: [ 'Roer de yoghurt glad.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Frozen Yogurt" programma.', 'RE-SPIN met 1 eetlepel melk indien te vast.', ], mixins: ['Honing', 'Vers fruit', 'Granola', 'Chocolade', 'Pindakaas'], nutrition: { calories: 150, fat: '8g', carbs: '12g', protein: '8g' }, tips: 'Volle, Griekse yoghurt geeft de beste textuur. Mager yoghurt wordt ijsachtig. Voeg honing voor zoetheid.', }, { id: 'fy-classic-tart', type: 'frozen_yogurt', name: 'Classic Tart Frozen Yogurt', emoji: '🍦', description: 'Pinkberry-stijl tart fro-yo met maar 4 ingrediënten.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.9, popularity: 89, tags: ['beginner'], diet: [], program: 'Frozen Yogurt', ingredients: [ '1 pint (473ml) volle yoghurt', '¼ kopje karnemelk (60ml)', '2 eetlepels vers citroensap', '3 eetlepels suiker (optioneel)', ], steps: [ 'Mix alle ingrediënten in een kom tot glad.', 'Giet in de pint, sluit af en vries 24 uur.', 'Verwerk op "Frozen Yogurt" programma.', ], mixins: ['Vers fruit', 'Granola', 'Chocolade chips', 'Kokos', 'Honing-amandel'], nutrition: { calories: 170, fat: '8g', carbs: '18g', protein: '8g' }, tips: 'De karnemelk geeft de karakteristieke tartness. Geen karnemelk? Voeg extra citroensap toe.', }, { id: 'fy-berry', type: 'frozen_yogurt', name: 'Mixed Berry Frozen Yogurt', emoji: '🫐', description: 'Romige yoghurt met een mix van zomerbessen.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.7, popularity: 76, tags: ['beginner', 'gluten_free'], diet: ['gluten_free'], program: 'Frozen Yogurt', ingredients: [ '1 pint (473ml) volle Griekse yoghurt', '1 kopje gemengde bessen (framboos, bosbes, aardbei) — vers of bevroren', '3 eetlepels honing (45g)', '1 theelepel vanille-extract', ], steps: [ 'Blend de bessen kort (laat wat stukjes zitten voor textuur).', 'Mix yoghurt, honing en vanille.', 'Roer het bessenmengsel erdoor (marmeren effect).', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Frozen Yogurt" programma.', ], mixins: ['Granola', 'Verse bessen', 'Witte chocolade', 'Chia zaad'], nutrition: { calories: 180, fat: '7g', carbs: '22g', protein: '8g' }, tips: 'Marmeren door niet volledig te mixen geeft een prachtig visueel effect en afwisselende smaak.', }, // ============ SOFT SERVE ============ { id: 'ss-vanilla', type: 'soft_serve', name: 'Easy Vanilla Soft Serve', emoji: '🍦', description: 'Klassieke zachte vanille — zoals de kermis, maar beter.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.8, popularity: 91, tags: ['beginner'], diet: [], program: 'Soft Serve', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '2 theelepels vanille-extract', 'Snufje zout', ], steps: [ 'Mix alle ingrediënten in een kom. Roer tot suiker oplost.', 'Giet in de pint (met soft serve nozzle), sluit af en vries 24 uur.', 'Plaats in de outer bowl met de swirl attachment.', 'Selecteer "Soft Serve" en START.', 'Doseer met de swirl knop voor mooie zwierige serving.', ], mixins: ['Chocolade saus (spritz)', 'Gehakte noten', 'Kleurrijke sprinkles', 'Caramel spiraal'], nutrition: { calories: 310, fat: '22g', carbs: '26g', protein: '4g' }, tips: 'Laat de pint 2 minuten op het aanrecht staan voor verwerking voor betere textuur. De swirl nozzle is de truc!', }, { id: 'ss-chocolate', type: 'soft_serve', name: 'Chocolade Soft Serve', emoji: '🍫', description: 'Zachte, romige chocolade soft serve in 10 minuten.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '0 (direct)', totalTime: '10m', servings: 4, rating: 4.7, popularity: 86, tags: ['beginner'], diet: [], program: 'Soft Serve', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅓ kopje cacaopoeder (33g)', '⅔ kopje suiker (133g)', '1 theelepel vanille-extract', ], steps: [ 'Zeef cacaopoeder in een kom.', 'Verwarm 1 kopje melk en los cacao en suiker erin op.', 'Roer room, vanille en de rest erdoor.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Soft Serve" programma met swirl attachment.', ], mixins: ['Chocolade saus spritz', 'Brownie stukjes', 'Oreo crumble', 'Geroosterde amandelen'], nutrition: { calories: 330, fat: '23g', carbs: '30g', protein: '5g' }, tips: 'Voor extra rijkdom: voeg 2 eetlepels gesmolten donkere chocolade toe aan de basis.', }, { id: 'ss-strawberry', type: 'soft_serve', name: 'Verse Aardbei Soft Serve', emoji: '🍓', description: 'Zoete, romige aardbei soft serve met echt fruit.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.8, popularity: 84, tags: ['beginner'], diet: [], program: 'Soft Serve', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '1 kopje verse aardbeien, geblend (170g)', '⅔ kopje suiker (133g)', '1 theelepel vanille-extract', ], steps: [ 'Blend aardbeien tot glad puree.', 'Mix met room, melk, suiker en vanille.', 'Giet in pint met nozzle, sluit en vries 24 uur.', 'Verwerk op "Soft Serve" programma.', ], mixins: ['Verse aardbei stukjes', 'Witte chocolade saus', 'Biscuit crumble', 'Balsamico'], nutrition: { calories: 290, fat: '20g', carbs: '26g', protein: '4g' }, tips: 'De swirl geeft een prachtige roze spiralen. Garneer met een hele aardbei.', }, // ============ MILKSHAKE ============ { id: 'ms-classic', type: 'milkshake', name: 'Klassieke Chocolade Milkshake', emoji: '🥤', description: 'Dikke, romige milkshake — diner stijl.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.8, popularity: 82, tags: ['beginner'], diet: [], program: 'Milkshake', ingredients: [ '2 kopjes vanille ijs basis (van bovenstaand recept)', '½ kopje volle melk (120ml)', '3 eetlepels chocoladesiroop', '1 theelepel vanille-extract', ], steps: [ 'Bereid de vanille ijs basis voor en vries 24 uur.', 'Plaats de bevroren basis in de pint.', 'Voeg melk en chocoladesiroop toe.', 'Verwerk op "Milkshake" programma.', 'Serveer direct in een hoog glas met een rietje.', ], mixins: ['Whipped cream', 'Chocolade saus', 'Beschuitje', 'Cherry'], nutrition: { calories: 380, fat: '24g', carbs: '38g', protein: '6g' }, tips: 'Pas de hoeveelheid melk aan voor gewenste dikte. Minder melk = dikkere shake.', }, { id: 'ms-coffee', type: 'milkshake', name: 'Coffee Caramel Milkshake', emoji: '☕', description: 'Espresso-liefhebbers droomshake met karamel.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.9, popularity: 79, tags: ['beginner'], diet: [], program: 'Milkshake', ingredients: [ '2 kopjes vanille ijs basis', '½ kopje sterke espresso (afgekoeld)', '3 eetlepels karamelsiroop', '½ kopje melk (120ml)', ], steps: [ 'Bereid vanille ijs basis voor en vries 24 uur.', 'Plaats basis in pint met espresso, karamel en melk.', 'Verwerk op "Milkshake" programma.', ], mixins: ['Karamel saus drizzle', 'Espresso bonen (gehakt)', 'Chocolade', 'Whipped cream'], nutrition: { calories: 360, fat: '22g', carbs: '36g', protein: '5g' }, tips: 'Gebruik echte espresso voor de beste smaak. Instant koffie werkt maar is minder intens.', }, // ============ SMOOTHIE BOWL ============ { id: 'sb-acai', type: 'smoothie_bowl', name: 'Açaí Bowl', emoji: '🫐', description: 'Superfood breakfast bowl met açaí en bessen.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.7, popularity: 72, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Smoothie Bowl', ingredients: [ '2 açaí packets (bevroren, 200g totaal)', '1 banaan, bevroren', '½ kopje bessenmix (bevroren)', '¼ kopje amandelmelk (60ml)', '1 eetlepel honing of agave', ], steps: [ 'Blend alle ingrediënten tot een dikke massa.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Smoothie Bowl" programma.', 'Garneer met gesneden fruit, granola en honing.', ], mixins: ['Granola', 'Vers fruit', 'Chia zaad', 'Kokos', 'Cacao nibs'], nutrition: { calories: 220, fat: '5g', carbs: '42g', protein: '4g' }, tips: 'Houd de base dik — minder vloeistof = beter lepelbaar. Toppings maken het af!', }, { id: 'sb-green', type: 'smoothie_bowl', name: 'Green Goddess Bowl', emoji: '🥬', description: 'Spinazie, banaan en mango — gezond en kleurrijk.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.5, popularity: 60, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Smoothie Bowl', ingredients: [ '1 banaan, bevroren', '1 kopje mango stukken (bevroren)', '1 hand spinazie', '½ avokado', '¼ kopje amandelmelk (60ml)', '1 eetlepel honing', ], steps: [ 'Blend alles tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Smoothie Bowl" programma.', 'Garneer met chia, kokos en vers fruit.', ], mixins: ['Chia zaad', 'Hennep zaad', 'Vers fruit', 'Granola', 'Noten boter'], nutrition: { calories: 200, fat: '7g', carbs: '34g', protein: '4g' }, tips: 'Avokado maakt het extra romig. Bevroren banaan is essentieel voor de textuur.', }, // ============ CUSTARD ============ { id: 'cu-vanilla', type: 'custard', name: 'Vanilla Custard Soft Serve', emoji: '🥚', description: 'Rijke, eggnog-achtige soft serve met echte eidooiers.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.9, popularity: 81, tags: ['gluten_free'], diet: ['gluten_free'], program: 'Custard', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '5 eidooiers', '¾ kopje suiker (150g)', '1 vanillestokje, uitgeschraapt', 'Snufje zout', ], steps: [ 'Verhit melk en room met vanille tot net onder kookpunt.', 'Klop eidooiers met suiker en zout tot bleek.', 'Temperer: giet langzaam hete melk bij eieren, al roerend.', 'Verwarm au bain-marie tot 82°C (de lepel bedekt).', 'Laat volledig afkoelen, minimaal 4 uur.', 'Giet in pint met nozzle, sluit en vries 24 uur.', 'Verwerk op "Custard" programma.', ], mixins: ['Nootmuscaat', 'Gember koekjes', 'Caramel swirl', 'Geroosterde pecan'], nutrition: { calories: 420, fat: '32g', carbs: '28g', protein: '7g' }, tips: 'Custard moet echt au bain-marie — directe hitte stolt de eieren. Een thermometer is onmisbaar.', }, // ============ FRUIT WHIP ============ { id: 'fw-tropical', type: 'fruit_whip', name: 'Tropical Pineapple Mango Whip', emoji: '🌴', description: 'Dole Whip stijl — tropisch, fruitig en licht.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u', servings: 4, rating: 4.9, popularity: 85, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Fruit Whip', ingredients: [ '1 kopje ananas stukken (bevroren of blik, 200g)', '1 kopje mango stukken (bevroren of blik, 200g)', '2 eetlepels suiker (optioneel)', '1 eetlepel citroensap', ], steps: [ 'Blend alle ingrediënts tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Fruit Whip" programma.', ], mixins: ['Kokosvlokken', 'Lime zeste', 'Munt', 'Chili zout', 'Rum'], nutrition: { calories: 110, fat: '0g', carbs: '28g', protein: '1g' }, tips: 'Dit is de Dole Whip ervaring thuis! Zorg dat het fruit goed bevroren/uit blik is voor consistentie.', }, { id: 'fw-strawberry', type: 'fruit_whip', name: 'Aardbei Fruit Whip', emoji: '🍓', description: 'Luchtige, fruitige soft serve met verse aardbeien.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.7, popularity: 77, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Fruit Whip', ingredients: [ '2 kopjes aardbeien (bevroren of vers, 340g)', '2 eetlepels suiker', '1 eetlepel citroensap', '2 eetlepels water', ], steps: [ 'Blend alle ingrediënten tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Fruit Whip" programma.', ], mixins: ['Balsamico', 'Verse munt', 'Witte chocolade', 'Basque cake stukjes'], nutrition: { calories: 80, fat: '0g', carbs: '20g', protein: '0g' }, tips: 'Bevroren aardbeien geven intensere smaak. Voeg een scheutje kokosmelk voor romigheid.', }, // ============ HIGH PROTEIN ============ { id: 'hp-choc-pb', type: 'high_protein', name: 'Chocolate Peanut Butter Protein', emoji: '💪', description: 'Eiwitrijke soft serve — perfect post-workout traktatie.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.8, popularity: 80, tags: ['beginner'], diet: [], program: 'High Protein Soft', ingredients: [ '1½ kopjes chocolade eiwitschuddishek (kant-klaar, 355ml)', '½ kopje Griekse yoghurt (120g)', '2 eetlepels pindakaas', '1 eetlepel chia zaad', ], steps: [ 'Mix alle ingrediënten in een kom tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "High Protein" programma.', ], mixins: ['Pindakaas drizzle', 'Chocolade stukjes', 'Banaan', 'Granola'], nutrition: { calories: 240, fat: '10g', carbs: '16g', protein: '25g' }, tips: 'Kant-klare eiwitschuddishek werkt beter dan poeder — de textuur is creamer. Premier Protein of Fairlife aanbevolen.', }, { id: 'hp-cinnamon', type: 'high_protein', name: 'Cinnamon Roll Protein IJs', emoji: '💪', description: 'Kaneelbrood smaak in eiwitrijke soft serve.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.6, popularity: 68, tags: ['beginner'], diet: [], program: 'High Protein Soft', ingredients: [ '1¾ kopje kaneelbrood eiwitschuddishek (415ml)', '2 eetlepels vanille pudding mix (suikervrij optioneel)', '½ theelepel kaneel', ], steps: [ 'Mix alle ingrediënten tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "High Protein" programma.', ], mixins: ['Kaneel suiker', 'Beschuitjes', 'Karamel drizzle', 'Pecan noten'], nutrition: { calories: 200, fat: '5g', carbs: '14g', protein: '28g' }, tips: 'De pudding mix geeft de textuur van echt ijs. Probeer ook met andere smaken schuddishek.', }, // ============ DAIRY-FREE / VEGAN ============ { id: 'df-coconut-vanilla', type: 'ice_cream', name: 'Dairy-Free Vanilla Coconut IJs', emoji: '🥥', description: 'Romige vegan ijs met kokosmelk als base.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.6, popularity: 73, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Ice Cream', ingredients: [ '1 blik volle kokosmelk (400ml)', '½ kopje amandelmelk (120ml)', '⅓ kopje suiker (66g)', '1 eetlepel coconut oil (gesmolten)', '1 theelepel vanille-extract', ], steps: [ 'Mix alle ingrediënten in een kom. Roer tot suiker oplost.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Ice Cream" programma.', ], mixins: ['Geroosterde kokos', 'Chocolade', 'Mango', 'Pistaches', 'Lime zeste'], nutrition: { calories: 280, fat: '20g', carbs: '24g', protein: '2g' }, tips: 'Volle kokosmelk (geen light) is essentieel. Het kokosvet zorgt voor de romige textuur.', }, // ============ KETO / LOW CARB ============ { id: 'keto-vanilla', type: 'lite_ice_cream', name: 'Keto Vanille IJs', emoji: '🥑', description: 'Suikervrije, keto-vriendelijke ijs met roomkaas.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.5, popularity: 65, tags: ['beginner', 'keto', 'low_sugar', 'gluten_free'], diet: ['keto', 'low_sugar', 'gluten_free'], program: 'Lite Ice Cream', ingredients: [ '2 kopjes zware room (473ml)', '1 kopje amandelmelk, ongezoet (237ml)', '60g roomkaas, verzacht', '⅓ kopje erythritol of allulose (66g)', '1 theelepel vanille-extract', 'Snufje zout', ], steps: [ 'Verwarm een beetje room en los de roomkaas in op.', 'Roer alle ingrediënten samen tot glad.', 'Giet in pint, sluit en vries 24 uur.', 'Verwerk op "Lite Ice Cream" programma.', ], mixins: ['Pecan noten', 'Suikervrije chocolade', 'Kaneel', 'Maca powder'], nutrition: { calories: 260, fat: '24g', carbs: '6g', protein: '3g' }, tips: 'Allulose werkt het beste voor keto — het bevriest niet zo hard als erythritol. Confectionerende sweeter mixt beter.', }, // ============ UNIQUE & CREATIVE ICE CREAMS ============ { id: 'ic-salted-caramel-pecan', type: 'ice_cream', name: 'Salted Caramel Pecan', emoji: '🥨', description: 'Gouden karamel met geroosterde pecan en een snuf zeezout.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.9, popularity: 93, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '4 el boter', '½ tl zeezout', '1 tl vanille-extract', '¾ kopje pecannoten, geroosterd en gehakt (90g)'], steps: ['Maak karamel: smelt suiker in een pan op middelhoog vuur tot goudbruin.', 'Voeg voorzichtig boter en room toe (let op spatten).', 'Roer het zout en vanille erdoor. Laat afkoelen.', 'Voeg de melk toe en roer glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg pecans toe via MIX-IN.'], mixins: ['Extra karamel saus', 'Geroosterde amandelen', 'Chocolade stukjes'], nutrition: { calories: 420, fat: '32g', carbs: '30g', protein: '5g' }, tips: 'De karamel moet donker zijn maar niet verbrand — goudbruin is het perfecte punt.', }, { id: 'ic-earl-grey', type: 'ice_cream', name: 'Earl Grey Tea IJs', emoji: '🫖', description: 'Verfijnd ijs met Earl Grey thee — bergamot en vanille.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.7, popularity: 72, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '4 Earl Grey theeblaadjes (losse thee)', '1 tl vanille-extract'], steps: ['Verhit room en melk tot net onder kookpunt.', 'Voeg theeblaadjes toe en laat 15 minuten trekken.', 'Zeef de vloeistof en druk zoveel mogelijk smaak uit de blaadjes.', 'Roer suiker en vanille erdoor tot opgelost.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Shortbread koekjes', 'Witte chocolade', 'Hazelnoten'], nutrition: { calories: 310, fat: '22g', carbs: '26g', protein: '4g' }, tips: 'Lavender Earl Grey geeft een extra bloemige dimensie. Gebruik losse thee, niet zakjes.', }, { id: 'ic-lavender-honey', type: 'ice_cream', name: 'Lavendel-Honing IJs', emoji: '💜', description: 'Bloemig, delicaat ijs met gedroogde lavendel en zoete honing.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.6, popularity: 65, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅓ kopje honing (115g)', '2 tl gedroogde culinaire lavendelbloemen', '1 tl vanille-extract'], steps: ['Verhit melk en room tot net onder kookpunt.', 'Voeg lavendel toe, dek af en laat 20 minuten trekken.', 'Zeef de lavendel eruit.', 'Roer honing en vanille erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Honing-amandel clusters', 'Witte chocolade', 'Verse bessen'], nutrition: { calories: 330, fat: '22g', carbs: '28g', protein: '4g' }, tips: 'Gebruik alleen culinaire lavendel (geen potpourri!). Te veel lavendel maakt het zeepachtig.', }, { id: 'ic-matcha-white-choc', type: 'ice_cream', name: 'Matcha Witte Chocolade', emoji: '🍵', description: 'Aardse matcha met romige witte chocolade stukjes.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.7, popularity: 78, tags: ['beginner'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '2 el ceremoniele matcha poeder', '1 tl vanille-extract', '½ kopje witte chocolade stukjes (85g)'], steps: ['Zeef matcha poeder in een klein beetje warme melk. Roer tot een gladde pasta.', 'Mix met rest van room, melk, suiker en vanille.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg witte chocolade toe via MIX-IN.'], mixins: ['Zwarte sesam', 'Geroosterde rijst', 'Rode bonen paste'], nutrition: { calories: 350, fat: '23g', carbs: '34g', protein: '5g' }, tips: 'Ceremoniele matcha geeft de beste kleur en smaak. Culinaire matcha is bitterder.', }, { id: 'ic-tiramisu', type: 'ice_cream', name: 'Tiramisu IJs', emoji: '☕', description: 'Espresso, mascarpone en een vleugje amaretto — Italiaanse traktatie.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.9, popularity: 86, tags: [], diet: [], program: 'Ice Cream', ingredients: ['1 kopje mascarpone (225g)', '1 kopjes zware room (237ml)', '½ kopje suiker (100g)', '2 el sterke espresso, afgekoeld', '1 el amaretto (optioneel)', '1 tl vanille-extract', '1 kopje ladyfingers, in stukken'], steps: ['Klop mascarpone met suiker glad.', 'Voeg espresso, amaretto en vanille toe.', 'Vouw de room erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg ladyfinger stukjes toe via MIX-IN.'], mixins: ['Cacao poeder', 'Espresso bonen', 'Amaretto koekjes'], nutrition: { calories: 380, fat: '26g', carbs: '32g', protein: '6g' }, tips: 'Dompel de ladyfingers kort in extra espresso voor een authentieke smaak.', }, { id: 'ic-cheesecake', type: 'ice_cream', name: 'New York Cheesecake IJs', emoji: '🍰', description: 'Romige cheesecake smaak met stukjes graham cracker.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.8, popularity: 84, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['1 kopje roomkaas, verzacht (225g)', '1½ kopjes zware room (355ml)', '⅔ kopje suiker (133g)', '1 tl vanille-extract', '1 el citroensap', '1 kopje graham crackers, gehakt'], steps: ['Mix roomkaas met suiker glad.', 'Voeg room, vanille en citroensap toe. Roer tot suiker oplost.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg graham crackers toe via MIX-IN.'], mixins: ['Verse bessen', 'Karamel saus', 'Blauwe bessen compote'], nutrition: { calories: 390, fat: '28g', carbs: '32g', protein: '5g' }, tips: 'Gebruik volle roomkaas voor de beste textuur. Light wordt ijsachtig.', }, { id: 'ic-red-velvet', type: 'ice_cream', name: 'Red Velvet IJs', emoji: '🟥', description: 'Rode fluweel cake iJs met cacao en cream cheese swirl.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.7, popularity: 79, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '2 el cacaopoeder', '1 tl rode voedselkleuring', '1 tl vanille-extract', '1 kopje roomkaas (225g)', '1 kopje red velvet cake stukjes'], steps: ['Mix room, melk, suiker, cacao en kleuring.', 'Klop roomkaas los en vouw erdoor voor een marmer effect.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg cake stukjes toe via MIX-IN.'], mixins: ['Witte chocolade chips', 'Cream cheese glazuur', 'Cake kruimels'], nutrition: { calories: 380, fat: '25g', carbs: '36g', protein: '5g' }, tips: 'Gebruik gekochte red velvet cake voor gemak, of bak zelf en vries de stukjes vooraf.', }, { id: 'ic-nutella', type: 'ice_cream', name: 'Nutella Hazelnoot IJs', emoji: '🍫', description: 'Romige chocolade-hazelnoot spread als iJs. Hemels.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.9, popularity: 91, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['1½ kopjes zware room (355ml)', '½ kopjes volle melk (120ml)', '¾ kopje Nutella (210g)', '¼ kopje suiker (50g)', '1 tl vanille-extract'], steps: ['Verwarm de melk zachtjes en los de Nutella erin op.', 'Roer room, suiker en vanille erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Gehakte hazelnoten', 'Witte chocolade', 'Brownie stukjes'], nutrition: { calories: 420, fat: '28g', carbs: '40g', protein: '6g' }, tips: 'Warm de Nutella iets op voor makkelijker mixen. Extra Nutella als swirl na het spoelen!', }, { id: 'ic-creme-brulee', type: 'ice_cream', name: 'Crème Brûlée IJs', emoji: '🔥', description: 'Rijke custard iJs met karamelized suiker stukjes.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '30 min', freezeTime: '24u', totalTime: '24u 30m', servings: 4, rating: 4.8, popularity: 81, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '5 eidooiers', '⅔ kopje suiker (133g)', '1 vanillestokje, uitgeschraapt', 'Extra suiker voor karamel'], steps: ['Maak een custardbasis: verwarm melk en room met vanille.', 'Klop eidooiers met suiker, combineer en thickly tot 82°C.', 'Laat afkoelen, giet in pint en vries 24u.', 'Verwerk op "Ice Cream".', 'Maak karamelstukjes: smelt suiker op bakpapier, breek in stukken.', 'Voeg karamelstukjes toe via MIX-IN.'], mixins: ['Karamel stukjes', 'Geroosterde amandelen', 'Shortbread'], nutrition: { calories: 400, fat: '28g', carbs: '34g', protein: '6g' }, tips: 'De karamel stukjes geven de "crack" van crème brûlée. Maak ze dun en breek in kleine scherfjes.', }, { id: 'ic-smores', type: 'ice_cream', name: "S'mores IJs", emoji: '🏕️', description: 'Graham cracker, marshmallow en chocolade — kampvuur in een pint.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.8, popularity: 83, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '3 el cacaopoeder', '1 tl vanille-extract', 'Graham crackers, gehakt', 'Mini marshmallows', 'Chocolade chips'], steps: ['Mix room, melk, suiker, cacao en vanille.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".', 'Voeg graham crackers, marshmallows en chocolade toe via MIX-IN.'], mixins: ['Extra marshmallow fluff', 'Chocolade saus', 'Graham cracker kruimels'], nutrition: { calories: 370, fat: '23g', carbs: '40g', protein: '5g' }, tips: 'Rooster de marshmallows kort met een brander voor echte s\'mores smaak.', }, { id: 'ic-peanut-butter-cup', type: 'ice_cream', name: 'Peanut Butter Cup IJs', emoji: '🥜', description: 'Romige pindakaas iJs met chocolade-peanut butter stukjes.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.9, popularity: 88, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '½ kopje pindakaas, glad (120g)', '1 tl vanille-extract', '½ tl zout', '½ kopje Reese\'s of pindakaas-chocolade cups, gehakt'], steps: ['Verwarm een deel van de melk en los de pindakaas erin op.', 'Mix met room, suiker, vanille en zout.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg peanut butter cups toe via MIX-IN.'], mixins: ['Extra pindakaas drizzle', 'Chocolade saus', 'Gehakte pinda\'s'], nutrition: { calories: 440, fat: '32g', carbs: '30g', protein: '9g' }, tips: 'Gebruik gladde pindakaas zonder stukjes. Crunchy geeft een andere textuur.', }, { id: 'ic-dulce-de-leche', type: 'ice_cream', name: 'Dulce de Leche IJs', emoji: '🇦🇷', description: 'Argentijnse gekarameliseerde melk als romig iJs.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.8, popularity: 80, tags: ['beginner', 'gluten_free'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 blikje Dulce de Leche (397g)', '½ kopje volle melk (120ml)', '1 tl vanille-extract', 'Snufje zout'], steps: ['Verwarm de melk zachtjes.', 'Roer de Dulce de Leche erdoor tot glad.', 'Voeg room, vanille en zout toe.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Gehakte walnoten', 'Chocolade stukjes', 'Karamel popcorn'], nutrition: { calories: 430, fat: '24g', carbs: '48g', protein: '6g' }, tips: 'Koop een blikje Dulce de Leche (of maak zelf door gecondenseerde melk 3u te koken in de blik).', }, { id: 'ic-black-sesame', type: 'ice_cream', name: 'Zwarte Sesam IJs', emoji: '⚫', description: 'Geroosterde zwarte sesam — nootachtig, uniek en elegant.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.6, popularity: 62, tags: [], diet: ['vegan', 'dairy_free'], program: 'Ice Cream', ingredients: ['2 kopjes kokosmelk (473ml)', '½ kopje zwarte sesam pasta (120g)', '⅓ kopje suiker (66g)', '2 el kokosolie', '1 tl vanille-extract', 'Snufje zout'], steps: ['Rooster 2 el zwarte sesamzaadjes in een droge pan tot ze gaan poppen.', 'Mix alle ingrediënten in een blender tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Witte chocolade', 'Geroosterde rijst', 'Matcha stukjes'], nutrition: { calories: 340, fat: '26g', carbs: '22g', protein: '5g' }, tips: 'Zwarte sesam pasta (nerigoma) is te koop bij Aziatische supermarkten. Prachtige grijze kleur!', }, { id: 'ic-cinnamon-roll', type: 'ice_cream', name: 'Cinnamon Roll IJs', emoji: '🥮', description: 'Kaneel, brown sugar en cream cheese glazuur smaken.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.7, popularity: 76, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje lichtbruine basterdsuiker (133g)', '1½ el kaneel', '1 tl vanille-extract', '½ kopje roomkaas (115g)', '1 kopje kaneelbroodjes, in stukken'], steps: ['Mix room, melk, basterdsuiker, kaneel en vanille.', 'Klop roomkaas los en vouw erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream". Voeg broodstukjes toe via MIX-IN.'], mixins: ['Kaneel suiker', 'Pecan noten', 'Cream cheese glazuur'], nutrition: { calories: 380, fat: '24g', carbs: '38g', protein: '5g' }, tips: 'Gebruik overgebleven kaneelbroodjes of koop kant-en-klaar. Vries ze vooraf.', }, { id: 'ic-pumpkin-spice', type: 'ice_cream', name: 'Pumpkin Spice IJs', emoji: '🎃', description: 'Herfst in een pint — pompoen, kaneel, nootmuskaat en kruidnagel.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 70, tags: ['beginner', 'gluten_free'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '1 blik pompoenpuree (425g)', '⅔ kopje suiker (133g)', '1 tl kaneel', '½ tl nootmuskaat', '¼ tl kruidnagel', '¼ tl gemberpoeder', '1 tl vanille-extract'], steps: ['Mix alle ingrediënten in een kom tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Graham cracker stukjes', 'Pecan noten', 'Karamel saus', 'Gember koekjes'], nutrition: { calories: 300, fat: '20g', carbs: '28g', protein: '4g' }, tips: 'Gebruik pompoenpuree (zoet of ongezouten). Geen pompoenkruidenmix? Gebruik 2 tl kaneel + 1 tl nootmuskaat.', }, // ============ UNIQUE GELATO ============ { id: 'gl-taro', type: 'gelato', name: 'Taro Bubble Tea Gelato', emoji: '🟣', description: 'Populaire Aziatische taro smaak — paars, zoet en aards.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.6, popularity: 68, tags: [], diet: ['vegan', 'dairy_free'], program: 'Gelato', ingredients: ['2 kopjes kokosmelk (473ml)', '3 el taro poeder (45g)', '¼ kopje suiker (50g)', '2 el tapioca parels (gekookt)', '1 tl vanille-extract'], steps: ['Verhit de kokosmelk en los taro poeder en suiker erin op.', 'Laat afkoelen en voeg vanille toe.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Gelato". Voeg tapioca parels toe via MIX-IN.'], mixins: ['Extra tapioca parels', 'Zwarte sesam', 'Condensed milk drizzle'], nutrition: { calories: 280, fat: '18g', carbs: '30g', protein: '2g' }, tips: 'Taro poeder is te koop bij Aziatische winkels. Kook tapioca parels volgens verpakking.', }, // ============ UNIQUE SORBETS ============ { id: 'so-rose-wine', type: 'sorbet', name: 'Rosé Wijn Sorbet', emoji: '🍷', description: 'Elegante sorbet van droge rosé wijn en citroen.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.7, popularity: 74, tags: [], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['1 fles rosé wijn (750ml)', '1 kopje suiker (200g)', '½ kopje water (120ml)', '2 el citroensap', '1 el citroen zeste'], steps: ['Maak een siroop: verhit water met suiker tot opgelost.', 'Laat afkoelen en meng met rosé en citroensap.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Verse frambozen', 'Munt', 'Prosecco drizzle'], nutrition: { calories: 180, fat: '0g', carbs: '28g', protein: '0g' }, tips: 'De alcohol houdt de sorbet zachter dan fruit-only sorbets. Perfect voor een diner.', }, { id: 'so-mojito', type: 'sorbet', name: 'Mojito Sorbet', emoji: '🍹', description: 'Rum, limoen en munt — verfrissend als een Cubaanse cocktail.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 71, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['1 kopje water (237ml)', '1 kopje suiker (200g)', '½ kopje vers limoensap (120ml)', '¼ kopje witte rum (60ml)', '1 hand verse munt, fijngehakt', 'Lime zeste'], steps: ['Maak een siroop van water en suiker. Laat afkoelen.', 'Voeg limoensap, rum en munt toe.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Extra verse munt', 'Lime partjes', 'Bruiswater'], nutrition: { calories: 200, fat: '0g', carbs: '42g', protein: '0g' }, tips: 'Zonder rum ook heerlijk als alcoholvrije versie. Voeg extra munt voor intensere smaak.', }, { id: 'so-aperol-spritz', type: 'sorbet', name: 'Aperol Spritz Sorbet', emoji: '🟠', description: 'Bitterzoet oranje sorbet — Italiaanse happy hour in een pint.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.5, popularity: 66, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['1 kopje Aperol (237ml)', '1 kopje prosecco (237ml)', '1 kopje water (237ml)', '⅔ kopje suiker (133g)', '1 el citroensap', 'Sinaasappel zeste'], steps: ['Maak een siroop van water en suiker. Laat afkoelen.', 'Meng met Aperol, prosecco en citroensap.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Sinaasappel partjes', 'Olijven (ja, echt)', 'Bruiswater'], nutrition: { calories: 190, fat: '0g', carbs: '38g', protein: '0g' }, tips: 'De prosecco maakt het luchtig. Serveer in een coupe glas met een sinaasappelschijfje.', }, { id: 'so-hibiscus', type: 'sorbet', name: 'Hibiscus Sorbet', emoji: '🌺', description: 'Diep rood, bloemig en tart — verfrissend exotisch.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.6, popularity: 63, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['4 gedroogde hibiscusbloemen (of 2 theezakjes)', '2 kopjes water (473ml)', '⅔ kopje suiker (133g)', '2 el citroensap', '1 el honing'], steps: ['Breng water aan de kook. Giet over hibiscusbloemen.', 'Laat 15 minuten trekken. Zeef.', 'Roer suiker, honing en citroensap erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Verse munt', 'Gember stukjes', 'Lime zeste'], nutrition: { calories: 120, fat: '0g', carbs: '30g', protein: '0g' }, tips: 'Hibiscus thee (karkade) is intens van kleur en smaak. Te koop bij Turkse marokkaanse winkels.', }, { id: 'so-passionfruit', type: 'sorbet', name: 'Passievrucht Sorbet', emoji: '🟡', description: 'Intens tropisch — zoet, zurig en vol karakter.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.7, popularity: 73, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['1 blik passievrucht puree (350g) of 8 verse passievruchten', '½ kopje suiker (100g)', '½ kopje water (120ml)', '2 el limoensap'], steps: ['Maak een siroop van water en suiker. Laat afkoelen.', 'Meng met passievrucht puree en limoensap.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Kokosvlokken', 'Verse munt', 'Chili zout'], nutrition: { calories: 130, fat: '0g', carbs: '32g', protein: '1g' }, tips: 'Passievrucht puree in blik is het makkelijkst. Verse geven een wat bitterdere smaak.', }, { id: 'so-watermelon', type: 'sorbet', name: 'Watermeloen Sorbet', emoji: '🍉', description: 'Zomerse verfrissing — puur watermeloen genot.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.5, popularity: 69, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['4 kopjes watermeloen, ontpit en in blokken (600g)', '⅓ kopje suiker (66g)', '1 el limoensap', '1 el water'], steps: ['Pureer de watermeloen in een blender tot glad.', 'Roer suiker, limoensap en water erdoor.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Sorbet".'], mixins: ['Verse munt', 'Feta crumble (zoet-zout)', 'Chili vlokken'], nutrition: { calories: 90, fat: '0g', carbs: '23g', protein: '1g' }, tips: 'Watermeloen bevat veel water — minder suiker nodig. Voeg een snuf zout toe voor smaakdiepte.', }, // ============ UNIQUE FROZEN YOGURT ============ { id: 'fy-maple-walnut', type: 'frozen_yogurt', name: 'Maple Walnut Frozen Yogurt', emoji: '🍁', description: 'Ahornsiroop en walnoten — herfstige FroYo classic.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 67, tags: ['beginner'], diet: [], program: 'Frozen Yogurt', ingredients: ['1 pint (473ml) Griekse yoghurt', '⅓ kopje echte ahornsiroop (115g)', '1 tl vanille-extract', '½ kopje walnoten, gehakt (60g)'], steps: ['Mix yoghurt, ahornsiroop en vanille tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Frozen Yogurt". Voeg walnoten toe via MIX-IN.'], mixins: ['Pecannoten', 'Extra ahornsiroop drizzle', 'Gember stukjes'], nutrition: { calories: 220, fat: '10g', carbs: '24g', protein: '8g' }, tips: 'Gebruik GRADE A Dark ahornsiroop voor de meest intense smaak.', }, // ============ UNIQUE SOFT SERVE ============ { id: 'ss-coconut-curry', type: 'soft_serve', name: 'Coconut Curry Soft Serve', emoji: '🍛', description: 'Avant-garde: kokos met een warme curry ondertoon. Gedurfd!', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.3, popularity: 55, tags: [], diet: ['vegan', 'dairy_free'], program: 'Soft Serve', ingredients: ['2 kopjes kokosmelk (473ml)', '⅓ kopje suiker (66g)', '1 el gele curry pasta (mild)', '1 tl gemberpoeder', '1 tl limoensap', 'Snufje zout'], steps: ['Verhit een beetje kokosmelk en los de curry pasta erin op.', 'Mix met rest van ingrediënten.', 'Giet in pint met nozzle, sluit en vries 24u.', 'Verwerk op "Soft Serve".'], mixins: ['Geroosterde cashewnoten', 'Lime zeste', 'Kokosvlokken', 'Chili vlokken'], nutrition: { calories: 280, fat: '20g', carbs: '22g', protein: '3g' }, tips: 'Begin met minder curry pasta — je kan altijd meer toevoegen. Mild is de sleutel.', }, // ============ UNIQUE FRUIT WHIP ============ { id: 'fw-dragonfruit', type: 'fruit_whip', name: 'Dragonfruit (Pitaya) Whip', emoji: '🐉', description: 'Fel roze, exotische fruit whip met dragonfruit.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.7, popularity: 75, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Fruit Whip', ingredients: ['1 kopje dragonfruit (pitaya) blokjes, bevroren (200g)', '1 kopje ananas blokjes, bevroren (200g)', '2 el suiker', '1 el limoensap'], steps: ['Blend alle ingrediënten tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Fruit Whip".'], mixins: ['Kokosvlokken', 'Chia zaad', 'Verse mango'], nutrition: { calories: 110, fat: '0g', carbs: '28g', protein: '1g' }, tips: 'Bevroren dragonfruit is te koop bij Aziatische markten. De kleur is ongeloofijk!', }, // ============ UNIQUE SMOOTHIE BOWLS ============ { id: 'sb-avocado-lime', type: 'smoothie_bowl', name: 'Avocado-Lime Smoothie Bowl', emoji: '🥑', description: 'Romige avocado met lime en honing — groen en goed.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.4, popularity: 58, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Smoothie Bowl', ingredients: ['1 rijpe avocado', '1 banaan, bevroren', '½ kopje spinazie', '¼ kopje amandelmelk (60ml)', '2 el limoensap', '1 el honing of agave'], steps: ['Blend alles tot een dikke massa.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Smoothie Bowl".', 'Garneer met chia, kokos en limoen.'], mixins: ['Chia zaad', 'Kokos vlokken', 'Hennep zaad', 'Granola'], nutrition: { calories: 230, fat: '12g', carbs: '30g', protein: '4g' }, tips: 'Avocado maakt het extra romig zonder zuivel. Perfect voor vegan ontbijt.', }, // ============ UNIQUE HIGH PROTEIN ============ { id: 'hp-vanilla-almond', type: 'high_protein', name: 'Vanille Amandel Protein Soft', emoji: '💪', description: 'Klassieke vanille-amandel protein soft serve.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.6, popularity: 64, tags: ['beginner'], diet: [], program: 'High Protein Soft', ingredients: ['1¾ kopje vanille eiwitschuddishek (415ml)', '2 el amandel boter', '1 tl kaneel', '1 el chia zaad'], steps: ['Mix alles tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "High Protein".'], mixins: ['Gehakte amandelen', 'Chocolade stukjes', 'Banaan'], nutrition: { calories: 230, fat: '11g', carbs: '14g', protein: '26g' }, tips: 'Amandel boter is romiger dan pindakaas. Cashew boter is nog subtieler.', }, { id: 'hp-strawberry-banana', type: 'high_protein', name: 'Aardbei-Banaan Protein Shake IJs', emoji: '💪', description: 'Fruity protein soft serve met aardbei en banaan.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.7, popularity: 70, tags: ['beginner'], diet: [], program: 'High Protein Soft', ingredients: ['1¾ kopje aardbei eiwitschuddishek (415ml)', '1 rijpe banaan', '1 el chia zaad', '½ tl vanille-extract'], steps: ['Blend de banaan met de schuddishek tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "High Protein".'], mixins: ['Verse aardbeien', 'Granola', 'Donkere chocolade'], nutrition: { calories: 210, fat: '5g', carbs: '22g', protein: '28g' }, tips: 'Bevroren banaan maakt het extra romig. Rijper = zoeter.', }, // ============ VEGAN UNIQUE ============ { id: 'df-coconut-lime', type: 'ice_cream', name: 'Coconut-Lime Vegan IJs', emoji: '🥥', description: 'Tropische kokos met een pittige lime twist.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 68, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Ice Cream', ingredients: ['1 blik kokosmelk (400ml)', '½ kopje amandelmelk (120ml)', '⅓ kopje suiker (66g)', '3 el limoensap', '1 tl lime zeste', '1 el kokosolie'], steps: ['Mix alle ingrediënten tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Kokosvlokken', 'Verse mango', 'Chili zout', 'Munt'], nutrition: { calories: 280, fat: '20g', carbs: '24g', protein: '2g' }, tips: 'De lime zeste geeft een intense citrus aromatic. Probeer ook met yuzu!', }, { id: 'df-avocado-coconut', type: 'ice_cream', name: 'Avocado-Kokos Vegan IJs', emoji: '🥑', description: 'Hemels romig door avocado — groen en voedzaam.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.5, popularity: 60, tags: ['beginner', 'vegan', 'dairy_free'], diet: ['vegan', 'dairy_free'], program: 'Ice Cream', ingredients: ['1 blik kokosmelk (400ml)', '1 rijpe avocado', '⅓ kopje suiker (66g) of agave', '2 el limoensap', '1 tl vanille-extract'], steps: ['Blend alle ingrediënten tot glad.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Ice Cream".'], mixins: ['Donkere chocolade stukjes', 'Kokosvlokken', 'Hazelnoten'], nutrition: { calories: 290, fat: '20g', carbs: '24g', protein: '3g' }, tips: 'Avocado maakt het ongelooflijk romig zonder zuivel. Zorg dat hij goed rijp is.', }, // ============ LITE ICE CREAM ============ { id: 'ic-blueberry-lavender', type: 'lite_ice_cream', name: 'Blauwe Bes-Lavendel Lite IJs', emoji: '🫐', description: 'Bloemig en fruitig — paarse lavendel met blauwe bessen.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 64, tags: ['beginner'], diet: [], program: 'Lite Ice Cream', ingredients: ['1½ kopjes amandelmelk, ongezoet (355ml)', '1 kopje Griekse yoghurt 0% (230g)', '1 kopjes blauwe bessen (150g)', '3 el honing (45g)', '1 tl gedroogde lavendelbloemen', '1 tl vanille-extract'], steps: ['Verhit ¼ kopje amandelmelk en laat lavendel 10 min trekken. Zeef.', 'Blend de bessen met de lavendelmelk, yoghurt, honing en vanille.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Lite Ice Cream".'], mixins: ['Verse blauwe bessen', 'Honing drizzle', 'Graham cracker stukjes'], nutrition: { calories: 150, fat: '3g', carbs: '24g', protein: '8g' }, tips: 'Lavendel kan overheersen — begin met minder. Blauwe bessen geven een prachtige kleur.', }, { id: 'ic-rooibos-vanilla', type: 'lite_ice_cream', name: 'Rooibos-Vanille Lite IJs', emoji: '🔴', description: 'Warm, aards rooibos met zoete vanille — Zuid-Afrikaanse inspiratie.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.4, popularity: 52, tags: ['beginner', 'low_sugar'], diet: ['low_sugar'], program: 'Lite Ice Cream', ingredients: ['1½ kopjes amandelmelk (355ml)', '1 kopje Griekse yoghurt (230g)', '3 rooibos theezakjes', '3 el honing (45g)', '1 tl vanille-extract'], steps: ['Verhit amandelmelk tot net onder kookpunt.', 'Voeg rooibos theezakjes toe, laat 15 min trekken.', 'Verwijder zakjes, voeg yoghurt, honing en vanille toe.', 'Giet in pint, sluit en vries 24u.', 'Verwerk op "Lite Ice Cream".'], mixins: ['Shortbread koekjes', 'Pecan noten', 'Gember stukjes'], nutrition: { calories: 130, fat: '3g', carbs: '18g', protein: '8g' }, tips: 'Rooibos is cafeïnevrij en natuurlijk zoet. Probeer ook Honeybush theer.', }, // ============ BATCH 2 — UNIQUE & CREATIVE EXPANSION ============ { id: 'ic-espresso-martini', type: 'ice_cream', name: 'Espresso Martini IJs', emoji: '🍸', description: 'Koffie, vodka en kahlua — het after-dinner drankje als iJs.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.7, popularity: 76, tags: ['beginner'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅔ kopje suiker (133g)', '2 el oploskoffie (10g)', '3 el wodka (45ml)', '2 el Kahlua (30ml)', '1 tl vanille-extract'], steps: ['Los koffie op in 2 el warme melk.', 'Mix met room, suiker, wodka, Kahlua en vanille.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Chocolade espresso bonen', 'Karamel saus', 'Brownie stukjes'], nutrition: { calories: 320, fat: '22g', carbs: '26g', protein: '4g' }, tips: 'De alcohol houdt het iJs iets zachter.', }, { id: 'ic-stout-beer', type: 'ice_cream', name: 'Stout Bier IJs', emoji: '🍺', description: 'Donkere stout — karamel, koffie en chocolate noten.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.5, popularity: 58, tags: [], diet: [], program: 'Ice Cream', ingredients: ['1 kopje zware room (237ml)', '1 kopje volle melk (237ml)', '¾ kopje suiker (150g)', '1 kopje donkere stout bier (237ml)', '2 el cacaopoeder', '1 tl vanille-extract'], steps: ['Verwarm melk en los cacao op.', 'Voeg suiker en stout toe.', 'Voeg room en vanille toe.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Pecan noten', 'Donkere chocolade', 'Karamel saus'], nutrition: { calories: 290, fat: '16g', carbs: '32g', protein: '4g' }, tips: 'Guinness werkt het beste. Vermijd IPA — te bitter.', }, { id: 'ic-pecan-pie', type: 'ice_cream', name: 'Pecan Pie IJs', emoji: '🥧', description: 'Butterscotch, geroosterde pecan en bourbon.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.8, popularity: 72, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '¾ kopje basterdsuiker (150g)', '3 el bourbon', '1 tl vanille-extract', '1 kopje pecannoten geroosterd (120g)'], steps: ['Verwarm melk en los suiker op.', 'Voeg bourbon, room en vanille toe.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream. Voeg pecans toe via MIX-IN.'], mixins: ['Extra pecans', 'Karamel saus', 'Shortbread stukjes'], nutrition: { calories: 440, fat: '30g', carbs: '38g', protein: '5g' }, tips: 'Rooster pecans 5 min op 180°C.', }, { id: 'ic-carrot-cake', type: 'ice_cream', name: 'Carrot Cake IJs', emoji: '🥕', description: 'Wortel, kaneel, ananas en roomkaas.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '25 min', freezeTime: '24u', totalTime: '24u 25m', servings: 4, rating: 4.6, popularity: 64, tags: [], diet: [], program: 'Ice Cream', ingredients: ['1½ kopjes zware room (355ml)', '½ kopje roomkaas (115g)', '½ kopje melk (120ml)', '⅔ kopje suiker (133g)', '1 kopje geraspte wortel (120g)', '1 tl kaneel', '½ tl nootmuskaat', '½ kopje ananas (80g)', '½ kopje walnoten (60g)'], steps: ['Mix roomkaas met suiker glad.', 'Voeg room, melk en specerijen toe.', 'Roer wortel, ananas en walnoten erdoor.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Cream cheese glazuur', 'Walnoten', 'Ananas stukjes'], nutrition: { calories: 340, fat: '24g', carbs: '30g', protein: '5g' }, tips: 'Knijp geraspte wortel uit om vocht te verwijderen.', }, { id: 'ic-fig-honey', type: 'ice_cream', name: 'Vijg-Honing IJs', emoji: '🌿', description: 'Zoete vijgen, wilde honing en rozemarijn.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '30 min', freezeTime: '24u', totalTime: '24u 30m', servings: 4, rating: 4.6, popularity: 56, tags: [], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje volle melk (237ml)', '⅓ kopje honing (115g)', '1 kopje verse vijgen (150g)', '1 tl rozemarijn fijngehakt', '1 tl vanille-extract'], steps: ['Verhit melk en laat rozemarijn 10 min trekken. Zeef.', 'Mix met room, honing en vanille.', 'Voeg vijgen toe.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Gehakte vijgen', 'Honey-amandel clusters', 'Pistaches'], nutrition: { calories: 320, fat: '20g', carbs: '32g', protein: '4g' }, tips: 'Gedroogde vijgen werken ook prima.', }, { id: 'ic-white-choc-macadamia', type: 'ice_cream', name: 'Witte Choc-Macadamia IJs', emoji: '🤍', description: 'Romige witte chocolade met knapperige macadamia.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.7, popularity: 74, tags: ['beginner'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '⅔ kopje suiker (133g)', '¾ kopje witte chocolade gesmolten (130g)', '1 tl vanille-extract', '½ kopje macadamia (70g)'], steps: ['Verwarm melk en los witte chocolade op.', 'Mix met room en vanille.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream. Voeg macadamia toe via MIX-IN.'], mixins: ['Extra witte chocolade', 'Kokos vlokken', 'Verse bessen'], nutrition: { calories: 420, fat: '30g', carbs: '34g', protein: '5g' }, tips: 'Gebruik echte witte chocolade met cacaoboter.', }, { id: 'ic-gingerbread', type: 'ice_cream', name: 'Gingerbread IJs', emoji: '🫚', description: 'Peperkoek — kaneel, gember, nootmuskaat en molasses.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 67, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '½ kopje suiker (100g)', '¼ kopje molasses (60ml)', '2 tl kaneel', '1 tl gemberpoeder', '½ tl nootmuskaat', '1 tl vanille-extract'], steps: ['Mix alle ingrediënten.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Speculaas stukjes', 'Candied gember', 'Witte chocolade'], nutrition: { calories: 300, fat: '20g', carbs: '30g', protein: '4g' }, tips: 'Molasses geeft diepe complexe zoetheid.', }, { id: 'ic-capuccino', type: 'ice_cream', name: 'Cappuccino IJs', emoji: '☕', description: 'Italiaanse koffie iJs met romige textuur.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 73, tags: ['beginner'], diet: ['gluten_free'], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '⅔ kopje suiker (133g)', '3 el espresso (15g)', '1 tl vanille-extract'], steps: ['Los koffie op in warme melk.', 'Mix met room, suiker en vanille.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Chocolade stukjes', 'Biscotti', 'Espresso bonen'], nutrition: { calories: 300, fat: '20g', carbs: '26g', protein: '4g' }, tips: 'Voor extra kick: voeg 1 el Baileys toe.', }, { id: 'ic-banana-nut', type: 'ice_cream', name: 'Banaan-Noten IJs', emoji: '🍌', description: 'Romige banaan met geroosterde walnoten en kaneel.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 70, tags: ['beginner'], diet: [], program: 'Ice Cream', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '2 rijpe bananen geprakt (240g)', '⅓ kopje suiker (66g)', '1 tl kaneel', '1 tl vanille-extract', '½ kopje walnoten (60g)'], steps: ['Prak bananen glad.', 'Mix met room, melk, suiker en kaneel.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream. Voeg walnoten toe via MIX-IN.'], mixins: ['Pecan noten', 'Honig drizzle', 'Chocolade stukjes'], nutrition: { calories: 310, fat: '20g', carbs: '30g', protein: '5g' }, tips: 'Rijpere bananen = zoeter en intenser.', }, { id: 'ic-stracciatella', type: 'gelato', name: 'Stracciatella Gelato', emoji: '🍫', description: 'Romige vanille gelato met fijne chocolade vlokken.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.8, popularity: 82, tags: ['beginner'], diet: ['gluten_free'], program: 'Gelato', ingredients: ['2 kopjes volle melk (473ml)', '1 kopje zware room (237ml)', '⅔ kopje suiker (133g)', '1 vanillestokje', '½ kopje donkere chocolade gesmolten (85g)'], steps: ['Verhit melk en room met vanille.', 'Roer suiker erdoor.', 'Laat afkoelen, giet in pint, vries 24u.', 'Verwerk op Gelato.', 'Drizzle gesmolten chocolade tijdens RE-SPIN.'], mixins: ['Chocolade vlokken', 'Hazelnoten', 'Espresso'], nutrition: { calories: 340, fat: '20g', carbs: '36g', protein: '5g' }, tips: 'Voeg koude chocolade toe TIJDENS het spoelen voor stracciatella effect.', }, { id: 'gl-coffee-caramel', type: 'gelato', name: 'Koffie-Karamel Gelato', emoji: '☕', description: 'Espresso gelato met karamel swirl.', difficulty: 'Gemiddeld', difficultyScore: 2, prepTime: '20 min', freezeTime: '24u', totalTime: '24u 20m', servings: 4, rating: 4.7, popularity: 75, tags: [], diet: [], program: 'Gelato', ingredients: ['2 kopjes volle melk (473ml)', '1 kopje zware room (237ml)', '⅔ kopje suiker (133g)', '2 el espresso (30ml)', '3 el karamelsaus (45ml)', '1 tl vanille-extract'], steps: ['Verhit melk en los suiker op.', 'Voeg espresso en room toe.', 'Giet in pint, vries 24u.', 'Verwerk op Gelato. Voeg karamel toe via MIX-IN.'], mixins: ['Karamel stukjes', 'Chocolade bonen', 'Shortbread'], nutrition: { calories: 310, fat: '16g', carbs: '38g', protein: '5g' }, tips: 'Voor intensere smaak: 3 el espresso.', }, { id: 'so-coconut-lime', type: 'sorbet', name: 'Kokos-Lime Sorbet', emoji: '🥥', description: 'Tropische kokos met pittige lime — zuivelvrij.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 68, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['1 blik kokosmelk (400ml)', '½ kopje water (120ml)', '⅓ kopje suiker (66g)', '3 el limoensap (45ml)', '1 tl lime zeste'], steps: ['Mix alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op Sorbet.'], mixins: ['Kokosvlokken', 'Verse munt', 'Chili zout'], nutrition: { calories: 220, fat: '12g', carbs: '28g', protein: '2g' }, tips: 'Kokosmelk vet maakt deze sorbet extra romig.', }, { id: 'so-raspberry-rose', type: 'sorbet', name: 'Framboos-Roos Sorbet', emoji: '🌹', description: 'Romantische framboos met rozenwater.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.7, popularity: 66, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['2 kopjes frambozen (300g)', '¾ kopje suiker (150g)', '½ kopje water (120ml)', '1 tl rozenwater', '1 el citroensap'], steps: ['Maak siroop van water en suiker.', 'Pureer frambozen en zeef.', 'Mix met siroop en rozenwater.', 'Giet in pint, vries 24u.', 'Verwerk op Sorbet.'], mixins: ['Verse frambozen', 'Eetbare bloemblaadjes', 'Witte chocolade'], nutrition: { calories: 140, fat: '0g', carbs: '34g', protein: '1g' }, tips: 'Rozenwater is sterk — 1 tl is genoeg.', }, { id: 'so-pomegranate', type: 'sorbet', name: 'Granaatappel Sorbet', emoji: '🔴', description: 'Tart en zoet — diep robijnrood.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.5, popularity: 58, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Sorbet', ingredients: ['2 kopjes granaatappelsap (473ml)', '⅔ kopje suiker (133g)', '¼ kopje water (60ml)', '2 el citroensap', '1 el honing'], steps: ['Maak siroop. Mix met sap en citroen.', 'Giet in pint, vries 24u.', 'Verwerk op Sorbet.'], mixins: ['Granaatappel pitjes', 'Verse munt', 'Donkere chocolade'], nutrition: { calories: 160, fat: '0g', carbs: '40g', protein: '0g' }, tips: '100% granaatappelsap geeft beste smaak.', }, { id: 'ss-strawberry-cream', type: 'soft_serve', name: 'Aardbei-Crème Soft Serve', emoji: '🍓', description: 'Klassieke zomerdag soft serve met echte aardbeien.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.8, popularity: 84, tags: ['beginner'], diet: [], program: 'Soft Serve', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '⅔ kopje suiker (133g)', '1 kopje aardbeien geblend (200g)', '1 tl vanille-extract'], steps: ['Blend aardbeien.', 'Mix met room, melk en suiker.', 'Giet in pint met nozzle, vries 24u.', 'Verwerk op Soft Serve.'], mixins: ['Verse aardbeien', 'Chocolade saus', 'Sprinkles'], nutrition: { calories: 320, fat: '22g', carbs: '28g', protein: '4g' }, tips: 'Rijpe of bevroren aardbeien werken prima.', }, { id: 'ss-mint-choc', type: 'soft_serve', name: 'Munt-Chocolade Soft Serve', emoji: '🌿', description: 'Verfrissende munt met chocolade stukjes.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.7, popularity: 77, tags: ['beginner'], diet: [], program: 'Soft Serve', ingredients: ['2 kopjes zware room (473ml)', '1 kopje melk (237ml)', '⅔ kopje suiker (133g)', '1½ tl pepermunt extract', '½ kopje chocolade chips (85g)'], steps: ['Mix room, melk, suiker en pepermunt.', 'Giet in pint met nozzle, vries 24u.', 'Verwerk op Soft Serve. Voeg chocolade toe via MIX-IN.'], mixins: ['Extra chocolade', 'Brownie stukjes', 'Oreo kruimels'], nutrition: { calories: 330, fat: '22g', carbs: '30g', protein: '4g' }, tips: 'Pepermunt extract is sterk! Begin met 1 tl.', }, { id: 'fy-lemon-curd', type: 'frozen_yogurt', name: 'Citroen-Curd Frozen Yogurt', emoji: '🍋', description: 'Frisse citroen met rijke lemon curd.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 65, tags: ['beginner'], diet: [], program: 'Frozen Yogurt', ingredients: ['1 pint Griekse yoghurt (473ml)', '⅓ kopje lemon curd (115g)', '3 el suiker (45g)', '2 el citroensap', '1 tl citroen zeste'], steps: ['Mix yoghurt met lemon curd.', 'Voeg suiker, citroen en zeste toe.', 'Giet in pint, vries 24u.', 'Verwerk op Frozen Yogurt.'], mixins: ['Shortbread stukjes', 'Verse bessen', 'Meringue stukjes'], nutrition: { calories: 190, fat: '5g', carbs: '28g', protein: '8g' }, tips: 'Lemon curd is te koop in potten.', }, { id: 'fy-peach-cobbler', type: 'frozen_yogurt', name: 'Perzik-Cobbler Frozen Yogurt', emoji: '🍑', description: 'Zomerse perzik met kaneel en vanille.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '15 min', freezeTime: '24u', totalTime: '24u 15m', servings: 4, rating: 4.6, popularity: 63, tags: ['beginner'], diet: [], program: 'Frozen Yogurt', ingredients: ['1 pint Griekse yoghurt (473ml)', '1 kopje perziken (150g)', '⅓ kopje suiker (66g)', '1 tl kaneel', '1 tl vanille-extract'], steps: ['Pureer perziken.', 'Mix met yoghurt, suiker en kaneel.', 'Giet in pint, vries 24u.', 'Verwerk op Frozen Yogurt.'], mixins: ['Cobbler topping', 'Pecan noten', 'Honing drizzle'], nutrition: { calories: 170, fat: '4g', carbs: '26g', protein: '8g' }, tips: 'Rijpe perziken zijn essentieel.', }, { id: 'fw-mango-pineapple', type: 'fruit_whip', name: 'Mango-Ananas Whip', emoji: '🥭', description: 'Tropische Dole Whip stijl — puur fruit.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.8, popularity: 82, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Fruit Whip', ingredients: ['1½ kopjes mango bevroren (225g)', '1½ kopjes ananas bevroren (225g)', '2 el suiker', '1 el limoensap'], steps: ['Blend alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op Fruit Whip.'], mixins: ['Kokosvlokken', 'Verse mango', 'Chili zout'], nutrition: { calories: 100, fat: '0g', carbs: '25g', protein: '1g' }, tips: 'Dit is de beroemde Dole Whip smaak!', }, { id: 'fw-strawberry-banana', type: 'fruit_whip', name: 'Aardbei-Banaan Whip', emoji: '🍓', description: 'Klassieke fruit combo als luchtige soft serve.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 4, rating: 4.6, popularity: 73, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Fruit Whip', ingredients: ['2 kopjes aardbeien bevroren (300g)', '1 banaan bevroren (120g)', '2 el suiker', '1 el citroensap'], steps: ['Blend alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op Fruit Whip.'], mixins: ['Verse bessen', 'Granola', 'Honing drizzle'], nutrition: { calories: 90, fat: '0g', carbs: '22g', protein: '1g' }, tips: 'Bevroren fruit is de sleutel.', }, { id: 'sb-berry-granola', type: 'smoothie_bowl', name: 'Bessen-Granola Smoothie Bowl', emoji: '🫐', description: 'Gezond ontbijt — romige bessen met knapperige granola.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.5, popularity: 62, tags: ['beginner'], diet: [], program: 'Smoothie Bowl', ingredients: ['1 banaan bevroren', '1 kopje bessen bevroren (150g)', '½ kopje Griekse yoghurt (115g)', '¼ kopje amandelmelk (60ml)', '1 el honing', '⅓ kopje granola'], steps: ['Blend tot dik.', 'Giet in pint, vries 24u.', 'Verwerk op Smoothie Bowl.', 'Garneer met granola.'], mixins: ['Granola', 'Chia zaad', 'Verse bessen', 'Kokos'], nutrition: { calories: 250, fat: '5g', carbs: '42g', protein: '8g' }, tips: 'De smoothie moet dik zijn.', }, { id: 'hp-chocolate-peanut', type: 'high_protein', name: 'Chocolade-Pinda Protein IJs', emoji: '💪', description: 'Klassieke choc-pinda combo met 28g eiwit.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.7, popularity: 72, tags: ['beginner'], diet: [], program: 'High Protein Soft', ingredients: ['1¾ kopje chocolade eiwitschuddishek (415ml)', '2 el pindakaas', '1 el cacaopoeder', '1 el chia zaad'], steps: ['Mix alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op High Protein Soft.'], mixins: ['Gehakte pinda\'s', 'Chocolade stukjes', 'Banaan'], nutrition: { calories: 250, fat: '12g', carbs: '12g', protein: '28g' }, tips: 'Goede eiwitshake met 25g+ eiwit per fles.', }, { id: 'df-chocolate-avocado', type: 'ice_cream', name: 'Chocolade-Avocado Vegan IJs', emoji: '🥑', description: 'Romige vegan chocolade — avocado maakt zijdezacht.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.6, popularity: 65, tags: ['beginner', 'vegan', 'dairy_free'], diet: ['vegan', 'dairy_free'], program: 'Ice Cream', ingredients: ['1 blik kokosmelk (400ml)', '1 rijpe avocado', '⅓ kopje cacaopoeder (33g)', '⅓ kopje suiker (66g)', '1 tl vanille-extract'], steps: ['Blend alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Vegan chocolade', 'Kokos vlokken', 'Hazelnoten'], nutrition: { calories: 280, fat: '18g', carbs: '28g', protein: '4g' }, tips: 'Avocado proef je niet — alleen romigheid.', }, { id: 'df-coconut-mango', type: 'ice_cream', name: 'Kokos-Mango Vegan IJs', emoji: '🥭', description: 'Tropische droom — kokos met vers mango.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '10 min', freezeTime: '24u', totalTime: '24u 10m', servings: 4, rating: 4.7, popularity: 71, tags: ['beginner', 'vegan', 'dairy_free', 'gluten_free'], diet: ['vegan', 'dairy_free', 'gluten_free'], program: 'Ice Cream', ingredients: ['1 blik kokosmelk (400ml)', '1 kopje mango puree (240g)', '⅓ kopje suiker (66g)', '1 el citroensap', '1 tl vanille-extract'], steps: ['Blend alles glad.', 'Giet in pint, vries 24u.', 'Verwerk op Ice Cream.'], mixins: ['Verse mango', 'Kokos vlokken', 'Chili zout'], nutrition: { calories: 250, fat: '14g', carbs: '32g', protein: '2g' }, tips: 'Mango-kokos is een match made in heaven.', }, { id: 'ms-salted-caramel', type: 'milkshake', name: 'Salted Caramel Milkshake', emoji: '🥤', description: 'Romige milkshake met karamel en zeezout.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.8, popularity: 78, tags: ['beginner'], diet: [], program: 'Milkshake', ingredients: ['1 kopje zware room (237ml)', '1 kopje melk (237ml)', '⅓ kopje karamelsaus (115g)', '½ tl zeezout', '2 el suiker', '1 tl vanille-extract'], steps: ['Mix alles.', 'Giet in pint, vries 24u.', 'Verwerk op Milkshake.'], mixins: ['Karamel saus', 'Noten', 'Chocolade saus'], nutrition: { calories: 340, fat: '18g', carbs: '42g', protein: '5g' }, tips: 'Serveer met slagroom en karamel drizzle.', }, { id: 'ms-oreo', type: 'milkshake', name: 'Oreo Milkshake', emoji: '🍪', description: 'De ultieme cookies & cream milkshake.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.9, popularity: 85, tags: ['beginner'], diet: [], program: 'Milkshake', ingredients: ['1 kopje zware room (237ml)', '1 kopje melk (237ml)', '⅓ kopje suiker (66g)', '12 Oreo koekjes', '1 tl vanille-extract'], steps: ['Mix room, melk en suiker.', 'Breek 8 Oreos en voeg toe.', 'Giet in pint, vries 24u.', 'Verwerk op Milkshake.', 'Garneer met 4 fijngehakte Oreos.'], mixins: ['Extra Oreo kruimels', 'Chocolade saus', 'Slagroom'], nutrition: { calories: 380, fat: '20g', carbs: '45g', protein: '5g' }, tips: 'Double Stuf Oreos = extra romig.', }, { id: 'ms-nutella', type: 'milkshake', name: 'Nutella Milkshake', emoji: '🍫', description: 'Chocolade-hazelnoot hemel in vloeibare vorm.', difficulty: 'Beginner', difficultyScore: 1, prepTime: '5 min', freezeTime: '24u', totalTime: '24u 5m', servings: 2, rating: 4.9, popularity: 83, tags: ['beginner'], diet: [], program: 'Milkshake', ingredients: ['1 kopje zware room (237ml)', '1 kopje melk (237ml)', '½ kopje Nutella (140g)', '2 el suiker', '1 tl vanille-extract'], steps: ['Verwarm melk en los Nutella op.', 'Mix met room en vanille.', 'Giet in pint, vries 24u.', 'Verwerk op Milkshake.'], mixins: ['Gehakte hazelnoten', 'Chocolade saus', 'Slagroom'], nutrition: { calories: 420, fat: '26g', carbs: '42g', protein: '7g' }, tips: 'Warm Nutella op voor makkelijk mixen.', }, ]; // ============================================================ // MIX & MATCH DATA // ============================================================ const MIXMATCH_DATA = { bases: [ { id: 'heavy-cream', name: 'Zware room', emoji: '🥛', desc: 'Klassiek, meest romig' }, { id: 'whole-milk', name: 'Volle melk', emoji: '🐄', desc: 'Standaard, lichter' }, { id: 'coconut-milk', name: 'Kokosmelk', emoji: '🥥', desc: 'Vegan, tropisch' }, { id: 'almond-milk', name: 'Amandelmelk', emoji: '🥛', desc: 'Low-cal, notig' }, { id: 'greek-yogurt', name: 'Griekse yoghurt', emoji: '🥛', desc: 'Tart, eiwitrijk' }, { id: 'oat-milk', name: 'Havermelk', emoji: '🌾', desc: 'Vegan, romig' }, { id: 'cashew-milk', name: 'Cashewmelk', emoji: '🥜', desc: 'Vegan, boterzig' }, { id: 'protein-shake', name: 'Eiwitshake', emoji: '💪', desc: 'Klaar-te-drinken' }, ], flavors: [ { id: 'vanilla', name: 'Vanille', emoji: '🌸', pairing: 95 }, { id: 'chocolate', name: 'Chocolade', emoji: '🍫', pairing: 95 }, { id: 'strawberry', name: 'Aardbei', emoji: '🍓', pairing: 88 }, { id: 'mango', name: 'Mango', emoji: '🥭', pairing: 82 }, { id: 'pistachio', name: 'Pistache', emoji: '🟢', pairing: 78 }, { id: 'coffee', name: 'Koffie', emoji: '☕', pairing: 85 }, { id: 'matcha', name: 'Matcha', emoji: '🍵', pairing: 72 }, { id: 'lemon', name: 'Citroen', emoji: '🍋', pairing: 68 }, { id: 'lavender', name: 'Lavendel', emoji: '💜', pairing: 55 }, { id: 'caramel', name: 'Karamel', emoji: '🍯', pairing: 90 }, { id: 'mint', name: 'Munt', emoji: '🌿', pairing: 75 }, { id: 'blackberry', name: 'Bosbes', emoji: '🫐', pairing: 80 }, { id: 'banana', name: 'Banaan', emoji: '🍌', pairing: 78 }, { id: 'rose', name: 'Roos', emoji: '🌹', pairing: 45 }, { id: 'cardamom', name: 'Kardemom', emoji: '🟤', pairing: 50 }, { id: 'espresso', name: 'Espresso', emoji: '☕', pairing: 82 }, ], mixins: [ { id: 'choc-chunks', name: 'Chocolade stukjes', emoji: '🍫', pairing: 92 }, { id: 'brownie', name: 'Brownie stukjes', emoji: '🟫', pairing: 88 }, { id: 'oreo', name: 'Oreo crumble', emoji: '🍪', pairing: 90 }, { id: 'caramel-swirl', name: 'Karamel swirl', emoji: '🍯', pairing: 85 }, { id: 'pecan', name: 'Pecan noten', emoji: '🥜', pairing: 75 }, { id: 'cookie-dough', name: 'Cookie dough', emoji: '🟡', pairing: 87 }, { id: 'fresh-berries', name: 'Verse bessen', emoji: '🫐', pairing: 80 }, { id: 'granola', name: 'Granola', emoji: '🥣', pairing: 70 }, { id: 'coconut-flakes', name: 'Kokos vlokken', emoji: '🥥', pairing: 68 }, { id: 'almonds', name: 'Geroosterde amandelen', emoji: '🥜', pairing: 72 }, { id: 'marshmallow', name: 'Marshmallow', emoji: '⬜', pairing: 65 }, { id: 'pistachio-nuts', name: 'Pistaches', emoji: '🟢', pairing: 70 }, { id: 'espresso-beans', name: 'Espresso bonen', emoji: '🟤', pairing: 68 }, { id: 'mango-chunks', name: 'Mango stukjes', emoji: '🥭', pairing: 60 }, { id: 'chili', name: 'Chili vlokken', emoji: '🌶️', pairing: 35 }, ], toppings: [ { id: 'hot-fudge', name: 'Warme chocoladesaus', emoji: '🍫', pairing: 95 }, { id: 'caramel-sauce', name: 'Karamel saus', emoji: '🍯', pairing: 92 }, { id: 'whipped-cream', name: 'Slagroom', emoji: '🥛', pairing: 90 }, { id: 'sprinkles', name: 'Sprinkles', emoji: '🌈', pairing: 70 }, { id: 'cherry', name: 'Kers', emoji: '🍒', pairing: 75 }, { id: 'mint-leaf', name: 'Verse munt', emoji: '🌿', pairing: 60 }, { id: 'waffle-cone', name: 'Wafel hoorntje', emoji: '🍦', pairing: 88 }, { id: 'lime-zest', name: 'Lime rasp', emoji: '🍋', pairing: 50 }, { id: 'sea-salt', name: 'Zeezout vlokken', emoji: '🧂', pairing: 55 }, { id: 'honey', name: 'Honing', emoji: '🍯', pairing: 72 }, { id: 'berry-compote', name: 'Bessen compote', emoji: '🫐', pairing: 78 }, { id: 'balsamic', name: 'Balsamico glazuur', emoji: '🟤', pairing: 40 }, ], }; // ============================================================ // FLAVOR PAIRING MATRIX — Voor Mix & Match compatibility scoring // ============================================================ const PAIRING_RULES = { // [flavor][mixin] = modifier (0.5 - 1.5) 'chocolate': { 'choc-chunks': 1.3, 'brownie': 1.4, 'caramel-swirl': 1.2, 'espresso-beans': 1.3, 'chili': 1.2 }, 'vanilla': { 'choc-chunks': 1.2, 'oreo': 1.3, 'cookie-dough': 1.3, 'fresh-berries': 1.2, 'caramel-swirl': 1.2 }, 'strawberry': { 'fresh-berries': 1.3, 'granola': 1.2, 'choc-chunks': 1.1, 'marshmallow': 1.2 }, 'mango': { 'coconut-flakes': 1.3, 'chili': 1.4, 'lime-zest': 1.3, 'fresh-berries': 0.8 }, 'pistachio': { 'pistachio-nuts': 1.4, 'almonds': 1.2, 'choc-chunks': 1.1, 'honey': 1.2 }, 'coffee': { 'espresso-beans': 1.4, 'choc-chunks': 1.3, 'caramel-swirl': 1.3, 'brownie': 1.2 }, 'matcha': { 'almonds': 1.2, 'coconut-flakes': 1.2, 'choc-chunks': 1.0, 'fresh-berries': 1.1 }, 'lemon': { 'fresh-berries': 1.3, 'mint-leaf': 1.2, 'lime-zest': 1.3, 'granola': 1.1 }, 'caramel': { 'caramel-swirl': 1.5, 'pecan': 1.3, 'sea-salt': 1.4, 'brownie': 1.2 }, 'mint': { 'choc-chunks': 1.4, 'brownie': 1.2, 'fresh-berries': 1.0 }, 'banana': { 'choc-chunks': 1.2, 'caramel-swirl': 1.2, 'pecan': 1.1, 'granola': 1.3 }, }; // ============================================================ // GUIDE CONTENT // ============================================================ const GUIDE_CONTENT = { programs: { title: '🎛️ Alle 13 Programma\'s', html: `
De Ninja Swirl by CREAMi heeft 13 één-knops programma's verdeeld over twee categorieën: Scooped (7) en Soft Serve (6). Hieronder het volledige overzicht.
${p.desc}
Programma ID: ${key}
De Ninja Swirl by CREAMi gebruikt een uniek systeem: in plaats van een traditioneel ijsmachine met ingebouwde vrieskom, vries je het mengsel in speciale pints. De machine gebruikt dan een roterende paddle (de "Creamifier") om het bevroren blok om te zetten in romig ijs.
Blend of roer je ingrediënten. Giet in een Ninja Swirl pint tot 2,5 cm van de rand.
Plaats de afgedekte pint minimaal 24 uur in de vriezer op -18°C of kouder. Het mengsel moet volledig hard bevroren zijn.
Plaats de pint in de outer bowl. Sluit het deksel. Voor soft serve: installeer de swirl nozzle. Plaats de outer bowl op het platform en til omhoog.
Kies het juiste programma en druk op START. De machine draait ~2-4 minuten. Het geluidsniveau is hoog (80-85dB) — dit is normaal.
Haal de pint eruit. Maak een kuiltje in het midden. Voeg mix-ins toe en gebruik het MIX-IN programma. Voor soft serve: dispenseer met de swirl knop.
Een goede voorbereiding is cruciaal voor perfect resultaat. De pinten moeten minimaal 24 uur in de vriezer. De temperatuur moet consequent -18°C of lager zijn. Een vries-vries combinatie werkt, maar de back-vriezer is betrouwbaarder dan de deur.
Vul de pint tot maximaal de MAX lijn (ongeveer 2,5 cm onder de rand). Te vol = het deksel past niet goed en de Creamifier kan het niet verwerken. Te weinig = de paddle bereikt het mengsel niet.
Bewaar verwerkte ijs in de pint met het deksel. Bij juiste vriezer-temperatuur blijft het tot 2 weken goed. Voor soft serve: bewaar in de pint met nozzle-cap.
DD-MM Smaak
Swirl Press: Het oranje/grijze onderdeel in de dispense deksel moet na soft serve grondig worden uitgespoeld. Demonteer het door de dispense cap van het deksel te draaien. Week in warm water als restanten hard zijn.
Nozzle: De nozzle op de pint moet regelmatig worden gecheckt. Als de soft serve niet gelijkmatig uitkomt, kan de nozzle verstopt zijn. Week 15 minuten in warm water en reinig met een zachte borstel.
`, }, troubleshooting: { title: '🔧 Probleemoplossing', html: `Oorzaak: Te lang bevroren of mengsel te droog.
Oplossing: Voeg 1 eetlepel melk of water toe aan de pint en gebruik RE-SPIN. Herhaal indien nodig. Bij hardnekkige gevallen: laat de pint 2-5 minuten op het aanrecht staan.
Oorzaak: Mengsel niet genoeg bevroren of te veel suiker/alcohol.
Oplossing: Vries de pint opnieuw 2-4 uur. Verminder suiker in volgende batch. Alcohol verlaagt het vriespunt — max 1-2 eetlepels per pint.
Oorzaak: Normaal! De Creamifier roteert met hoge snelheid tegen hard bevroren mengsel.
Oplossing: Geen actie nodig. Het geluid neemt af naarmate het ijs zachter wordt. Overweeg oordopjes als de machine naast je staat.
Oorzaak: Outer bowl niet correct geïnstalleerd of platform niet omhoog.
Oplossing: Controleer of de outer bowl vastklikt. Til het platform volledig omhoog tot het klikt. De deksel moet pijlsgewijs zijn aangedraaid.
Oorzaak: Swirl nozzle verstopt of dispense cap niet correct geïnstalleerd.
Oplossing: Controleer de swirl press. Demonteer en reinig de nozzle. Zorg dat de dispense cap volledig is aangedraaid. Probeer de RE-SPIN om het ijs zachter te maken.
Oorzaak: Te weinig vet of suiker in de basis, of niet lang genoeg bevroren.
Oplossing: Gebruik volle melk en room (minstens 35% vet). Suiker en alcohol voorkomen kristalvorming. Vries minimaal 24 uur.
Oorzaak: De machine detecteert dat het mengsel te vast is om te verwerken.
Oplossing: Voeg 1-2 eetlepels vloeistof toe (melk, water, of sap) en druk op RE-SPIN.
${prog.desc}
🔍
Pas je filters aan of probeer een andere zoekterm.
${r.description}
${r.description}
${r.description}
Selecteer minimaal één optie om een recept te genereren!
'); return; } const compat = calculateCompatibility(); const program = recommendProgram(); const compatLabel = compat >= 85 ? '🌟 Perfecte match!' : compat >= 70 ? '👍 Goede combi!' : '🤔 Avant-garde...'; const compatColor = compat >= 85 ? 'var(--mint-primary)' : compat >= 70 ? 'var(--mango)' : 'var(--berry)'; // Build ingredient list const ingredients = []; if (base) { const baseData = MIXMATCH_DATA.bases.find(b => b.id === base.id); ingredients.push(`2 kopjes ${baseData.name.toLowerCase()} (473ml)`); } else { ingredients.push('2 kopjes zware room (473ml)'); } ingredients.push('1 kopje volle melk of plantaardige melk (237ml)'); ingredients.push('⅔ kopje suiker of natuurlijke zoetstof (133g)'); if (flavor) { const flavorIngredients = { vanilla: '1 eetlepel vanille-extract', chocolate: '⅓ kopje cacaopoeder (33g)', strawberry: '1 kopje verse aardbeien, geblend', mango: '1 kopje mango puree', pistachio: '1 kopje gepureerde pistaches', coffee: '2 eetlepels oploskoffie of espresso', matcha: '2 eetlepels matcha poeder', lemon: '3 eetlepels vers citroensap + zeste', lavender: '2 theelepels gedroogde lavendelbloemen', caramel: '3 eetlepels karamelsiroop', mint: '1 theelepel pepermunt extract', blackberry: '1 kopje bosbes puree', banana: '2 rijpe bananen, geprakt', rose: '1 theelepel rozenwater', cardamom: '1 theelepel gemalen kardemom', espresso: '2 eetlepels espresso, afgekoeld', }; if (flavorIngredients[flavor.id]) ingredients.push(flavorIngredients[flavor.id]); } if (mixin) ingredients.push(`${mixin.emoji} ${mixin.name} (naar smaak)`); ingredients.push('Snufje zout'); const recipeName = [ flavor ? flavor.name : 'Romige', base && base.id === 'greek-yogurt' ? 'Frozen Yogurt' : 'IJs', mixin ? `met ${mixin.name}` : '', ].filter(Boolean).join(' '); showMMResult(`${base ? base.emoji + ' ' + base.name : ''} ${base && flavor ? ' + ' : ''} ${flavor ? flavor.emoji + ' ' + flavor.name : ''} ${mixin ? ' + ' + mixin.emoji + ' ' + mixin.name : ''} ${topping ? ' + ' + topping.emoji + ' ' + topping.name : ''}
🎯
Ga terug om je keuzes te maken.
Direct te maken uit de database:
${r.description}
Op basis van jouw keuzes samengesteld:
🤷
Probeer andere keuzes.
${base.split('(')[0]} + ${flavorName}${mixinNames.length ? ' + ' + mixinNames.join(', ') : ''}