diff --git a/.gitignore b/.gitignore index 79d35c2..bcbc32d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,3 @@ iosApp/iosApp.xcworkspace/* iosApp/iosApp.xcodeproj/* !iosApp/iosApp.xcodeproj/project.pbxproj shared/shared.podspec -kls_database.db diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/App.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/App.kt index ce9c4a1..974d63b 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/App.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/App.kt @@ -86,7 +86,7 @@ enum class RecipeAppScreen { DetailHistory, } -@OptIn(ExperimentalSharedTransitionApi::class) +@OptIn(ExperimentalSharedTransitionApi::class) //This is a test commit comment @Composable fun App( onClose: () -> Unit = {} diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Globe.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Globe.kt index 792d16c..6de530e 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Globe.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Globe.kt @@ -5,20 +5,20 @@ import com.menagerie.bakers.model.africa.sengaleseList import com.menagerie.bakers.model.americas.SCPBP import com.menagerie.bakers.model.americas.americanList import com.menagerie.bakers.model.americas.brazilianList -//import com.menagerie.bakers.model.americas.burntMiso +import com.menagerie.bakers.model.americas.burntMiso import com.menagerie.bakers.model.americas.everythingSeasoning import com.menagerie.bakers.model.americas.jamaicanList import com.menagerie.bakers.model.americas.mexicanList import com.menagerie.bakers.model.americas.peruvianList -//import com.menagerie.bakers.model.americas.remouladeSauce +import com.menagerie.bakers.model.americas.remouladeSauce import com.menagerie.bakers.model.asia.chineseList import com.menagerie.bakers.model.asia.indianList import com.menagerie.bakers.model.asia.japaneseList -//import com.menagerie.bakers.model.asia.kecapManis +import com.menagerie.bakers.model.asia.kecapManis import com.menagerie.bakers.model.asia.koreanList import com.menagerie.bakers.model.asia.laoList import com.menagerie.bakers.model.asia.seaList -//import com.menagerie.bakers.model.asia.sinamak +import com.menagerie.bakers.model.asia.sinamak import com.menagerie.bakers.model.europe.frenchList import com.menagerie.bakers.model.europe.georgianList import com.menagerie.bakers.model.europe.greekList @@ -31,112 +31,112 @@ import com.menagerie.bakers.model.middleEast.palestineList object Globe { fun getAllRecipes() : List { - //return EuropeRecipes.getAllRecipes() + - // AsiaRecipes.getAllRecipes() + - // NorthAmericaRecipes.getAllRecipes() + - // SouthAmericaRecipes.getAllRecipes() + - // MiddleEastRecipes.getAllRecipes() + - return AfricaRecipes.getAllRecipes() + return EuropeRecipes.getAllRecipes() + + AsiaRecipes.getAllRecipes() + + NorthAmericaRecipes.getAllRecipes() + + SouthAmericaRecipes.getAllRecipes() + + MiddleEastRecipes.getAllRecipes() + + AfricaRecipes.getAllRecipes() } } -//private object EuropeRecipes { -// -// private val frenchRecipes = frenchList -// private val irishRecipes = irishList -// private val italianRecipes = italianList -// private val greekRecipes = greekList -// private val georgianRecipes = georgianList -// private val romanianRecipes = romanianList -// private val hungarianRecipes = hungarianList -// -// fun getAllRecipes() : List { -// return italianRecipes + -// greekRecipes + -// irishRecipes + -// frenchRecipes + -// georgianRecipes + -// romanianRecipes + -// hungarianRecipes -// } -//} -// -//private object AsiaRecipes { -// private val chineseRecipes = chineseList -// private val indianRecipes = indianList -// private val japaneseRecipes = japaneseList -// private val koreanRecipes = koreanList -// private val seaRecipes = seaList -// private val kecapRecipe = kecapManis -// private val sinamakRecipe = sinamak -// private val laoRecipes = laoList -// -// fun getAllRecipes() : List -// { -// return chineseRecipes + -// indianRecipes + -// japaneseRecipes + -// koreanRecipes + -// seaRecipes + -// kecapRecipe + -// sinamakRecipe + -// laoRecipes -// } -//} -// -//private object NorthAmericaRecipes { -// private val americanRecipes = americanList -// private val mexicanRecipes = mexicanList -// private val jamaicanRecipes = jamaicanList -// -// private val SCPBPRecipes = SCPBP -// private val everythingRecipe = everythingSeasoning -// private val remouladeRecipe = remouladeSauce -// private val burntMisoRecipe = burntMiso -// -// fun getAllRecipes() : List { -// return americanRecipes + -// mexicanRecipes + -// SCPBPRecipes + -// everythingRecipe + -// remouladeRecipe + -// jamaicanRecipes + -// burntMisoRecipe -// } -//} -// -//private object SouthAmericaRecipes { -// -// private val brazilianRecipes = brazilianList -// private val peruvianRecipes = peruvianList -// -// fun getAllRecipes() : List -// { -// return brazilianRecipes + -// peruvianRecipes -// } -//} -// -//private object MiddleEastRecipes { -// -// private val palestineRecipes = palestineList -// -// fun getAllRecipes() : List -// { -// return palestineRecipes -// } -// -//} +private object EuropeRecipes { + + private val frenchRecipes = frenchList + private val irishRecipes = irishList + private val italianRecipes = italianList + private val greekRecipes = greekList + private val georgianRecipes = georgianList + private val romanianRecipes = romanianList + private val hungarianRecipes = hungarianList + + fun getAllRecipes() : List { + return italianRecipes + + greekRecipes + + irishRecipes + + frenchRecipes + + georgianRecipes + + romanianRecipes + + hungarianRecipes + } +} + +private object AsiaRecipes { + private val chineseRecipes = chineseList + private val indianRecipes = indianList + private val japaneseRecipes = japaneseList + private val koreanRecipes = koreanList + private val seaRecipes = seaList + private val kecapRecipe = kecapManis + private val sinamakRecipe = sinamak + private val laoRecipes = laoList + + fun getAllRecipes() : List + { + return chineseRecipes + + indianRecipes + + japaneseRecipes + + koreanRecipes + + seaRecipes + + kecapRecipe + + sinamakRecipe + + laoRecipes + } +} + +private object NorthAmericaRecipes { + private val americanRecipes = americanList + private val mexicanRecipes = mexicanList + private val jamaicanRecipes = jamaicanList + + private val SCPBPRecipes = SCPBP + private val everythingRecipe = everythingSeasoning + private val remouladeRecipe = remouladeSauce + private val burntMisoRecipe = burntMiso + + fun getAllRecipes() : List { + return americanRecipes + + mexicanRecipes + + SCPBPRecipes + + everythingRecipe + + remouladeRecipe + + jamaicanRecipes + + burntMisoRecipe + } +} + +private object SouthAmericaRecipes { + + private val brazilianRecipes = brazilianList + private val peruvianRecipes = peruvianList + + fun getAllRecipes() : List + { + return brazilianRecipes + + peruvianRecipes + } +} + +private object MiddleEastRecipes { + + private val palestineRecipes = palestineList + + fun getAllRecipes() : List + { + return palestineRecipes + } + +} private object AfricaRecipes { - //private val senegalRecipes = sengaleseList + private val senegalRecipes = sengaleseList private val kenyanRecipes = kenyanList fun getAllRecipes() : List { - //return senegalRecipes + - return kenyanRecipes + return senegalRecipes + + kenyanRecipes } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Ingredient.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Ingredient.kt deleted file mode 100644 index 7860e17..0000000 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Ingredient.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.menagerie.bakers.model - -import com.menagerie.bakers.util.DataWithUnit -import com.menagerie.bakers.util.Unit - - -/** - * Ingredient object - * - * @author Blizzard Finnegan - * @since To Be Merged - */ -class Ingredient( - var measure : DataWithUnit = DataWithUnit(0.0,null), - var name : String = "Undefined", - var extraInfo : String = "" -){ - override fun toString(): String { - if (extraInfo.isNotBlank()) { - return this.measure.toString() + " " + name + " (" + extraInfo + ")" - } else { - return this.measure.toString() + " " + name - } - - } - - /** - * Function for use in debugging. - * This is unformatted. Do not use in release builds. - * @return string of all values stored in this object. - */ - fun debugPrint(): String{ - TODO() - } - - /** - * Print full information, including extra info. - * For unformatted print, use [debugPrint]. For in-recipe step use, use [toString]. - */ - fun fullPrint(): String{ - TODO() - } - - fun recipeName(): String{ - return this.measure.toString() + " " + this.name - } - - /** - * Scale the ingredient's measure by a factor. This does not modify this object, instead - * returning an updated object with corrected units. - * - * @param scaleFactor Factor to scale the measure by. - * @return new measure object with the data scaled by the factor passed in - */ - fun scale(scaleFactor: Double) : Ingredient{ - val returnValue = Ingredient(this.measure.scale(scaleFactor), this.name, this.extraInfo ) - return returnValue - } - - /** - * Generate a new ingredient object in the alternate measurement system. - * Does not modify this object. - * - * @return new Ingredient object with converted measure information. Name and extraInfo should - * not be modified. - */ - fun imperialMetricConvert(): Ingredient{ - TODO() - } -} diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Recipe.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Recipe.kt index 01f8252..babd72f 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Recipe.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Recipe.kt @@ -27,8 +27,8 @@ data class Recipe( val prepTime: Duration = Duration.INFINITE, val cookTime: Duration = Duration.INFINITE, val servings: String = "Enough", - val ingredients: Map = mapOf(), - var instructions: List = listOf(), + val ingredients: List = listOf(), + val instructions: List = listOf(), val tags: Map = mapOf(), val image: DrawableResource = Res.drawable._10_strawberries, val linkedRecipes : List = listOf(), @@ -36,18 +36,5 @@ data class Recipe( var favourite: Boolean = false, var iMadeThis: Boolean = false, var ttt: TTT = TTT.TRIED - -){ - /** - * Getter for ingredients from the HashMap. - * Primarily used to make instantiation of instructions list more readable. - * - * @param name key of the ingredient you want from the map - * - * @return a formatted string from the ingredient object with important info - */ - fun getIngr(ingredientKey: String) : String { - return this.ingredients[ingredientKey]!!.recipeName() - } -} +) diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Tips.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Tips.kt index f098356..0309f9b 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Tips.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/Tips.kt @@ -4,8 +4,6 @@ val tipsTricksAndHelpers = listOf( "REMINDER-All Protein Cook Times and Marinade Times refer to their Original Protein (usually Chicken).", "REMINDER-When Marinading Tofu or Paneer, be sure not to leave them for too long, or they will fall apart in the marinade. (Overnight Marinades are not recommended).", "TIP-Long Term Marinades can be done overnight, but most can also be done the morning of!", - "REMINDER-Your Settings can be cleared at any time in the menu.", - "TIP-Making a shopping list? Try clicking the Chef Hat to copy straight to your clipboard instead of highlighting!", "TIP-A mesh strainer or colander can help with shaking off access coatings.", "TIP-Parsley is a great substitute for Cilantro!", "TRICK-Use Tongs to transfer long Pasta straight from the pot to the sauce; the extra pasta water will help the sauce stick!", diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/Kenyan.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/Kenyan.kt index eb97802..cf6d864 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/Kenyan.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/Kenyan.kt @@ -5,11 +5,7 @@ import com.menagerie.bakers.model.TagType import kotlin.time.Duration import bakersmenagerie.composeapp.generated.resources.Res import bakersmenagerie.composeapp.generated.resources.kuku_no_nazi -import com.menagerie.bakers.model.Ingredient import com.menagerie.bakers.model.TTT -import com.menagerie.bakers.util.DataWithUnit -import com.menagerie.bakers.util.SafeTemps -import com.menagerie.bakers.util.Unit val kenyanList = listOf( Recipe( @@ -18,42 +14,42 @@ val kenyanList = listOf( prepTime = Duration.parse("30m"), cookTime = Duration.parse("45m"), servings = "Serves 4-6", - ingredients = mapOf( - "garlic" to Ingredient(DataWithUnit(3.0),"garlic cloves",""), - //"2 Lemons, divided", - "lemon" to Ingredient( DataWithUnit(1.0),"lemon", "juiced"), - "lemon garnish" to Ingredient( DataWithUnit(1.0),"lemon", "wedged, as garnish"), - //"2.5 Tsp Diamond Crystal or 1.25 Tsp Morton Kosher Salt, divided, plus more", - "marinade salt" to Ingredient( DataWithUnit(1.0, Unit.TEASPOON),"salt", "marinade"), - "curry salt" to Ingredient( DataWithUnit(1.5, Unit.TEASPOON),"salt", "marinade"), - //"0.25 Tsp Kashmiri Chile Powder", - "chile powder" to Ingredient(DataWithUnit(0.25,Unit.TEASPOON),"Kashmiri chile powder"), - //"2.5 lbs Chicken Thighs, Skinless, Boneless", - "chicken" to Ingredient(DataWithUnit(2.5,Unit.POUND),"chicken thighs", "skinless, boneless"), - //"1 medium Onions", - "onion" to Ingredient(DataWithUnit(1.0),"onion", "medium"), - //"1 Roma Tomatoes", - "tomato" to Ingredient(DataWithUnit(1.0),"Roma tomato", ""), - //"2 Green Thai Chiles", - "chile" to Ingredient(DataWithUnit(2.0),"Green Thai chile",""), - //"0.25 Cups Cilantro Leaves", - "cilantro" to Ingredient(DataWithUnit(1.0/4.0,Unit.CUP),"cilantro leaves"), - //"2 Tbsp Extra-Virgin Olive Oil", - "oil" to Ingredient(DataWithUnit(2.0,Unit.TABLESPOON),"olive oil", "extra-virgin"), - //"0.25 Tsp Ground Coriander", - "coriander" to Ingredient(DataWithUnit(1.0/4.0,Unit.TEASPOON),"coriander", "ground"), - //"0.25 Tsp Ground Cumin", - "cumin" to Ingredient(DataWithUnit(1.0/4.0,Unit.TEASPOON), "cumin", "ground"), - //"0.125 Tsp Ground Turmeric", - "tumeric" to Ingredient(DataWithUnit(1.0/8.0,Unit.TEASPOON), "turmeric", "ground"), - //"13.5 Oz Unsweetened Coconut Milk", - "coconut" to Ingredient(DataWithUnit(13.5,Unit.FLUID_OUNCE),"coconut milk","unsweetened"), - //"0.25 Cups Heavy Cream", - "cream" to Ingredient(DataWithUnit(1.0/4.0,Unit.CUP), "heavy cream",""), - //"Basmati Rice and/or Crusty Bread (for serving)" - "side" to Ingredient(DataWithUnit(-1.0),"Basmati rice / Crusty Bread", "for serving") + ingredients = listOf( + "3 Cloves Garlic", + "2 Lemons, divided", + "2.5 Tsp Diamond Crystal or 1.25 Tsp Morton Kosher Salt, divided, plus more", + "0.25 Tsp Kashmiri Chile Powder", + "2.5 lbs Chicken Thighs, Skinless, Boneless", + "1 medium Onions", + "1 Roma Tomatoes", + "2 Green Thai Chiles", + "0.25 Cups Cilantro Leaves", + "2 Tbsp Extra-Virgin Olive Oil", + "0.25 Tsp Ground Coriander", + "0.25 Tsp Ground Cumin", + "0.125 Tsp Ground Turmeric", + "13.5 Oz Unsweetened Coconut Milk", + "0.25 Cups Heavy Cream", + "Basmati Rice and/or Crusty Bread (for serving)" + ), + instructions = listOf( + + "HEADER-Marinade", + "Finely grate Garlic [3 Cloves]. Cut Lemons [1] in half and squeeze juice through a fine-mesh sieve. Mix in Salt [1 Tsp] and Kashmiri Chile Powder [0.25 Tsp]. ", + "Add Chicken Thighs [2.5 lb] and toss to evenly coat. Cover bowl and let sit at room temperature 30 minutes.", + + "HEADER-Curry", + "Coarsely chop Onions [1], Tomatoes [1], Green Thai Chiles [2], and Cilantro Leaves [0.25 Cups]. Transfer to a blender or food processor and blend or process until smooth.", + "Heat broiler. Heat Extra-Virgin Olive Oil [2 Tbsp] in a high-sided skillet over medium. Add Ground Coriander [0.25 Tsp], Ground Cumin [0.25 Tsp], and Ground Turmeric [0.125 Tsp]. Cook, stirring, until fragrant, about 1 minute.", + "Pour in purée and add Salt [1.5 Tsp Diamond Crystal or 0.75 Tsp Morton]. Stir to combine and cook, stirring occasionally, until raw onion smell subsides and curry is paste-like in consistency, 15–20 minutes.", + + "HEADER-Chicken", + "Arrange Chicken on a foil-lined rimmed baking sheet and broil until cooked through, charred in spots, and a thermometer inserted into the thickest parts registers 165°F (74°C), 17–20 minutes.", + "While the Chicken is cooking, shake Coconut Milk [1 13.5-oz. can] to ensure coconut cream is incorporated, then add Coconut Milk to curry and stir well to combine. Curry should be pale yellow.", + "Bring to a gentle simmer and cook until warm and slightly thickened, 5–10 minutes.", + "Once Chicken is finished, add Chicken and any juices accumulated on baking sheet to curry and reduce heat to low; mix well to combine. Stirring constantly to prevent curry from breaking, dribble in Heavy Cream [0.25 Cups]. Taste and season with more Salt if needed.", + "Cut remaining Lemon into wedges. Serve Kuku Na Nazi with Basmati Rice and/or some Crusty Bread and Lemon wedges for squeezing over. Top with additional Cilantro to taste." ), - instructions = listOf(), tags = mapOf( "Kenyan" to TagType.CUISINE, "African" to TagType.CUISINE, @@ -71,35 +67,5 @@ val kenyanList = listOf( ), image = Res.drawable.kuku_no_nazi, ttt = TTT.TESTED - ).also { r -> - r.instructions = listOf( - "HEADER-Marinade", - //"Finely grate Garlic [3 Cloves]. Cut Lemons [1] in half and squeeze juice through a fine-mesh sieve. Mix in Salt [1 Tsp] and Kashmiri Chile Powder [0.25 Tsp]. ", - //Lemon portion of the instruction omitted, as listed in the instructions - "Finely grate ${r.getIngr("garlic")}. Mix in lemon juice, ${r.getIngr("marinade salt")}, and ${r.getIngr("chile powder")}.", - //"Add Chicken Thighs [2.5 lb] and toss to evenly coat. Cover bowl and let sit at room temperature 30 minutes.", - "Add ${r.getIngr("chicken")} and toss evenly to coat. Cover bowl and let sit at room temperature for 30 minutes.", - - "HEADER-Curry", - //"Coarsely chop Onions [1], Tomatoes [1], Green Thai Chiles [2], and Cilantro Leaves [0.25 Cups]. Transfer to a blender or food processor and blend or process until smooth.", - "Coarsely chop ${r.getIngr("onion")}, ${r.getIngr("tomato")}, ${r.getIngr("chile")}, and ${r.getIngr("cilantro")}. Transfer to a blender or food processor and blend/process until smooth.", - //"Heat broiler. Heat Extra-Virgin Olive Oil [2 Tbsp] in a high-sided skillet over medium. Add Ground Coriander [0.25 Tsp], Ground Cumin [0.25 Tsp], and Ground Turmeric [0.125 Tsp]. Cook, stirring, until fragrant, about 1 minute.", - "Heat broiler. Heat ${r.getIngr("oil")} in a high-sided skilled over medium. Add ${r.getIngr("coriander")}, ${r.getIngr("cumin")}, and ${r.getIngr("tumeric")}. Cook, stirring, until fragrant, about 1 minute.", - //"Pour in purée and add Salt [1.5 Tsp Diamond Crystal or 0.75 Tsp Morton]. Stir to combine and cook, stirring occasionally, until raw onion smell subsides and curry is paste-like in consistency, 15–20 minutes.", - "Pour in purée and add ${r.getIngr("curry salt")}. Stir to combine and cook, stirring occasionally, until raw onion smell subsides and curry is paste-like in consistency, 15-20 minutes.", - - "HEADER-Chicken", - //"Arrange Chicken on a foil-lined rimmed baking sheet and broil until cooked through, charred in spots, and a thermometer inserted into the thickest parts registers 165°F (74°C), 17–20 minutes.", - "Arrange chaddAlicken on a foil-lined rimmed baking sheet and broil until cooked through, charred in spots, and a thermometer inserted into the thickest pars registers ${SafeTemps.POULTRY.temp}, 17-20 minutes.", - //"While the Chicken is cooking, shake Coconut Milk [1 13.5-oz. can] to ensure coconut cream is incorporated, then add Coconut Milk to curry and stir well to combine. Curry should be pale yellow.", - "While the chicken is cooking, shake the ${r.getIngr("coconut")} to ensure coconut cream is incorporated, then add to curry and stir well to combine. Curry should be pale yellow.", - //"Bring to a gentle simmer and cook until warm and slightly thickened, 5–10 minutes.", - "Bring to a gentle simmer and cook until warm and slightly thickened, 5-10 minutes.", - //"Once Chicken is finished, add Chicken and any juices accumulated on baking sheet to curry and reduce heat to low; mix well to combine. Stirring constantly to prevent curry from breaking, dribble in Heavy Cream [0.25 Cups]. Taste and season with more Salt if needed.", - "Once chicken is finished, add chicken and any juices accumulated on baking sheet to curry and reduce heat to low; mix well to combine. Then, stirring constantly to prevent curry from breaking, dribble in ${r.getIngr("cream")} . Taste and season with more salt if needed.", - //"Cut remaining Lemon into wedges. Serve Kuku Na Nazi with Basmati Rice and/or some Crusty Bread and Lemon wedges for squeezing over. Top with additional Cilantro to taste." - "Serve with ${r.getIngr("side")}, and ${r.getIngr("lemon garnish")}. Top with extra cilantro to taste." - - ) - } + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/SengaleseData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/SengaleseData.kt index af42dea..10d969f 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/SengaleseData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/africa/SengaleseData.kt @@ -7,56 +7,56 @@ import bakersmenagerie.composeapp.generated.resources.yassa import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val sengaleseList = listOf( -// Recipe( -// title = "Chicken Yassa", -// description = "Spicy Sengalese Chicken with a heavy Onion Sauce with Lemon, Baked.", -// prepTime = Duration.parse("8h"), -// cookTime = Duration.parse("1h"), -// servings = "Serves 4", -// ingredients = listOf( -// "HEADER-Marinade", -// "2 Onions, Rough Chopped", -// "5 Cloves Garlic, Minced", -// "1 Scallion, Rough Chopped", -// ".5 Green Chili, Rough Chopped", -// "15g Ginger, Grated", -// "1 Scotch Bonnet", -// ".25 Cups Parsley", -// "3 Tbsp Lemon Juice", -// "1 Tbsp Dijon Mustard", -// "1.5 lbs Protein of Choice (Originally Chicken)", -// -// "HEADER-Curry", -// "2 Onions, Thin Sliced", -// "3 Tbsp Oil", -// "2 Tbsp Red Wine Vinegar", -// "1 Bay Leaf", -// ), -// instructions = listOf( -// -// "HEADER-Marinade and Bake", -// "Add all the Marinade Ingredients except the Protein to a Blender. Pulse until smooth, and season with Salt as needed.", -// "Marinade the Protein overnight.", -// "Heat an Oven to 400F. Shake off the Protein, reserving the Marinade, and Bake for about 45 minutes (or until cooked through and Golden Brown).", -// -// "HEADER-Curry", -// "Heat Oil [3 Tbsp] in a wide pan. Add Onions [2 thin Sliced] and the Marinade and cook for a about a minute.", -// "Add Vinegar [2 Tbsp], Bay Leaves [1], Salt and Pepper as needed, and cook over medium-high until the Sauce is thick and the Onions are carmelised.", -// "Add more Lemon Juice as needed, then add the cooked Chicken, cover and let combine for about 5 minutes.", -// "Serve over Rice or Couscous.", -// ), -// tags = mapOf( -// "Senegal" to TagType.CUISINE, -// "Savory" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// "Tangy" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// "Curry" to TagType.TECHNIQUE, -// "Spicy" to TagType.FLAVOUR -// ), -// image = Res.drawable.yassa, -// ttt = TTT.TRUE -// ) +val sengaleseList = listOf( + Recipe( + title = "Chicken Yassa", + description = "Spicy Sengalese Chicken with a heavy Onion Sauce with Lemon, Baked.", + prepTime = Duration.parse("8h"), + cookTime = Duration.parse("1h"), + servings = "Serves 4", + ingredients = listOf( + "HEADER-Marinade", + "2 Onions, Rough Chopped", + "5 Cloves Garlic, Minced", + "1 Scallion, Rough Chopped", + ".5 Green Chili, Rough Chopped", + "15g Ginger, Grated", + "1 Scotch Bonnet", + ".25 Cups Parsley", + "3 Tbsp Lemon Juice", + "1 Tbsp Dijon Mustard", + "1.5 lbs Protein of Choice (Originally Chicken)", + + "HEADER-Curry", + "2 Onions, Thin Sliced", + "3 Tbsp Oil", + "2 Tbsp Red Wine Vinegar", + "1 Bay Leaf", + ), + instructions = listOf( + + "HEADER-Marinade and Bake", + "Add all the Marinade Ingredients except the Protein to a Blender. Pulse until smooth, and season with Salt as needed.", + "Marinade the Protein overnight.", + "Heat an Oven to 400F. Shake off the Protein, reserving the Marinade, and Bake for about 45 minutes (or until cooked through and Golden Brown).", + + "HEADER-Curry", + "Heat Oil [3 Tbsp] in a wide pan. Add Onions [2 thin Sliced] and the Marinade and cook for a about a minute.", + "Add Vinegar [2 Tbsp], Bay Leaves [1], Salt and Pepper as needed, and cook over medium-high until the Sauce is thick and the Onions are carmelised.", + "Add more Lemon Juice as needed, then add the cooked Chicken, cover and let combine for about 5 minutes.", + "Serve over Rice or Couscous.", + ), + tags = mapOf( + "Senegal" to TagType.CUISINE, + "Savory" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + "Tangy" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + "Curry" to TagType.TECHNIQUE, + "Spicy" to TagType.FLAVOUR + ), + image = Res.drawable.yassa, + ttt = TTT.TRUE + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/AmericanData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/AmericanData.kt index 982569f..02bd145 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/AmericanData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/AmericanData.kt @@ -13,505 +13,505 @@ import bakersmenagerie.composeapp.generated.resources.midnight_garlic_noodles import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val americanList = listOf( -// Recipe( -// title = "Chicken & Waffles", -// description = "Southern Fried Chicken served on a Buttermilk Waffle, drenched in a hot Honey Butter.", -// ingredients = listOf( -// "8 Chicken Breasts", -// "8 Waffles", -// -// "HEADER-Buttermilk Brine", -// "2 Cups (480 mL) Buttermilk", -// "1 Tbsp Kosher Salt", -// "0.5 Tbsp Garlic Powder", -// "0.5 Tbsp Onion Powder", -// "1 Tbsp Hot Sauce or Chili Powder", -// "1 Tsp Smoked Paprika", -// -// "HEADER-Flour Crust", -// "3 Cups (384 g) Flour", -// "0.33 Cup (43 g) Cornstarch", -// "2 Tsp Baking Powder", -// "2 Tsp Garlic Powder", -// "2 Tsp Onion Powder", -// "2 Tsp Kosher Salt", -// "2 Tsp freshly cracked Black Pepper", -// -// "HEADER-Spicy Honey Butter", -// "0.25 Cups (85 g) Honey", -// "0.5 Tsp Chili Powder", -// "4 Tbsp (57 g) Unsalted Butter", -// "0.5 Tsp Kosher Salt", -// ), -// instructions = listOf( -// -// "HEADER-Brine", -// "Whisk the Buttermilk [2 Cups], Kosher Salt [1 Tbsp], Garlic Powder [0.5 Tbsp], Onion Powder [0.5 Tbsp], Hot Sauce [1 Tbsp], and Smoked Paprika" + -// " [1 Tsp] together in a large mixing bowl.", -// "Add the Chicken Breast [8] to the bowl, making sure every piece is covered in the Brine.", -// "Cover the bowl and let the Chicken marinate in the Buttermilk Brine from 1 hour to overnight in the fridge.", -// -// "HEADER-Coat & Fry", -// "In a dutch oven pot, heat up about half the pot's worth of Vegetable Oil. Allow the Oil to reach 350 degrees F.", -// "In a mixing bowl whisk together Flour [3 Cups], Cornstarch [0.33 Cups], Baking Powder [2 Tsp], and Seasonings.", -// "Take each Chicken piece from the Brine and dredge into the seasoned Flour. Thoroughly coat the Chicken all over, then let rest on a plate for " + -// "five minutes before frying.", -// "Fry the Chicken in the hot Oil (no more than about 4 per batch) until golden brown, crispy, and cooked through completely, about 8-9 minutes.", -// "Carefully take the Chicken out of the oil and place them on a baking sheet fitted with a wire rack and let cool slightly before serving. Repeat " + -// "until all the Chicken is fried.", -// -// "HEADER-Finish & Serve", -// "In a small saucepan, melt Butter [4 Tbsp] over medium heat with Honey [0.25 Cups], Chili Powder [0.5 Tsp], and Salt [ 0.5 Tsp]. Whisk well.", -// "Lower the temperature to 'warm/low' heat and keep for serving. [Make sure to keep warm, as sauce will solidify very quickly]", -// "Make the Belgian Waffles and serve the Chicken on top of the waffles, then drizzle generously with Spicy Honey Butter Sauce.", -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Fried" to TagType.TECHNIQUE, -// "Carnivorous" to TagType.PROTEIN, -// "Sweet" to TagType.FLAVOUR -// ), -// image = Res.drawable.Chicken_And_Waffles, -// cookTime = Duration.parse("20m"), -// prepTime = Duration.parse("8h"), -// servings = "Serves 6", -// ttt = TTT.TESTED, -// ), -// -// Recipe( -// title = "Ragin' Cajun Pasta", -// description = "Short Pasta in a Creamy Cajun Wine and Tomato Sauce.", -// ingredients = listOf( -// "1 lb Pasta", -// "2 Cups White Wine", -// "1 Cup Heavy Cream", -// "2 Tbsp Tomato Paste", -// "1 Tbsp Garlic Powder", -// "2 Tsp Onion Powder", -// "2 Tbsp Cajun Spice", -// "2 Tsp Paprika", -// "1 cap Lemon Juice", -// "2 Tbsp Flour", -// "2 Tbsp Butter", -// ), -// instructions = listOf( -// "Cook Pasta to al dente.", -// "In a saucepan, melt Butter [2 Tbsp], then add Flour [2 Tbsp].", -// "Add White Wine [2 Cups], reduce.", -// "Add Cream [1 Cup] and Tomato Paste [2 Tbsp], reduce.", -// "Add Onion [2 Tsp], Garlic [1 Tbsp], Cajun [2 Tbsp], and Paprika [2 Tsp] Powders", -// "Stir in Pasta", -// ), -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("30m"), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Cajun" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Creamy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Saucier" to TagType.TECHNIQUE, -// "Sauce" to TagType.TECHNIQUE, -// "Vegetarian" to TagType.PROTEIN, -// ), -// image = Res.drawable._10_strawberries, -// servings = "Makes Pasta for 4", -// ttt = TTT.TRUE, -// ), -// -// Recipe( -// title = "Midnight Garlic Noodles", -// description = "Garlicky, Oily, Rich Umami Noodles", -// ingredients = listOf( -// "Sea Salt", -// "12 oz Wheat Pasta", -// "2 Tbsp Burnt Miso", -// "15 Cloves Garlic Confit", -// "2 Tbsp Garlic Oil", -// "1 Tbsp Unsalted Butter", -// "Fleur de Sel", -// "Parmesan Cheese", -// ), -// instructions = listOf( -// "Cook Pasta [12 oz] to al dente", -// "Run Burnt Miso [2 Tbsp], Garlic [15 Cloves], and Garlic Oil [1 Tbsp] in blender until smooth.", -// "Add Butter [1 Tbsp] and [.25 Cups] of Pasta Water, blend again.", -// "Heat Garlic Oil [1 Tbsp] in a skillet. Add the Garlic-Miso Sauce from above. Use tongs to transfer Pasta directly to the skillet.", -// "Season with Fleur de Sel and cover with Parmesan Cheese.", -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Umami" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// "Oily" to TagType.FLAVOUR, -// ), -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("15m"), -// image = Res.drawable.midnight_garlic_noodles, -// servings = "Makes 2 Bowls", -// ttt = TTT.TESTED, -// linkedRecipes = listOf( -// burntMiso -// ) -// ), -// -// Recipe( -// title = "Chicken and Dumpling Soup", -// description = "Southern Style Chicken and Biscuits in Soup.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("40m"), -// servings = "6 People", -// ingredients = listOf( -// -// "HEADER-Soup", -// "1 Tbsp Olive Oil", -// "2 lbs Chicken Breast", -// "5 Tbsp Butter", -// "1 Cups Yellow Onion, Diced", -// "1 Cups Carrot, Diced", -// "1 Cups Celery, Diced", -// "3 Cloves Garlic", -// "1 Tsp Worcestershire Sauce", -// "1 Tsp Hot Sauce", -// ".33 Cups Flour", -// "4.5 Cups Chicken Broth", -// "1.5 Cups Half and Half", -// ".75 Cups Peas", -// -// "HEADER-Seasonings", -// "1 Tsp Onion Powder", -// ".5 Tsp Basil", -// ".5 Tsp Parsley", -// ".5 Tsp Thyme", -// ".5 Tsp Rosemary", -// ".5 Tsp Mustard Powder", -// -// "HEADER-Dumplings", -// "2 Cups Cake Flour", -// "2 Tsp Baking Powder", -// ".5 Tsp Baking Soda", -// "1 Tsp Salt", -// ".5 Tsp Garlic Powder", -// "2 Tsp Sugar", -// ".75 Cups Sour Cream, Cold", -// ".25 Cups Cold Milk", -// "4 Tbsp Butter, Melted", -// -// ), -// instructions = listOf( -// "HEADER-Prep", -// "Boil the Chicken. Season to taste and shred.", -// "Combine All from Seasonings and Set Aside", -// -// "HEADER-Soup", -// "Melt the Butter [5 Tbsp] in a large pot. Add the Onions [1 Cups], Carrots [1 Cups], and Celery [1 Cups] and cook for about 5 minutes.", -// "Add the Garlic [3 Cloves], Worcestershire Sauce [1 Tsp], Hot Sauce [1 Tsp], and the Seasonings, and cook for another minute.", -// "Add the Flour [.33 Cups] and toss to coat. Cook for another 2 minutes.", -// "Add the Chicken Broth [4.5 Cups] and stir thoroughly. Add the Half and Half [1.5 Cups].", -// "Add the Peas [.75 Cups] and bring to a boil. Simmer while you make the Dumplings.", -// -// "HEADER-Dumplings", -// "Combine Cake Flour [2 Cups], Baking Powder [2 Tsp], Salt [1 Tsp], Garlic Powder[.5 Tsp], and Sugar[2 Tsp] in a bowl.", -// "Add Milk [.25 Cups], Sour Cream [.75 Cups], and Melted Butter [4 Tbsp] to the bowl and fold into a light dough.", -// "At this point, you should add the Chicken into the Soup.", -// "Using a Scoop, take a ball of Dumpling Dough and drop it into the Soup. Ladle a bit of liquid over each.", -// "Cover and Simmer for 15 minutes, or until everything is cooked through.", -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Soup" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.chicken_and_dumplings, -// ttt = TTT.TRIED -// ), -// -// Recipe( -// title = "Spicy Chicken Pretzel Bacon Pub Sandwich", -// description = "Spicy Chicken Cutlets on a Pretzel Bun with Bacon, Muenster, Beer Cheese, and Onion Tangles. See Linked Recipes for Ingredients. Cook/Prep Times assume you've already started the pretzel dough rising.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("20m"), -// servings = "Makes 6 Sandwiches", -// ingredients = listOf( -// "6 Pretzel Buns (Recipe Included)", -// "6 Chicken Cutlets (Recipe Included)", -// "4 Cups Beer Cheese (Recipe Included)", -// "2 Cups Onion Tangles (Recipe Included)", -// "6 Slices Muenster Cheese", -// "6 Slices Bacon", -// "Honey Mustard", -// ), -// instructions = listOf( -// -// "HEADER-Prep", -// "Start by making the Pretzel Buns, if making from scratch", -// "Prep the Onions and Chicken while the Pretzel Dough is rising.", -// "When Pretzels enter the Oven, make the Cheese Sauce, Bacon, and Fry the Onion Tangles.", -// "When the Pretzels are about 10 minutes away from done, fry the Chicken", -// -// "HEADER-Assembly", -// "Slice Pretzel Bun in half. Layer 1 Chicken Cutlet, Honey Mustard to taste, then a slice of Bacon.", -// "Add some Onion Tangles, then a slice of Muenster Cheese. Toast, open faced, until Cheese melts.", -// "Top with Beer Cheese and top bun and Serve.", -// -// ), -// tags = mapOf( -// "Spicy" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "American" to TagType.CUISINE, -// "Carnivorous" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable.SCPBP, -// linkedRecipes = SCPBP, -// ttt = TTT.TRIED, -// ), -// -// Recipe( -// title = "Honey Boiled Bagels", -// description = "New York Style Honey Kettle Boiled Bagels. Try them with Everything Seasoning!", -// prepTime = Duration.parse("2h 15m"), -// cookTime = Duration.parse("25m"), -// servings = "Makes 8 Bagels", -// ingredients = listOf( -// -// "HEADER-Dough", -// "1.5 Cups (360 ml) Warm Water", -// "2.75 Tsp Active Yeast (1 Packet)", -// "4 Cups (520 g) Bread Flour", -// "1 Tbsp Brown Sugar", -// "2 Tsp Salt", -// "Olive Oil to Coat", -// "1 Egg Whites, to wash", -// -// "HEADER-Water Bath", -// "2 Quarts Water", -// "0.25 Cups (85g) Honey", -// -// "HEADER-Topping", -// "Everything Seasoning", -// ), -// instructions = listOf( -// "Whisk together Water [1.5 Cups] and Yeast [2.75 Tsp] in Stand Mixer Bowl. Let Stand for 5 minutes.", -// "Add Flour [4 Cups], Sugar [1 Tbsp], and Salt [2 Tsp]. Beat on low for 2 minutes. Knead on Medium for 7 minutes.", -// "Grease a bowl and turn out the Dough into it. Cover and let Rise for 2 Hours", -// "Preheat the Oven to 425F. Start Boiling the Water Bath.", -// "Shape Bagels, laying out on a parchment lined baking sheet.", -// "Boil each Bagel 1 minute per side.", -// "Brush Bagel tops with Egg White [1], and cover with Seasoning, if using.", -// "Bake for 23 minutes.", -// ), -// tags = mapOf( -// "Baked" to TagType.TECHNIQUE, -// "American" to TagType.CUISINE, -// "Vegetarian" to TagType.PROTEIN, -// "Bread" to TagType.COURSE, -// ), -// image = Res.drawable.bagels, -// linkedRecipes = everythingSeasoning, -// ttt = TTT.TRUE -// ), -// -// Recipe( -// title = "Outback Style Shrimp", -// description = "Outback Style Shrimp on the Barbie with Remoulade Sauce.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("5m"), -// servings = "Makes 1 lb of Shrimp", -// ingredients = listOf( -// "1 lb Shrimp", -// "1 Tbsp Lemon Juice", -// "2 Tbsp Butter, melted, cooled", -// -// "HEADER-Seasoning", -// "1 Tsp Salt", -// ".5 Tsp Garlic", -// ".5 Tsp Onion Powder", -// ".5 Tsp Black Pepper", -// ".5 Tsp Chili Powder", -// ".5 Tsp Coriander, Ground", -// ".25 Tsp Cayenne", -// ".25 Tsp Allspice, Ground", -// ), -// instructions = listOf( -// "Preheat and grease the grill. Combine all Seasoning ingredients and Set Aside.", -// "Combine Melted Butter [2 Tbsp] and Lemon Juice [1 Tbsp] and Toss with the Shrimp [1 lb].", -// "Skewer the Shrimp and coat with seasoning. Grill about 2 minutes per side", -// ), -// tags = mapOf( -// "Savory" to TagType.FLAVOUR, -// "Appetizer" to TagType.COURSE, -// "American" to TagType.CUISINE, -// "Grilled" to TagType.TECHNIQUE, -// "Carnivorous" to TagType.PROTEIN, -// "Spicy" to TagType.FLAVOUR, -// ), -// image = Res.drawable._10_strawberries, -// linkedRecipes = listOf( -// remouladeSauce -// ), -// ttt = TTT.TESTED, -// ), -// -// Recipe( -// title = "Chicken Rochester | Chicken French", -// description = "Pan-fried chicken cutlets in a rich lemon-butter sauce, often served with pasta.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("40m"), -// servings = "Serves 4", -// ingredients = listOf( -// "HEADER-Chicken", -// "4 Chicken Breasts (8 Chicken Cutlets)", -// "1 large Eggs", -// "1 Tbsp Milk", -// "0.25 Tsp Salt", -// "0.25 Tsp Pepper", -// "0.5 Cups All-Purpose Flour", -// "1 Tbsp Unsalted Butter", -// "1 Tbsp Olive Oil", -// -// "HEADER-Sauce", -// "4 Tbsp Unsalted Butter, divided", -// "0.25 Cups Minced Sweet Onion", -// "2 Tbsp All-Purpose Flour", -// "0.5 Cups Dry White Wine", -// "0.25 Cups Lemon Juice, fresh Squeezed", -// "2 Cups Chicken Broth", -// "Salt and Pepper to taste", -// "Minced Fresh Parsley Leaves, for garnish", -// "Sliced Lemon, for garnish" -// ), -// instructions = listOf( -// "HEADER-Chicken", -// "In a shallow bowl, whisk together the Egg [1] and Milk [1 Tbsp]. Set aside.", -// "Combine the Salt [0.25 Tsp], Pepper [0.25 Tsp], and Flour [0.5 Cups] in a separate shallow bowl and place next to the egg wash. Line a baking sheet with paper towels and set aside.", -// "In a large skillet, heat 2 Tbsp Butter and 2 Tbsp Olive Oil over medium heat until the Butter is melted and the foaming stops.", -// "Using tongs, dredge the Chicken Cutlets in the Flour mixture, shaking off the excess. Dip the Chicken in the Egg mixture, allowing the extra Egg to drip back into the bowl. Transfer to the Flour once again, turning to coat. Shake off the extra Flour and place in the hot skillet.", -// "Cook 2 or 3 Cutlets at a time, turning once, until the Chicken is well browned, about 3 minutes on each side. Transfer to the prepared paper-towel lined baking sheet. Repeat, adding more Butter and Olive Oil if needed until all Chicken is cooked. Set Chicken aside. Discard the grease and wipe out the skillet with clean paper towels.", -// -// "HEADER-Sauce", -// "Add Butter [3 Tbsp] to the now empty skillet over medium heat. Add the Minced Onion [0.25 Cups] and cook, stirring occasionally, until soft.", -// "Add Flour [2 Tbsp] and stir for 2 minutes. Add the Wine [0.5 Cups], Lemon Juice [0.25 Cups], and Chicken Broth [2 Cups]. Increase the temperature to medium-high and bring to a boil, stirring constantly.", -// "Reduce the heat to medium and cook the Sauce, stirring frequently, until it is reduced to about [1.5 Cups] and slightly thickened, about 10 minutes.", -// "Pour the Sauce through a fine mesh sieve to remove the onions if desired. Return the Sauce to the pan and reduce the heat to low. Add the last 1 Tbsp of Butter to the Sauce. Stir gently until melted. Check the seasoning and add Salt and Pepper as needed. The Lemon flavor will be intense.", -// "Reserve Half the Sauce for Pasta.", -// "Add the Chicken Cutlets to the Sauce and heat gently for 4 to 5 minutes, turning once, or until heated through. Top the Chicken with sautéed Lemon slices and garnish with minced Parsley and plenty of fresh ground Black Pepper.", -// -// "HEADER-Serving", -// "Serve with a long pasta, served tossed in the other half of the Lemon Sauce." -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "French" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Sauce" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Herby" to TagType.FLAVOUR, -// ), -// image = Res.drawable.chicken_rochester, -// ttt = TTT.TRUE, -// ), -// -// Recipe( -// title = "Beau Jo’s Mountain Pie", -// description = "A thick-crusted personal pizza with a sweet and garlicky sauce, perfect for dipping in honey.", -// prepTime = Duration.parse("30m"), -// cookTime = Duration.parse("15m"), -// servings = "Makes 3 Personal Pizzas", -// ingredients = listOf( -// "3 Cups White Flour (All-Purpose or Semolina)", -// "3 Cups Whole-Wheat Flour", -// "2 Cups Water", -// "0.25 Cup Olive Oil", -// "0.25 Cup Honey", -// "0.25 Cup Yeast (4 Tbsp) (Quick or Regular)", -// "1 Tsp Salt", -// "1 Tsp Pepper", -// "Pizza Sauce (Sweet and Garlicky is traditional)", -// "Pizza Toppings", -// "Cheese (traditionally Mozzarella)", -// "Extra Honey for Dipping" -// ), -// instructions = listOf( -// "Preheat oven with pizza stone to 500+ degrees F.", -// "Follow instructions to activate Yeast [0.25 cup], if any.", -// "In a very large bowl, mix all of the dry ingredients (White Flour [3 cups], Whole-Wheat Flour [3 cups], Salt [1 Tsp], Pepper [1 Tsp], dry Yeast [0.25 cup]) together well.", -// "In a separate bowl, mix together the wet ingredients, minus the Honey [0.25 cup] (Water [2 cups], Olive Oil [0.25 cup], activated Yeast [0.25 cup]).", -// "While mixing, combine the wet and dry ingredients.", -// "Add the Honey [0.25 cup].", -// "Continue to mix (preferably with a dough hook) for 7-10 minutes. If needed, also knead by hand (like any other bread). The dough should be firm and not stick to your fingers.", -// "Roll the dough into a ball. Place it into a lightly-oiled bowl. Score the top, loosely cover with plastic wrap, and let rise for 20 minutes.", -// "Cut dough into 3 equal pieces. Take one piece, and keep the other two covered.", -// "Flour your counter, and roll the crust to 0.125 inch thickness (thicker than you’d expect). Use a dinner plate to mark a circle, and cut any excess dough 3” wider than the plate.", -// "Using a fork, sporadically score holes into the dough within the inner circle.", -// "Cut a slit from the outer circle to the inner circle.", -// "Fold the edge of the slit over, and crimp the edge. If desired, feel free to stuff crust with extra Cheese.", -// "Add Sauce, Toppings, and Cheese. Bake pizza for 7-15 minutes until Cheese is bubbly and crust is crispy.", -// "Repeat steps 10-14 for additional 2 pizzas.", -// "Serve with additional Honey to dip leftover crust into." -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Baked" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// "Bread" to TagType.COURSE, -// ), -// image = Res.drawable._10_strawberries, // Replace with your image resource -// ttt = TTT.TESTED, -// ), -// -// Recipe( -// title = "Cheesy Cajun Garlic Bread", -// description = "A flavorful and cheesy garlic bread with a Cajun kick, perfect as an appetizer or side dish.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("10m"), -// servings = "Serves 6-8", -// ingredients = listOf( -// "12 ounce French Baguette (1 large or 2 small)", -// "0.5 cup (1 stick) Butter (softened)", -// "1.5 Tsp Garlic Powder", -// "0.5 Tsp Cajun Seasoning", -// "0.5 Tsp Dried Parsley", -// "0.25 cup Parmesan Cheese (shredded)" -// ), -// instructions = listOf( -// "Preheat oven to 375 degrees F. Line a baking sheet with foil or parchment paper.", -// "Cut Baguette [12 ounce] into 1 inch slices, but only cutting 3/4 of the way through. Be sure not to cut all the way through.", -// "In a small bowl, combine Butter [0.5 cup], Garlic Powder [1.5 Tsp], Cajun Seasoning [0.5 Tsp], and Dried Parsley [0.5 Tsp]. Mix well.", -// "Using a brush or knife, spread Butter mixture evenly in between the slices and over the top of the loaf.", -// "Sprinkle the top of the loaf with Parmesan Cheese [0.25 cup].", -// "Place Garlic Bread on prepared baking pan and bake for 8-10 minutes or until the Cheese is melted and the bread starts to turn golden brown.", -// "Tear or cut into pieces and serve warm." -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Bread" to TagType.COURSE, -// "Appetizer" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// "Garlic" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// ), -// image = Res.drawable._10_strawberries, // Replace with your image resource -// ttt = TTT.TESTED -// ) +val americanList = listOf( + Recipe( + title = "Chicken & Waffles", + description = "Southern Fried Chicken served on a Buttermilk Waffle, drenched in a hot Honey Butter.", + ingredients = listOf( + "8 Chicken Breasts", + "8 Waffles", + + "HEADER-Buttermilk Brine", + "2 Cups (480 mL) Buttermilk", + "1 Tbsp Kosher Salt", + "0.5 Tbsp Garlic Powder", + "0.5 Tbsp Onion Powder", + "1 Tbsp Hot Sauce or Chili Powder", + "1 Tsp Smoked Paprika", + + "HEADER-Flour Crust", + "3 Cups (384 g) Flour", + "0.33 Cup (43 g) Cornstarch", + "2 Tsp Baking Powder", + "2 Tsp Garlic Powder", + "2 Tsp Onion Powder", + "2 Tsp Kosher Salt", + "2 Tsp freshly cracked Black Pepper", + + "HEADER-Spicy Honey Butter", + "0.25 Cups (85 g) Honey", + "0.5 Tsp Chili Powder", + "4 Tbsp (57 g) Unsalted Butter", + "0.5 Tsp Kosher Salt", + ), + instructions = listOf( + + "HEADER-Brine", + "Whisk the Buttermilk [2 Cups], Kosher Salt [1 Tbsp], Garlic Powder [0.5 Tbsp], Onion Powder [0.5 Tbsp], Hot Sauce [1 Tbsp], and Smoked Paprika" + + " [1 Tsp] together in a large mixing bowl.", + "Add the Chicken Breast [8] to the bowl, making sure every piece is covered in the Brine.", + "Cover the bowl and let the Chicken marinate in the Buttermilk Brine from 1 hour to overnight in the fridge.", + + "HEADER-Coat & Fry", + "In a dutch oven pot, heat up about half the pot's worth of Vegetable Oil. Allow the Oil to reach 350 degrees F.", + "In a mixing bowl whisk together Flour [3 Cups], Cornstarch [0.33 Cups], Baking Powder [2 Tsp], and Seasonings.", + "Take each Chicken piece from the Brine and dredge into the seasoned Flour. Thoroughly coat the Chicken all over, then let rest on a plate for " + + "five minutes before frying.", + "Fry the Chicken in the hot Oil (no more than about 4 per batch) until golden brown, crispy, and cooked through completely, about 8-9 minutes.", + "Carefully take the Chicken out of the oil and place them on a baking sheet fitted with a wire rack and let cool slightly before serving. Repeat " + + "until all the Chicken is fried.", + + "HEADER-Finish & Serve", + "In a small saucepan, melt Butter [4 Tbsp] over medium heat with Honey [0.25 Cups], Chili Powder [0.5 Tsp], and Salt [ 0.5 Tsp]. Whisk well.", + "Lower the temperature to 'warm/low' heat and keep for serving. [Make sure to keep warm, as sauce will solidify very quickly]", + "Make the Belgian Waffles and serve the Chicken on top of the waffles, then drizzle generously with Spicy Honey Butter Sauce.", + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Fried" to TagType.TECHNIQUE, + "Carnivorous" to TagType.PROTEIN, + "Sweet" to TagType.FLAVOUR + ), + image = Res.drawable.Chicken_And_Waffles, + cookTime = Duration.parse("20m"), + prepTime = Duration.parse("8h"), + servings = "Serves 6", + ttt = TTT.TESTED, + ), + + Recipe( + title = "Ragin' Cajun Pasta", + description = "Short Pasta in a Creamy Cajun Wine and Tomato Sauce.", + ingredients = listOf( + "1 lb Pasta", + "2 Cups White Wine", + "1 Cup Heavy Cream", + "2 Tbsp Tomato Paste", + "1 Tbsp Garlic Powder", + "2 Tsp Onion Powder", + "2 Tbsp Cajun Spice", + "2 Tsp Paprika", + "1 cap Lemon Juice", + "2 Tbsp Flour", + "2 Tbsp Butter", + ), + instructions = listOf( + "Cook Pasta to al dente.", + "In a saucepan, melt Butter [2 Tbsp], then add Flour [2 Tbsp].", + "Add White Wine [2 Cups], reduce.", + "Add Cream [1 Cup] and Tomato Paste [2 Tbsp], reduce.", + "Add Onion [2 Tsp], Garlic [1 Tbsp], Cajun [2 Tbsp], and Paprika [2 Tsp] Powders", + "Stir in Pasta", + ), + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("30m"), + tags = mapOf( + "American" to TagType.CUISINE, + "Cajun" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Creamy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Saucier" to TagType.TECHNIQUE, + "Sauce" to TagType.TECHNIQUE, + "Vegetarian" to TagType.PROTEIN, + ), + image = Res.drawable._10_strawberries, + servings = "Makes Pasta for 4", + ttt = TTT.TRUE, + ), + + Recipe( + title = "Midnight Garlic Noodles", + description = "Garlicky, Oily, Rich Umami Noodles", + ingredients = listOf( + "Sea Salt", + "12 oz Wheat Pasta", + "2 Tbsp Burnt Miso", + "15 Cloves Garlic Confit", + "2 Tbsp Garlic Oil", + "1 Tbsp Unsalted Butter", + "Fleur de Sel", + "Parmesan Cheese", + ), + instructions = listOf( + "Cook Pasta [12 oz] to al dente", + "Run Burnt Miso [2 Tbsp], Garlic [15 Cloves], and Garlic Oil [1 Tbsp] in blender until smooth.", + "Add Butter [1 Tbsp] and [.25 Cups] of Pasta Water, blend again.", + "Heat Garlic Oil [1 Tbsp] in a skillet. Add the Garlic-Miso Sauce from above. Use tongs to transfer Pasta directly to the skillet.", + "Season with Fleur de Sel and cover with Parmesan Cheese.", + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Umami" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + "Oily" to TagType.FLAVOUR, + ), + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("15m"), + image = Res.drawable.midnight_garlic_noodles, + servings = "Makes 2 Bowls", + ttt = TTT.TESTED, + linkedRecipes = listOf( + burntMiso + ) + ), + + Recipe( + title = "Chicken and Dumpling Soup", + description = "Southern Style Chicken and Biscuits in Soup.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("40m"), + servings = "6 People", + ingredients = listOf( + + "HEADER-Soup", + "1 Tbsp Olive Oil", + "2 lbs Chicken Breast", + "5 Tbsp Butter", + "1 Cups Yellow Onion, Diced", + "1 Cups Carrot, Diced", + "1 Cups Celery, Diced", + "3 Cloves Garlic", + "1 Tsp Worcestershire Sauce", + "1 Tsp Hot Sauce", + ".33 Cups Flour", + "4.5 Cups Chicken Broth", + "1.5 Cups Half and Half", + ".75 Cups Peas", + + "HEADER-Seasonings", + "1 Tsp Onion Powder", + ".5 Tsp Basil", + ".5 Tsp Parsley", + ".5 Tsp Thyme", + ".5 Tsp Rosemary", + ".5 Tsp Mustard Powder", + + "HEADER-Dumplings", + "2 Cups Cake Flour", + "2 Tsp Baking Powder", + ".5 Tsp Baking Soda", + "1 Tsp Salt", + ".5 Tsp Garlic Powder", + "2 Tsp Sugar", + ".75 Cups Sour Cream, Cold", + ".25 Cups Cold Milk", + "4 Tbsp Butter, Melted", + + ), + instructions = listOf( + "HEADER-Prep", + "Boil the Chicken. Season to taste and shred.", + "Combine All from Seasonings and Set Aside", + + "HEADER-Soup", + "Melt the Butter [5 Tbsp] in a large pot. Add the Onions [1 Cups], Carrots [1 Cups], and Celery [1 Cups] and cook for about 5 minutes.", + "Add the Garlic [3 Cloves], Worcestershire Sauce [1 Tsp], Hot Sauce [1 Tsp], and the Seasonings, and cook for another minute.", + "Add the Flour [.33 Cups] and toss to coat. Cook for another 2 minutes.", + "Add the Chicken Broth [4.5 Cups] and stir thoroughly. Add the Half and Half [1.5 Cups].", + "Add the Peas [.75 Cups] and bring to a boil. Simmer while you make the Dumplings.", + + "HEADER-Dumplings", + "Combine Cake Flour [2 Cups], Baking Powder [2 Tsp], Salt [1 Tsp], Garlic Powder[.5 Tsp], and Sugar[2 Tsp] in a bowl.", + "Add Milk [.25 Cups], Sour Cream [.75 Cups], and Melted Butter [4 Tbsp] to the bowl and fold into a light dough.", + "At this point, you should add the Chicken into the Soup.", + "Using a Scoop, take a ball of Dumpling Dough and drop it into the Soup. Ladle a bit of liquid over each.", + "Cover and Simmer for 15 minutes, or until everything is cooked through.", + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Soup" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.chicken_and_dumplings, + ttt = TTT.TRIED + ), + + Recipe( + title = "Spicy Chicken Pretzel Bacon Pub Sandwich", + description = "Spicy Chicken Cutlets on a Pretzel Bun with Bacon, Muenster, Beer Cheese, and Onion Tangles. See Linked Recipes for Ingredients. Cook/Prep Times assume you've already started the pretzel dough rising.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("20m"), + servings = "Makes 6 Sandwiches", + ingredients = listOf( + "6 Pretzel Buns (Recipe Included)", + "6 Chicken Cutlets (Recipe Included)", + "4 Cups Beer Cheese (Recipe Included)", + "2 Cups Onion Tangles (Recipe Included)", + "6 Slices Muenster Cheese", + "6 Slices Bacon", + "Honey Mustard", + ), + instructions = listOf( + + "HEADER-Prep", + "Start by making the Pretzel Buns, if making from scratch", + "Prep the Onions and Chicken while the Pretzel Dough is rising.", + "When Pretzels enter the Oven, make the Cheese Sauce, Bacon, and Fry the Onion Tangles.", + "When the Pretzels are about 10 minutes away from done, fry the Chicken", + + "HEADER-Assembly", + "Slice Pretzel Bun in half. Layer 1 Chicken Cutlet, Honey Mustard to taste, then a slice of Bacon.", + "Add some Onion Tangles, then a slice of Muenster Cheese. Toast, open faced, until Cheese melts.", + "Top with Beer Cheese and top bun and Serve.", + + ), + tags = mapOf( + "Spicy" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "American" to TagType.CUISINE, + "Carnivorous" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable.SCPBP, + linkedRecipes = SCPBP, + ttt = TTT.TRIED, + ), + + Recipe( + title = "Honey Boiled Bagels", + description = "New York Style Honey Kettle Boiled Bagels. Try them with Everything Seasoning!", + prepTime = Duration.parse("2h 15m"), + cookTime = Duration.parse("25m"), + servings = "Makes 8 Bagels", + ingredients = listOf( + + "HEADER-Dough", + "1.5 Cups (360 ml) Warm Water", + "2.75 Tsp Active Yeast (1 Packet)", + "4 Cups (520 g) Bread Flour", + "1 Tbsp Brown Sugar", + "2 Tsp Salt", + "Olive Oil to Coat", + + "HEADER-Water Bath", + "2 Quarts Water", + "0.25 Cups (85g) Honey", + + "HEADER-Topping", + "Everything Seasoning", + "1 Egg Whites, to wash", + ), + instructions = listOf( + "Whisk together Water [1.5 Cups] and Yeast [2.75 Tsp] in Stand Mixer Bowl. Let Stand for 5 minutes.", + "Add Flour [4 Cups], Sugar [1 Tbsp], and Salt [2 Tsp]. Beat on low for 2 minutes. Knead on Medium for 7 minutes.", + "Grease a bowl and turn out the Dough into it. Cover and let Rise for 2 Hours", + "Preheat the Oven to 425F. Start Boiling the Water Bath.", + "Shape Bagels, laying out on a parchment lined baking sheet.", + "Boil each Bagel 1 minute per side.", + "Brush Bagel tops with Egg White [1], and cover with Seasoning, if using.", + "Bake for 23 minutes.", + ), + tags = mapOf( + "Baked" to TagType.TECHNIQUE, + "American" to TagType.CUISINE, + "Vegetarian" to TagType.PROTEIN, + "Bread" to TagType.COURSE, + ), + image = Res.drawable.bagels, + linkedRecipes = everythingSeasoning, + ttt = TTT.TRUE + ), + + Recipe( + title = "Outback Style Shrimp", + description = "Outback Style Shrimp on the Barbie with Remoulade Sauce.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("5m"), + servings = "Makes 1 lb of Shrimp", + ingredients = listOf( + "1 lb Shrimp", + "1 Tbsp Lemon Juice", + "2 Tbsp Butter, melted, cooled", + + "HEADER-Seasoning", + "1 Tsp Salt", + ".5 Tsp Garlic", + ".5 Tsp Onion Powder", + ".5 Tsp Black Pepper", + ".5 Tsp Chili Powder", + ".5 Tsp Coriander, Ground", + ".25 Tsp Cayenne", + ".25 Tsp Allspice, Ground", + ), + instructions = listOf( + "Preheat and grease the grill. Combine all Seasoning ingredients and Set Aside.", + "Combine Melted Butter [2 Tbsp] and Lemon Juice [1 Tbsp] and Toss with the Shrimp [1 lb].", + "Skewer the Shrimp and coat with seasoning. Grill about 2 minutes per side", + ), + tags = mapOf( + "Savory" to TagType.FLAVOUR, + "Appetizer" to TagType.COURSE, + "American" to TagType.CUISINE, + "Grilled" to TagType.TECHNIQUE, + "Carnivorous" to TagType.PROTEIN, + "Spicy" to TagType.FLAVOUR, + ), + image = Res.drawable._10_strawberries, + linkedRecipes = listOf( + remouladeSauce + ), + ttt = TTT.TESTED, + ), + + Recipe( + title = "Chicken Rochester | Chicken French", + description = "Pan-fried chicken cutlets in a rich lemon-butter sauce, often served with pasta.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("40m"), + servings = "Serves 4", + ingredients = listOf( + "HEADER-Chicken", + "4 Chicken Breasts (8 Chicken Cutlets)", + "1 large Eggs", + "1 Tbsp Milk", + "0.25 Tsp Salt", + "0.25 Tsp Pepper", + "0.5 Cups All-Purpose Flour", + "1 Tbsp Unsalted Butter", + "1 Tbsp Olive Oil", + + "HEADER-Sauce", + "4 Tbsp Unsalted Butter, divided", + "0.25 Cups Minced Sweet Onion", + "2 Tbsp All-Purpose Flour", + "0.5 Cups Dry White Wine", + "0.25 Cups Lemon Juice, fresh Squeezed", + "2 Cups Chicken Broth", + "Salt and Pepper to taste", + "Minced Fresh Parsley Leaves, for garnish", + "Sliced Lemon, for garnish" + ), + instructions = listOf( + "HEADER-Chicken", + "In a shallow bowl, whisk together the Egg [1] and Milk [1 Tbsp]. Set aside.", + "Combine the Salt [0.25 Tsp], Pepper [0.25 Tsp], and Flour [0.5 Cups] in a separate shallow bowl and place next to the egg wash. Line a baking sheet with paper towels and set aside.", + "In a large skillet, heat 2 Tbsp Butter and 2 Tbsp Olive Oil over medium heat until the Butter is melted and the foaming stops.", + "Using tongs, dredge the Chicken Cutlets in the Flour mixture, shaking off the excess. Dip the Chicken in the Egg mixture, allowing the extra Egg to drip back into the bowl. Transfer to the Flour once again, turning to coat. Shake off the extra Flour and place in the hot skillet.", + "Cook 2 or 3 Cutlets at a time, turning once, until the Chicken is well browned, about 3 minutes on each side. Transfer to the prepared paper-towel lined baking sheet. Repeat, adding more Butter and Olive Oil if needed until all Chicken is cooked. Set Chicken aside. Discard the grease and wipe out the skillet with clean paper towels.", + + "HEADER-Sauce", + "Add Butter [3 Tbsp] to the now empty skillet over medium heat. Add the Minced Onion [0.25 Cups] and cook, stirring occasionally, until soft.", + "Add Flour [2 Tbsp] and stir for 2 minutes. Add the Wine [0.5 Cups], Lemon Juice [0.25 Cups], and Chicken Broth [2 Cups]. Increase the temperature to medium-high and bring to a boil, stirring constantly.", + "Reduce the heat to medium and cook the Sauce, stirring frequently, until it is reduced to about [1.5 Cups] and slightly thickened, about 10 minutes.", + "Pour the Sauce through a fine mesh sieve to remove the onions if desired. Return the Sauce to the pan and reduce the heat to low. Add the last 1 Tbsp of Butter to the Sauce. Stir gently until melted. Check the seasoning and add Salt and Pepper as needed. The Lemon flavor will be intense.", + "Reserve Half the Sauce for Pasta.", + "Add the Chicken Cutlets to the Sauce and heat gently for 4 to 5 minutes, turning once, or until heated through. Top the Chicken with sautéed Lemon slices and garnish with minced Parsley and plenty of fresh ground Black Pepper.", + + "HEADER-Serving", + "Serve with a long pasta, served tossed in the other half of the Lemon Sauce." + ), + tags = mapOf( + "American" to TagType.CUISINE, + "French" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Pan Fried" to TagType.TECHNIQUE, + "Sauce" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Herby" to TagType.FLAVOUR, + ), + image = Res.drawable.chicken_rochester, + ttt = TTT.TRUE, + ), + + Recipe( + title = "Beau Jo’s Mountain Pie", + description = "A thick-crusted personal pizza with a sweet and garlicky sauce, perfect for dipping in honey.", + prepTime = Duration.parse("30m"), + cookTime = Duration.parse("15m"), + servings = "Makes 3 Personal Pizzas", + ingredients = listOf( + "3 Cups White Flour (All-Purpose or Semolina)", + "3 Cups Whole-Wheat Flour", + "2 Cups Water", + "0.25 Cup Olive Oil", + "0.25 Cup Honey", + "0.25 Cup Yeast (4 Tbsp) (Quick or Regular)", + "1 Tsp Salt", + "1 Tsp Pepper", + "Pizza Sauce (Sweet and Garlicky is traditional)", + "Pizza Toppings", + "Cheese (traditionally Mozzarella)", + "Extra Honey for Dipping" + ), + instructions = listOf( + "Preheat oven with pizza stone to 500+ degrees F.", + "Follow instructions to activate Yeast [0.25 cup], if any.", + "In a very large bowl, mix all of the dry ingredients (White Flour [3 cups], Whole-Wheat Flour [3 cups], Salt [1 Tsp], Pepper [1 Tsp], dry Yeast [0.25 cup]) together well.", + "In a separate bowl, mix together the wet ingredients, minus the Honey [0.25 cup] (Water [2 cups], Olive Oil [0.25 cup], activated Yeast [0.25 cup]).", + "While mixing, combine the wet and dry ingredients.", + "Add the Honey [0.25 cup].", + "Continue to mix (preferably with a dough hook) for 7-10 minutes. If needed, also knead by hand (like any other bread). The dough should be firm and not stick to your fingers.", + "Roll the dough into a ball. Place it into a lightly-oiled bowl. Score the top, loosely cover with plastic wrap, and let rise for 20 minutes.", + "Cut dough into 3 equal pieces. Take one piece, and keep the other two covered.", + "Flour your counter, and roll the crust to 0.125 inch thickness (thicker than you’d expect). Use a dinner plate to mark a circle, and cut any excess dough 3” wider than the plate.", + "Using a fork, sporadically score holes into the dough within the inner circle.", + "Cut a slit from the outer circle to the inner circle.", + "Fold the edge of the slit over, and crimp the edge. If desired, feel free to stuff crust with extra Cheese.", + "Add Sauce, Toppings, and Cheese. Bake pizza for 7-15 minutes until Cheese is bubbly and crust is crispy.", + "Repeat steps 10-14 for additional 2 pizzas.", + "Serve with additional Honey to dip leftover crust into." + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Baked" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + "Bread" to TagType.COURSE, + ), + image = Res.drawable._10_strawberries, // Replace with your image resource + ttt = TTT.TESTED, + ), + + Recipe( + title = "Cheesy Cajun Garlic Bread", + description = "A flavorful and cheesy garlic bread with a Cajun kick, perfect as an appetizer or side dish.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("10m"), + servings = "Serves 6-8", + ingredients = listOf( + "12 ounce French Baguette (1 large or 2 small)", + "0.5 cup (1 stick) Butter (softened)", + "1.5 Tsp Garlic Powder", + "0.5 Tsp Cajun Seasoning", + "0.5 Tsp Dried Parsley", + "0.25 cup Parmesan Cheese (shredded)" + ), + instructions = listOf( + "Preheat oven to 375 degrees F. Line a baking sheet with foil or parchment paper.", + "Cut Baguette [12 ounce] into 1 inch slices, but only cutting 3/4 of the way through. Be sure not to cut all the way through.", + "In a small bowl, combine Butter [0.5 cup], Garlic Powder [1.5 Tsp], Cajun Seasoning [0.5 Tsp], and Dried Parsley [0.5 Tsp]. Mix well.", + "Using a brush or knife, spread Butter mixture evenly in between the slices and over the top of the loaf.", + "Sprinkle the top of the loaf with Parmesan Cheese [0.25 cup].", + "Place Garlic Bread on prepared baking pan and bake for 8-10 minutes or until the Cheese is melted and the bread starts to turn golden brown.", + "Tear or cut into pieces and serve warm." + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Bread" to TagType.COURSE, + "Appetizer" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + "Garlic" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + ), + image = Res.drawable._10_strawberries, // Replace with your image resource + ttt = TTT.TESTED + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BrazilianData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BrazilianData.kt index e3aee47..5d662b1 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BrazilianData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BrazilianData.kt @@ -7,65 +7,65 @@ import bakersmenagerie.composeapp.generated.resources.coxhinas import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val brazilianList = listOf( -// Recipe( -// title = "Coxinha", -// description = "Brazilian style croquettes; Shredded chicken battered and fried.", -// prepTime = Duration.parse("2h"), -// cookTime = Duration.parse("1h"), -// servings = "Serves 8 to 12 People", -// ingredients = listOf( -// -// "HEADER-Boiled Chicken", -// "600g Chicken", -// "5 Cups Chicken Broth", -// "1 Carrots", -// "1 Onions, halved", -// "2 Bay Leaves", -// -// "HEADER-Filling", -// "2 Tbsp Butter", -// "1 Onion, Halved", -// "2 Cloves Garlic", -// "1.5 Tbsp Lime Juice", -// "1 Cups Cream Cheese", -// -// "HEADER-Batter", -// "3 Cups Flour", -// "2 Tsp Oil", -// "2 Eggs", -// "3 Cups Bread Crumbs", -// ), -// instructions = listOf( -// -// "HEADER-Chicken Boil", -// "Cover Chicken with the Broth [5 Cups]. Add Carrots [1], Onions [1], and Bay Leaves [2].", -// "Boil until Chicken is cooked through. Pull and set aside, straining and reserving the Broth.", -// -// "HEADER-Make Fillings", -// "Saute the Onions [1] and the Garlic [2 Cloves] in Butter [2 Tbsp].", -// "Shred the Chicken. Mix in Lime Juice and Cream Cheese [1 Cup], and the Garlic-Onion Mixture.", -// "Combine strained Broth [3 Cups] with Flour [3 Cups], Oil [2 Tsp], Salt and Pepper.", -// "In a pan over Medium heat, reduce the dough mixture until dried ever so slightly, pulling away from the walls of the pan.", -// "Chill the Chicken Mixture and the Dough for at least an hour, up to overnight.", -// -// "HEADER-Fry", -// "Once Chilled, make the Coxinhas. Take a Golf ball sized piece of dough, flattened into a round. Fill with about 1 Tbsp of filling", -// "Wrap up the sides into a teardrop, using a small amount of Milk or Water to seal the dough shut.", -// "Dip the Coxinha in beaten Egg Mixture, then roll in Breadcrumbs.", -// "Deep fry in batches at 365F, about 4 minutes per batch.", -// ), -// tags = mapOf( -// "Brazilian" to TagType.CUISINE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Appetizer" to TagType.COURSE, -// "Street Food" to TagType.CUISINE, -// "Carnivorous" to TagType.PROTEIN, -// "Croquette" to TagType.TECHNIQUE -// ), -// image = Res.drawable.coxhinas, -// ttt = TTT.TRIED, -// ) +val brazilianList = listOf( + Recipe( + title = "Coxinha", + description = "Brazilian style croquettes; Shredded chicken battered and fried.", + prepTime = Duration.parse("2h"), + cookTime = Duration.parse("1h"), + servings = "Serves 8 to 12 People", + ingredients = listOf( + + "HEADER-Boiled Chicken", + "600g Chicken", + "5 Cups Chicken Broth", + "1 Carrots", + "1 Onions, halved", + "2 Bay Leaves", + + "HEADER-Filling", + "2 Tbsp Butter", + "1 Onion, Halved", + "2 Cloves Garlic", + "1.5 Tbsp Lime Juice", + "1 Cups Cream Cheese", + + "HEADER-Batter", + "3 Cups Flour", + "2 Tsp Oil", + "2 Eggs", + "3 Cups Bread Crumbs", + ), + instructions = listOf( + + "HEADER-Chicken Boil", + "Cover Chicken with the Broth [5 Cups]. Add Carrots [1], Onions [1], and Bay Leaves [2].", + "Boil until Chicken is cooked through. Pull and set aside, straining and reserving the Broth.", + + "HEADER-Make Fillings", + "Saute the Onions [1] and the Garlic [2 Cloves] in Butter [2 Tbsp].", + "Shred the Chicken. Mix in Lime Juice and Cream Cheese [1 Cup], and the Garlic-Onion Mixture.", + "Combine strained Broth [3 Cups] with Flour [3 Cups], Oil [2 Tsp], Salt and Pepper.", + "In a pan over Medium heat, reduce the dough mixture until dried ever so slightly, pulling away from the walls of the pan.", + "Chill the Chicken Mixture and the Dough for at least an hour, up to overnight.", + + "HEADER-Fry", + "Once Chilled, make the Coxinhas. Take a Golf ball sized piece of dough, flattened into a round. Fill with about 1 Tbsp of filling", + "Wrap up the sides into a teardrop, using a small amount of Milk or Water to seal the dough shut.", + "Dip the Coxinha in beaten Egg Mixture, then roll in Breadcrumbs.", + "Deep fry in batches at 365F, about 4 minutes per batch.", + ), + tags = mapOf( + "Brazilian" to TagType.CUISINE, + "Deep Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Appetizer" to TagType.COURSE, + "Street Food" to TagType.CUISINE, + "Carnivorous" to TagType.PROTEIN, + "Croquette" to TagType.TECHNIQUE + ), + image = Res.drawable.coxhinas, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BurntMiso.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BurntMiso.kt index cc0af59..20453cc 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BurntMiso.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/BurntMiso.kt @@ -7,29 +7,29 @@ import bakersmenagerie.composeapp.generated.resources.burnt_miso import com.menagerie.bakers.model.TTT import kotlin.time.Duration -//val burntMiso = Recipe( -//title = "Burnt Miso", -//description = "Bitter and Sweet, Burnt Miso adds a complex layer to Umami dishes.", -//prepTime = Duration.parse("5m"), -//cookTime = Duration.parse("30m"), -// servings = "Literally Enough Though", -//ingredients = listOf( -//"Miso Paste" -//), -//instructions = listOf( -//"Preheat oven to 400F", -//"Spread as much Miso as you want to burn in a 1/2 inch thick layer on parchment paper on a baking sheet.", -//"Bake for 30 Minutes or until charred.", -//"Blend when using." -//), -//tags = mapOf( -//"American" to TagType.CUISINE, -//"Ingredient" to TagType.COURSE, -//"Bitter" to TagType.FLAVOUR, -//"Sweet" to TagType.FLAVOUR, -//"Baked" to TagType.TECHNIQUE, -//"Vegan" to TagType.PROTEIN, -//), -//image = Res.drawable.burnt_miso, -// ttt = TTT.TESTED -//) \ No newline at end of file +val burntMiso = Recipe( +title = "Burnt Miso", +description = "Bitter and Sweet, Burnt Miso adds a complex layer to Umami dishes.", +prepTime = Duration.parse("5m"), +cookTime = Duration.parse("30m"), + servings = "Literally Enough Though", +ingredients = listOf( +"Miso Paste" +), +instructions = listOf( +"Preheat oven to 400F", +"Spread as much Miso as you want to burn in a 1/2 inch thick layer on parchment paper on a baking sheet.", +"Bake for 30 Minutes or until charred.", +"Blend when using." +), +tags = mapOf( +"American" to TagType.CUISINE, +"Ingredient" to TagType.COURSE, +"Bitter" to TagType.FLAVOUR, +"Sweet" to TagType.FLAVOUR, +"Baked" to TagType.TECHNIQUE, +"Vegan" to TagType.PROTEIN, +), +image = Res.drawable.burnt_miso, + ttt = TTT.TESTED +) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/EverythingSeasoning.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/EverythingSeasoning.kt index 957bfc3..bc39040 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/EverythingSeasoning.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/EverythingSeasoning.kt @@ -8,31 +8,31 @@ import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val everythingSeasoning = listOf( -// Recipe( -// title = "Everything Seasoning", -// description = "5 Spice Bagel Blend.", -// prepTime = Duration.parse("5m"), -// cookTime = Duration.ZERO, -// servings = "Makes Enough for 8 Bagels", -// ingredients = listOf( -// "2 Tbsp Poppy Seeds", -// "2 Tbsp Sesame Seeds", -// "1 Tbsp Onion Powder", -// "1 Tbsp Garlic Powder", -// ".5 Tbsp Course Salt", -// ), -// instructions = listOf( -// "Mix to Combine." -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Vegan" to TagType.PROTEIN, -// "Ingredient" to TagType.COURSE, -// "Blended" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED -// ) +val everythingSeasoning = listOf( + Recipe( + title = "Everything Seasoning", + description = "5 Spice Bagel Blend.", + prepTime = Duration.parse("5m"), + cookTime = Duration.ZERO, + servings = "Makes Enough for 8 Bagels", + ingredients = listOf( + "2 Tbsp Poppy Seeds", + "2 Tbsp Sesame Seeds", + "1 Tbsp Onion Powder", + "1 Tbsp Garlic Powder", + ".5 Tbsp Course Salt", + ), + instructions = listOf( + "Mix to Combine." + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Vegan" to TagType.PROTEIN, + "Ingredient" to TagType.COURSE, + "Blended" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/JamaicanData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/JamaicanData.kt index ec9445f..f42a14e 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/JamaicanData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/JamaicanData.kt @@ -7,41 +7,41 @@ import bakersmenagerie.composeapp.generated.resources.jerk import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val jamaicanList = listOf( -// Recipe( -// title = "Jamaican Jerk Sauce", -// description = "A spicy and flavorful Jamaican Jerk Sauce made with Scotch Bonnet Peppers, Red Onion, Garlic, and a blend of warm spices.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.ZERO, // No cooking involved -// servings = "Makes about 2 cups", -// ingredients = listOf( -// "6 Scotch Bonnet Peppers, Chopped", -// "1 Small Red Onions, Chopped", -// "6 Garlic Cloves, Chopped", -// "4 Stalks Scallions, ends trimmed", -// "0.25 Cups Soy Sauce", -// "0.25 Cups Apple Cider Vinegar", -// "2 Tbsp Olive Oil", -// "0.25 Cups Lime Juice", -// "1 Tbsp Ginger, Grated", -// "2 Tbsp Brown Sugar", -// "1 Tsp Nutmeg", -// "1 Tsp Allspice", -// "1 Tsp Cinnamon", -// "1 Tsp Dried Thyme", -// "Salt to taste" -// ), -// instructions = listOf( -// "Combine all ingredients in a food processor, Blend. Adjust Soy [0.25 Cup], Vinegar [0.25 Cup], and Oil [2 Tbsp] ratios accordingly for consistency." -// ), -// tags = mapOf( -// "Jamaican" to TagType.CUISINE, -// "Condiment" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Vegan" to TagType.PROTEIN, -// ), -// image = Res.drawable.jerk, -// ttt = TTT.TRUE, -// ) +val jamaicanList = listOf( + Recipe( + title = "Jamaican Jerk Sauce", + description = "A spicy and flavorful Jamaican Jerk Sauce made with Scotch Bonnet Peppers, Red Onion, Garlic, and a blend of warm spices.", + prepTime = Duration.parse("15m"), + cookTime = Duration.ZERO, // No cooking involved + servings = "Makes about 2 cups", + ingredients = listOf( + "6 Scotch Bonnet Peppers, Chopped", + "1 Small Red Onions, Chopped", + "6 Garlic Cloves, Chopped", + "4 Stalks Scallions, ends trimmed", + "0.25 Cups Soy Sauce", + "0.25 Cups Apple Cider Vinegar", + "2 Tbsp Olive Oil", + "0.25 Cups Lime Juice", + "1 Tbsp Ginger, Grated", + "2 Tbsp Brown Sugar", + "1 Tsp Nutmeg", + "1 Tsp Allspice", + "1 Tsp Cinnamon", + "1 Tsp Dried Thyme", + "Salt to taste" + ), + instructions = listOf( + "Combine all ingredients in a food processor, Blend. Adjust Soy [0.25 Cup], Vinegar [0.25 Cup], and Oil [2 Tbsp] ratios accordingly for consistency." + ), + tags = mapOf( + "Jamaican" to TagType.CUISINE, + "Condiment" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Vegan" to TagType.PROTEIN, + ), + image = Res.drawable.jerk, + ttt = TTT.TRUE, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/MexicanData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/MexicanData.kt index 72be753..78d1621 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/MexicanData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/MexicanData.kt @@ -8,87 +8,87 @@ import bakersmenagerie.composeapp.generated.resources.tinga import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val mexicanList = listOf( -// Recipe ( -// title = "Elote | Street Corn", -// description = "Grilled Street Corn with Cream Sauce and Chili Spices.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("6m"), -// servings = "6 Ears", -// ingredients = listOf( -// "6 Medium Ears Sweet Corn", -// ".5 Cup Mexican Crema, or Sour Cream", -// ".5 Cup Mayonnaise", -// ".5 Cup Cilantro, Chopped", -// "2 Cloves Garlic", -// ".25 Tbsp Chipotle Powder, or to taste", -// "2 tsp Lime Zest, grated", -// "2 Tbsp Lime Juice", -// ".5 Cup Cotija Cheese, crumbled", -// "Lime Wedges, to serve" -// ), -// instructions = listOf( -// "In a bowl, whisk together the Crema [.5 Cup], Mayonnaise [.5 Cup], Cilantro [.5 Cup], Garlic [2 Cloves], Chipotle Pepper [.75 Tbsp]," + -// " Lime Zest [2 Tsp] and Lime Juice [2 Tbsp]. Taste and season the mixture with Salt if needed. (Crema has a little Salt already, so" + -// " add extra judiciously.) Set aside.", -// "Grill the Corn, about 3 minutes per side, until browned", -// "Slather with Crema Mixture, crumbled Cotija, and Chipotle Powder. Serve with Lime Wedges" -// -// ), -// tags = mapOf( -// "Mexican" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Grilled" to TagType.TECHNIQUE, -// "Street Food" to TagType.CUISINE, -// "Appetizer" to TagType.COURSE, -// "Vegetarian" to TagType.PROTEIN, -// "Creamy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED -// ), -// -// Recipe( -// title = "Chicken Tinga", -// description = "Shredded Chicken in a Smoky Chipotle Tomato sauce.", -// ingredients = listOf( -// "4 Chicken Breasts", -// "5 Tbsp Oil (olive oil)", -// "1.5 Onions (sliced)", -// "5 Roma Tomatoes", -// "1 Can Chipotle chiles in adobo (7oz)", -// "2-3 Cloves Garlic", -// "1.5 Tsp Salt", -// "0.25 Tsp Mexican Oregano", -// "0.25 Tsp Dried Thyme", -// "0.25 Tsp Dried Marjoram", -// "0.25 Tsp Black Pepper", -// "1 can Refried Beans", -// "Small, thick cut slices of Toast" -// ), -// instructions = listOf( -// "Bring a pot of salty water to a boil and add the Chicken Breasts. Let the Chicken simmer until cooked through. Skim the foam as it boils.", -// "While the Chicken cooks, place the Tomatoes [5] in a medium saucepan, cover with water, bring to a simmer and cook for 8-10 minutes, until soft.", -// "Slice the Onions [1.5] thinly. Heat the Oil [5 Tbsp] in a large pan and add the Onions. Cook until soft and translucent for 5-6 minutes.", -// "In a blender, throw the Tomatoes [5], Garlic [3 Cloves], Salt [1.5 Tsp], pepper [0.25 Tsp], and Chipotle chiles in their sauce [1 Can]. Blend.", -// "Taste the Salsa for Salt and adjust.", -// "Pour the Salsa over Onions [1.5]. Add Oregano [0.25 Tsp], Marjoram [0.25 Tsp], Thyme [0.25 Tsp], and Pepper [0.25 Tsp]. Simmer the sauce for 7-8 minutes, stirring occasionally.", -// "Take the Chicken out of the broth, and shred the meat with two forks. Add it to the sauce and mix well.", -// "Serve over fresh, hot toast, with a layer of Refried beans." -// ), -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("45m"), -// tags = mapOf( -// "Mexican" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Sauce" to TagType.TECHNIQUE, -// "Carnivorous" to TagType.PROTEIN -// ), -// image = Res.drawable.tinga, -// servings = "Serves 5", -// ttt = TTT.TESTED, -// ) +val mexicanList = listOf( + Recipe ( + title = "Elote | Street Corn", + description = "Grilled Street Corn with Cream Sauce and Chili Spices.", + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("6m"), + servings = "6 Ears", + ingredients = listOf( + "6 Medium Ears Sweet Corn", + ".5 Cup Mexican Crema, or Sour Cream", + ".5 Cup Mayonnaise", + ".5 Cup Cilantro, Chopped", + "2 Cloves Garlic", + ".25 Tbsp Chipotle Powder, or to taste", + "2 tsp Lime Zest, grated", + "2 Tbsp Lime Juice", + ".5 Cup Cotija Cheese, crumbled", + "Lime Wedges, to serve" + ), + instructions = listOf( + "In a bowl, whisk together the Crema [.5 Cup], Mayonnaise [.5 Cup], Cilantro [.5 Cup], Garlic [2 Cloves], Chipotle Pepper [.75 Tbsp]," + + " Lime Zest [2 Tsp] and Lime Juice [2 Tbsp]. Taste and season the mixture with Salt if needed. (Crema has a little Salt already, so" + + " add extra judiciously.) Set aside.", + "Grill the Corn, about 3 minutes per side, until browned", + "Slather with Crema Mixture, crumbled Cotija, and Chipotle Powder. Serve with Lime Wedges" + + ), + tags = mapOf( + "Mexican" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Grilled" to TagType.TECHNIQUE, + "Street Food" to TagType.CUISINE, + "Appetizer" to TagType.COURSE, + "Vegetarian" to TagType.PROTEIN, + "Creamy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED + ), + + Recipe( + title = "Chicken Tinga", + description = "Shredded Chicken in a Smoky Chipotle Tomato sauce.", + ingredients = listOf( + "4 Chicken Breasts", + "5 Tbsp Oil (olive oil)", + "1.5 Onions (sliced)", + "5 Roma Tomatoes", + "1 Can Chipotle chiles in adobo (7oz)", + "2-3 Cloves Garlic", + "1.5 Tsp Salt", + "0.25 Tsp Mexican Oregano", + "0.25 Tsp Dried Thyme", + "0.25 Tsp Dried Marjoram", + "0.25 Tsp Black Pepper", + "1 can Refried Beans", + "Small, thick cut slices of Toast" + ), + instructions = listOf( + "Bring a pot of salty water to a boil and add the Chicken Breasts. Let the Chicken simmer until cooked through. Skim the foam as it boils.", + "While the Chicken cooks, place the Tomatoes [5] in a medium saucepan, cover with water, bring to a simmer and cook for 8-10 minutes, until soft.", + "Slice the Onions [1.5] thinly. Heat the Oil [5 Tbsp] in a large pan and add the Onions. Cook until soft and translucent for 5-6 minutes.", + "In a blender, throw the Tomatoes [5], Garlic [3 Cloves], Salt [1.5 Tsp], pepper [0.25 Tsp], and Chipotle chiles in their sauce [1 Can]. Blend.", + "Taste the Salsa for Salt and adjust.", + "Pour the Salsa over Onions [1.5]. Add Oregano [0.25 Tsp], Marjoram [0.25 Tsp], Thyme [0.25 Tsp], and Pepper [0.25 Tsp]. Simmer the sauce for 7-8 minutes, stirring occasionally.", + "Take the Chicken out of the broth, and shred the meat with two forks. Add it to the sauce and mix well.", + "Serve over fresh, hot toast, with a layer of Refried beans." + ), + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("45m"), + tags = mapOf( + "Mexican" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Sauce" to TagType.TECHNIQUE, + "Carnivorous" to TagType.PROTEIN + ), + image = Res.drawable.tinga, + servings = "Serves 5", + ttt = TTT.TESTED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/PeruvianData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/PeruvianData.kt index 1245993..fe5a817 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/PeruvianData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/PeruvianData.kt @@ -7,62 +7,62 @@ import bakersmenagerie.composeapp.generated.resources.aji_de_gallina import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val peruvianList = listOf( -// Recipe( -// title = "Ají de Gallina", -// description = "A Peruvian stew made with Ají Amarillo paste, giving it a rich yellow colour. Served with Walnuts, Black Olives, and Potatoes.", -// prepTime = Duration.parse("30m"), -// cookTime = Duration.parse("30m"), -// servings = "Serves 5", -// ingredients = listOf( -// -// "1.5 lbs Protein of Choice (Originally Chicken)", -// "4 Yellow Potatoes", -// -// "HEADER-Thickener", -// "4 Slices White Bread", -// ".75 Cups Evaporated Milk (Not Dry Milk)", -// -// -// "HEADER-Sauce", -// "4 Cups Stock", -// "4 Yellow Ají Peppers", -// ".5 Cups Vegetable Oil", -// "2 Cloves Garlic, Minced", -// "1 Large Onion, finely Chopped", -// "3 Tbsp Walnuts, Chopped", -// "3 Tbsp Parmesan, Grated", -// -// "HEADER-To Serve", -// "3 Cups White Rice, Cooked", -// "2 Hard Boiled Eggs, Quartered", -// "10 Black Olives", -// ), -// instructions = listOf( -// "Cook Potatoes [4] until tender. Cool, Peel, Quarter, and Set Aside.", -// "Place White Bread [4 Slices] in a bowl. Pour Evaporated Milk [.75 Cups] over to soak. Set Aside.", -// "Boil and Shred the Protein, if applicable. Reserve Stock.", -// -// "HEADER-Sauce", -// "Blend Yellow Peppers [4] with Vegetable Oil [.5 Cups] until Smooth. Transfer to a saucepan.", -// "Add the Garlic [2 Cloves] and Onions [1] to the saucepan. Cook until soft.", -// "Take the Soaked Bread, Walnuts [3 Tbsp], Parmesan [3 Tbsp], and Blend until Smooth. Use more Milk, or the Stock, if needed.", -// "Add the Onion Mixture to the Blender with the Bread Mixture and Blend.", -// -// "HEADER-Finish & Serve", -// "Return the Mixture to the saucepan and add Stock [1.5 Cups]. Bring to a low simmer and add the Protein.", -// "Serve a portion with 1/2 Cup of Rice, some Potatoes, a Hard Boiled Egg Quarter, and Black Olives.", -// ), -// tags = mapOf( -// "Peruvian" to TagType.CUISINE, -// "Adaptable" to TagType.PROTEIN, -// "Creamy" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Stew" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable.aji_de_gallina, -// ttt = TTT.TRIED, -// ) +val peruvianList = listOf( + Recipe( + title = "Ají de Gallina", + description = "A Peruvian stew made with Ají Amarillo paste, giving it a rich yellow colour. Served with Walnuts, Black Olives, and Potatoes.", + prepTime = Duration.parse("30m"), + cookTime = Duration.parse("30m"), + servings = "Serves 5", + ingredients = listOf( + + "1.5 lbs Protein of Choice (Originally Chicken)", + "4 Yellow Potatoes", + + "HEADER-Thickener", + "4 Slices White Bread", + ".75 Cups Evaporated Milk (Not Dry Milk)", + + + "HEADER-Sauce", + "4 Cups Stock", + "4 Yellow Ají Peppers", + ".5 Cups Vegetable Oil", + "2 Cloves Garlic, Minced", + "1 Large Onion, finely Chopped", + "3 Tbsp Walnuts, Chopped", + "3 Tbsp Parmesan, Grated", + + "HEADER-To Serve", + "3 Cups White Rice, Cooked", + "2 Hard Boiled Eggs, Quartered", + "10 Black Olives", + ), + instructions = listOf( + "Cook Potatoes [4] until tender. Cool, Peel, Quarter, and Set Aside.", + "Place White Bread [4 Slices] in a bowl. Pour Evaporated Milk [.75 Cups] over to soak. Set Aside.", + "Boil and Shred the Protein, if applicable. Reserve Stock.", + + "HEADER-Sauce", + "Blend Yellow Peppers [4] with Vegetable Oil [.5 Cups] until Smooth. Transfer to a saucepan.", + "Add the Garlic [2 Cloves] and Onions [1] to the saucepan. Cook until soft.", + "Take the Soaked Bread, Walnuts [3 Tbsp], Parmesan [3 Tbsp], and Blend until Smooth. Use more Milk, or the Stock, if needed.", + "Add the Onion Mixture to the Blender with the Bread Mixture and Blend.", + + "HEADER-Finish & Serve", + "Return the Mixture to the saucepan and add Stock [1.5 Cups]. Bring to a low simmer and add the Protein.", + "Serve a portion with 1/2 Cup of Rice, some Potatoes, a Hard Boiled Egg Quarter, and Black Olives.", + ), + tags = mapOf( + "Peruvian" to TagType.CUISINE, + "Adaptable" to TagType.PROTEIN, + "Creamy" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Stew" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable.aji_de_gallina, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/RemouladeSauce.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/RemouladeSauce.kt index 3dbac45..d8885e8 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/RemouladeSauce.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/RemouladeSauce.kt @@ -7,40 +7,40 @@ import bakersmenagerie.composeapp.generated.resources._10_strawberries import com.menagerie.bakers.model.TTT import kotlin.time.Duration -//val remouladeSauce = Recipe( -// title = "Remoulade Sauce", -// description = "Tangy, Chilled Mayo based Sauce, perfect for Seafood,", -// prepTime = Duration.parse("5m"), -// cookTime = Duration.ZERO, -// servings = "Makes about 1 Cup", -// ingredients = listOf( -// ".5 Cup Mayonnaise", -// "1 Tbsp Yellow Mustard, Ground", -// "1 Tbsp Milk", -// "1.25 Tsp Grain Mustard", -// "1 Tsp Celery, Diced", -// "1 Tsp Yellow Onion, Diced", -// "1 Tsp Green Bell Pepper, Diced", -// ".25 Tsp Parsley", -// ".25 Tsp Red Wine Vinegar", -// ".25 Tsp Paprika", -// ".25 Tsp Black Pepper", -// ".25 Tsp Cayenne", -// ".33 Tsp Salt", -// ), -// instructions = listOf( -// "Combine in a Food Processor and Serve Cold.", -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Sauce" to TagType.TECHNIQUE, -// "Tangy" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Blended" to TagType.TECHNIQUE, -// "Condiment" to TagType.COURSE -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED, -//) \ No newline at end of file +val remouladeSauce = Recipe( + title = "Remoulade Sauce", + description = "Tangy, Chilled Mayo based Sauce, perfect for Seafood,", + prepTime = Duration.parse("5m"), + cookTime = Duration.ZERO, + servings = "Makes about 1 Cup", + ingredients = listOf( + ".5 Cup Mayonnaise", + "1 Tbsp Yellow Mustard, Ground", + "1 Tbsp Milk", + "1.25 Tsp Grain Mustard", + "1 Tsp Celery, Diced", + "1 Tsp Yellow Onion, Diced", + "1 Tsp Green Bell Pepper, Diced", + ".25 Tsp Parsley", + ".25 Tsp Red Wine Vinegar", + ".25 Tsp Paprika", + ".25 Tsp Black Pepper", + ".25 Tsp Cayenne", + ".33 Tsp Salt", + ), + instructions = listOf( + "Combine in a Food Processor and Serve Cold.", + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Sauce" to TagType.TECHNIQUE, + "Tangy" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Blended" to TagType.TECHNIQUE, + "Condiment" to TagType.COURSE + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED, +) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/SpicyChickenPretzelBaconPub.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/SpicyChickenPretzelBaconPub.kt index efd9896..6d04ab5 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/SpicyChickenPretzelBaconPub.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/americas/SpicyChickenPretzelBaconPub.kt @@ -8,145 +8,145 @@ import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val SCPBP = listOf( -// Recipe( -// title = "Pretzel Buns", -// description = "Pretzels done in the style of Sandwich Buns.", -// prepTime = Duration.parse("1h 50m"), -// cookTime = Duration.parse("15m"), -// servings = "Makes 6 Buns", -// ingredients = listOf( -// "1.25 Cups Water, 110F", -// "1 Packet / 2.25 Tsp Active Dry Yeast", -// "1 Tsp Sugar", -// "3 Tbsp Butter, melted, cooled", -// "3.5 Cups Flour", -// "2 Tsp Salt", -// "0.5 Cups Baking Soda", -// "0.5 Tbsp Olive Oil" -// ), -// instructions = listOf( -// "In a Stand Mixer Bowl, Mix Together Water [1.25 Cup], Yeast [2.25 Tsp], and Sugar [1 Tsp]. Let Stand until Foamy, about 5 minutes.", -// "Mix in the Melted Butter [3 Tbsp], then slowly add in the Flour [3 Cups] and Salt [2 Tsp]. Mix with a Dough Hook on Low for 2-3 Minutes until dough forms. " + -// "Adjust as necessary with more Water or Flour.", -// "Knead the Dough with the hook on medium for another 5 minutes.", -// "Transfer the Dough to an Oiled Bowl and let rise for 1 hour.", -// "Punch the Dough. Knead for another 2 minutes, then divide into [6] Equal Portions. Shape into a Bun, then cover and let rise another 30 minutes", -// "Preheat the Oven to 425F. Bring a Quart of Water for every 0.5 Cups of Baking Soda to a Boil.", -// "Bathe the Pretzels 30s per side, then arrange on a parchment lined baking tray. Score the top of each.", -// "Top with Course Salt (optional) and Bake for 10-15 minutes.", -// -// ), -// tags = mapOf( -// "Vegetarian" to TagType.PROTEIN, -// "German" to TagType.CUISINE, -// "American" to TagType.CUISINE, -// "Bread" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// ), -// image = Res.drawable.SCPBP, -// ttt = TTT.TRIED -// ), -// Recipe( -// title = "Spicy Chicken Cutlets", -// description = "Spicy, Breaded, American style Chicken Cutlet.", -// prepTime = Duration.parse("4h 10m"), -// cookTime = Duration.parse("10m"), -// servings = "Makes 6 Cutlets", -// ingredients = listOf( -// "6 Chicken Cutlets", -// "0.75 Cups Buttermilk", -// "1.5 Tbsp Tabasco", -// "0.75 Cups Breadcrumbs", -// "0.75 Cups Crushed Cornflakes", -// "0.75 Tsp Paprika", -// "0.5 Tsp Cayenne", -// "0.75 Tsp Salt", -// "0.75 Tsp Pepper", -// "Oil to Fry", -// ), -// instructions = listOf( -// "Soak Chicken [6] in Buttermilk [0.75 Cups] and Tabasco [1.5 Tbsp] for 4 hours.", -// "Mix Breadcrumbs [0.75 Cup], Cornflakes [0.75 Cup], Paprika [0.75 Tsp], Cayenne [0.5 Tsp], Salt [0.75 Tsp], and Pepper [.75 Tsp] in a large bowl", -// "Drain Chicken and Dredge in the Breadcrumb Mixture. Return to Buttermilk briefly, then Cover again in Breadcrumb Mixture.", -// "Heat 2 Tbsp of Oil in a large skillet. Fry Chicken in a single layer about 5 minutes per side.", -// ), -// tags = mapOf( -// "Carnivorous" to TagType.PROTEIN, -// "American" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable.SCPBP, -// ttt = TTT.TRIED, -// ), -// Recipe( -// title = "Beer Cheese", -// description = "Creamy melted Cheese and Beer creates a Tangy, delicious sauce.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("20m"), -// servings = "Makes about 4 Cups", -// ingredients = listOf( -// "4 Tbsp Butter", -// "1 Small Onion, finely Diced", -// "4 Tbsp Flour", -// "2 Cups Light Beer", -// "1.5 Cups Heavy Cream", -// "2 Cloves Garlic, Grated", -// "Salt and Pepper to Taste", -// "6 Oz Sharp Cheddar, Grated", -// "6 Oz Swiss, Grated" -// ), -// instructions = listOf( -// "Melt Butter [4 Tbsp] in a large saucepan over medium. Add Onion [1] and cook until softened, 2-3 minutes.", -// "Add Flour [4 Tbsp] and stir to a Roux. Let it start to Brown, about 2 minutes.", -// "Whisk in Beer [2 Cups] until Smooth.", -// "Simmer out the Alcohol, about 5 minutes.", -// "Add Cream [1.5 Cups] and Garlic [2 Cloves], and stir frequently as sauce thickens, about 10 minutes.", -// "Remove from heat, season to taste, and stir in the Cheddar [6 oz] and Swiss [6oz] until completely melted.", -// ), -// tags = mapOf( -// "Vegetarian" to TagType.PROTEIN, -// "Creamy" to TagType.FLAVOUR, -// "American" to TagType.CUISINE, -// "German" to TagType.CUISINE, -// "Sauce" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Condiment" to TagType.COURSE, -// "Tangy" to TagType.FLAVOUR, -// ), -// image = Res.drawable.SCPBP, -// ttt = TTT.TRIED, -// ), -// Recipe( -// title = "Onion Tangles", -// description = "Battered and Fried Onion slices. Chaotic Onion Rings.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("15m"), -// servings = "Make 2 Cups", -// ingredients = listOf( -// "1.25 Cups Buttermilk", -// "2 Cups Thin Sliced Onion Halves", -// "1.5 Cups Flour", -// ".5 Tsp Salt", -// "Pepper to Taste", -// "3 cups Oil, for Frying", -// ), -// instructions = listOf( -// "Heat Frying Oil.", -// "Cut Onions [2 Cups] into Crescents.", -// "Soak Crescents in Buttermilk [1.25 Cups] for 10 minutes, tossing regularly.", -// "Drain the Buttermilk and add Flour [1.5 Cups], Salt [.5 Tsp], Pepper, tossing Onions until coated.", -// "Fry Battered Onions in batches until Golden Brown, about 5-7 minutes." -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Vegetarian" to TagType.PROTEIN, -// "Deep Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR -// ), -// image = Res.drawable.SCPBP, -// ttt = TTT.TRIED, -// ), +val SCPBP = listOf( + Recipe( + title = "Pretzel Buns", + description = "Pretzels done in the style of Sandwich Buns.", + prepTime = Duration.parse("1h 50m"), + cookTime = Duration.parse("15m"), + servings = "Makes 6 Buns", + ingredients = listOf( + "1.25 Cups Water, 110F", + "1 Packet / 2.25 Tsp Active Dry Yeast", + "1 Tsp Sugar", + "3 Tbsp Butter, melted, cooled", + "3.5 Cups Flour", + "2 Tsp Salt", + "0.5 Cups Baking Soda", + "0.5 Tbsp Olive Oil" + ), + instructions = listOf( + "In a Stand Mixer Bowl, Mix Together Water [1.25 Cup], Yeast [2.25 Tsp], and Sugar [1 Tsp]. Let Stand until Foamy, about 5 minutes.", + "Mix in the Melted Butter [3 Tbsp], then slowly add in the Flour [3 Cups] and Salt [2 Tsp]. Mix with a Dough Hook on Low for 2-3 Minutes until dough forms. " + + "Adjust as necessary with more Water or Flour.", + "Knead the Dough with the hook on medium for another 5 minutes.", + "Transfer the Dough to an Oiled Bowl and let rise for 1 hour.", + "Punch the Dough. Knead for another 2 minutes, then divide into [6] Equal Portions. Shape into a Bun, then cover and let rise another 30 minutes", + "Preheat the Oven to 425F. Bring a Quart of Water for every 0.5 Cups of Baking Soda to a Boil.", + "Bathe the Pretzels 30s per side, then arrange on a parchment lined baking tray. Score the top of each.", + "Top with Course Salt (optional) and Bake for 10-15 minutes.", + + ), + tags = mapOf( + "Vegetarian" to TagType.PROTEIN, + "German" to TagType.CUISINE, + "American" to TagType.CUISINE, + "Bread" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + ), + image = Res.drawable.SCPBP, + ttt = TTT.TRIED + ), + Recipe( + title = "Spicy Chicken Cutlets", + description = "Spicy, Breaded, American style Chicken Cutlet.", + prepTime = Duration.parse("4h 10m"), + cookTime = Duration.parse("10m"), + servings = "Makes 6 Cutlets", + ingredients = listOf( + "6 Chicken Cutlets", + "0.75 Cups Buttermilk", + "1.5 Tbsp Tabasco", + "0.75 Cups Breadcrumbs", + "0.75 Cups Crushed Cornflakes", + "0.75 Tsp Paprika", + "0.5 Tsp Cayenne", + "0.75 Tsp Salt", + "0.75 Tsp Pepper", + "Oil to Fry", + ), + instructions = listOf( + "Soak Chicken [6] in Buttermilk [0.75 Cups] and Tabasco [1.5 Tbsp] for 4 hours.", + "Mix Breadcrumbs [0.75 Cup], Cornflakes [0.75 Cup], Paprika [0.75 Tsp], Cayenne [0.5 Tsp], Salt [0.75 Tsp], and Pepper [.75 Tsp] in a large bowl", + "Drain Chicken and Dredge in the Breadcrumb Mixture. Return to Buttermilk briefly, then Cover again in Breadcrumb Mixture.", + "Heat 2 Tbsp of Oil in a large skillet. Fry Chicken in a single layer about 5 minutes per side.", + ), + tags = mapOf( + "Carnivorous" to TagType.PROTEIN, + "American" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable.SCPBP, + ttt = TTT.TRIED, + ), + Recipe( + title = "Beer Cheese", + description = "Creamy melted Cheese and Beer creates a Tangy, delicious sauce.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("20m"), + servings = "Makes about 4 Cups", + ingredients = listOf( + "4 Tbsp Butter", + "1 Small Onion, finely Diced", + "4 Tbsp Flour", + "2 Cups Light Beer", + "1.5 Cups Heavy Cream", + "2 Cloves Garlic, Grated", + "Salt and Pepper to Taste", + "6 Oz Sharp Cheddar, Grated", + "6 Oz Swiss, Grated" + ), + instructions = listOf( + "Melt Butter [4 Tbsp] in a large saucepan over medium. Add Onion [1] and cook until softened, 2-3 minutes.", + "Add Flour [4 Tbsp] and stir to a Roux. Let it start to Brown, about 2 minutes.", + "Whisk in Beer [2 Cups] until Smooth.", + "Simmer out the Alcohol, about 5 minutes.", + "Add Cream [1.5 Cups] and Garlic [2 Cloves], and stir frequently as sauce thickens, about 10 minutes.", + "Remove from heat, season to taste, and stir in the Cheddar [6 oz] and Swiss [6oz] until completely melted.", + ), + tags = mapOf( + "Vegetarian" to TagType.PROTEIN, + "Creamy" to TagType.FLAVOUR, + "American" to TagType.CUISINE, + "German" to TagType.CUISINE, + "Sauce" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Condiment" to TagType.COURSE, + "Tangy" to TagType.FLAVOUR, + ), + image = Res.drawable.SCPBP, + ttt = TTT.TRIED, + ), + Recipe( + title = "Onion Tangles", + description = "Battered and Fried Onion slices. Chaotic Onion Rings.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("15m"), + servings = "Make 2 Cups", + ingredients = listOf( + "1.25 Cups Buttermilk", + "2 Cups Thin Sliced Onion Halves", + "1.5 Cups Flour", + ".5 Tsp Salt", + "Pepper to Taste", + "3 cups Oil, for Frying", + ), + instructions = listOf( + "Heat Frying Oil.", + "Cut Onions [2 Cups] into Crescents.", + "Soak Crescents in Buttermilk [1.25 Cups] for 10 minutes, tossing regularly.", + "Drain the Buttermilk and add Flour [1.5 Cups], Salt [.5 Tsp], Pepper, tossing Onions until coated.", + "Fry Battered Onions in batches until Golden Brown, about 5-7 minutes." + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Vegetarian" to TagType.PROTEIN, + "Deep Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR + ), + image = Res.drawable.SCPBP, + ttt = TTT.TRIED, + ), ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/ChineseData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/ChineseData.kt index 172a8c7..17cab19 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/ChineseData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/ChineseData.kt @@ -16,636 +16,636 @@ import bakersmenagerie.composeapp.generated.resources.tso import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val chineseList = listOf( -// Recipe( -// title = "Sweet & Sour Noodle Bowl", -// description = "Chinese Stir Fried Noodle Bowl with a Spicy Sweet & Sour Sauce.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("15m"), -// servings = "3 Noodle Bowls", -// ingredients = listOf( -// "1 lb Wheat Noodles, cooked and drained", -// ".75 Cup Rice Wine Vinegar", -// ".5 Cup Honey", -// ".33 Cup Soy Sauce", -// "4 Tbsp Sesame Oil, divided", -// "2 Tbsp Lime Juice", -// "1 Tbsp Chili-Garlic Sauce", -// "1 to 2 Tsp Ground Ginger, to taste", -// "1 large Red Bell Pepper, trimmed, seeded, and sliced into thin strips", -// ".33 Cup Scallions (about 4), trimmed and sliced into thin rounds, plus more for garnishing", -// ".25 Cup fresh Cilantro Leaves, finely minced", -// "1 Tbsp Sesame Seeds, toasted if desired, optional for garnishing", -// ), -// instructions = listOf( -// "Cook Wheat Noodles. Drain and set aside.", -// "Add Rice Wine Vinegar [.75 Cup], Honey [.5 Cup], Soy [.33 Cup], Sesame Oil [2 Tbsp], Lime Juice [2 Tbsp], Chili Garlic Sauce [1 Tbsp]," + -// " and Ginger [1.5 Tsp] to a bowl and whisk to combine. Set Aside.", -// "In a skillet, add Sesame Oil [2 Tbsp], Peppers, and cook until peppers are soft, about 5 minutes.", -// "Add the cooked Noodles, Sauce, and cook for about 2 minutes or warmed through. Toss Often until most of the sauce is absorbed.", -// "Garnish with Cilantro, Sesame Seeds, Scallions. Serve", -// ), -// tags = mapOf( -// "Chinese" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Spicy" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Sour" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED -// ), -// -// Recipe( -// title = "General Tso's", -// description = "Chinese Crispy, Spicy, and Savory fried and sauced Chicken", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("15m"), -// servings = "Serves 4", -// ingredients = listOf( -// -// "HEADER-Sauce/Marinade", -// "3 Tbsp Soy Sauce", -// "1 Tbsp Hoisin", -// "1 Tbsp Rice Vinegar", -// "2 Tsp Chilli Paste", -// "1 Tsp Sesame Oil", -// "3 Tbsp Brown Sugar", -// "1 Tbsp Cornstarch", -// "0.75 Cups Chicken Broth", -// -// "HEADER-Chicken", -// "600g Protein, cut into bite sized pieces", -// "1 Tsp Ginger", -// "1 Tsp Garlic", -// "1 Cups Cornstarch", -// "1.5 Cups Oil for Frying", -// -// "HEADER-Stir Fry Sauce", -// "2 Tbsp Oil", -// "2 Tsp Ginger", -// "2 Cloves Garlic", -// "0.5 Tsp Red Chilli Flakes", -// -// "HEADER-Garnishes", -// "Sesame Seeds", -// "Scallions", -// ), -// instructions = listOf( -// "HEADER-Marinade and Sauce", -// "Mix Soy [3 Tbsp], Hoisin [1 Tbsp], Vinegar [1 Tbsp], Chilli [2 Tsp], and Sesame Oil [1 Tsp].", -// "Take [2 Tbsp] of the Marinade to mix with the Protein. Add the Ginger [1 Tsp] and Garlic [1 Tsp] and Marinate for 30 minutes.", -// "For the rest of the Sauce, add Brown Sugar [3 Tbsp] and Cornstarch [1 Tbsp]. Mix, and then add Chicken Broth [0.75 Cups]", -// -// "HEADER-Protein Fry", -// "Add Cornstarch [1 Cups] into the Marinade and toss to coat. Make sure to separate and fully coat each piece." + -// " Shake off the excess.", -// "Heat Oil to 350F", -// "Fry Protein until cooked through, and golden brown on the outside", -// -// "HEADER-Stir Fry", -// "Heat Oil [2 Tbsp] in a wok. Add Ginger [2 Tsp], Garlic [2 Cloves], and Chilli Flakes [.5 Tsp].", -// "Add Sauce and bring to a simmer. Stir until it thickens slightly, then add Protein and toss to coat.", -// ), -// tags = mapOf( -// "Chinese" to TagType.CUISINE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// "Deep Fried" to TagType.TECHNIQUE, -// ), -// image = Res.drawable.tso, -// ttt = TTT.TRIED, -// ), -// -// Recipe( -// title = "Sesame Chicken", -// description = "Chinese Deep Fried and Sauce Coated Savory Chicken with lots of Sesame.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 5", -// ingredients = listOf( -// -// "HEADER-Marinade", -// "1 Egg Whites", -// "2 Tbsp Dark Soy", -// "2 Tbsp Shaoxing", -// "2 Tbsp Eighty Proof Vodka", -// "0.25 Tsp Baking Soda", -// "3 Tbsp Cornstarch", -// "1 lbs Protein of Choice, cut into bite sized pieces", -// -// "HEADER-Coating", -// "0.5 Cups Flour", -// "0.5 Cups Cornstarch", -// "0.5 Tsp Baking Powder", -// "0.5 Tsp Salt", -// -// "HEADER-Sauce", -// "3 Tbsp Dark Soy", -// "2 Tbsp Shaoxing", -// "2 Tbsp Rice Vinegar", -// "3 Tbsp Stock", -// "5 Tbsp Sugar", -// "2 Tsp Sesame Oil", -// "1 Tbsp Cornstarch", -// "2 Tsp Oil", -// "2 Tsp Garlic, Minced", -// "2 Tsp Ginger, Minced", -// "2 Tsp Scallion, Minced", -// "2 Tbsp Sesame Seeds", -// -// "HEADER-Finishing", -// "Oil for Deep Frying", -// ), -// instructions = listOf( -// -// "HEADER-Marinade", -// "In a medium bowl, beat Egg Whites [1] until foamy. Add Soy Sauce [2 Tbsp], Wine [2 Tbsp], and Vodka [2 Tbsp].", -// "Reserve Half of this Mixture.", -// "To the other half, add Baking Soda [.25 Tsp] and Cornstarch [3 Tbsp]. Add Protein [1 lb] and coat thoroughly. Cover and Set Aside.", -// -// "HEADER-Coating", -// "Combine Flour [.5 Cup], Cornstarch [0.5 Cups], Baking Powder [.5 Tsp], and Salt [.5 Tsp]. Add the reserved Half of the Marinade." + -// " Expect Coarse, Mealy clumps.", -// "At this point, begin Heating the Deep Frying Oil, about 350F.", -// -// "HEADER-Sauce", -// "Combine Soy Sauce [3 Tbsp], Wine [2 Tbsp], Vinegar [2 Tbsp], Stock [3 Tbsp], Sugar [5 Tbsp], Sesame Oil [2 Tsp], and Cornstarch [1 Tbsp]." + -// " Set Aside.", -// "Combine Oil [2 Tsp], Garlic [2 Tsp], Ginger [2 Tsp], and Scallion [2 Tsp] in a Wok over medium. Cook for about 3 minutes.", -// "Add the Sauce, Stirring until it begins to thicken, about 1 minute, then remove from heat.", -// -// "HEADER-Fry", -// "Once the Oil is heated, begin coating the Protein. One at a time, toss thoroughly to coat in the Dry Mixture.", -// "Deep Fry in Batches until cooked through and golden brown.", -// "Once all the Protein has finished, add it to the Wok and return the heat. Toss everything and heat.", -// ), -// tags = mapOf( -// "Savory" to TagType.FLAVOUR, -// "Chinese" to TagType.CUISINE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Entree" to TagType.COURSE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Sweet" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR -// ), -// image = Res.drawable.sesame, -// ttt = TTT.TRIED -// ), -// -// Recipe( -// title = "Kung Pao Chicken", -// description = "Spicy Chinese stir fry Chicken with Peanuts and Sichuan Peppercorns.", -// prepTime = Duration.parse("8h"), -// cookTime = Duration.parse("20m"), -// ingredients = listOf( -// -// "HEADER-Sauce", -// "2.5 Tbsp (33g) Sugar", -// "1.5 Tsp (10g) Corn Starch", -// "2 Tbsp (30g) Soy Sauce", -// "2 Tbsp (40g) Dark Soy Sauce", -// "3 Tbsp (53g) Chinese Black Vinegar", -// ".25 Cup (44g) Stock", -// "3 Tbsp (36g) Water", -// "2.5 Tbsp (31g) Shaoxing Wine", -// -// "HEADER-Marinade", -// "2 lbs Protein of Choice, bite sized (Originally Chicken)", -// "1 Tsp (4g) Corn Starch", -// "Pinch of White Pepper", -// "2 Tbsp (36g) Soy Sauce", -// "1 Tbsp (10g) Shaoxing Wine", -// -// "HEADER-Stir Fry", -// "3.5 tablespoons (53g) Vegetable Oil", -// "0.25 cup (48g) Raw Peanuts", -// "8 dried Chilies", -// "3 Stalks Scallions", -// "1 inch knob Ginger, Minced", -// "8 Cloves Garlic, Minced", -// ".25 Tsp, (1g) Sichuan Peppercorn, Ground", -// -// "HEADER-Garnish", -// "Additional Sliced Scallion", -// "Additional Peanuts, Crushed", -// ), -// instructions = listOf( -// -// "HEADER-Sauce", -// "Combine all ingredients in a bowl and Set Aside.", -// -// "HEADER-Stir Fry", -// "Combine Protein [2 lb] with Cornstarch [1 Tsp], White Pepper, and toss to coat. Add Soy Sauce [2 Tbsp], Shaoxing [1 Tbsp], mix and let Marinate overnight.", -// "Heat Oil [3.5 Tbsp] in a Wok. Add Peanuts, Stir Frying until Golden, about 40 seconds. Remove and Set Aside.", -// "Add Chilies [8] to the Wok, Fry until crispy, about 30 seconds. Remove and Set Aside.", -// "Fry the Protein in Batches until Golden Brown and cooked through, about 3 minutes per batch. Remove and Set Aside.", -// "Add Scallions [.25 Bunch], frying for about 20 seconds. Add Ginger [1 inch], then Garlic [8 Cloves], then Szechuan [.25 Tsp]. Return other ingredients" + -// " and fry for about 30 seconds.", -// "Add the Sauce and cook until thickened. Serve with Crushed Peanuts and Scallions.", -// -// ), -// tags = mapOf( -// "Chinese" to TagType.CUISINE, -// "Entree" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Stir Fried" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable.kung_pao, -// servings = "Serves 4", -// ttt = TTT.TESTED -// ), -// -// Recipe( -// title = "Orange Chicken", -// description = "Another American-Chinese dish. This time, bits of battered and fried Chicken are served with a Orange-Soy glaze.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 5", -// ingredients = listOf( -// "HEADER-Protein", -// "2 lbs Protein, bite-sized", -// "3 Eggs, whisked", -// "0.33 Cups Cornstarch", -// "0.33 Cups Flour", -// "Salt", -// "Oil For Frying", -// -// "HEADER-Orange Sauce", -// "1 Cups Orange Juice", -// "0.33 Cups Sugar", -// "2 Tbsp Rice Vinegar", -// "2 Tbsp Soy Sauce", -// "1 Tsp Orange Zest, grated", -// "0.5 Tsp Red Chili Flakes", -// "0.25 Tsp Garlic Powder", -// "0.25 Tsp Ginger", -// "1 Tbsp Cornstarch", -// ), -// instructions = listOf( -// "HEADER-Orange Sauce", -// "Add Orange Juice [1 Cup], Sugar [0.33 Cup], Vinegar [2 Tbsp], Soy [2 Tbsp], Ginger [0.25 Tsp], Garlic [0.25 Tsp], and Chili Flakes [0.5 Tsp] to a pot." + -// " Heat over medium for about 3 minutes", -// "Combine Cornstarch [1 Tbsp] with Water [2 Tbsp] to form a paste. Add to Sauce and stir until it thickens. Remove from heat and add Orange Zest [0.5 Tsp].", -// -// "HEADER-Stir Fry", -// "Heat Oil to 350F", -// "Mix Flour [0.33 Cups] and Cornstarch [0.33 Cups] in a shallow bowl with Salt.", -// "Dredge Protein in Eggs, then Flour Mixture.", -// "Fry Protein in Batches until Golden Brown and Cooked through", -// "Toss Protein in Orange Sauce and Serve", -// ), -// tags = mapOf( -// "American" to TagType.CUISINE, -// "Adaptable" to TagType.PROTEIN, -// "Chinese" to TagType.CUISINE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Sweet" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// ), -// image = Res.drawable.orange_chicken, -// ttt = TTT.TRIED -// ), -// -// Recipe( -// title = "San Bei Ji | Three Cup Chicken", -// description = "Chinese Chicken dish cooked in a 3 Cup Mixture of Soy, Kecap, Shaoxing Wine, and Basil.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("15m"), -// servings = "Serves 3", -// ingredients = listOf( -// "1 lbs Protein of Choice", -// "1 Tbsp Baking Soda", -// "2 Tbsp Toasted Sesame Oil", -// "2 in Piece of Ginger, Grated", -// "6 Cloves Garlic", -// "1.5 Tbsp Soy Sauce", -// "1.5 Tbsp Kecap Manis", -// "1.5 Tbsp Shaoxing Wine", -// "1 Bunch Thai Basil", -// ), -// instructions = listOf( -// "Cut the Protein into Bite Sized Pieces. Rub with Baking Soda [1 Tbsp] and Set aside for 10 minutes.", -// "Heat a opt on High with the Sesame Oil [2 Tbsp]. Add the Ginger [2 in], Garlic [6 Cloves], and fry until Aromatic.", -// "Add in the Protein and toss.", -// "Add the Soy Sauce [1.5 Tbsp], Kecap [1.5 Tbsp], Shaoxing [1.5 Tbsp] and stir. Cover and lower the heat. Simmer for 5-10 minutes or cooked through.", -// "Toss with the Basil [1 Bunch] and Serve.", -// ), -// tags = mapOf( -// "Chinese" to TagType.CUISINE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// ), -// image = Res.drawable.san_bei_ji, -// ttt = TTT.TESTED, -// linkedRecipes = listOf( -// kecapManis //Kecap -// ), -// ), -// -// Recipe( -// title = "Taiwanese Fried Chicken", -// description = "Crispy and flavorful Taiwanese fried chicken, marinated in aromatic spices and fried to golden perfection.", -// prepTime = Duration.parse("2h 15m"), // 2 hours marinade + 15 mins prep -// cookTime = Duration.parse("15m"), -// servings = "Serves 4", -// ingredients = listOf( -// "HEADER-Chicken & Marinade", -// "1 pound boneless, skinless Chicken Thighs (cut into 1-inch/2.5cm pieces)", -// "1 heaping Tbsp Garlic (minced)", -// "1 Tbsp Light Soy Sauce", -// "1 Tbsp Shaoxing Wine", -// "0.5 Tsp Sugar", -// "0.5 Tsp Five Spice Powder", -// "0.5 Tsp White Pepper", -// "0.25 Tsp Salt", -// -// "HEADER-Batter", -// "0.25 cup All Purpose Flour", -// "0.25 cup Water", -// "2 Tbsp Sweet Potato Starch", -// "0.5 Tsp Baking Powder", -// "0.25 Tsp Salt", -// "0.25 Tsp White Pepper", -// -// "HEADER-Finishing", -// "20-25 Thai Basil Leaves (optional)", -// "Vegetable Oil (can substitute canola oil, peanut oil, or any other frying oil of choice)", -// "1 cup Sweet Potato Starch", -// "Salt and White Pepper (to taste)" -// ), -// instructions = listOf( -// "HEADER-Marinade", -// "In a medium bowl, combine the Chicken pieces [1 pound] with the Garlic [1 heaping Tbsp], Light Soy Sauce [1 Tbsp], Shaoxing Wine [1 Tbsp], Sugar [0.5 Tsp], Five Spice Powder [0.5 Tsp], White Pepper [0.5 Tsp], and Salt [0.25 Tsp]. Cover and marinate in the refrigerator for at least 2 hours, or ideally overnight.", -// -// "HEADER-Batter", -// "Make the batter just before frying. In a medium bowl, combine the All Purpose Flour [0.25 cup], Water [0.25 cup], Sweet Potato Starch [2 Tbsp], Baking Powder [0.5 Tsp], Salt [0.25 Tsp], and White Pepper [0.25 Tsp]. Toss this batter mixture into the marinated Chicken.", -// -// "HEADER-Basil (Optional)", -// "If using, wash the Thai Basil Leaves [20-25], and run them through a salad spinner to dry them. Thoroughly pat them dry on a kitchen towel to get rid of any lingering moisture (or it may cause splattering in the frying oil). Set aside.", -// -// "HEADER-First Fry", -// "Add 2 inches of Vegetable Oil to a medium pot, and bring it to 350°F/175°C over medium heat. You may need to adjust the heat to keep the oil temperature at 350°F/175°C during frying.", -// "First, fry the Basil Leaves until they turn a dark green color. Strain them out and set aside. ", -// "Coat each piece of battered Chicken in Sweet Potato Starch [1 cup], and immediately lower it into the 350°F/175°C oil in batches (about a quarter to a third of the Chicken per batch). Do not coat the Chicken ahead of time, or the coating will become soggy. Fry for 1 minute. Remove the Chicken from the oil, set aside, and continue frying subsequent batches, for 1 minute for each batch.", -// -// "HEADER-Second Fry", -// "Now it’s time for the second fry. With the temperature still at 350°F/175°C, fry the batches again (in the same order you initially fried them in)—this time, for 2 minutes, until the pieces float to the surface and are crispy.", -// -// "HEADER-Finish & Serve", -// "Once the second fry is done, sprinkle with additional Salt and White Pepper to taste, and serve with the Thai Basil Leaves, if using." -// ), -// tags = mapOf( -// "Taiwanese" to TagType.CUISINE, -// "Chinese" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Herby" to TagType.FLAVOUR, -// ), -// image = Res.drawable.taiwanese_popcorn_chicken, -// ttt = TTT.TRIED -// ), -// -// Recipe( -// title = "Schezwan Burnt Garlic Chicken", -// description = "Crispy Chicken pieces tossed in a spicy Schezwan burnt Garlic sauce with colorful Bell Peppers and Scallions.", -// prepTime = Duration.parse("2h 15m"), // 1-2 hours marinade + 15 mins prep -// cookTime = Duration.parse("20m"), -// servings = "Serves 3", -// ingredients = listOf( -// -// "HEADER-Protein & Marination", -// "250 gms Protein of Choice (originally boneless chicken)", -// "2-3 Tbsp Soy Sauce (for marination)", -// "1 Tsp Green Chilli Sauce (for marination)", -// "0.25 Tsp Pepper Powder (for marination)", -// "Salt (for marination)", -// "1 Eggs", -// "2 Tbsp Cornstarch", -// "2 Tbsp Flour", -// -// "HEADER-Garlic Oil", -// "5 cloves Garlic", -// "4 Red Whole Chilies", -// "2 Tbsp High Heat Oil", -// -// "HEADER-Sauce", -// "10 Cloves Garlic (finely chopped)", -// "1 Onions (chopped)", -// "1 Tbsp Ginger (finely chopped)", -// "1 Green Chilly", -// "2 Tbsp Schezwan Chutney", -// "3 Tbsp Soy Sauce", -// "1 Tbsp Vinegar", -// "0.5 Tsp Sugar", -// "1 Tbsp Cornflour (in 1 cup water)", -// "1 Tsp Red Chilli Sauce", -// "1 Tsp Green Chilli Sauce", -// -// -// "HEADER-Stir Fry", -// "0.5 Cups Scallions (greens)", -// "Scallions (bulbs, halved)", -// "0.5 Cups Red Bell Pepper (cubed)", -// "0.5 Cups Green Capsicum (cubed)", -// "0.5 Cups Yellow Bell Pepper (cubed)", -// "0.125 Tsp Pepper Powder", -// ), -// instructions = listOf( -// "HEADER-Marination", -// "Chop Protein [250 gms] into thick pieces and marinate with Soy Sauce [2-3 Tbsp], Green Chilli Sauce [1 Tsp], Pepper Powder [0.25 Tsp], and Salt for 1-2 hours.", -// -// "HEADER-Fry Protein", -// "In a kadhai, heat sufficient Oil for deep frying.", -// "In the marinated Protein, add beaten Egg [1], Cornflour [2 Tbsp], and All Purpose Flour [2 Tbsp]. Mix well.", -// "Drop few Protein pieces in hot Oil and deep fry them in batches until they turn golden brown in color.", -// "Drain on an absorbent paper and keep aside.", -// -// "HEADER-Burnt Garlic Oil", -// "In a wok, add Oil, and 4-5 cloves of Garlic and 3-4 Red Whole Chilies.", -// "Once the Garlic and Chilies turn dark in color, off the gas. Drain and discard the Chilies and Garlic.", -// -// "HEADER-Make Sauce", -// "Now in the same wok or nonstick deep pan, add chopped Ginger [1 Tbsp] and Garlic [8-10 cloves] in the prepared Garlic Chilly Oil.", -// "Fry for a minute or two, add chopped Onions [1] and fry for a minute again until translucent.", -// "Now add Schezwan Chutney [2 Tbsp], Salt, Pepper Powder [0.125 Tsp], Vinegar, Soy Sauce [2-3 Tbsp], Red Chilly Sauce [1 Tsp], Green Chilly Sauce [1 Tsp], and Sugar [0.5 Tsp].", -// "In a small bowl, dilute Cornflour [1 Tbsp] in Water [1 cup] and add to the gravy.", -// "Once the gravy thickens, add Protein, Spring Onions white (bulbs), chopped Green Chilly [1], and all 3 colored Bell Peppers [0.5 cup each]. Adjust the seasonings like Salt and Pepper and adjust the sauces too if needed.", -// -// "HEADER-Finish & Serve", -// "Garnish with chopped Spring Onion greens [0.5 cup]. Transfer to serving dish or bowl, serve hot immediately." -// ), -// tags = mapOf( -// "Chinese" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Spicy" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// ), -// image = Res.drawable.burnt_garlic_chicken, -// ttt = TTT.TRIED, -// ), -// -// Recipe( -// title = "Chilli Chicken", -// description = "Crispy fried Chicken pieces coated in a spicy and tangy sauce with Green Peppers and Onions.", -// prepTime = Duration.parse("1h 30m"), // Includes marinade time -// cookTime = Duration.parse("20m"), -// servings = "Serves 4", -// ingredients = listOf( -// "1.5 lbs Boneless Chicken Thighs", -// "0.5 Green Pepper", -// "0.5 Onions", -// "2 Tbsp Garlic-Ginger-Onion Mix (reserved from marinade)", -// -// "HEADER-Chicken Marinade", -// "0.5 White Onions", -// "4 Slices Ginger", -// "3 Cloves Garlic", -// "1 Tsp Black Pepper", -// "0.5 Tbsp Chilli Powder", -// "1.5 Tbsp Soy Sauce", -// "3-4 Tbsp Water", -// "6-7 Tbsp Corn Starch (mix this in with the Chicken after marinating, right before deep frying)", -// -// "HEADER-Sauce", -// "6 Thai Green Chillis", -// "1.5 Tbsp Kecap Manis", -// "2.5 Tbsp Soy Sauce", -// "1 Tbsp Rice Vinegar", -// "1 Tbsp Honey", -// "2 Tsp Corn Starch (mixed with 4 Tsp of Water)", -// "1.5 Tsp Chilli Powder", -// "0.5 Cups Water" -// ), -// instructions = listOf( -// "HEADER-Prep", -// "With a food processor, Blitz the Ginger [4 Slices], Garlic [3 Cloves] and Onions [0.5] until it is a fine paste. Reserve 2 tablespoons of this for Browning the Onions [0.5] and Green Peppers [0.5] later.", -// "Cut up the Chicken [1.5 lbs] into small bite-sized 1 inch pieces and Marinate it in a bowl with the Ginger-Garlic-Onion paste, Kecap Manis [1.5 Tbsp], Chilli Powder [0.5 Tbsp], Black Pepper [1 Tsp], and Water [3-4 Tbsp]. (Do not add the Corn Starch yet. We will add that right before we deep fry the Chicken.) Marinate in the fridge for 1 hour.", -// "Chop the Green Peppers [0.5] and remaining Onion [0.5] into bite-sized pieces and set aside.", -// -// "HEADER-Sauce", -// "Chop up the Chillis [5-6] in the slices (keep the seeds) and add it to a small bowl.", -// "Add in the rest of the ingredients in the sauce ingredient list except the Corn Starch [2 Tsp].", -// "In a small bowl, mix Corn Starch [2 Tsp] with Cold Water [4 Tsp], then add it to the sauce and stir to combine.", -// "Set the sauce aside.", -// -// "HEADER-Deep Fry", -// "Add Corn Starch [6-7 Tbsp] to the Chicken and mix until combined and Chicken is coated lightly.", -// "In a wok, frying pan or deep fryer set the oil to 350F (177C).", -// "When the oil is hot, add the Chicken into the oil to Cook in batches.", -// "Cook the Chicken for about 5-6 minutes and set aside on a plate with paper towel.", -// -// "HEADER-Stir Fry", -// "In a wok, set the stove medium high heat and add 2 tablespoons of oil.", -// "When the oil is hot, add in the Ginger-Garlic-Onion mix [2 Tbsp] that was reserved from preparation and Cook it until it is toasty and brown. Approximately 1-2 minutes.", -// "Add in the Onions [0.5] and Green Pepper [0.5] chunks and Cook it for about 2 minutes. We want to keep the veggies somewhat crisp still, so do not overcook the Peppers.", -// "Give the sauce a quick stir (the Corn Starch likes to settle at the bottom) and add it to the pan.", -// "Keep stirring the sauce until it thickens and becomes thick.", -// "Once the sauce has thickened, turn off the heat.", -// "Add in Chicken and mix everything together until the Chicken is coated with the sauce.", -// ), -// tags = mapOf( -// "Chinese-Indian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Fried" to TagType.TECHNIQUE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.chilli_chicken, -// linkedRecipes = listOf( -// kecapManis -// ), -// ttt = TTT.TRUE -// ), -// -// Recipe( -// title = "Almond Chicken", -// description = "Crispy, golden Chicken, coated in Almond Flour and rice cereal, fried to perfection and tossed in a savory Garlic, Ginger, and Soy sauce. Garnished with toasted Almonds and Green Onions.", -// prepTime = Duration.parse("45m"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 4", -// ingredients = listOf( -// "1 Egg", -// "1 Tbsp Low Sodium Soy Sauce", -// "0.25 Tsp Baking Soda", -// "1.5 lb Boneless Skinless Chicken Breast cut into 2 inch pieces", -// "0.25 Cup Almond Flour", -// "0.25 Cup All Purpose Flour", -// "1.5 Cups Crispy Rice Cereal", -// "Salt and Pepper", -// "Frying Oil", -// -// "HEADER-Sauce", -// "2-3 cloves Garlic minced", -// "0.25 inch knob Ginger minced; about 0.5 tsp", -// "2 Tbsp Low Sodium Soy Sauce", -// "1 Tbsp Oyster Sauce", -// "1.5 Tbsp White Granulated Sugar", -// "1 Tbsp Corn Starch", -// "0.33 Cup Low Sodium Chicken Broth", -// "0.25 Cup Sliced Almonds", -// "1-2 Green Onion thinly sliced; for garnish", -// "Salt and Pepper" -// ), -// instructions = listOf( -// "HEADER-Marinade", -// "In a large bowl, whisk together Egg [1], Low Sodium Soy Sauce [1 Tbsp], Baking Soda [0.25 Tsp], Salt [0.5 Tsp], and Pepper [0.25 Tsp].", -// "Add Boneless Skinless Chicken Breast [1.5 lb], mix together, and let marinade for at least 30 minutes, up to overnight.", -// -// "HEADER-Dredge", -// "In another large bowl, combine Almond Flour [0.25 Cup], All Purpose Flour [0.25 Cup], Crispy Rice Cereal [1.5 Cups], Salt [0.25 Tsp], and Pepper [0.25 Tsp]. Mix together.", -// "Once Chicken is done marinating, take a piece and let excess Marinade drip off. Roll and press into Cereal Mixture, then place onto a plate or baking sheet. Repeat until all Chicken is dredged.", -// -// "HEADER-Fry Chicken", -// "Pour 1-2 inches of Frying Oil into a large heavy-bottomed pot and heat to 350°F.", -// "Add a couple pieces of Chicken, making sure to not overcrowd the pan. Bubbling is normal but adjust the heat as needed to maintain a frying temperature of 315-350°F.", -// "Fry for 3-4 minutes or until deeply golden brown with an internal temperature of 155°F.", -// "Transfer Chicken to a cooling rack and option to lightly salt. Repeat with the rest of the Chicken, frying in small batches.", -// -// "HEADER-Toast Almonds", -// "Add Sliced Almonds [0.25 Cup] to a skillet or wok over medium heat. Toast for 5 minutes, stirring often, until lightly golden and fragrant.", -// "Transfer to a clean bowl and set aside.", -// -// "HEADER-Make Sauce", -// "In a small bowl, add Garlic [2-3 cloves], Ginger [0.25 inch knob], Low Sodium Soy Sauce [2 Tbsp], Oyster Sauce [1 Tbsp], White Granulated Sugar [1.5 Tbsp], Corn Starch [1 Tbsp], Low Sodium Chicken Broth [0.33 Cup], Salt [0.25 Tsp], and Pepper [0.25 Tsp].", -// "Whisk until homogenous, then pour into same skillet used for Almonds. Simmer over medium heat for 2-3 minutes, whisking constantly, until dark and thickened.", -// -// "HEADER-Assemble", -// "If serving immediately, add Chicken, Sliced Almonds [0.25 Cup], Sauce, and half the Green Onion [1-2] to the wok or large bowl. Toss until Chicken is evenly coated in Sauce.", -// "Transfer to serving bowl, top with remaining Green Onion [1-2], and serve." -// ), -// tags = mapOf( -// "Asian Fusion" to TagType.CUISINE, -// "Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Carnivorous" to TagType.PROTEIN -// ), -// image = Res.drawable.almond_chicken, -// ttt = TTT.TRIED, -// ) +val chineseList = listOf( + Recipe( + title = "Sweet & Sour Noodle Bowl", + description = "Chinese Stir Fried Noodle Bowl with a Spicy Sweet & Sour Sauce.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("15m"), + servings = "3 Noodle Bowls", + ingredients = listOf( + "1 lb Wheat Noodles, cooked and drained", + ".75 Cup Rice Wine Vinegar", + ".5 Cup Honey", + ".33 Cup Soy Sauce", + "4 Tbsp Sesame Oil, divided", + "2 Tbsp Lime Juice", + "1 Tbsp Chili-Garlic Sauce", + "1 to 2 Tsp Ground Ginger, to taste", + "1 large Red Bell Pepper, trimmed, seeded, and sliced into thin strips", + ".33 Cup Scallions (about 4), trimmed and sliced into thin rounds, plus more for garnishing", + ".25 Cup fresh Cilantro Leaves, finely minced", + "1 Tbsp Sesame Seeds, toasted if desired, optional for garnishing", + ), + instructions = listOf( + "Cook Wheat Noodles. Drain and set aside.", + "Add Rice Wine Vinegar [.75 Cup], Honey [.5 Cup], Soy [.33 Cup], Sesame Oil [2 Tbsp], Lime Juice [2 Tbsp], Chili Garlic Sauce [1 Tbsp]," + + " and Ginger [1.5 Tsp] to a bowl and whisk to combine. Set Aside.", + "In a skillet, add Sesame Oil [2 Tbsp], Peppers, and cook until peppers are soft, about 5 minutes.", + "Add the cooked Noodles, Sauce, and cook for about 2 minutes or warmed through. Toss Often until most of the sauce is absorbed.", + "Garnish with Cilantro, Sesame Seeds, Scallions. Serve", + ), + tags = mapOf( + "Chinese" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Stir Fried" to TagType.TECHNIQUE, + "Spicy" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Sour" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED + ), + + Recipe( + title = "General Tso's", + description = "Chinese Crispy, Spicy, and Savory fried and sauced Chicken", + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("15m"), + servings = "Serves 4", + ingredients = listOf( + + "HEADER-Sauce/Marinade", + "3 Tbsp Soy Sauce", + "1 Tbsp Hoisin", + "1 Tbsp Rice Vinegar", + "2 Tsp Chilli Paste", + "1 Tsp Sesame Oil", + "3 Tbsp Brown Sugar", + "1 Tbsp Cornstarch", + "0.75 Cups Chicken Broth", + + "HEADER-Chicken", + "600g Protein, cut into bite sized pieces", + "1 Tsp Ginger", + "1 Tsp Garlic", + "1 Cups Cornstarch", + "1.5 Cups Oil for Frying", + + "HEADER-Stir Fry Sauce", + "2 Tbsp Oil", + "2 Tsp Ginger", + "2 Cloves Garlic", + "0.5 Tsp Red Chilli Flakes", + + "HEADER-Garnishes", + "Sesame Seeds", + "Scallions", + ), + instructions = listOf( + "HEADER-Marinade and Sauce", + "Mix Soy [3 Tbsp], Hoisin [1 Tbsp], Vinegar [1 Tbsp], Chilli [2 Tsp], and Sesame Oil [1 Tsp].", + "Take [2 Tbsp] of the Marinade to mix with the Protein. Add the Ginger [1 Tsp] and Garlic [1 Tsp] and Marinate for 30 minutes.", + "For the rest of the Sauce, add Brown Sugar [3 Tbsp] and Cornstarch [1 Tbsp]. Mix, and then add Chicken Broth [0.75 Cups]", + + "HEADER-Protein Fry", + "Add Cornstarch [1 Cups] into the Marinade and toss to coat. Make sure to separate and fully coat each piece." + + " Shake off the excess.", + "Heat Oil to 350F", + "Fry Protein until cooked through, and golden brown on the outside", + + "HEADER-Stir Fry", + "Heat Oil [2 Tbsp] in a wok. Add Ginger [2 Tsp], Garlic [2 Cloves], and Chilli Flakes [.5 Tsp].", + "Add Sauce and bring to a simmer. Stir until it thickens slightly, then add Protein and toss to coat.", + ), + tags = mapOf( + "Chinese" to TagType.CUISINE, + "Stir Fried" to TagType.TECHNIQUE, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + "Deep Fried" to TagType.TECHNIQUE, + ), + image = Res.drawable.tso, + ttt = TTT.TRIED, + ), + + Recipe( + title = "Sesame Chicken", + description = "Chinese Deep Fried and Sauce Coated Savory Chicken with lots of Sesame.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("20m"), + servings = "Serves 5", + ingredients = listOf( + + "HEADER-Marinade", + "1 Egg Whites", + "2 Tbsp Dark Soy", + "2 Tbsp Shaoxing", + "2 Tbsp Eighty Proof Vodka", + "0.25 Tsp Baking Soda", + "3 Tbsp Cornstarch", + "1 lbs Protein of Choice, cut into bite sized pieces", + + "HEADER-Coating", + "0.5 Cups Flour", + "0.5 Cups Cornstarch", + "0.5 Tsp Baking Powder", + "0.5 Tsp Salt", + + "HEADER-Sauce", + "3 Tbsp Dark Soy", + "2 Tbsp Shaoxing", + "2 Tbsp Rice Vinegar", + "3 Tbsp Stock", + "5 Tbsp Sugar", + "2 Tsp Sesame Oil", + "1 Tbsp Cornstarch", + "2 Tsp Oil", + "2 Tsp Garlic, Minced", + "2 Tsp Ginger, Minced", + "2 Tsp Scallion, Minced", + "2 Tbsp Sesame Seeds", + + "HEADER-Finishing", + "Oil for Deep Frying", + ), + instructions = listOf( + + "HEADER-Marinade", + "In a medium bowl, beat Egg Whites [1] until foamy. Add Soy Sauce [2 Tbsp], Wine [2 Tbsp], and Vodka [2 Tbsp].", + "Reserve Half of this Mixture.", + "To the other half, add Baking Soda [.25 Tsp] and Cornstarch [3 Tbsp]. Add Protein [1 lb] and coat thoroughly. Cover and Set Aside.", + + "HEADER-Coating", + "Combine Flour [.5 Cup], Cornstarch [0.5 Cups], Baking Powder [.5 Tsp], and Salt [.5 Tsp]. Add the reserved Half of the Marinade." + + " Expect Coarse, Mealy clumps.", + "At this point, begin Heating the Deep Frying Oil, about 350F.", + + "HEADER-Sauce", + "Combine Soy Sauce [3 Tbsp], Wine [2 Tbsp], Vinegar [2 Tbsp], Stock [3 Tbsp], Sugar [5 Tbsp], Sesame Oil [2 Tsp], and Cornstarch [1 Tbsp]." + + " Set Aside.", + "Combine Oil [2 Tsp], Garlic [2 Tsp], Ginger [2 Tsp], and Scallion [2 Tsp] in a Wok over medium. Cook for about 3 minutes.", + "Add the Sauce, Stirring until it begins to thicken, about 1 minute, then remove from heat.", + + "HEADER-Fry", + "Once the Oil is heated, begin coating the Protein. One at a time, toss thoroughly to coat in the Dry Mixture.", + "Deep Fry in Batches until cooked through and golden brown.", + "Once all the Protein has finished, add it to the Wok and return the heat. Toss everything and heat.", + ), + tags = mapOf( + "Savory" to TagType.FLAVOUR, + "Chinese" to TagType.CUISINE, + "Stir Fried" to TagType.TECHNIQUE, + "Entree" to TagType.COURSE, + "Deep Fried" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Sweet" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR + ), + image = Res.drawable.sesame, + ttt = TTT.TRIED + ), + + Recipe( + title = "Kung Pao Chicken", + description = "Spicy Chinese stir fry Chicken with Peanuts and Sichuan Peppercorns.", + prepTime = Duration.parse("8h"), + cookTime = Duration.parse("20m"), + ingredients = listOf( + + "HEADER-Sauce", + "2.5 Tbsp (33g) Sugar", + "1.5 Tsp (10g) Corn Starch", + "2 Tbsp (30g) Soy Sauce", + "2 Tbsp (40g) Dark Soy Sauce", + "3 Tbsp (53g) Chinese Black Vinegar", + ".25 Cup (44g) Stock", + "3 Tbsp (36g) Water", + "2.5 Tbsp (31g) Shaoxing Wine", + + "HEADER-Marinade", + "2 lbs Protein of Choice, bite sized (Originally Chicken)", + "1 Tsp (4g) Corn Starch", + "Pinch of White Pepper", + "2 Tbsp (36g) Soy Sauce", + "1 Tbsp (10g) Shaoxing Wine", + + "HEADER-Stir Fry", + "3.5 tablespoons (53g) Vegetable Oil", + "0.25 cup (48g) Raw Peanuts", + "8 dried Chilies", + "3 Stalks Scallions", + "1 inch knob Ginger, Minced", + "8 Cloves Garlic, Minced", + ".25 Tsp, (1g) Sichuan Peppercorn, Ground", + + "HEADER-Garnish", + "Additional Sliced Scallion", + "Additional Peanuts, Crushed", + ), + instructions = listOf( + + "HEADER-Sauce", + "Combine all ingredients in a bowl and Set Aside.", + + "HEADER-Stir Fry", + "Combine Protein [2 lb] with Cornstarch [1 Tsp], White Pepper, and toss to coat. Add Soy Sauce [2 Tbsp], Shaoxing [1 Tbsp], mix and let Marinate overnight.", + "Heat Oil [3.5 Tbsp] in a Wok. Add Peanuts, Stir Frying until Golden, about 40 seconds. Remove and Set Aside.", + "Add Chilies [8] to the Wok, Fry until crispy, about 30 seconds. Remove and Set Aside.", + "Fry the Protein in Batches until Golden Brown and cooked through, about 3 minutes per batch. Remove and Set Aside.", + "Add Scallions [.25 Bunch], frying for about 20 seconds. Add Ginger [1 inch], then Garlic [8 Cloves], then Szechuan [.25 Tsp]. Return other ingredients" + + " and fry for about 30 seconds.", + "Add the Sauce and cook until thickened. Serve with Crushed Peanuts and Scallions.", + + ), + tags = mapOf( + "Chinese" to TagType.CUISINE, + "Entree" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Stir Fried" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable.kung_pao, + servings = "Serves 4", + ttt = TTT.TESTED + ), + + Recipe( + title = "Orange Chicken", + description = "Another American-Chinese dish. This time, bits of battered and fried Chicken are served with a Orange-Soy glaze.", + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("20m"), + servings = "Serves 5", + ingredients = listOf( + "HEADER-Protein", + "2 lbs Protein, bite-sized", + "3 Eggs, whisked", + "0.33 Cups Cornstarch", + "0.33 Cups Flour", + "Salt", + "Oil For Frying", + + "HEADER-Orange Sauce", + "1 Cups Orange Juice", + "0.33 Cups Sugar", + "2 Tbsp Rice Vinegar", + "2 Tbsp Soy Sauce", + "1 Tsp Orange Zest, grated", + "0.5 Tsp Red Chili Flakes", + "0.25 Tsp Garlic Powder", + "0.25 Tsp Ginger", + "1 Tbsp Cornstarch", + ), + instructions = listOf( + "HEADER-Orange Sauce", + "Add Orange Juice [1 Cup], Sugar [0.33 Cup], Vinegar [2 Tbsp], Soy [2 Tbsp], Ginger [0.25 Tsp], Garlic [0.25 Tsp], and Chili Flakes [0.5 Tsp] to a pot." + + " Heat over medium for about 3 minutes", + "Combine Cornstarch [1 Tbsp] with Water [2 Tbsp] to form a paste. Add to Sauce and stir until it thickens. Remove from heat and add Orange Zest [0.5 Tsp].", + + "HEADER-Stir Fry", + "Heat Oil to 350F", + "Mix Flour [0.33 Cups] and Cornstarch [0.33 Cups] in a shallow bowl with Salt.", + "Dredge Protein in Eggs, then Flour Mixture.", + "Fry Protein in Batches until Golden Brown and Cooked through", + "Toss Protein in Orange Sauce and Serve", + ), + tags = mapOf( + "American" to TagType.CUISINE, + "Adaptable" to TagType.PROTEIN, + "Chinese" to TagType.CUISINE, + "Stir Fried" to TagType.TECHNIQUE, + "Deep Fried" to TagType.TECHNIQUE, + "Sweet" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + ), + image = Res.drawable.orange_chicken, + ttt = TTT.TRIED + ), + + Recipe( + title = "San Bei Ji | Three Cup Chicken", + description = "Chinese Chicken dish cooked in a 3 Cup Mixture of Soy, Kecap, Shaoxing Wine, and Basil.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("15m"), + servings = "Serves 3", + ingredients = listOf( + "1 lbs Protein of Choice", + "1 Tbsp Baking Soda", + "2 Tbsp Toasted Sesame Oil", + "2 in Piece of Ginger, Grated", + "6 Cloves Garlic", + "1.5 Tbsp Soy Sauce", + "1.5 Tbsp Kecap Manis", + "1.5 Tbsp Shaoxing Wine", + "1 Bunch Thai Basil", + ), + instructions = listOf( + "Cut the Protein into Bite Sized Pieces. Rub with Baking Soda [1 Tbsp] and Set aside for 10 minutes.", + "Heat a opt on High with the Sesame Oil [2 Tbsp]. Add the Ginger [2 in], Garlic [6 Cloves], and fry until Aromatic.", + "Add in the Protein and toss.", + "Add the Soy Sauce [1.5 Tbsp], Kecap [1.5 Tbsp], Shaoxing [1.5 Tbsp] and stir. Cover and lower the heat. Simmer for 5-10 minutes or cooked through.", + "Toss with the Basil [1 Bunch] and Serve.", + ), + tags = mapOf( + "Chinese" to TagType.CUISINE, + "Stir Fried" to TagType.TECHNIQUE, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + ), + image = Res.drawable.san_bei_ji, + ttt = TTT.TESTED, + linkedRecipes = listOf( + kecapManis //Kecap + ), + ), + + Recipe( + title = "Taiwanese Fried Chicken", + description = "Crispy and flavorful Taiwanese fried chicken, marinated in aromatic spices and fried to golden perfection.", + prepTime = Duration.parse("2h 15m"), // 2 hours marinade + 15 mins prep + cookTime = Duration.parse("15m"), + servings = "Serves 4", + ingredients = listOf( + "HEADER-Chicken & Marinade", + "1 pound boneless, skinless Chicken Thighs (cut into 1-inch/2.5cm pieces)", + "1 heaping Tbsp Garlic (minced)", + "1 Tbsp Light Soy Sauce", + "1 Tbsp Shaoxing Wine", + "0.5 Tsp Sugar", + "0.5 Tsp Five Spice Powder", + "0.5 Tsp White Pepper", + "0.25 Tsp Salt", + + "HEADER-Batter", + "0.25 cup All Purpose Flour", + "0.25 cup Water", + "2 Tbsp Sweet Potato Starch", + "0.5 Tsp Baking Powder", + "0.25 Tsp Salt", + "0.25 Tsp White Pepper", + + "HEADER-Finishing", + "20-25 Thai Basil Leaves (optional)", + "Vegetable Oil (can substitute canola oil, peanut oil, or any other frying oil of choice)", + "1 cup Sweet Potato Starch", + "Salt and White Pepper (to taste)" + ), + instructions = listOf( + "HEADER-Marinade", + "In a medium bowl, combine the Chicken pieces [1 pound] with the Garlic [1 heaping Tbsp], Light Soy Sauce [1 Tbsp], Shaoxing Wine [1 Tbsp], Sugar [0.5 Tsp], Five Spice Powder [0.5 Tsp], White Pepper [0.5 Tsp], and Salt [0.25 Tsp]. Cover and marinate in the refrigerator for at least 2 hours, or ideally overnight.", + + "HEADER-Batter", + "Make the batter just before frying. In a medium bowl, combine the All Purpose Flour [0.25 cup], Water [0.25 cup], Sweet Potato Starch [2 Tbsp], Baking Powder [0.5 Tsp], Salt [0.25 Tsp], and White Pepper [0.25 Tsp]. Toss this batter mixture into the marinated Chicken.", + + "HEADER-Basil (Optional)", + "If using, wash the Thai Basil Leaves [20-25], and run them through a salad spinner to dry them. Thoroughly pat them dry on a kitchen towel to get rid of any lingering moisture (or it may cause splattering in the frying oil). Set aside.", + + "HEADER-First Fry", + "Add 2 inches of Vegetable Oil to a medium pot, and bring it to 350°F/175°C over medium heat. You may need to adjust the heat to keep the oil temperature at 350°F/175°C during frying.", + "First, fry the Basil Leaves until they turn a dark green color. Strain them out and set aside. ", + "Coat each piece of battered Chicken in Sweet Potato Starch [1 cup], and immediately lower it into the 350°F/175°C oil in batches (about a quarter to a third of the Chicken per batch). Do not coat the Chicken ahead of time, or the coating will become soggy. Fry for 1 minute. Remove the Chicken from the oil, set aside, and continue frying subsequent batches, for 1 minute for each batch.", + + "HEADER-Second Fry", + "Now it’s time for the second fry. With the temperature still at 350°F/175°C, fry the batches again (in the same order you initially fried them in)—this time, for 2 minutes, until the pieces float to the surface and are crispy.", + + "HEADER-Finish & Serve", + "Once the second fry is done, sprinkle with additional Salt and White Pepper to taste, and serve with the Thai Basil Leaves, if using." + ), + tags = mapOf( + "Taiwanese" to TagType.CUISINE, + "Chinese" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Deep Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Herby" to TagType.FLAVOUR, + ), + image = Res.drawable.taiwanese_popcorn_chicken, + ttt = TTT.TRIED + ), + + Recipe( + title = "Schezwan Burnt Garlic Chicken", + description = "Crispy Chicken pieces tossed in a spicy Schezwan burnt Garlic sauce with colorful Bell Peppers and Scallions.", + prepTime = Duration.parse("2h 15m"), // 1-2 hours marinade + 15 mins prep + cookTime = Duration.parse("20m"), + servings = "Serves 3", + ingredients = listOf( + + "HEADER-Protein & Marination", + "250 gms Protein of Choice (originally boneless chicken)", + "2-3 Tbsp Soy Sauce (for marination)", + "1 Tsp Green Chilli Sauce (for marination)", + "0.25 Tsp Pepper Powder (for marination)", + "Salt (for marination)", + "1 Eggs", + "2 Tbsp Cornstarch", + "2 Tbsp Flour", + + "HEADER-Garlic Oil", + "5 cloves Garlic", + "4 Red Whole Chilies", + "2 Tbsp High Heat Oil", + + "HEADER-Sauce", + "10 Cloves Garlic (finely chopped)", + "1 Onions (chopped)", + "1 Tbsp Ginger (finely chopped)", + "1 Green Chilly", + "2 Tbsp Schezwan Chutney", + "3 Tbsp Soy Sauce", + "1 Tbsp Vinegar", + "0.5 Tsp Sugar", + "1 Tbsp Cornflour (in 1 cup water)", + "1 Tsp Red Chilli Sauce", + "1 Tsp Green Chilli Sauce", + + + "HEADER-Stir Fry", + "0.5 Cups Scallions (greens)", + "Scallions (bulbs, halved)", + "0.5 Cups Red Bell Pepper (cubed)", + "0.5 Cups Green Capsicum (cubed)", + "0.5 Cups Yellow Bell Pepper (cubed)", + "0.125 Tsp Pepper Powder", + ), + instructions = listOf( + "HEADER-Marination", + "Chop Protein [250 gms] into thick pieces and marinate with Soy Sauce [2-3 Tbsp], Green Chilli Sauce [1 Tsp], Pepper Powder [0.25 Tsp], and Salt for 1-2 hours.", + + "HEADER-Fry Protein", + "In a kadhai, heat sufficient Oil for deep frying.", + "In the marinated Protein, add beaten Egg [1], Cornflour [2 Tbsp], and All Purpose Flour [2 Tbsp]. Mix well.", + "Drop few Protein pieces in hot Oil and deep fry them in batches until they turn golden brown in color.", + "Drain on an absorbent paper and keep aside.", + + "HEADER-Burnt Garlic Oil", + "In a wok, add Oil, and 4-5 cloves of Garlic and 3-4 Red Whole Chilies.", + "Once the Garlic and Chilies turn dark in color, off the gas. Drain and discard the Chilies and Garlic.", + + "HEADER-Make Sauce", + "Now in the same wok or nonstick deep pan, add chopped Ginger [1 Tbsp] and Garlic [8-10 cloves] in the prepared Garlic Chilly Oil.", + "Fry for a minute or two, add chopped Onions [1] and fry for a minute again until translucent.", + "Now add Schezwan Chutney [2 Tbsp], Salt, Pepper Powder [0.125 Tsp], Vinegar, Soy Sauce [2-3 Tbsp], Red Chilly Sauce [1 Tsp], Green Chilly Sauce [1 Tsp], and Sugar [0.5 Tsp].", + "In a small bowl, dilute Cornflour [1 Tbsp] in Water [1 cup] and add to the gravy.", + "Once the gravy thickens, add Protein, Spring Onions white (bulbs), chopped Green Chilly [1], and all 3 colored Bell Peppers [0.5 cup each]. Adjust the seasonings like Salt and Pepper and adjust the sauces too if needed.", + + "HEADER-Finish & Serve", + "Garnish with chopped Spring Onion greens [0.5 cup]. Transfer to serving dish or bowl, serve hot immediately." + ), + tags = mapOf( + "Chinese" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Deep Fried" to TagType.TECHNIQUE, + "Stir Fried" to TagType.TECHNIQUE, + "Spicy" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + ), + image = Res.drawable.burnt_garlic_chicken, + ttt = TTT.TRIED, + ), + + Recipe( + title = "Chilli Chicken", + description = "Crispy fried Chicken pieces coated in a spicy and tangy sauce with Green Peppers and Onions.", + prepTime = Duration.parse("1h 30m"), // Includes marinade time + cookTime = Duration.parse("20m"), + servings = "Serves 4", + ingredients = listOf( + "1.5 lbs Boneless Chicken Thighs", + "0.5 Green Pepper", + "0.5 Onions", + "2 Tbsp Garlic-Ginger-Onion Mix (reserved from marinade)", + + "HEADER-Chicken Marinade", + "0.5 White Onions", + "4 Slices Ginger", + "3 Cloves Garlic", + "1 Tsp Black Pepper", + "0.5 Tbsp Chilli Powder", + "1.5 Tbsp Soy Sauce", + "3-4 Tbsp Water", + "6-7 Tbsp Corn Starch (mix this in with the Chicken after marinating, right before deep frying)", + + "HEADER-Sauce", + "6 Thai Green Chillis", + "1.5 Tbsp Kecap Manis", + "2.5 Tbsp Soy Sauce", + "1 Tbsp Rice Vinegar", + "1 Tbsp Honey", + "2 Tsp Corn Starch (mixed with 4 Tsp of Water)", + "1.5 Tsp Chilli Powder", + "0.5 Cups Water" + ), + instructions = listOf( + "HEADER-Prep", + "With a food processor, Blitz the Ginger [4 Slices], Garlic [3 Cloves] and Onions [0.5] until it is a fine paste. Reserve 2 tablespoons of this for Browning the Onions [0.5] and Green Peppers [0.5] later.", + "Cut up the Chicken [1.5 lbs] into small bite-sized 1 inch pieces and Marinate it in a bowl with the Ginger-Garlic-Onion paste, Kecap Manis [1.5 Tbsp], Chilli Powder [0.5 Tbsp], Black Pepper [1 Tsp], and Water [3-4 Tbsp]. (Do not add the Corn Starch yet. We will add that right before we deep fry the Chicken.) Marinate in the fridge for 1 hour.", + "Chop the Green Peppers [0.5] and remaining Onion [0.5] into bite-sized pieces and set aside.", + + "HEADER-Sauce", + "Chop up the Chillis [5-6] in the slices (keep the seeds) and add it to a small bowl.", + "Add in the rest of the ingredients in the sauce ingredient list except the Corn Starch [2 Tsp].", + "In a small bowl, mix Corn Starch [2 Tsp] with Cold Water [4 Tsp], then add it to the sauce and stir to combine.", + "Set the sauce aside.", + + "HEADER-Deep Fry", + "Add Corn Starch [6-7 Tbsp] to the Chicken and mix until combined and Chicken is coated lightly.", + "In a wok, frying pan or deep fryer set the oil to 350F (177C).", + "When the oil is hot, add the Chicken into the oil to Cook in batches.", + "Cook the Chicken for about 5-6 minutes and set aside on a plate with paper towel.", + + "HEADER-Stir Fry", + "In a wok, set the stove medium high heat and add 2 tablespoons of oil.", + "When the oil is hot, add in the Ginger-Garlic-Onion mix [2 Tbsp] that was reserved from preparation and Cook it until it is toasty and brown. Approximately 1-2 minutes.", + "Add in the Onions [0.5] and Green Pepper [0.5] chunks and Cook it for about 2 minutes. We want to keep the veggies somewhat crisp still, so do not overcook the Peppers.", + "Give the sauce a quick stir (the Corn Starch likes to settle at the bottom) and add it to the pan.", + "Keep stirring the sauce until it thickens and becomes thick.", + "Once the sauce has thickened, turn off the heat.", + "Add in Chicken and mix everything together until the Chicken is coated with the sauce.", + ), + tags = mapOf( + "Chinese-Indian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Fried" to TagType.TECHNIQUE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.chilli_chicken, + linkedRecipes = listOf( + kecapManis + ), + ttt = TTT.TRUE + ), + + Recipe( + title = "Almond Chicken", + description = "Crispy, golden Chicken, coated in Almond Flour and rice cereal, fried to perfection and tossed in a savory Garlic, Ginger, and Soy sauce. Garnished with toasted Almonds and Green Onions.", + prepTime = Duration.parse("45m"), + cookTime = Duration.parse("20m"), + servings = "Serves 4", + ingredients = listOf( + "1 Egg", + "1 Tbsp Low Sodium Soy Sauce", + "0.25 Tsp Baking Soda", + "1.5 lb Boneless Skinless Chicken Breast cut into 2 inch pieces", + "0.25 Cup Almond Flour", + "0.25 Cup All Purpose Flour", + "1.5 Cups Crispy Rice Cereal", + "Salt and Pepper", + "Frying Oil", + + "HEADER-Sauce", + "2-3 cloves Garlic minced", + "0.25 inch knob Ginger minced; about 0.5 tsp", + "2 Tbsp Low Sodium Soy Sauce", + "1 Tbsp Oyster Sauce", + "1.5 Tbsp White Granulated Sugar", + "1 Tbsp Corn Starch", + "0.33 Cup Low Sodium Chicken Broth", + "0.25 Cup Sliced Almonds", + "1-2 Green Onion thinly sliced; for garnish", + "Salt and Pepper" + ), + instructions = listOf( + "HEADER-Marinade", + "In a large bowl, whisk together Egg [1], Low Sodium Soy Sauce [1 Tbsp], Baking Soda [0.25 Tsp], Salt [0.5 Tsp], and Pepper [0.25 Tsp].", + "Add Boneless Skinless Chicken Breast [1.5 lb], mix together, and let marinade for at least 30 minutes, up to overnight.", + + "HEADER-Dredge", + "In another large bowl, combine Almond Flour [0.25 Cup], All Purpose Flour [0.25 Cup], Crispy Rice Cereal [1.5 Cups], Salt [0.25 Tsp], and Pepper [0.25 Tsp]. Mix together.", + "Once Chicken is done marinating, take a piece and let excess Marinade drip off. Roll and press into Cereal Mixture, then place onto a plate or baking sheet. Repeat until all Chicken is dredged.", + + "HEADER-Fry Chicken", + "Pour 1-2 inches of Frying Oil into a large heavy-bottomed pot and heat to 350°F.", + "Add a couple pieces of Chicken, making sure to not overcrowd the pan. Bubbling is normal but adjust the heat as needed to maintain a frying temperature of 315-350°F.", + "Fry for 3-4 minutes or until deeply golden brown with an internal temperature of 155°F.", + "Transfer Chicken to a cooling rack and option to lightly salt. Repeat with the rest of the Chicken, frying in small batches.", + + "HEADER-Toast Almonds", + "Add Sliced Almonds [0.25 Cup] to a skillet or wok over medium heat. Toast for 5 minutes, stirring often, until lightly golden and fragrant.", + "Transfer to a clean bowl and set aside.", + + "HEADER-Make Sauce", + "In a small bowl, add Garlic [2-3 cloves], Ginger [0.25 inch knob], Low Sodium Soy Sauce [2 Tbsp], Oyster Sauce [1 Tbsp], White Granulated Sugar [1.5 Tbsp], Corn Starch [1 Tbsp], Low Sodium Chicken Broth [0.33 Cup], Salt [0.25 Tsp], and Pepper [0.25 Tsp].", + "Whisk until homogenous, then pour into same skillet used for Almonds. Simmer over medium heat for 2-3 minutes, whisking constantly, until dark and thickened.", + + "HEADER-Assemble", + "If serving immediately, add Chicken, Sliced Almonds [0.25 Cup], Sauce, and half the Green Onion [1-2] to the wok or large bowl. Toss until Chicken is evenly coated in Sauce.", + "Transfer to serving bowl, top with remaining Green Onion [1-2], and serve." + ), + tags = mapOf( + "Asian Fusion" to TagType.CUISINE, + "Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Carnivorous" to TagType.PROTEIN + ), + image = Res.drawable.almond_chicken, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/IndianData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/IndianData.kt index 0a8747a..9215dec 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/IndianData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/IndianData.kt @@ -9,179 +9,179 @@ import bakersmenagerie.composeapp.generated.resources.chicken_65 import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val indianList = listOf( -// Recipe( -// title = "Street Food Jalfrezi", -// description = "This Dish, originally made with Chicken, is a chili and masala powder spiced flat bread wrap. Served with Yoghurt and mint herb," + -// " and stuffed with peppers and tomatoes.", -// ingredients = listOf( -// -// "HEADER-Coating", -// "1 Tbsp Flour", -// "2 Tsp Garam Masala Powder", -// "2 Tsp Ground Cumin", -// "1 Tsp Chilli Flakes", -// ".5 Tsp Black Onion Seed", -// "450g Protein of Choice, thin sliced", -// -// "HEADER-Filling", -// "2 Tbsp Ghee", -// "1 Red Pepper, thin sliced", -// "1 Green Pepper, thin sliced", -// "2 Medium Tomatoes, thin sliced", -// "1 Tsp Brown Sugar", -// -// "HEADER-To Serve", -// "75ml Yoghurt", -// "5ml Mint Herb", -// "4 Naan Breads", -// "Salt", -// ), -// instructions = listOf( -// "Combine Flour [1 Tbsp], Garam Masala [2 Tsp], Cumin [2 Tsp] Chilli Flakes [1 Tsp], and Black Onion Seed [.5 Tsp] in a bowl.", -// "Add the Sliced Protein and toss to coat.", -// "Heat Ghee in a nonstick pan. Cook Protein 6-8 minutes, or until done, depending.", -// "Add Peppers, cook for a further 2 minutes", -// "Add Tomatoes and Sugar and cook for 2-3 minutes more, or until Tomatoes are softened", -// "Combine Yoghurt [75ml] and Mint [5ml]", -// "To Serve, wrap naan around Protein-Pepper Mixture, drizzle with Yoghurt.", -// ), -// tags = mapOf( -// "Savory" to TagType.FLAVOUR, -// "Street Food" to TagType.CUISINE, -// "Indian" to TagType.CUISINE, -// "Adaptable" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Herby" to TagType.FLAVOUR, -// "Wrapped" to TagType.TECHNIQUE, -// "Stir Fried" to TagType.TECHNIQUE -// ), -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("15m"), -// servings = "Makes 4 Wraps", -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED -// ), -// -// Recipe( -// title = "Butter Chicken", -// description = "Creamy and aromatic chicken pieces in a rich tomato and cream sauce.", -// prepTime = Duration.parse("8h 15m"), // 30 mins to 1 hour marinade + 15 mins prep -// cookTime = Duration.parse("40m"), -// servings = "Serves 4-6", -// ingredients = listOf( -// "HEADER-Protein Marinade", -// "28 oz (800g) Protein of Choice\n (cut into bite-sized pieces)", -// "0.5 Cups Cream Cheese, Softened", -// "1.5 Tbsp Garlic, Minced", -// "1 Tbsp Ginger, Grated", -// "2 Tsp Garam Masala", -// "1 Tsp Turmeric", -// "1 Tsp Ground Cumin", -// "1 Tsp Red Chili Powder", -// "1 Tsp Salt", -// -// "HEADER-Sauce", -// "2 Tbsp Olive Oil", -// "2 Tbsp Ghee", -// "1 large Onions, Chopped", -// "1.5 Tbsp Garlic, Minced", -// "1 Tbsp Ginger, Grated", -// "1.5 Tsp Ground Cumin", -// "1.5 Tsp Garam Masala", -// "1 Tsp Ground Coriander", -// "14 oz (400 g) Crushed Smoked Tomatoes", -// "1 Tsp Red Chili Powder", -// "1.25 Tsp Salt", -// "1 Cups Heavy Cream", -// "1 Tbsp Sugar", -// "0.5 Tsp Kasoori Methi", -// ), -// instructions = listOf( -// "HEADER-Marinade", -// "In a bowl, combine Protein [28 oz] with all of the ingredients for the Protein Marinade; let marinate for 30 minutes to an hour (or overnight if time allows).", -// -// "HEADER-Fry Protein", -// "Heat Olive Oil [2 Tbsp] in a large skillet or pot over medium-high heat. When sizzling, add Protein pieces in batches.", -// "Fry until browned for about 3 minutes on each side. Set aside and keep warm. (You will finish cooking the Protein in the sauce.)", -// -// "HEADER-Make Sauce", -// "Heat Ghee [2 Tbsp] in the same pan. Fry the Onions [1] until they start to sweat (about 6 minutes) while scraping up any browned bits stuck on the bottom of the pan.", -// "Add Garlic [1.5 Tbsp] and Ginger [1 Tbsp] and sauté for 1 minute until fragrant, then add Ground Coriander [1 Tsp], Cumin [1.5 Tsp], and Garam Masala [1.5 Tsp]. Let cook for about 20 seconds until fragrant, while stirring occasionally.", -// "Add Crushed Tomatoes [14 oz], Chili Powder [1 Tsp], and Salt [1.25 Tsp]. Let simmer for about 10-15 minutes, stirring occasionally until sauce thickens and becomes a deep brown-red color.", -// "Remove from heat, scoop mixture into a blender and blend until smooth. You may need to add a couple tablespoons of water to help it blend.", -// -// "HEADER-Finish & Serve", -// "Pour the puréed sauce back into the pan. Stir the Cream [1 cup], Sugar [1 Tbsp], and crushed Kasoori Methi [0.5 Tsp] through the sauce. Add the Protein with juices back into the pan and cook for an additional 8-10 minutes until Protein is cooked through and the sauce is thick and bubbling." -// ), -// tags = mapOf( -// "Indian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Curry" to TagType.COURSE, -// "Simmered" to TagType.TECHNIQUE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// ), -// image = Res.drawable.butter_chicken, -// ttt = TTT.TRUE -// ), -// -// Recipe( -// title = "Chicken 65", -// description = "Spicy, crispy Chicken 65: Indian fried chicken marinated in Curd and Spices, then tempered with Garlic, Ginger, and Chillies.", -// prepTime = Duration.parse("8h"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 4", -// listOf( -// "HEADER-Chicken Marinade", -// "500 Grams Chicken Thighs, boneless, skinless, cut into approx 0.5 inch small cubes", -// "0.25 Cups Curd", -// "1 Tbsp Ginger Garlic Paste", -// "0.25 Tsp Turmeric Powder", -// "1 Tsp Kashmiri Red Chilli Powder", -// "1 Tsp Coriander Powder", -// "0.5 Tsp Jeera Powder", -// "1 Tsp Sugar", -// "0.75 Tsp Salt", -// "2 Sprigs Curry Leaves, Chopped", -// "2 Tbsp Rice Flour", -// "3 Tbsp Corn Starch", -// "Oil, for frying", -// -// "HEADER-Chicken 65 Fry", -// "1 Tbsp Oil", -// "1 Tbsp Garlic, Finely Chopped", -// "1 Tbsp Ginger, Finely Chopped", -// "5 Green Chillies, Halved", -// "1 Tsp Red Chilli Powder", -// "2 Sprigs Curry Leaves" -// ), -// instructions = listOf( -// "HEADER-Chicken Marinade", -// "Combine all the ingredients for Chicken Marinade except Rice Flour [2 Tbsp] and Corn Flour [3 Tbsp]. Cover and marinade for at least an hour or overnight if possible.", -// "In a heavy bottomed vessel or kadai, heat enough Oil on a medium flame for deep frying.", -// "Remove the Chicken [500 Grams] from the refrigerator 10 minutes prior to frying and add Rice Flour [2 Tbsp] and Corn Flour [3 Tbsp]. Mix well to combine.", -// "Carefully drop in the Chicken [500 Grams] pieces one by one into the hot Oil. Deep fry for 2 – 3 minutes or until bright red in colour and crispy. Remove from Oil and place on a tissue paper lined plate.", -// "HEADER-Chicken 65 Fry", -// "Heat Oil [1 Tbsp] in a saucepan and allow it to heat up. Once hot, add Garlic [1 Tbsp], Ginger [1 Tbsp] and Green Chillies [5] and fry lightly over medium flame. Once fragrant, add Curry Leaves [2 Sprigs] and saute for a minute.", -// "Add Red Chilli Powder [1 Tsp] and saute. Add fried Chicken [500 Grams] and stir fry on high flame for 1 minute. Remove from the pan and serve hot." -// ), -// tags = mapOf( -// "Indian" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Fried" to TagType.TECHNIQUE, -// "Appetizer" to TagType.COURSE, -// "Carnivorous" to TagType.PROTEIN -// ), -// image = Res.drawable.chicken_65, -// ttt = TTT.TRIED, -// ) +val indianList = listOf( + Recipe( + title = "Street Food Jalfrezi", + description = "This Dish, originally made with Chicken, is a chili and masala powder spiced flat bread wrap. Served with Yoghurt and mint herb," + + " and stuffed with peppers and tomatoes.", + ingredients = listOf( + + "HEADER-Coating", + "1 Tbsp Flour", + "2 Tsp Garam Masala Powder", + "2 Tsp Ground Cumin", + "1 Tsp Chilli Flakes", + ".5 Tsp Black Onion Seed", + "450g Protein of Choice, thin sliced", + + "HEADER-Filling", + "2 Tbsp Ghee", + "1 Red Pepper, thin sliced", + "1 Green Pepper, thin sliced", + "2 Medium Tomatoes, thin sliced", + "1 Tsp Brown Sugar", + + "HEADER-To Serve", + "75ml Yoghurt", + "5ml Mint Herb", + "4 Naan Breads", + "Salt", + ), + instructions = listOf( + "Combine Flour [1 Tbsp], Garam Masala [2 Tsp], Cumin [2 Tsp] Chilli Flakes [1 Tsp], and Black Onion Seed [.5 Tsp] in a bowl.", + "Add the Sliced Protein and toss to coat.", + "Heat Ghee in a nonstick pan. Cook Protein 6-8 minutes, or until done, depending.", + "Add Peppers, cook for a further 2 minutes", + "Add Tomatoes and Sugar and cook for 2-3 minutes more, or until Tomatoes are softened", + "Combine Yoghurt [75ml] and Mint [5ml]", + "To Serve, wrap naan around Protein-Pepper Mixture, drizzle with Yoghurt.", + ), + tags = mapOf( + "Savory" to TagType.FLAVOUR, + "Street Food" to TagType.CUISINE, + "Indian" to TagType.CUISINE, + "Adaptable" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Herby" to TagType.FLAVOUR, + "Wrapped" to TagType.TECHNIQUE, + "Stir Fried" to TagType.TECHNIQUE + ), + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("15m"), + servings = "Makes 4 Wraps", + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED + ), + + Recipe( + title = "Butter Chicken", + description = "Creamy and aromatic chicken pieces in a rich tomato and cream sauce.", + prepTime = Duration.parse("8h 15m"), // 30 mins to 1 hour marinade + 15 mins prep + cookTime = Duration.parse("40m"), + servings = "Serves 4-6", + ingredients = listOf( + "HEADER-Protein Marinade", + "28 oz (800g) Protein of Choice\n (cut into bite-sized pieces)", + "0.5 Cups Cream Cheese, Softened", + "1.5 Tbsp Garlic, Minced", + "1 Tbsp Ginger, Grated", + "2 Tsp Garam Masala", + "1 Tsp Turmeric", + "1 Tsp Ground Cumin", + "1 Tsp Red Chili Powder", + "1 Tsp Salt", + + "HEADER-Sauce", + "2 Tbsp Olive Oil", + "2 Tbsp Ghee", + "1 large Onions, Chopped", + "1.5 Tbsp Garlic, Minced", + "1 Tbsp Ginger, Grated", + "1.5 Tsp Ground Cumin", + "1.5 Tsp Garam Masala", + "1 Tsp Ground Coriander", + "14 oz (400 g) Crushed Smoked Tomatoes", + "1 Tsp Red Chili Powder", + "1.25 Tsp Salt", + "1 Cups Heavy Cream", + "1 Tbsp Sugar", + "0.5 Tsp Kasoori Methi", + ), + instructions = listOf( + "HEADER-Marinade", + "In a bowl, combine Protein [28 oz] with all of the ingredients for the Protein Marinade; let marinate for 30 minutes to an hour (or overnight if time allows).", + + "HEADER-Fry Protein", + "Heat Olive Oil [2 Tbsp] in a large skillet or pot over medium-high heat. When sizzling, add Protein pieces in batches.", + "Fry until browned for about 3 minutes on each side. Set aside and keep warm. (You will finish cooking the Protein in the sauce.)", + + "HEADER-Make Sauce", + "Heat Ghee [2 Tbsp] in the same pan. Fry the Onions [1] until they start to sweat (about 6 minutes) while scraping up any browned bits stuck on the bottom of the pan.", + "Add Garlic [1.5 Tbsp] and Ginger [1 Tbsp] and sauté for 1 minute until fragrant, then add Ground Coriander [1 Tsp], Cumin [1.5 Tsp], and Garam Masala [1.5 Tsp]. Let cook for about 20 seconds until fragrant, while stirring occasionally.", + "Add Crushed Tomatoes [14 oz], Chili Powder [1 Tsp], and Salt [1.25 Tsp]. Let simmer for about 10-15 minutes, stirring occasionally until sauce thickens and becomes a deep brown-red color.", + "Remove from heat, scoop mixture into a blender and blend until smooth. You may need to add a couple tablespoons of water to help it blend.", + + "HEADER-Finish & Serve", + "Pour the puréed sauce back into the pan. Stir the Cream [1 cup], Sugar [1 Tbsp], and crushed Kasoori Methi [0.5 Tsp] through the sauce. Add the Protein with juices back into the pan and cook for an additional 8-10 minutes until Protein is cooked through and the sauce is thick and bubbling." + ), + tags = mapOf( + "Indian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Curry" to TagType.COURSE, + "Simmered" to TagType.TECHNIQUE, + "Pan Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + ), + image = Res.drawable.butter_chicken, + ttt = TTT.TRUE + ), + + Recipe( + title = "Chicken 65", + description = "Spicy, crispy Chicken 65: Indian fried chicken marinated in Curd and Spices, then tempered with Garlic, Ginger, and Chillies.", + prepTime = Duration.parse("8h"), + cookTime = Duration.parse("20m"), + servings = "Serves 4", + listOf( + "HEADER-Chicken Marinade", + "500 Grams Chicken Thighs, boneless, skinless, cut into approx 0.5 inch small cubes", + "0.25 Cups Curd", + "1 Tbsp Ginger Garlic Paste", + "0.25 Tsp Turmeric Powder", + "1 Tsp Kashmiri Red Chilli Powder", + "1 Tsp Coriander Powder", + "0.5 Tsp Jeera Powder", + "1 Tsp Sugar", + "0.75 Tsp Salt", + "2 Sprigs Curry Leaves, Chopped", + "2 Tbsp Rice Flour", + "3 Tbsp Corn Starch", + "Oil, for frying", + + "HEADER-Chicken 65 Fry", + "1 Tbsp Oil", + "1 Tbsp Garlic, Finely Chopped", + "1 Tbsp Ginger, Finely Chopped", + "5 Green Chillies, Halved", + "1 Tsp Red Chilli Powder", + "2 Sprigs Curry Leaves" + ), + instructions = listOf( + "HEADER-Chicken Marinade", + "Combine all the ingredients for Chicken Marinade except Rice Flour [2 Tbsp] and Corn Flour [3 Tbsp]. Cover and marinade for at least an hour or overnight if possible.", + "In a heavy bottomed vessel or kadai, heat enough Oil on a medium flame for deep frying.", + "Remove the Chicken [500 Grams] from the refrigerator 10 minutes prior to frying and add Rice Flour [2 Tbsp] and Corn Flour [3 Tbsp]. Mix well to combine.", + "Carefully drop in the Chicken [500 Grams] pieces one by one into the hot Oil. Deep fry for 2 – 3 minutes or until bright red in colour and crispy. Remove from Oil and place on a tissue paper lined plate.", + "HEADER-Chicken 65 Fry", + "Heat Oil [1 Tbsp] in a saucepan and allow it to heat up. Once hot, add Garlic [1 Tbsp], Ginger [1 Tbsp] and Green Chillies [5] and fry lightly over medium flame. Once fragrant, add Curry Leaves [2 Sprigs] and saute for a minute.", + "Add Red Chilli Powder [1 Tsp] and saute. Add fried Chicken [500 Grams] and stir fry on high flame for 1 minute. Remove from the pan and serve hot." + ), + tags = mapOf( + "Indian" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Fried" to TagType.TECHNIQUE, + "Appetizer" to TagType.COURSE, + "Carnivorous" to TagType.PROTEIN + ), + image = Res.drawable.chicken_65, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/JapaneseData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/JapaneseData.kt index d5896c1..0956b27 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/JapaneseData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/JapaneseData.kt @@ -8,98 +8,98 @@ import bakersmenagerie.composeapp.generated.resources.teriyaki import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val japaneseList = listOf( -// Recipe( -// title = "Teriyaki", -// description = "Protein grilled with a glaze of Soy Sauce, Mirin, and Sugar.", -// ingredients = listOf( -// -// "HEADER-Marinade", -// "2 lbs Protein of Choice, cut to size", -// "3.5 Tbsp Mirin", -// "3.5 Tbsp Soy Sauce", -// "1.5 Tsp Kecap Manis", -// "2 Tbsp Brown Sugar", -// "1 Tsp Ginger", -// "1.5 Tsp Sesame Oil", -// "1 Tbsp Cornstarch", -// -// "HEADER-Fry", -// "2 Tbsp Oil", -// ), -// instructions = listOf( -// "Mix All except Oil. Marinate Protein in sauce for 2 hours.", -// "Heat Oil in a Wok. Transfer the Protein to the wok, reserving the Marinade.", -// "Sear undisturbed for 1-2 minutes, then stir fry for another", -// "Add the Marinade to the wok, reduce heat to medium, and simmer until sauce thickens and heats through.", -// ), -// tags = mapOf( -// "Japanese" to TagType.CUISINE, -// "Grilled" to TagType.TECHNIQUE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// "Sweet" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Simmered" to TagType.TECHNIQUE -// ), -// cookTime = Duration.parse("10m"), -// prepTime = Duration.parse("2h 15m"), -// servings = "Serves 4 people", -// image = Res.drawable.teriyaki, -// ttt = TTT.TESTED, -// linkedRecipes = listOf( -// kecapManis, //Kecap Manis -// ) -// ), -// -// Recipe( -// title = "Karaage", -// description = "Japanese fried chicken marinated in ginger, garlic, and soy sauce, then double-fried for extra crispiness.", -// prepTime = Duration.parse("1d 15m"), // 1 day marinade + 15 mins prep -// cookTime = Duration.parse("15m"), -// servings = "Serves 4", -// ingredients = listOf( -// "HEADER-Marinade", -// "1.5 Tsp Ginger, Grated", -// "6 Cloves Garlic", -// "2 Tbsp Dry Sake", -// "3 Tbsp Soy Sauce", -// "2 Tsp Sugar", -// "1 lbs Protein of Choice (Originally Chicken)", -// -// "HEADER-Coating", -// "1 Cups Potato Starch", -// "0.25 Tsp Fine Sea Salt", -// "0.5 Tsp Black Pepper", -// -// "HEADER-Frying", -// "Frying Oil" -// ), -// instructions = listOf( -// "HEADER-Marinade", -// "In a shallow baking dish large enough to hold the Protein, combine Ginger [1.5 Tsp], Garlic [6 Cloves], Sake [2 Tbsp], Soy Sauce [3 Tbsp], and Sugar [2 Tsp]. Toss Protein pieces [1 lb] in marinade to coat. Cover and refrigerate for 1 day.", -// -// "HEADER-First Fry", -// "Heat Oil in a fryer to 350°F (175°C).", -// "While the oil heats: In a bowl, combine Potato Starch [1 cup], Salt [0.25 Tsp], and Pepper [0.5 Tsp]. Coat the Protein.", -// "Gently shake off excess Potato Starch before cooking each piece of Protein. Fry until cooked through, in small batches. Remove from oil and drain on paper towels.", -// -// "HEADER-Second Fry", -// "When all the Protein has been fried once, increase the oil’s temperature to 375°F (190°C). Fry Protein pieces a second time, until the crust is deep golden brown, about 1 minute. Drain on paper towels. This second frying makes the coating stay extra crisp, even if you don’t serve it immediately." -// ), -// tags = mapOf( -// "Japanese" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Deep Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Adaptable" to TagType.PROTEIN, -// ), -// image = Res.drawable.karaage, -// ttt = TTT.TESTED, -// ) +val japaneseList = listOf( + Recipe( + title = "Teriyaki", + description = "Protein grilled with a glaze of Soy Sauce, Mirin, and Sugar.", + ingredients = listOf( + + "HEADER-Marinade", + "2 lbs Protein of Choice, cut to size", + "3.5 Tbsp Mirin", + "3.5 Tbsp Soy Sauce", + "1.5 Tsp Kecap Manis", + "2 Tbsp Brown Sugar", + "1 Tsp Ginger", + "1.5 Tsp Sesame Oil", + "1 Tbsp Cornstarch", + + "HEADER-Fry", + "2 Tbsp Oil", + ), + instructions = listOf( + "Mix All except Oil. Marinate Protein in sauce for 2 hours.", + "Heat Oil in a Wok. Transfer the Protein to the wok, reserving the Marinade.", + "Sear undisturbed for 1-2 minutes, then stir fry for another", + "Add the Marinade to the wok, reduce heat to medium, and simmer until sauce thickens and heats through.", + ), + tags = mapOf( + "Japanese" to TagType.CUISINE, + "Grilled" to TagType.TECHNIQUE, + "Stir Fried" to TagType.TECHNIQUE, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + "Sweet" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Simmered" to TagType.TECHNIQUE + ), + cookTime = Duration.parse("10m"), + prepTime = Duration.parse("2h 15m"), + servings = "Serves 4 people", + image = Res.drawable.teriyaki, + ttt = TTT.TESTED, + linkedRecipes = listOf( + kecapManis, //Kecap Manis + ) + ), + + Recipe( + title = "Karaage", + description = "Japanese fried chicken marinated in ginger, garlic, and soy sauce, then double-fried for extra crispiness.", + prepTime = Duration.parse("1d 15m"), // 1 day marinade + 15 mins prep + cookTime = Duration.parse("15m"), + servings = "Serves 4", + ingredients = listOf( + "HEADER-Marinade", + "1.5 Tsp Ginger, Grated", + "6 Cloves Garlic", + "2 Tbsp Dry Sake", + "3 Tbsp Soy Sauce", + "2 Tsp Sugar", + "1 lbs Protein of Choice (Originally Chicken)", + + "HEADER-Coating", + "1 Cups Potato Starch", + "0.25 Tsp Fine Sea Salt", + "0.5 Tsp Black Pepper", + + "HEADER-Frying", + "Frying Oil" + ), + instructions = listOf( + "HEADER-Marinade", + "In a shallow baking dish large enough to hold the Protein, combine Ginger [1.5 Tsp], Garlic [6 Cloves], Sake [2 Tbsp], Soy Sauce [3 Tbsp], and Sugar [2 Tsp]. Toss Protein pieces [1 lb] in marinade to coat. Cover and refrigerate for 1 day.", + + "HEADER-First Fry", + "Heat Oil in a fryer to 350°F (175°C).", + "While the oil heats: In a bowl, combine Potato Starch [1 cup], Salt [0.25 Tsp], and Pepper [0.5 Tsp]. Coat the Protein.", + "Gently shake off excess Potato Starch before cooking each piece of Protein. Fry until cooked through, in small batches. Remove from oil and drain on paper towels.", + + "HEADER-Second Fry", + "When all the Protein has been fried once, increase the oil’s temperature to 375°F (190°C). Fry Protein pieces a second time, until the crust is deep golden brown, about 1 minute. Drain on paper towels. This second frying makes the coating stay extra crisp, even if you don’t serve it immediately." + ), + tags = mapOf( + "Japanese" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Deep Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Adaptable" to TagType.PROTEIN, + ), + image = Res.drawable.karaage, + ttt = TTT.TESTED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KecapManis.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KecapManis.kt index 583872b..bdbf089 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KecapManis.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KecapManis.kt @@ -7,37 +7,37 @@ import bakersmenagerie.composeapp.generated.resources.kecap_manis import com.menagerie.bakers.model.TTT import kotlin.time.Duration -//val kecapManis = Recipe( -// title = "Kecap Manis", -// description = "A Sweet, Sticky, Dark Soy Soy Sauce, used often in SEA cooking.", -// prepTime = Duration.parse("5h"), -// cookTime = Duration.parse("15m"), -// ingredients = listOf( -// "1 Cups Soy Sauce", -// "1.25 Cups Coconut Sugar", -// "1 Tbsp Molasses", -// "6 Cloves Garlic", -// "2 Inch Piece Fresh Ginger", -// "2 Whole Star Anise", -// "2 Whole Cloves", -// ), -// instructions = listOf( -// "Place all ingredients in a small saucepan and bring to a boil. Reduce the heat to medium-low and simmer uncovered, stirring frequently, until the Sugar is dissolved and Sauce begins to thicken, 10-15 minutes.", -// "Turn off the heat, cover and let cool completely with the spices, garlic and ginger still in it so they can continue to release their flavors. Once cool, strain into an airtight jar and store in the fridge. It will keep for several weeks.", -// ), -// tags = mapOf( -// "SEA" to TagType.CUISINE, -// "Savory" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Vegan" to TagType.PROTEIN, -// "Simmered" to TagType.TECHNIQUE, -// "Reduced" to TagType.TECHNIQUE, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Sauce" to TagType.TECHNIQUE, -// "Condiment" to TagType.COURSE -// ), -// servings = "About 1 Cup", -// image = Res.drawable.kecap_manis, -// ttt = TTT.TRUE -//) +val kecapManis = Recipe( + title = "Kecap Manis", + description = "A Sweet, Sticky, Dark Soy Soy Sauce, used often in SEA cooking.", + prepTime = Duration.parse("5h"), + cookTime = Duration.parse("15m"), + ingredients = listOf( + "1 Cups Soy Sauce", + "1.25 Cups Coconut Sugar", + "1 Tbsp Molasses", + "6 Cloves Garlic", + "2 Inch Piece Fresh Ginger", + "2 Whole Star Anise", + "2 Whole Cloves", + ), + instructions = listOf( + "Place all ingredients in a small saucepan and bring to a boil. Reduce the heat to medium-low and simmer uncovered, stirring frequently, until the Sugar is dissolved and Sauce begins to thicken, 10-15 minutes.", + "Turn off the heat, cover and let cool completely with the spices, garlic and ginger still in it so they can continue to release their flavors. Once cool, strain into an airtight jar and store in the fridge. It will keep for several weeks.", + ), + tags = mapOf( + "SEA" to TagType.CUISINE, + "Savory" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Vegan" to TagType.PROTEIN, + "Simmered" to TagType.TECHNIQUE, + "Reduced" to TagType.TECHNIQUE, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Sauce" to TagType.TECHNIQUE, + "Condiment" to TagType.COURSE + ), + servings = "About 1 Cup", + image = Res.drawable.kecap_manis, + ttt = TTT.TRUE +) diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KoreanData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KoreanData.kt index fc40157..e7a85cf 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KoreanData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/KoreanData.kt @@ -10,223 +10,223 @@ import bakersmenagerie.composeapp.generated.resources.oi_muchim import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val koreanList = listOf( -// Recipe( -// title = "Oi Muchim | Spicy Cucumber Salad", -// description = "Cucumbers tossed in Vinegar and Chili Spices.", -// ingredients = listOf( -// -// "HEADER-Brine", -// "1 Cucumbers", -// "1 Tsp Salt", -// -// "HEADER-Season", -// "1 Tbsp Gochugaru", -// "1 Tbsp Scallions, chopped", -// "1 Tsp Garlic, minced", -// "1 Tsp Vinegar", -// "0.5 Tsp Sugar", -// "1 Tsp Sesame Seeds", -// "1 Tsp Sesame Oil", -// ), -// instructions = listOf( -// "Thinly slice the Cucumber. Sprinkle with Salt [1 Tsp] and rest for 20 minutes.", -// "Drain liquid from Cucumbers, then toss in remaining ingredients.", -// ), -// tags = mapOf( -// "Korean" to TagType.CUISINE, -// "Appetizer" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Vegan" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Tossed" to TagType.TECHNIQUE -// ), -// ttt = TTT.TRUE, -// image = Res.drawable.oi_muchim, -// cookTime = Duration.ZERO, -// prepTime = Duration.parse("30m"), -// servings = "Makes about 3 Servings", -// ), -// -// Recipe( -// title = "Korean Stir Fry Sauce", -// description = "Sweet and Spicy Korean Stir Fry Sauce.", -// ingredients = listOf( -// "1.5 Tbsp Gochujang", -// "2 Tsp Gochugaru", -// "1 Tbsp Garlic, minced", -// "1 Tsp Ginger, grated", -// "2 Tsp Honey", -// "1 Tbsp Soy", -// "1 Tbsp Mirin", -// "1.5 Tsp Brown Sugar", -// "Juice of 1 Lime", -// ), -// instructions = listOf( -// "Combine ingredients", -// ), -// tags = mapOf( -// "Korean" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Mixed" to TagType.TECHNIQUE, -// "Sauce" to TagType.TECHNIQUE, -// "Condiment" to TagType.COURSE -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TESTED, -// cookTime = Duration.ZERO, -// prepTime = Duration.parse("10m") -// ), -// -// Recipe( -// title = "Bulgolgi", -// description = "Delicious Savory and Spicy (like all Korean food) Korean barbecue", -// ingredients = listOf( -// "2 Scallion", -// "1 Large Onion", -// "1 lb Protein of choice", -// "3 Tbsp Gochujang", -// "1 tsp Gochugaru", -// "2 Tbsp Soy", -// "2 Tbsp Mirin", -// "1.5 Tbsp Sugar", -// "1 Tbsp Sesame Oil", -// "1 Tbsp Garlic, minced", -// "1 Tbsp Ginger, grated", -// ".25 Tsp Black Pepper" -// ), -// instructions = listOf( -// "Mix all ingredients except Scallions together. Marinate 1h, up to overnight", -// "Stir Fry until onions are done, protein is finished cooking, etc...", -// "Garnish with Scallions and serve" -// ), -// tags = mapOf( -// "Korean" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Stir Fried" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TRUE, -// cookTime = Duration.parse("30m"), -// prepTime = Duration.parse("8h") -// ), -// -// Recipe( -// title = "Buldak | Fire Chicken", -// description = "Spicy Korean Barbecued Chicken", -// ingredients = listOf( -// -// "HEADER-Barbecue", -// "1 lb Protein of Choice (Originally Chicken)", -// "2 Tbsp Soy", -// "1 Tbsp Sugar", -// "1 Tbsp Honey", -// "2 Tbsp Rice Wine", -// "Black Pepper", -// "Sesame Seeds", -// "1 Scallion", -// -// "HEADER-Fire Sauce", -// "3 Tbsp Gochugaru", -// "2 Jalapenos", -// ".5 Cups Korean Pear", -// ".25 White Onions", -// "3 Tbsp Garlic, minced", -// "2 Tbsp Soy Sauce", -// "1 Tsp Spicy Yellow Mustard", -// "1 Tbsp Sesame Oil", -// "1 Tbsp Honey", -// ), -// instructions = listOf( -// "Cut the Protein into Bite-sized pieces.", -// "In a bowl, mix Soy [2 Tbsp], Sugar [1 Tbsp], Honey [1 Tbsp], Rice Wine [2 Tbsp], and Black Pepper. Toss the Protein in this mixture; marinate for 30m.", -// "Puree all the Fire Sauce ingredients together in a blender. Set Aside.", -// "Heat a wok over medium heat, cooking Protein to just underdone in batches as needed.", -// "Pull the Protein, leaving as much of everything else in the wok as you can. Toss in the Fire Sauce and return all to the wok.", -// "Cook another 3-4 minutes until all are warmed through." -// ), -// tags = mapOf( -// "Korean" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Barbecue" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Stir Fried" to TagType.TECHNIQUE -// ), -// prepTime = Duration.parse("40m"), -// cookTime = Duration.parse("15m"), -// image = Res.drawable.Buldak, -// ttt = TTT.TESTED, -// servings = "Serves 2-3", -// ), -// -// Recipe( -// title = "Dakkochi | Korean Chicken Skewers", -// description = "Sweet, spicy, and savory Korean Chicken skewers with Green Onions, grilled and basted with a Gochujang sauce.", -// prepTime = Duration.parse("45m"), // 30 mins soak + 15 mins prep -// cookTime = Duration.parse("15m"), -// servings = "Serves 6", -// ingredients = listOf( -// "900 g Chicken Breast, bite sized", -// "290 g Green Onion, long slices", -// "2 Tbsp Rice Wine", -// "Fine Sea Salt", -// "Cooking Oil Spray", -// -// "HEADER-Spicy Gochujang Sauce", -// "0.25 Cups Sriracha Ketchup", -// "2 Tbsp Gochujang", -// "2 Tbsp Honey", -// "2 Tbsp Dark Brown Sugar", -// "1 Tbsp Soy Sauce", -// "2 Tsp Sesame Oil", -// "0.5 Tsp Garlic, Minced" -// ), -// instructions = listOf( -// "HEADER-Prepare Skewers", -// "Immerse wooden skewers in water for 30 minutes.", -// "Place Chicken pieces [900 g] in a bowl. Add Rice Wine [2 Tbsp] and Salt. Mix well. Set aside until skewers are ready.", -// "Remove skewers from water and wipe dry. Thread Chicken and Green Onion [290 g] pieces onto skewers, alternating. Pack tightly.", -// -// "HEADER-Make Gochujang Sauce", -// "Combine Sriracha Ketchup [0.25 cup], Gochujang [2 Tbsp], Honey [2 Tbsp], Brown Sugar [2 Tbsp], Soy Sauce [1 Tbsp], Sesame Oil [2 Tsp], and Garlic [0.5 Tsp] in a bowl. Mix well.", -// -// "HEADER-Cook Skewers", -// "Prep a grill. Place skewers and cook over medium-high heat. After 3 minutes, turn skewers and brush with Gochujang Sauce.", -// "After 2 minutes, reduce heat to medium, turn skewers, and brush with sauce again. Reduce heat to low.", -// "Continue turning and brushing skewers until Chicken is cooked through and charred to your liking. Serve immediately." -// ), -// tags = mapOf( -// "Korean" to TagType.CUISINE, -// "Appetizer" to TagType.COURSE, -// "Entree" to TagType.COURSE, -// "Grilled" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.dakkochi, -// ttt = TTT.TESTED, -// ) +val koreanList = listOf( + Recipe( + title = "Oi Muchim | Spicy Cucumber Salad", + description = "Cucumbers tossed in Vinegar and Chili Spices.", + ingredients = listOf( + + "HEADER-Brine", + "1 Cucumbers", + "1 Tsp Salt", + + "HEADER-Season", + "1 Tbsp Gochugaru", + "1 Tbsp Scallions, chopped", + "1 Tsp Garlic, minced", + "1 Tsp Vinegar", + "0.5 Tsp Sugar", + "1 Tsp Sesame Seeds", + "1 Tsp Sesame Oil", + ), + instructions = listOf( + "Thinly slice the Cucumber. Sprinkle with Salt [1 Tsp] and rest for 20 minutes.", + "Drain liquid from Cucumbers, then toss in remaining ingredients.", + ), + tags = mapOf( + "Korean" to TagType.CUISINE, + "Appetizer" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Vegan" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Tossed" to TagType.TECHNIQUE + ), + ttt = TTT.TRUE, + image = Res.drawable.oi_muchim, + cookTime = Duration.ZERO, + prepTime = Duration.parse("30m"), + servings = "Makes about 3 Servings", + ), + + Recipe( + title = "Korean Stir Fry Sauce", + description = "Sweet and Spicy Korean Stir Fry Sauce.", + ingredients = listOf( + "1.5 Tbsp Gochujang", + "2 Tsp Gochugaru", + "1 Tbsp Garlic, minced", + "1 Tsp Ginger, grated", + "2 Tsp Honey", + "1 Tbsp Soy", + "1 Tbsp Mirin", + "1.5 Tsp Brown Sugar", + "Juice of 1 Lime", + ), + instructions = listOf( + "Combine ingredients", + ), + tags = mapOf( + "Korean" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Mixed" to TagType.TECHNIQUE, + "Sauce" to TagType.TECHNIQUE, + "Condiment" to TagType.COURSE + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TESTED, + cookTime = Duration.ZERO, + prepTime = Duration.parse("10m") + ), + + Recipe( + title = "Bulgolgi", + description = "Delicious Savory and Spicy (like all Korean food) Korean barbecue", + ingredients = listOf( + "2 Scallion", + "1 Large Onion", + "1 lb Protein of choice", + "3 Tbsp Gochujang", + "1 tsp Gochugaru", + "2 Tbsp Soy", + "2 Tbsp Mirin", + "1.5 Tbsp Sugar", + "1 Tbsp Sesame Oil", + "1 Tbsp Garlic, minced", + "1 Tbsp Ginger, grated", + ".25 Tsp Black Pepper" + ), + instructions = listOf( + "Mix all ingredients except Scallions together. Marinate 1h, up to overnight", + "Stir Fry until onions are done, protein is finished cooking, etc...", + "Garnish with Scallions and serve" + ), + tags = mapOf( + "Korean" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Stir Fried" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TRUE, + cookTime = Duration.parse("30m"), + prepTime = Duration.parse("8h") + ), + + Recipe( + title = "Buldak | Fire Chicken", + description = "Spicy Korean Barbecued Chicken", + ingredients = listOf( + + "HEADER-Barbecue", + "1 lb Protein of Choice (Originally Chicken)", + "2 Tbsp Soy", + "1 Tbsp Sugar", + "1 Tbsp Honey", + "2 Tbsp Rice Wine", + "Black Pepper", + "Sesame Seeds", + "1 Scallion", + + "HEADER-Fire Sauce", + "3 Tbsp Gochugaru", + "2 Jalapenos", + ".5 Cups Korean Pear", + ".25 White Onions", + "3 Tbsp Garlic, minced", + "2 Tbsp Soy Sauce", + "1 Tsp Spicy Yellow Mustard", + "1 Tbsp Sesame Oil", + "1 Tbsp Honey", + ), + instructions = listOf( + "Cut the Protein into Bite-sized pieces.", + "In a bowl, mix Soy [2 Tbsp], Sugar [1 Tbsp], Honey [1 Tbsp], Rice Wine [2 Tbsp], and Black Pepper. Toss the Protein in this mixture; marinate for 30m.", + "Puree all the Fire Sauce ingredients together in a blender. Set Aside.", + "Heat a wok over medium heat, cooking Protein to just underdone in batches as needed.", + "Pull the Protein, leaving as much of everything else in the wok as you can. Toss in the Fire Sauce and return all to the wok.", + "Cook another 3-4 minutes until all are warmed through." + ), + tags = mapOf( + "Korean" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Barbecue" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Stir Fried" to TagType.TECHNIQUE + ), + prepTime = Duration.parse("40m"), + cookTime = Duration.parse("15m"), + image = Res.drawable.Buldak, + ttt = TTT.TESTED, + servings = "Serves 2-3", + ), + + Recipe( + title = "Dakkochi | Korean Chicken Skewers", + description = "Sweet, spicy, and savory Korean Chicken skewers with Green Onions, grilled and basted with a Gochujang sauce.", + prepTime = Duration.parse("45m"), // 30 mins soak + 15 mins prep + cookTime = Duration.parse("15m"), + servings = "Serves 6", + ingredients = listOf( + "900 g Chicken Breast, bite sized", + "290 g Green Onion, long slices", + "2 Tbsp Rice Wine", + "Fine Sea Salt", + "Cooking Oil Spray", + + "HEADER-Spicy Gochujang Sauce", + "0.25 Cups Sriracha Ketchup", + "2 Tbsp Gochujang", + "2 Tbsp Honey", + "2 Tbsp Dark Brown Sugar", + "1 Tbsp Soy Sauce", + "2 Tsp Sesame Oil", + "0.5 Tsp Garlic, Minced" + ), + instructions = listOf( + "HEADER-Prepare Skewers", + "Immerse wooden skewers in water for 30 minutes.", + "Place Chicken pieces [900 g] in a bowl. Add Rice Wine [2 Tbsp] and Salt. Mix well. Set aside until skewers are ready.", + "Remove skewers from water and wipe dry. Thread Chicken and Green Onion [290 g] pieces onto skewers, alternating. Pack tightly.", + + "HEADER-Make Gochujang Sauce", + "Combine Sriracha Ketchup [0.25 cup], Gochujang [2 Tbsp], Honey [2 Tbsp], Brown Sugar [2 Tbsp], Soy Sauce [1 Tbsp], Sesame Oil [2 Tsp], and Garlic [0.5 Tsp] in a bowl. Mix well.", + + "HEADER-Cook Skewers", + "Prep a grill. Place skewers and cook over medium-high heat. After 3 minutes, turn skewers and brush with Gochujang Sauce.", + "After 2 minutes, reduce heat to medium, turn skewers, and brush with sauce again. Reduce heat to low.", + "Continue turning and brushing skewers until Chicken is cooked through and charred to your liking. Serve immediately." + ), + tags = mapOf( + "Korean" to TagType.CUISINE, + "Appetizer" to TagType.COURSE, + "Entree" to TagType.COURSE, + "Grilled" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.dakkochi, + ttt = TTT.TESTED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/LaoData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/LaoData.kt index 96704e9..9b38972 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/LaoData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/LaoData.kt @@ -7,67 +7,67 @@ import com.menagerie.bakers.model.TTT import com.menagerie.bakers.model.TagType import kotlin.time.Duration -val laoList = listOf( -// Recipe( -// title = "Gai Yang", -// description = "Spicy Grilled Lao Chicken.", -// prepTime = Duration.parse("2h 20m"), -// cookTime = Duration.parse("40m"), -// servings = "Serves 4", -// ingredients = listOf( -// "2 Chicken Breast", -// "2 Chicken Legs (thigh & drumstick combo)", -// -// "HEADER-Marinade", -// "1.5 Tsp White Peppercorns", -// "2 Tsp Coriander Seeds, Toasted", -// "1 Stalk Lemongrass, bottom half only, thinly sliced", -// "5 Cloves Garlic", -// "3 Tbsp Soy Sauce", -// "3 Tbsp Fish Sauce", -// "1 Tbsp Black Soy Sauce", -// "1 Tbsp Sugar", -// "0.5 Cups Water", -// "2 Tbsp Vegetable Oil", -// -// "HEADER-Dipping Sauce - Nam Jim Jeaw", -// "2 Tbsp Thai Tamarind Paste", -// "1 Tbsp Palm Sugar, Finely Chopped", -// "1 Tbsp Fish Sauce", -// "1 Tbsp Lime Juice", -// "Chili Flakes, to taste", -// "1 Tbsp Shallots, Finely Chopped", -// "1 Tbsp Green Onion, Chopped", -// "3 sprigs Cilantro, Chopped", -// "1 Tbsp Toasted Rice Powder" -// ), -// listOf( -// "HEADER-Marinade", -// "Grind White Peppercorns [1.5 Tsp] and Coriander Seeds [2 Tsp] into a powder. Add Lemongrass [1 stalk] and Garlic [5 cloves] and pound into a paste.", -// "Transfer to a bowl. Add Soy Sauce [3 Tbsp], Fish Sauce [3 Tbsp], Black Soy Sauce [1 Tbsp], Sugar [1 Tbsp], Water [0.5 Cup], and Vegetable Oil [2 Tbsp]. Stir to dissolve Sugar.", -// "Split Chicken Breast [1 whole] into halves, separate Chicken Legs [2] into thighs and drumsticks, and trim excess thigh skin.", -// "Place Chicken in a bag or dish, pour Marinade over, and ensure all pieces are coated. Marinate for 2 hours or overnight, flipping halfway.", -// -// "HEADER-Dipping Sauce - Nam Jim Jeaw", -// "Toast raw rice in a dry skillet until dark brown. Cool, then grind into Toasted Rice Powder [1 Tbsp].", -// "Combine Thai Tamarind Paste [2 Tbsp], Fish Sauce [1 Tbsp], Lime Juice [1 Tbsp], and Palm Sugar [1 Tbsp]. Stir until Sugar dissolves.", -// "Add Chili Flakes and Shallots [1 Tbsp]. Just before serving, stir in Green Onions [1 Tbsp], Cilantro [3 sprigs], and Toasted Rice Powder [1 Tbsp].", -// -// "HEADER-Grilling", -// "Bring Chicken to room temperature 45 minutes before cooking. Preheat grill to medium.", -// "Place Chicken skin-side up on grill (use cooler spots to prevent burning).", -// "Reduce heat to low-medium. Cook with lid closed, flipping every 5 minutes, 18-30 minutes total.", -// ), -// tags = mapOf( -// "Laotian" to TagType.CUISINE, -// "Grilled" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Entree" to TagType.COURSE -// ), -// image = Res.drawable.gai_yang, -// ttt = TTT.TRIED, -// ) +val laoList = listOf( + Recipe( + title = "Gai Yang", + description = "Spicy Grilled Lao Chicken.", + prepTime = Duration.parse("2h 20m"), + cookTime = Duration.parse("40m"), + servings = "Serves 4", + ingredients = listOf( + "2 Chicken Breast", + "2 Chicken Legs (thigh & drumstick combo)", + + "HEADER-Marinade", + "1.5 Tsp White Peppercorns", + "2 Tsp Coriander Seeds, Toasted", + "1 Stalk Lemongrass, bottom half only, thinly sliced", + "5 Cloves Garlic", + "3 Tbsp Soy Sauce", + "3 Tbsp Fish Sauce", + "1 Tbsp Black Soy Sauce", + "1 Tbsp Sugar", + "0.5 Cups Water", + "2 Tbsp Vegetable Oil", + + "HEADER-Dipping Sauce - Nam Jim Jeaw", + "2 Tbsp Thai Tamarind Paste", + "1 Tbsp Palm Sugar, Finely Chopped", + "1 Tbsp Fish Sauce", + "1 Tbsp Lime Juice", + "Chili Flakes, to taste", + "1 Tbsp Shallots, Finely Chopped", + "1 Tbsp Green Onion, Chopped", + "3 sprigs Cilantro, Chopped", + "1 Tbsp Toasted Rice Powder" + ), + listOf( + "HEADER-Marinade", + "Grind White Peppercorns [1.5 Tsp] and Coriander Seeds [2 Tsp] into a powder. Add Lemongrass [1 stalk] and Garlic [5 cloves] and pound into a paste.", + "Transfer to a bowl. Add Soy Sauce [3 Tbsp], Fish Sauce [3 Tbsp], Black Soy Sauce [1 Tbsp], Sugar [1 Tbsp], Water [0.5 Cup], and Vegetable Oil [2 Tbsp]. Stir to dissolve Sugar.", + "Split Chicken Breast [1 whole] into halves, separate Chicken Legs [2] into thighs and drumsticks, and trim excess thigh skin.", + "Place Chicken in a bag or dish, pour Marinade over, and ensure all pieces are coated. Marinate for 2 hours or overnight, flipping halfway.", + + "HEADER-Dipping Sauce - Nam Jim Jeaw", + "Toast raw rice in a dry skillet until dark brown. Cool, then grind into Toasted Rice Powder [1 Tbsp].", + "Combine Thai Tamarind Paste [2 Tbsp], Fish Sauce [1 Tbsp], Lime Juice [1 Tbsp], and Palm Sugar [1 Tbsp]. Stir until Sugar dissolves.", + "Add Chili Flakes and Shallots [1 Tbsp]. Just before serving, stir in Green Onions [1 Tbsp], Cilantro [3 sprigs], and Toasted Rice Powder [1 Tbsp].", + + "HEADER-Grilling", + "Bring Chicken to room temperature 45 minutes before cooking. Preheat grill to medium.", + "Place Chicken skin-side up on grill (use cooler spots to prevent burning).", + "Reduce heat to low-medium. Cook with lid closed, flipping every 5 minutes, 18-30 minutes total.", + ), + tags = mapOf( + "Laotian" to TagType.CUISINE, + "Grilled" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Entree" to TagType.COURSE + ), + image = Res.drawable.gai_yang, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/SEAData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/SEAData.kt index a3c7c86..d2f0928 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/SEAData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/SEAData.kt @@ -10,228 +10,228 @@ import bakersmenagerie.composeapp.generated.resources.satay import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val seaList = listOf( -// Recipe( -// title = "Opor Ayam", -// description = "Chicken with carmelised Onion in a rich Coconut gravy.", -// prepTime = Duration.parse("8h"), -// cookTime = Duration.parse("40m"), -// servings = "Serves 4", -// ingredients = listOf( -// -// "HEADER-Marinade", -// "1.5 kg Protein of Choice (Originally Chicken)", -// "2 Cloves Garlic", -// "8 Shallots", -// "1 cm piece Turmeric Root", -// ".5 Tsp Black Pepper", -// "2 Tsp Coriander", -// "4 Candlenuts", -// ".5 Tsp Fennel", -// ".5 Tsp Cumin", -// "1.5 cm piece Ginger Root", -// "3 cm piece Galangal", -// -// "HEADER-Gravy", -// "1 Stalk Lemon Grass", -// "1 Cinnamon Stick", -// "1 Star Anise", -// "2 Daun Salam [Bay Leaves]", -// "100 ml Thick Coconut Milk", -// "300 ml Thin Coconut Milk", -// "1 Tbsp Tamarind Juice", -// "3 Lime Leaves", -// -// "HEADER-Finishing", -// "3 Shallots", -// "Salt", -// "1 Tsp Brown Sugar", -// ), -// instructions = listOf( -// -// "HEADER-Marinade", -// "Grind all of the Marinade ingredients with [1 Tbsp] of oil into a paste.", -// "Marinate Protein for several hours, up to overnight.", -// -// "HEADER-Curry", -// "Fry Shallots [3] in a wok until brown and crispy. Drain from Oil.", -// "Add Protein to Wok and Fry until Firm.", -// "Add the Lemon Grass [1 Stalk], Cinnamon Stick [1 Stick], Star Anise [1], Daun Salam [2], and Thin Coconut Milk [100 ml] and Simmer for 15-20 Minutes", -// "Add Tamarind Juice [1 Tbsp] and Thick Coconut Milk [300 ml]. Cook another 10-15 minutes. Halfway through, add Salt, Brown Sugar [1 Tsp], and Lime Leaves [3]", -// "Serve Garnished with Crispy Shallots", -// ), -// tags = mapOf( -// "Indonesian" to TagType.CUISINE, -// "SEA" to TagType.CUISINE, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Curry" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Simmered" to TagType.TECHNIQUE -// ), -// image = Res.drawable.opor_ayam, -// ttt = TTT.TESTED, -// ), -// -// Recipe( -// title = "Ayam Kecap", -// description = "Indonesian Sweet Soy Chicken", -// ingredients = listOf( -// "800g Protein of Choice (Originally Chicken)", -// "3 Tbsp Tamarind juice", -// "1 Tsp Salt (for marinade)", -// "2 medium Onions, Sliced", -// "2 Cloves Garlic, finely Sliced", -// "2 Red or green chillies, Sliced", -// "0.5 Tsp Coarse black pepper", -// "0.33 Cup Kecap Manis", -// "Cooking Oil" -// ), -// instructions = listOf( -// "Marinate the Protein with Tamarind juice [3 tbsp] and Salt [1 tsp]. if using, pierce Meat with a skewer or fork. Set aside for 30 minutes.", -// "Heat oil in a wok or frying pan. Deep-fry or steam-fry the Protein until cooked.", -// "For steam-frying, Heat [2 tbsp] oil and fry Protein until opaque. Cover and steam-cook until done (15 minutes). Set aside.", -// "Fry Onions [2 medium] in oil [4-5 tbsp] until light golden. Add Garlic [2 cloves] and chillies [2]. Fry for 3 minutes.", -// "Add Kecap Manis [0.33 cup], black pepper [0.5 tsp], and Salt [1 tsp]. Cook for 3-5 minutes until sauce bubbles.", -// "Add fried Protein. Stir until coated with sauce. Simmer for 3 minutes. Turn off heat." -// ), -// prepTime = Duration.parse("30m"), -// cookTime = Duration.parse("30m"), -// tags = mapOf( -// "Indonesian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Sweet" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Stir Fried" to TagType.TECHNIQUE, -// "Sauce" to TagType.TECHNIQUE, -// "Adaptable" to TagType.PROTEIN, -// "Garlic" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Simmered" to TagType.TECHNIQUE, -// "Fried" to TagType.TECHNIQUE -// ), -// image = Res.drawable.ayam_kecap, -// servings = "Serves 4", -// ttt = TTT.TESTED, -// linkedRecipes = listOf( -// kecapManis, //Kecap Manis -// ) -// ), -// Recipe( -// title = "Chicken Satay", -// description = "Indonesian grilled Chicken skewers marinated in Coconut Milk and Spices, served with a creamy Peanut Sauce.", -// prepTime = Duration.parse("8h 15m"), // 2 hours marinade + 15 min prep -// cookTime = Duration.parse("15m"), -// servings = "Serves 6-8", -// ingredients = listOf( -// "HEADER-Chicken Satay", -// "0.25 Cups Coconut Milk", -// "2 Tbsp Soy Sauce", -// "2.5 Tsp Yellow Curry Powder", -// "1.5 Tsp Turmeric", -// "3 Cloves Garlic, Minced", -// "1 Tbsp Ginger, Grated", -// "1 Tbsp Brown Sugar", -// "1 Tbsp Fish Sauce", -// "2 lbs boneless, skinless Chicken Thighs, cut into 1-inch chunks", -// "1 Tbsp Canola Oil", -// "Salt", -// -// "HEADER-Peanut Sauce", -// "3 Tbsp Creamy Peanut Butter", -// "1 Tbsp Kecap Manis", -// "4 Tbsp Lime Juice", -// "3 Tsp Brown Sugar", -// "2.5 Tbsp Chili Garlic Sauce", -// "1 Tsp freshly grated Ginger", -// "2-3 Tbsp Water (for consistency)" -// ), -// instructions = listOf( -// "HEADER-Peanut Sauce", -// "Whisk together Peanut Butter [3 Tbsp], Kecap Manis [1 Tbsp], Lime Juice [4 Tbsp], Brown Sugar [3 Tsp], Chili Garlic Sauce [2.5 Tbsp], and Ginger [1 Tsp].", -// "Whisk in Water [2-3 Tbsp] until desired consistency is reached; set aside.", -// -// "HEADER-Chicken Marinade", -// "Combine Coconut Milk [0.25 Cups], Soy Sauce [2 Tbsp], Curry Powder [2.5 Tsp], Turmeric [1.5 Tsp], Garlic [3 Cloves], Ginger [1 Tbsp], Brown Sugar [1 Tbsp], and Fish Sauce [1 Tbsp].", -// "Combine Chicken [2 pounds] and Coconut Milk mixture; marinate overnight, turning occasionally.", -// -// "HEADER-Cooking", -// "Drain the Chicken from the Marinade, discarding the Marinade.", -// "Preheat grill to medium-high heat. Thread Chicken onto skewers. Brush with Canola Oil [1 Tbsp]; season with Salt and Pepper, to taste.", -// "Add skewers to grill, and cook, turning occasionally, until the Chicken is completely cooked through, reaching an internal temperature of 165 degrees F, about 12-15 minutes. [alternatively, bake on the skewer, then broil, or just broil].", -// -// "HEADER-Serving", -// "Serve immediately with Peanut Sauce drizzled on top." -// ), -// tags = mapOf( -// "Indonesian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Grilled" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Skewered" to TagType.TECHNIQUE, -// "Garlic" to TagType.FLAVOUR, -// "Ginger" to TagType.FLAVOUR, -// "Sauce" to TagType.TECHNIQUE, -// "Condiment" to TagType.COURSE, -// ), -// image = Res.drawable.satay, -// ttt = TTT.TRUE, -// linkedRecipes = listOf( -// kecapManis, //Kecap Manis -// ), -// ), -// -// Recipe( -// title = "Chicken Inasal", -// description = "Grilled Filipino Chicken marinated in Lemongrass, Vinegar, and Spices, basted with Annatto Oil.", -// prepTime = Duration.parse("3h"), // Assuming max marinade time -// cookTime = Duration.parse("20m"), // Approximate grilling time -// servings = "Serves 4", -// ingredients = listOf( -// "1 lbs Chicken, cut into serving pieces", -// "1 Tbsp Ginger, minced", -// "1 Tbsp Garlic, minced", -// "0.33 Cups Lemongrass, chopped", -// "0.5 Cups Coconut Vinegar", -// "0.25 Cups Lemon Juice", -// "0.5 Tbsp Salt", -// "0.125 Cups Brown Sugar", -// "0.5 Cups Lemon Soda", -// "0.25 Tbsp Ground Black Pepper", -// -// "HEADER-Basting Sauce", -// "1.5 Tbsp Annatto Oil", -// "0.25 Cups Margarine, softened", -// "0.125 Tsp Salt", -// "0.5 Tsp Lemon Juice" -// ), -// instructions = listOf( -// "Combine Chicken [1 lbs], Lemongrass [0.33 Cups], Salt [0.5 Tbsp], Ground Black Pepper [0.25 Tbsp], Ginger [1 Tbsp], Garlic [1 Tbsp], Brown Sugar [0.125 Cups], Coconut Vinegar [0.5 Cups], Lemon Soda [0.5 Cups], and Lemon Juice [0.25 Cups].", -// "Stir or shake the mixture until every ingredient is well incorporated. Marinade for 1 to 3 hours.", -// "In a bowl, combine Margarine [0.25 Cups], Annatto Oil [1.5 Tbsp], Salt [0.125 Tsp], and Lemon Juice [0.5 Tsp] then stir. Set aside.", -// "Grill the Chicken while basting generous amount of the Margarine mixture.", -// "Transfer the grilled Chicken to a serving plate.", -// "Serve with Sinamak. [Recipe included]" -// ), -// tags = mapOf( -// "Filipino" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Grilled" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.inasal, -// ttt = TTT.TESTED, -// linkedRecipes = listOf(sinamak) -//) +val seaList = listOf( + Recipe( + title = "Opor Ayam", + description = "Chicken with carmelised Onion in a rich Coconut gravy.", + prepTime = Duration.parse("8h"), + cookTime = Duration.parse("40m"), + servings = "Serves 4", + ingredients = listOf( + + "HEADER-Marinade", + "1.5 kg Protein of Choice (Originally Chicken)", + "2 Cloves Garlic", + "8 Shallots", + "1 cm piece Turmeric Root", + ".5 Tsp Black Pepper", + "2 Tsp Coriander", + "4 Candlenuts", + ".5 Tsp Fennel", + ".5 Tsp Cumin", + "1.5 cm piece Ginger Root", + "3 cm piece Galangal", + + "HEADER-Gravy", + "1 Stalk Lemon Grass", + "1 Cinnamon Stick", + "1 Star Anise", + "2 Daun Salam [Bay Leaves]", + "100 ml Thick Coconut Milk", + "300 ml Thin Coconut Milk", + "1 Tbsp Tamarind Juice", + "3 Lime Leaves", + + "HEADER-Finishing", + "3 Shallots", + "Salt", + "1 Tsp Brown Sugar", + ), + instructions = listOf( + + "HEADER-Marinade", + "Grind all of the Marinade ingredients with [1 Tbsp] of oil into a paste.", + "Marinate Protein for several hours, up to overnight.", + + "HEADER-Curry", + "Fry Shallots [3] in a wok until brown and crispy. Drain from Oil.", + "Add Protein to Wok and Fry until Firm.", + "Add the Lemon Grass [1 Stalk], Cinnamon Stick [1 Stick], Star Anise [1], Daun Salam [2], and Thin Coconut Milk [100 ml] and Simmer for 15-20 Minutes", + "Add Tamarind Juice [1 Tbsp] and Thick Coconut Milk [300 ml]. Cook another 10-15 minutes. Halfway through, add Salt, Brown Sugar [1 Tsp], and Lime Leaves [3]", + "Serve Garnished with Crispy Shallots", + ), + tags = mapOf( + "Indonesian" to TagType.CUISINE, + "SEA" to TagType.CUISINE, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Curry" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Simmered" to TagType.TECHNIQUE + ), + image = Res.drawable.opor_ayam, + ttt = TTT.TESTED, + ), + + Recipe( + title = "Ayam Kecap", + description = "Indonesian Sweet Soy Chicken", + ingredients = listOf( + "800g Protein of Choice (Originally Chicken)", + "3 Tbsp Tamarind juice", + "1 Tsp Salt (for marinade)", + "2 medium Onions, Sliced", + "2 Cloves Garlic, finely Sliced", + "2 Red or green chillies, Sliced", + "0.5 Tsp Coarse black pepper", + "0.33 Cup Kecap Manis", + "Cooking Oil" + ), + instructions = listOf( + "Marinate the Protein with Tamarind juice [3 tbsp] and Salt [1 tsp]. if using, pierce Meat with a skewer or fork. Set aside for 30 minutes.", + "Heat oil in a wok or frying pan. Deep-fry or steam-fry the Protein until cooked.", + "For steam-frying, Heat [2 tbsp] oil and fry Protein until opaque. Cover and steam-cook until done (15 minutes). Set aside.", + "Fry Onions [2 medium] in oil [4-5 tbsp] until light golden. Add Garlic [2 cloves] and chillies [2]. Fry for 3 minutes.", + "Add Kecap Manis [0.33 cup], black pepper [0.5 tsp], and Salt [1 tsp]. Cook for 3-5 minutes until sauce bubbles.", + "Add fried Protein. Stir until coated with sauce. Simmer for 3 minutes. Turn off heat." + ), + prepTime = Duration.parse("30m"), + cookTime = Duration.parse("30m"), + tags = mapOf( + "Indonesian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Sweet" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Stir Fried" to TagType.TECHNIQUE, + "Sauce" to TagType.TECHNIQUE, + "Adaptable" to TagType.PROTEIN, + "Garlic" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Simmered" to TagType.TECHNIQUE, + "Fried" to TagType.TECHNIQUE + ), + image = Res.drawable.ayam_kecap, + servings = "Serves 4", + ttt = TTT.TESTED, + linkedRecipes = listOf( + kecapManis, //Kecap Manis + ) + ), + Recipe( + title = "Chicken Satay", + description = "Indonesian grilled Chicken skewers marinated in Coconut Milk and Spices, served with a creamy Peanut Sauce.", + prepTime = Duration.parse("8h 15m"), // 2 hours marinade + 15 min prep + cookTime = Duration.parse("15m"), + servings = "Serves 6-8", + ingredients = listOf( + "HEADER-Chicken Satay", + "0.25 Cups Coconut Milk", + "2 Tbsp Soy Sauce", + "2.5 Tsp Yellow Curry Powder", + "1.5 Tsp Turmeric", + "3 Cloves Garlic, Minced", + "1 Tbsp Ginger, Grated", + "1 Tbsp Brown Sugar", + "1 Tbsp Fish Sauce", + "2 lbs boneless, skinless Chicken Thighs, cut into 1-inch chunks", + "1 Tbsp Canola Oil", + "Salt", + + "HEADER-Peanut Sauce", + "3 Tbsp Creamy Peanut Butter", + "1 Tbsp Kecap Manis", + "4 Tbsp Lime Juice", + "3 Tsp Brown Sugar", + "2.5 Tbsp Chili Garlic Sauce", + "1 Tsp freshly grated Ginger", + "2-3 Tbsp Water (for consistency)" + ), + instructions = listOf( + "HEADER-Peanut Sauce", + "Whisk together Peanut Butter [3 Tbsp], Kecap Manis [1 Tbsp], Lime Juice [4 Tbsp], Brown Sugar [3 Tsp], Chili Garlic Sauce [2.5 Tbsp], and Ginger [1 Tsp].", + "Whisk in Water [2-3 Tbsp] until desired consistency is reached; set aside.", + + "HEADER-Chicken Marinade", + "Combine Coconut Milk [0.25 Cups], Soy Sauce [2 Tbsp], Curry Powder [2.5 Tsp], Turmeric [1.5 Tsp], Garlic [3 Cloves], Ginger [1 Tbsp], Brown Sugar [1 Tbsp], and Fish Sauce [1 Tbsp].", + "Combine Chicken [2 pounds] and Coconut Milk mixture; marinate overnight, turning occasionally.", + + "HEADER-Cooking", + "Drain the Chicken from the Marinade, discarding the Marinade.", + "Preheat grill to medium-high heat. Thread Chicken onto skewers. Brush with Canola Oil [1 Tbsp]; season with Salt and Pepper, to taste.", + "Add skewers to grill, and cook, turning occasionally, until the Chicken is completely cooked through, reaching an internal temperature of 165 degrees F, about 12-15 minutes. [alternatively, bake on the skewer, then broil, or just broil].", + + "HEADER-Serving", + "Serve immediately with Peanut Sauce drizzled on top." + ), + tags = mapOf( + "Indonesian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Grilled" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Skewered" to TagType.TECHNIQUE, + "Garlic" to TagType.FLAVOUR, + "Ginger" to TagType.FLAVOUR, + "Sauce" to TagType.TECHNIQUE, + "Condiment" to TagType.COURSE, + ), + image = Res.drawable.satay, + ttt = TTT.TRUE, + linkedRecipes = listOf( + kecapManis, //Kecap Manis + ), + ), + + Recipe( + title = "Chicken Inasal", + description = "Grilled Filipino Chicken marinated in Lemongrass, Vinegar, and Spices, basted with Annatto Oil.", + prepTime = Duration.parse("3h"), // Assuming max marinade time + cookTime = Duration.parse("20m"), // Approximate grilling time + servings = "Serves 4", + ingredients = listOf( + "1 lbs Chicken, cut into serving pieces", + "1 Tbsp Ginger, minced", + "1 Tbsp Garlic, minced", + "0.33 Cups Lemongrass, chopped", + "0.5 Cups Coconut Vinegar", + "0.25 Cups Lemon Juice", + "0.5 Tbsp Salt", + "0.125 Cups Brown Sugar", + "0.5 Cups Lemon Soda", + "0.25 Tbsp Ground Black Pepper", + + "HEADER-Basting Sauce", + "1.5 Tbsp Annatto Oil", + "0.25 Cups Margarine, softened", + "0.125 Tsp Salt", + "0.5 Tsp Lemon Juice" + ), + instructions = listOf( + "Combine Chicken [1 lbs], Lemongrass [0.33 Cups], Salt [0.5 Tbsp], Ground Black Pepper [0.25 Tbsp], Ginger [1 Tbsp], Garlic [1 Tbsp], Brown Sugar [0.125 Cups], Coconut Vinegar [0.5 Cups], Lemon Soda [0.5 Cups], and Lemon Juice [0.25 Cups].", + "Stir or shake the mixture until every ingredient is well incorporated. Marinade for 1 to 3 hours.", + "In a bowl, combine Margarine [0.25 Cups], Annatto Oil [1.5 Tbsp], Salt [0.125 Tsp], and Lemon Juice [0.5 Tsp] then stir. Set aside.", + "Grill the Chicken while basting generous amount of the Margarine mixture.", + "Transfer the grilled Chicken to a serving plate.", + "Serve with Sinamak. [Recipe included]" + ), + tags = mapOf( + "Filipino" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Grilled" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.inasal, + ttt = TTT.TESTED, + linkedRecipes = listOf(sinamak) +) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/Sinamak.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/Sinamak.kt index 64201ec..2678861 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/Sinamak.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/asia/Sinamak.kt @@ -7,34 +7,34 @@ import bakersmenagerie.composeapp.generated.resources._10_strawberries import com.menagerie.bakers.model.TTT import kotlin.time.Duration -//val sinamak = Recipe( -// title = "Sinamak", -// description = "A spicy Filipino condiment made with Cane Vinegar, Siling Labuyo [Red Chili], Ginger, and other spices. Best served with grilled or fried dishes.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.ZERO, // No cooking involved -// servings = "Makes 1 bottle", -// ingredients = listOf( -// "3.5 Cups Cane Vinegar (best if from Tuba or Palm Wine)", -// "1 Cup Fresh Siling Labuyo [Red Chili]", -// "3 Tbsp Ginger, sliced", -// "3 Tbsp Langkawas, sliced [substitute extra Ginger and Lime Juice if not available]", -// "1 Tbsp Peppercorns", -// "1 Head Garlic" -// ), -// instructions = listOf( -// "Clean and slice the Ginger [3 Tbsp] and Langkawas [3 Tbsp].", -// "Combine Langkawas [3 Tbsp], Ginger [3 Tbsp], Garlic [1 Head], whole Peppercorns [1 Tbsp], and Siling Labuyo Chili [1 Cup] in a long neck bottle (any clean liquor bottle will do).", -// "Pour the Vinegar [3.5 Cups] in the bottle then tightly cover it.", -// "Lightly Shake the bottle and store in room temperature for 2 days to allow the spices to blend with the vinegar, the longer you store it, the spicier it becomes.", -// "Serve as condiment with Soy Sauce or Fish Sauce for your grilled and fried dish." -// ), -// tags = mapOf( -// "Filipino" to TagType.CUISINE, -// "Condiment" to TagType.COURSE, -// "Spicy" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Vegan" to TagType.PROTEIN, -// ), -// image = Res.drawable._10_strawberries, -// ttt = TTT.TRIED -//) \ No newline at end of file +val sinamak = Recipe( + title = "Sinamak", + description = "A spicy Filipino condiment made with Cane Vinegar, Siling Labuyo [Red Chili], Ginger, and other spices. Best served with grilled or fried dishes.", + prepTime = Duration.parse("10m"), + cookTime = Duration.ZERO, // No cooking involved + servings = "Makes 1 bottle", + ingredients = listOf( + "3.5 Cups Cane Vinegar (best if from Tuba or Palm Wine)", + "1 Cup Fresh Siling Labuyo [Red Chili]", + "3 Tbsp Ginger, sliced", + "3 Tbsp Langkawas, sliced [substitute extra Ginger and Lime Juice if not available]", + "1 Tbsp Peppercorns", + "1 Head Garlic" + ), + instructions = listOf( + "Clean and slice the Ginger [3 Tbsp] and Langkawas [3 Tbsp].", + "Combine Langkawas [3 Tbsp], Ginger [3 Tbsp], Garlic [1 Head], whole Peppercorns [1 Tbsp], and Siling Labuyo Chili [1 Cup] in a long neck bottle (any clean liquor bottle will do).", + "Pour the Vinegar [3.5 Cups] in the bottle then tightly cover it.", + "Lightly Shake the bottle and store in room temperature for 2 days to allow the spices to blend with the vinegar, the longer you store it, the spicier it becomes.", + "Serve as condiment with Soy Sauce or Fish Sauce for your grilled and fried dish." + ), + tags = mapOf( + "Filipino" to TagType.CUISINE, + "Condiment" to TagType.COURSE, + "Spicy" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Vegan" to TagType.PROTEIN, + ), + image = Res.drawable._10_strawberries, + ttt = TTT.TRIED +) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/FrenchData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/FrenchData.kt index c23ae72..4faf2c0 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/FrenchData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/FrenchData.kt @@ -7,42 +7,42 @@ import bakersmenagerie.composeapp.generated.resources.cordon_bleu import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val frenchList = listOf( -// Recipe( -// title = "Chicken Cordon Bleu", -// description = "Chicken Wrapped with Ham and Cheese, Breaded, and Baked", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("40m"), -// servings = "4 Large Servings", -// ingredients = listOf( -// "4 Chicken Breasts", -// ".25 Tsp Salt", -// "0.125 Tsp Pepper", -// "6 Slices Swiss Cheese", -// "4 Slices Cooked Ham", -// "0.5 Cups Bread Crumbs", -// ), -// instructions = listOf( -// "Preheat oven to 350F.", -// "Pound Chicken to 1/4 inch. Season with Salt and Pepper.", -// "Place 1 Piece of Swiss and 1 Slice of Ham on each Breast.", -// "Wrap, securing with Toothpicks.", -// "Coat with Breadcrumbs, then place each Wrap onto a baking dish.", -// "Bake for 30-35 minutes, then top each Wrap with 1/2 a slice of Swiss Cheese, then return to the oven for another 5 minutes.", -// "Remove Toothpicks and Serve.", -// -// ), -// tags = mapOf( -// "French" to TagType.CUISINE, -// "Carnivorous" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Wrapped" to TagType.TECHNIQUE, -// "Breaded" to TagType.TECHNIQUE -// ), -// image = Res.drawable.cordon_bleu, -// ttt = TTT.TRIED, -// ) +val frenchList = listOf( + Recipe( + title = "Chicken Cordon Bleu", + description = "Chicken Wrapped with Ham and Cheese, Breaded, and Baked", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("40m"), + servings = "4 Large Servings", + ingredients = listOf( + "4 Chicken Breasts", + ".25 Tsp Salt", + "0.125 Tsp Pepper", + "6 Slices Swiss Cheese", + "4 Slices Cooked Ham", + "0.5 Cups Bread Crumbs", + ), + instructions = listOf( + "Preheat oven to 350F.", + "Pound Chicken to 1/4 inch. Season with Salt and Pepper.", + "Place 1 Piece of Swiss and 1 Slice of Ham on each Breast.", + "Wrap, securing with Toothpicks.", + "Coat with Breadcrumbs, then place each Wrap onto a baking dish.", + "Bake for 30-35 minutes, then top each Wrap with 1/2 a slice of Swiss Cheese, then return to the oven for another 5 minutes.", + "Remove Toothpicks and Serve.", + + ), + tags = mapOf( + "French" to TagType.CUISINE, + "Carnivorous" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Wrapped" to TagType.TECHNIQUE, + "Breaded" to TagType.TECHNIQUE + ), + image = Res.drawable.cordon_bleu, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Georgian.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Georgian.kt index bf50635..f78d37c 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Georgian.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Georgian.kt @@ -7,43 +7,43 @@ import bakersmenagerie.composeapp.generated.resources.shkmeruli import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val georgianList = listOf( -// Recipe( -// title = "Shkmeruli", -// description = "Georgian chicken dish cooked in a creamy garlic sauce, known for its rich and flavorful broth.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("45m"), -// servings = "Serves 5", -// ingredients = listOf( -// "2 lbs Chicken Breast, Legs, and Thighs, skin-on", -// "1 Tbsp Salt", -// "3 Tbsp Ghee", -// "0.25 Cups All-Purpose Flour", -// "0.25 Cups Rice Flour", -// "5 Tbsp Large Garlic Cloves (minced)", -// "1.5 Cups Whole Milk", -// "1 Tsp Khmeli Suneli Spice Blend", -// "Freshly Ground Black Pepper (to taste)" -// ), -// instructions = listOf( -// "Pat dry the Chicken pieces and generously season with Salt [1 Tbsp].", -// "Melt Ghee [2 Tbsp] in a heavy-bottomed pan or deep skillet. Heat the Ghee until shimmering.", -// "Mix the Rice Flour [0.25 Cups] and All-Purpose Flour [0.25 Cups] in a shallow bowl. Dredge the Chicken pieces in Flour and transfer to the hot skillet. Fry on both sides until the skin is golden brown and crispy, about 5 minutes per side. When the first batch is done, remove from the pan and continue with the rest of the Chicken.", -// "When all the pieces are fried, wipe the pan clean and melt the remaining Ghee [1 Tbsp]. Add Garlic [5 Tbsp] and cook, stirring, for 20 seconds.", -// "Pour in the Whole Milk [1.5 cups] and bring to a simmer. Mix in the Khmeli Suneli Spice Blend [1 Tsp]. Lower the heat to medium-low and add the fried Chicken pieces.", -// "Simmer for 25 minutes until the Chicken is tender and cooked through. If needed, season with more Salt and Freshly Ground Black Pepper." -// ), -// tags = mapOf( -// "Georgian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Simmered" to TagType.TECHNIQUE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Garlic" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.shkmeruli, -// ttt = TTT.TRIED, -// ) +val georgianList = listOf( + Recipe( + title = "Shkmeruli", + description = "Georgian chicken dish cooked in a creamy garlic sauce, known for its rich and flavorful broth.", + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("45m"), + servings = "Serves 5", + ingredients = listOf( + "2 lbs Chicken Breast, Legs, and Thighs, skin-on", + "1 Tbsp Salt", + "3 Tbsp Ghee", + "0.25 Cups All-Purpose Flour", + "0.25 Cups Rice Flour", + "5 Tbsp Large Garlic Cloves (minced)", + "1.5 Cups Whole Milk", + "1 Tsp Khmeli Suneli Spice Blend", + "Freshly Ground Black Pepper (to taste)" + ), + instructions = listOf( + "Pat dry the Chicken pieces and generously season with Salt [1 Tbsp].", + "Melt Ghee [2 Tbsp] in a heavy-bottomed pan or deep skillet. Heat the Ghee until shimmering.", + "Mix the Rice Flour [0.25 Cups] and All-Purpose Flour [0.25 Cups] in a shallow bowl. Dredge the Chicken pieces in Flour and transfer to the hot skillet. Fry on both sides until the skin is golden brown and crispy, about 5 minutes per side. When the first batch is done, remove from the pan and continue with the rest of the Chicken.", + "When all the pieces are fried, wipe the pan clean and melt the remaining Ghee [1 Tbsp]. Add Garlic [5 Tbsp] and cook, stirring, for 20 seconds.", + "Pour in the Whole Milk [1.5 cups] and bring to a simmer. Mix in the Khmeli Suneli Spice Blend [1 Tsp]. Lower the heat to medium-low and add the fried Chicken pieces.", + "Simmer for 25 minutes until the Chicken is tender and cooked through. If needed, season with more Salt and Freshly Ground Black Pepper." + ), + tags = mapOf( + "Georgian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Simmered" to TagType.TECHNIQUE, + "Pan Fried" to TagType.TECHNIQUE, + "Garlic" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.shkmeruli, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Greek.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Greek.kt index 55f5de7..81e8a21 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Greek.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Greek.kt @@ -8,88 +8,88 @@ import com.menagerie.bakers.model.TTT import com.menagerie.bakers.model.TagType import kotlin.time.Duration -val greekList = listOf( -// Recipe( -// title = "Perfect Street Gyros", -// description = "Straight from a food truck, these gyros work with anything from falafal, tofu, shwarma, or our own Balsamic Glazed Chicken. Try it with chips on the side, or inside! Perfect for a couple's date.", -// ingredients = listOf( -// -// "HEADER-Gyros", -// "2 Pieces of Pita Bread", -// "12 oz Protein of Choice", -// "3 oz Arugula", -// "1 Plum Tomatoes, sliced", -// "Salt & Pepper to Taste", -// -// "HEADER-Tahini Sauce", -// "2 oz Sour Cream", -// "2 oz Tahini", -// "1 Lemons", -// "1 Tbsp Garlic, Minced", -// -// "HEADER-Pickled Shallots", -// "2 Shallots, sliced", -// "2 Tbsp Vinegar", -// "1 Tsp Sugar", -// ), -// instructions = listOf( -// "Toss Shallots in Vinegar and Sugar, Set Aside", -// "Cook Protein as needed.", -// "Mix Lemon Juice [2 Tbsp], Sour Cream [2 Oz], Tahini [2 Oz], and Garlic [1 Tbsp]. Add up to [1.5 Tbsp] of water as needed for consistency.", -// "Heat Pitas and Assemble" -// ), -// tags = mapOf( -// "Greek" to TagType.CUISINE, -// "Street Food" to TagType.CUISINE, -// "Savory" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Adaptable" to TagType.PROTEIN, -// "Assembled" to TagType.TECHNIQUE, -// "Nutty" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// ), -// servings = "Makes 2 Gyros", -// prepTime = Duration.parse("30m"), -// cookTime = Duration.parse("30m"), -// image = Res.drawable.gyros, -// ttt = TTT.TRUE, -// ), -// -// Recipe( -// title = "Greek Balsamic Glazed Chicken", -// description = "Strips of Chicken Breast grilled with a rich and tangy Balsamic glaze.", -// ingredients = listOf( -// "2 Chicken Breasts", -// "0.25 Cups Olive Oil", -// "0.25 Cups Golden Balsamic", -// "0.125 Cup Garlic-Mustard", -// "1.5 Tbsp Balsamic Glaze", -// "3 Cloves Garlic, Minced", -// "Juice of 1 Lemon", -// "1 Tbsp EACH Tarragon, Rosemary, Thyme, Chopped", -// "2 Tsp Salt", -// "0.5 Tsp Black Pepper" -// ), -// instructions = listOf( -// "Mix all ingredients together. Marinate for 4hs, up to overnight.", -// "Pull Chicken from Marinade and Grill" -// ), -// tags = mapOf( -// "Greek" to TagType.CUISINE, -// "Carnivorous" to TagType.PROTEIN, -// "Grilled" to TagType.TECHNIQUE, -// "Tangy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Garlic" to TagType.FLAVOUR, -// "Herby" to TagType.FLAVOUR, -// "Sweet" to TagType.FLAVOUR -// ), -// servings = "Serves 3 to 4", -// cookTime = Duration.parse("20m"), -// prepTime = Duration.parse("4h"), -// image = Res.drawable.greek_chicken, -// ttt = TTT.TRUE, -// ) +val greekList = listOf( + Recipe( + title = "Perfect Street Gyros", + description = "Straight from a food truck, these gyros work with anything from falafal, tofu, shwarma, or our own Balsamic Glazed Chicken. Try it with chips on the side, or inside! Perfect for a couple's date.", + ingredients = listOf( + + "HEADER-Gyros", + "2 Pieces of Pita Bread", + "12 oz Protein of Choice", + "3 oz Arugula", + "1 Plum Tomatoes, sliced", + "Salt & Pepper to Taste", + + "HEADER-Tahini Sauce", + "2 oz Sour Cream", + "2 oz Tahini", + "1 Lemons", + "1 Tbsp Garlic, Minced", + + "HEADER-Pickled Shallots", + "2 Shallots, sliced", + "2 Tbsp Vinegar", + "1 Tsp Sugar", + ), + instructions = listOf( + "Toss Shallots in Vinegar and Sugar, Set Aside", + "Cook Protein as needed.", + "Mix Lemon Juice [2 Tbsp], Sour Cream [2 Oz], Tahini [2 Oz], and Garlic [1 Tbsp]. Add up to [1.5 Tbsp] of water as needed for consistency.", + "Heat Pitas and Assemble" + ), + tags = mapOf( + "Greek" to TagType.CUISINE, + "Street Food" to TagType.CUISINE, + "Savory" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Adaptable" to TagType.PROTEIN, + "Assembled" to TagType.TECHNIQUE, + "Nutty" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + ), + servings = "Makes 2 Gyros", + prepTime = Duration.parse("30m"), + cookTime = Duration.parse("30m"), + image = Res.drawable.gyros, + ttt = TTT.TRUE, + ), + + Recipe( + title = "Greek Balsamic Glazed Chicken", + description = "Strips of Chicken Breast grilled with a rich and tangy Balsamic glaze.", + ingredients = listOf( + "2 Chicken Breasts", + "0.25 Cups Olive Oil", + "0.25 Cups Golden Balsamic", + "0.125 Cup Garlic-Mustard", + "1.5 Tbsp Balsamic Glaze", + "3 Cloves Garlic, Minced", + "Juice of 1 Lemon", + "1 Tbsp EACH Tarragon, Rosemary, Thyme, Chopped", + "2 Tsp Salt", + "0.5 Tsp Black Pepper" + ), + instructions = listOf( + "Mix all ingredients together. Marinate for 4hs, up to overnight.", + "Pull Chicken from Marinade and Grill" + ), + tags = mapOf( + "Greek" to TagType.CUISINE, + "Carnivorous" to TagType.PROTEIN, + "Grilled" to TagType.TECHNIQUE, + "Tangy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Garlic" to TagType.FLAVOUR, + "Herby" to TagType.FLAVOUR, + "Sweet" to TagType.FLAVOUR + ), + servings = "Serves 3 to 4", + cookTime = Duration.parse("20m"), + prepTime = Duration.parse("4h"), + image = Res.drawable.greek_chicken, + ttt = TTT.TRUE, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Hungarian.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Hungarian.kt index a08b4eb..bb296b5 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Hungarian.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Hungarian.kt @@ -7,49 +7,49 @@ import com.menagerie.bakers.model.TTT import com.menagerie.bakers.model.TagType import kotlin.time.Duration -val hungarianList = listOf( -// Recipe( -// title = "Paprikash", -// description = "A classic Hungarian stew with tender Chicken in a rich Paprika-infused Sour Cream sauce.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("1h 10m"), -// servings = "Serves 4-6", -// ingredients = listOf( -// "2 Tbsp Pork Lard", -// "3 lbs Chicken Pieces (bone-in, skin-on)", -// "2 medium Yellow Onions (very finely chopped)", -// "2 cloves Garlic (finely minced)", -// "2 Roma Tomatoes (seeds removed, very finely diced)", -// "1 Hungarian Bell Pepper (diced, optional)", -// "3.5 Tbsp Hungarian Paprika", -// "2 Cups Chicken Broth", -// "1.5 Tsp Sea Salt", -// "0.5 Tsp Freshly Ground Black Pepper", -// "3 Tbsp All-Purpose Flour", -// "0.75 Cups Full Fat Sour Cream (room temperature)", -// "0.25 Cups Heavy Whipping Cream" -// ), -// instructions = listOf( -// "Heat the Pork Lard [2 Tbsp] in a heavy pot and brown the Chicken Pieces [3 lbs] on all sides. Transfer the Chicken to a plate.", -// "In the same oil, add the Yellow Onions [2 medium] and fry until golden brown. Add the Garlic [2 cloves] and Tomatoes [2 Roma] (and Bell Pepper [1] if using) and fry another 2-3 minutes.", -// "Remove the pot from the heat and stir in the Hungarian Paprika [3.5 Tbsp], Sea Salt [1.5 Tsp], and Black Pepper [0.5 Tsp].", -// "Return the Chicken to the pot and place it back over the heat. Pour in the Chicken Broth [2 cups]. The Chicken should be mostly covered. Bring it to a boil. Cover, reduce the heat to medium-low, and simmer for 40 minutes. Remove the Chicken and transfer to a plate.", -// "In a small bowl, stir the All-Purpose Flour [3 Tbsp] into the Sour Cream [0.75 Cups] and Heavy Whipping Cream [0.25 Cups] mixture to form a smooth paste. Stir the Cream mixture into the sauce, whisking constantly to prevent lumps. Bring it to a simmer for a couple of minutes until the sauce is thickened. Add Sea Salt and Black Pepper to taste.", -// "Return the Chicken to the sauce and simmer to heat through.", -// "Serve the Chicken Paprikash with Hungarian Nokedli." -// ), -// tags = mapOf( -// "Hungarian" to TagType.CUISINE, -// "Eastern European" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Stew" to TagType.COURSE, -// "Simmered" to TagType.TECHNIQUE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.paprikash, -// ttt = TTT.TRIED, -// ) +val hungarianList = listOf( + Recipe( + title = "Paprikash", + description = "A classic Hungarian stew with tender Chicken in a rich Paprika-infused Sour Cream sauce.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("1h 10m"), + servings = "Serves 4-6", + ingredients = listOf( + "2 Tbsp Pork Lard", + "3 lbs Chicken Pieces (bone-in, skin-on)", + "2 medium Yellow Onions (very finely chopped)", + "2 cloves Garlic (finely minced)", + "2 Roma Tomatoes (seeds removed, very finely diced)", + "1 Hungarian Bell Pepper (diced, optional)", + "3.5 Tbsp Hungarian Paprika", + "2 Cups Chicken Broth", + "1.5 Tsp Sea Salt", + "0.5 Tsp Freshly Ground Black Pepper", + "3 Tbsp All-Purpose Flour", + "0.75 Cups Full Fat Sour Cream (room temperature)", + "0.25 Cups Heavy Whipping Cream" + ), + instructions = listOf( + "Heat the Pork Lard [2 Tbsp] in a heavy pot and brown the Chicken Pieces [3 lbs] on all sides. Transfer the Chicken to a plate.", + "In the same oil, add the Yellow Onions [2 medium] and fry until golden brown. Add the Garlic [2 cloves] and Tomatoes [2 Roma] (and Bell Pepper [1] if using) and fry another 2-3 minutes.", + "Remove the pot from the heat and stir in the Hungarian Paprika [3.5 Tbsp], Sea Salt [1.5 Tsp], and Black Pepper [0.5 Tsp].", + "Return the Chicken to the pot and place it back over the heat. Pour in the Chicken Broth [2 cups]. The Chicken should be mostly covered. Bring it to a boil. Cover, reduce the heat to medium-low, and simmer for 40 minutes. Remove the Chicken and transfer to a plate.", + "In a small bowl, stir the All-Purpose Flour [3 Tbsp] into the Sour Cream [0.75 Cups] and Heavy Whipping Cream [0.25 Cups] mixture to form a smooth paste. Stir the Cream mixture into the sauce, whisking constantly to prevent lumps. Bring it to a simmer for a couple of minutes until the sauce is thickened. Add Sea Salt and Black Pepper to taste.", + "Return the Chicken to the sauce and simmer to heat through.", + "Serve the Chicken Paprikash with Hungarian Nokedli." + ), + tags = mapOf( + "Hungarian" to TagType.CUISINE, + "Eastern European" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Stew" to TagType.COURSE, + "Simmered" to TagType.TECHNIQUE, + "Pan Fried" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.paprikash, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/IrishData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/IrishData.kt index c389766..c3451ef 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/IrishData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/IrishData.kt @@ -7,62 +7,62 @@ import bakersmenagerie.composeapp.generated.resources.spiceBag import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val irishList = listOf( -// Recipe( -// title = "Spice Bag", -// description = "Irish-Chinese Takeaway Dish of Chicken, Chips, and Veg in a bag with Salt and Chili spice.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.parse("15m"), -// servings = "Makes 10 Bags", -// ingredients = listOf( -// -// "HEADER-Chicken", -// "2 Kg Chicken Pieces", -// "4 Star Anise", -// "Juice of 2 Lemon", -// "5 Beaten Eggs", -// "250g Potato Flour", -// "Oil for Frying", -// "Salt", -// -// "HEADER-Chips", -// "1kg Potatoes, Skin On, Cut into strips", -// -// "HEADER-Veg", -// "2 Red Peppers", -// "2 Green Peppers", -// "2 Shallots", -// "Salt", -// -// "HEADER-Spice Mix (Make Ahead)", -// "2 Tbsp Course Salt", -// "1 Tsp White Pepper", -// "1 Tsp Five Spice Powder", -// ".5 Tsp Chilli Powder", -// "4 Red Chillies, Fine Diced", -// ), -// instructions = listOf( -// "Mix Egg Wash [5 Eggs], with Lemon Juice [1 Lemon], and ground Star Anise [4]. Coat the Chicken in this wash.", -// "Toss the Chicken in the Potato Flour [250g], shaking off the excess.", -// "Deep Fry Chicken at 360F for about 6 minutes", -// "Deep Fry The Chips.", -// "Fry Veg in a Wok. Add half the Spice Mix and toss to coat.", -// "Throw Everything in the Bag, tossing with the other half of the Spice Mix.", -// ), -// tags = mapOf( -// "Irish" to TagType.CUISINE, -// "Chinese" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Salty" to TagType.FLAVOUR, -// "Deep Fried" to TagType.TECHNIQUE, -// "Stir Fried" to TagType.TECHNIQUE, -// "Carnivorous" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Garlic" to TagType.FLAVOUR, -// "Street Food" to TagType.CUISINE -// ), -// image = Res.drawable.spiceBag, -// ttt = TTT.TRIED, -// ) +val irishList = listOf( + Recipe( + title = "Spice Bag", + description = "Irish-Chinese Takeaway Dish of Chicken, Chips, and Veg in a bag with Salt and Chili spice.", + prepTime = Duration.parse("15m"), + cookTime = Duration.parse("15m"), + servings = "Makes 10 Bags", + ingredients = listOf( + + "HEADER-Chicken", + "2 Kg Chicken Pieces", + "4 Star Anise", + "Juice of 2 Lemon", + "5 Beaten Eggs", + "250g Potato Flour", + "Oil for Frying", + "Salt", + + "HEADER-Chips", + "1kg Potatoes, Skin On, Cut into strips", + + "HEADER-Veg", + "2 Red Peppers", + "2 Green Peppers", + "2 Shallots", + "Salt", + + "HEADER-Spice Mix (Make Ahead)", + "2 Tbsp Course Salt", + "1 Tsp White Pepper", + "1 Tsp Five Spice Powder", + ".5 Tsp Chilli Powder", + "4 Red Chillies, Fine Diced", + ), + instructions = listOf( + "Mix Egg Wash [5 Eggs], with Lemon Juice [1 Lemon], and ground Star Anise [4]. Coat the Chicken in this wash.", + "Toss the Chicken in the Potato Flour [250g], shaking off the excess.", + "Deep Fry Chicken at 360F for about 6 minutes", + "Deep Fry The Chips.", + "Fry Veg in a Wok. Add half the Spice Mix and toss to coat.", + "Throw Everything in the Bag, tossing with the other half of the Spice Mix.", + ), + tags = mapOf( + "Irish" to TagType.CUISINE, + "Chinese" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Salty" to TagType.FLAVOUR, + "Deep Fried" to TagType.TECHNIQUE, + "Stir Fried" to TagType.TECHNIQUE, + "Carnivorous" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Garlic" to TagType.FLAVOUR, + "Street Food" to TagType.CUISINE + ), + image = Res.drawable.spiceBag, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/ItalianData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/ItalianData.kt index 5c10f84..9a5ed86 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/ItalianData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/ItalianData.kt @@ -11,206 +11,206 @@ import bakersmenagerie.composeapp.generated.resources.chicken_parmesan import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val italianList = listOf( -// Recipe( -// title = "Pesto Sauce", -// description = "Italian Sauce of Fresh Basil, Mozzarella, Garlic, and Spices.", -// prepTime = Duration.parse("15m"), -// cookTime = Duration.ZERO, -// servings = "1 Batch", -// ingredients = listOf( -// "1 Bunch of Fresh Basil", -// "0.5 Cups Mozzarella Cheese, hand shredded", -// "0.25 Cups Garlic, Minced", -// "0.5 Tsp Smoked Paprika", -// "0.25 Tsp Cayenne Powder", -// "Salt to taste", -// "Garlic Olive Oil [as needed for consistency]", -// "2 Tbsp White Wine, Semi-Sweet", -// "2 Tsp of Lemon Juice", -// ), -// instructions = listOf( -// "Shred Basil [1 Bunch] in a blender, slowly adding Garlic Oil until it blends smooth", -// "Add Wine [2 Tbsp] and Mozzarella [0.5 Cups] and blend again.", -// "Add in Garlic [0.25 Cups], Paprika [0.5 Tsp], Cayenne [0.25 Tsp], and Lemon Juice [2 Tbsp], blend, adding more Oil as needed." -// ), -// tags = mapOf( -// "Italian" to TagType.CUISINE, -// "Sauce" to TagType.TECHNIQUE, -// "Blended" to TagType.TECHNIQUE, -// "Vegetarian" to TagType.PROTEIN, -// "Tangy" to TagType.FLAVOUR, -// ), -// image = Res.drawable.Pesto, -// ttt = TTT.TRUE, -// ), -// -// Recipe( -// title = "Chicken Parmesan", -// description = "Chicken Breaded and Pan Fried, slathered in Marinara and Cheese and Baked.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("40m"), -// servings = "Makes 4 Cutlets", -// ingredients = listOf( -// "2 Large Chicken Breasts", -// -// "HEADER-Breading", -// "0.5 Cups Flour", -// "1 Tsp Salt", -// "0.5 Tsp Pepper", -// "2 Eggs, Beaten", -// "0.5 Cups Panko", -// "0.5 Cups Parmesan, grated", -// -// "HEADER-Finishing", -// "2 Tbsp Olive Oil", -// "24 Oz Marinara Sauce", -// "1.5 Cups Shredded Mozzarella Cheese", -// "1 Tbsp Fresh Basil Leaves, Chopped", -// ), -// instructions = listOf( -// "Heat the Oven to 425F", -// "Slice the Chicken Breasts [2] in half lengthwise to make [4] Cutlets", -// "Stir together Flour [0.5 Cups], Salt [1 Tsp], Pepper [0.5 Tsp]. In another bowl, Stir together Panko [0.5 Cups] and Parmesan [0.5 Cups]", -// "Coat Chicken in Flour Mixture, then Beaten Eggs, then Panko-Parm Mixture. Heat Olive Oil [2 Tbsp] in a shallow pan and saute the Chicken 3-4 min" + -// " per side, until Golden Brown", -// "Pour Half the Marinara [12 Oz] into a 9x13 Casserole Dish. Arrange Cutlets in a single layer. Slather each with the rest of the Marinara [12 Oz] then" + -// " cover with Shredded Mozzarella [1.5 Cups]. Bake for 15 minutes, then Garnish with Basil [1 Tbsp] and Serve.", -// ), -// tags = mapOf( -// "Italian" to TagType.CUISINE, -// "Savory" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Entree" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Creamy" to TagType.FLAVOUR -// ), -// image = Res.drawable.chicken_parmesan, -// ttt = TTT.TESTED, -// ), -// -// Recipe( -// title = "Spaghetti all'Assassina | Assassin's Spaghetti", -// description = "Burnt and Spicy Spaghetti in a Rich Tomato Sauce.", -// prepTime = Duration.parse("10m"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 4", -// ingredients = listOf( -// "4 Cups Water", -// "28 oz Tomato Puree", -// "2 Tbsp Tomato Paste", -// "1 Tsp Salt", -// "2 Tbsp Olive Oil", -// "3 Cloves Garlic", -// "1 Tsp Red Pepper Flakes", -// "16 oz Spaghetti", -// ), -// instructions = listOf( -// "Add Water [4 Cups] to a medium saucepan and bring to a boil. Add about 1/3rd of the Tomato Puree [9 oz] and the Tomato Paste [2 Tbsp]. " + -// "Season with Salt [1 Tsp] and reduce heat to low. Keep hot, Set Aside.", -// "In a pan large enough to lay the Spaghetti [16 Oz] in a flat layer, heat Oil [2 Tbsp].", -// "Add Garlic [3 Cloves], Pepper Flakes [1 Tsp], and cook until fragrant, about 30 seconds.", -// "Add the rest of the Tomato Puree [18 oz] and season with Salt.", -// "Add the Pasta [16 oz] and spread out into a flat layer. Add Broth as needed to cover the Pasta.", -// "Cook the Pasta, undisturbed, for about 5 minutes. The Sauce should look pretty dry.", -// "Once the Pasta has burnt on the bottom, flip, scraping the burnt bits and covering with more Broth.", -// "Repeat until all the Broth has been absorbed by the Pasta.", -// ), -// tags = mapOf( -// "Vegan" to TagType.PROTEIN, -// "Italian" to TagType.CUISINE, -// "Spicy" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Entree" to TagType.COURSE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Burnt" to TagType.FLAVOUR, -// ), -// image = Res.drawable.assassins_pasta, -// ttt = TTT.TESTED, -// ), -// Recipe( -// title = "Cacio e Pepe", -// description = "A simple yet flavorful Italian pasta dish with Pecorino Romano Cheese and Black Pepper.", -// prepTime = Duration.parse("5m"), -// cookTime = Duration.parse("20m"), -// servings = "Serves 4", -// ingredients = listOf( -// "8 ounces Spaghetti (may sub Bucatini)", -// "1 Tsp Salt (for pasta water)", -// "3 Tbsp Unsalted Butter", -// "1 Tbsp Extra Virgin Olive Oil", -// "1 Tsp Freshly-Cracked Coarse Black Pepper (about 50 turns)", -// "1.5 cups Finely Freshly-Grated Pecorino Romano (NOT Parmesan)", -// "8 cups Water" -// ), -// instructions = listOf( -// "Add Water [8 cups] to a Dutch oven (or stockpot wide enough to fit Spaghetti). The water will be very shallow because we want it to be very starchy. Cover and bring to a boil. Uncover and stir in Salt [1 Tsp] then add Spaghetti. Cook pasta until barely al dente (usually a few minutes less than package directions), stirring often so the Spaghetti doesn’t stick. See next step to complete while pasta is cooking.", -// "While the pasta is cooking, melt Butter [3 Tbsp] with Olive Oil [1 Tbsp] in a large skillet over medium heat. Add Pepper [1 Tsp], then cook for one minute. Set aside until pasta is done cooking.", -// "Once pasta is al dente, reserve Pasta Water [.75 Cups], then drain pasta in a colander and set aside.", -// "Slowly whisk in [.5 Cups] reserved Pasta Water into the Butter off heat. Let stand 3 minutes.", -// "Gradually whisk Cheese [1.5 cups] into Butter water a little at a time until combined. Turn heat to LOW and whisk constantly until Cheese is completely melted and smooth.", -// "Add half of the Pasta to the skillet and stir to coat. Add remaining Pasta and toss until evenly combined, adding additional pasta water if needed to loosen pasta.", -// "Taste, and season with extra Salt and Pepper if desired. Serve warm." -// ), -// tags = mapOf( -// "Italian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Savory" to TagType.FLAVOUR, -// "Spicy" to TagType.FLAVOUR, -// "Creamy" to TagType.FLAVOUR, -// "Vegetarian" to TagType.PROTEIN, -// "Simmered" to TagType.TECHNIQUE, -// "Tossed" to TagType.TECHNIQUE, -// ), -// image = Res.drawable._10_strawberries, // Replace with your image resource -// ttt = TTT.TRIED -// ), -// Recipe( -// title = "Chicken Cacciatore", -// description = "A hearty Italian stew with bone-in Chicken Thighs, Mushrooms, Onions, and Bell Peppers in a rich Tomato and Wine sauce.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("45m"), -// servings = "Serves 4-6", -// ingredients = listOf( -// "3 lbs Bone-in, Skin-on Chicken Thighs (about 8)", -// "1 Tbsp Olive Oil", -// "Salt", -// "Pepper", -// "1 Large Onion, finely chopped", -// "8 Ounces Fresh Mushrooms, sliced", -// "3 Cloves Garlic, minced", -// "0.5 Tsp Crushed Red Pepper Flakes (optional - more or less to taste)", -// "2 Tbsp All-Purpose Flour", -// "1 Cup Dry White Wine", -// "14.5 Ounce Canned Diced Tomatoes (do not drain)", -// "2 Tbsp Tomato Paste", -// "3 Bay Leaves", -// "1 Small Parmesan Rind", -// "1 Tbsp Fresh Thyme Leaves or 1 Tsp Dried Thyme", -// "1 Tsp Dried Oregano", -// "1 Large Red Bell Pepper, ribs and seeds removed, chopped" -// ), -// instructions = listOf( -// "Heat a large Dutch oven or skillet over medium heat. Add the Olive Oil [1 Tbsp].", -// "Season the Chicken pieces with Salt and Pepper. Add half the Chicken and Cook, skin side down, until crisp and browned.", -// "Turn the pieces over and Cook another 5 minutes. Remove to a plate and continue Browning in small batches until all Chicken is browned. Reserve [1 Tbsp] of the drippings in the pan.", -// "Add the Onions [1 Large], Mushrooms [8 Ounces] and a pinch of Salt to the pan with the reserved drippings. Cook over medium-high heat until the vegetables begin to brown and the moisture evaporates.", -// "Add the Garlic [3 Cloves] and Red Pepper Flakes [0.5 Tsp] to the pan and sauté until fragrant, about 30 seconds. Stir in the Flour [2 Tbsp] and continuing Cooking and stirring for 1 more minute.", -// "Add the Wine [1 Cup], Tomatoes [14.5 Ounce], Tomato Paste [2 Tbsp], Bay Leaves [3], Parmesan Rind [1], Thyme [1 Tbsp or 1 Tsp], Oregano [1 Tsp] and Red Bell Pepper [1 Large].", -// "Remove the skin from the Chicken and discard. Add the skinless Chicken pieces to the pan, pressing them down into the sauce so they are covered. ", -// "Bring to a boil, cover and reduce the heat to low. Simmer until the Chicken is tender, about 40-45 minutes. Halfway through cooking, move the Chicken pieces around and/or turn them over to ensure even cooking.", -// "Remove the Bay Leaves [3] and Parmesan Rind [1] and discard. Check seasoning and add Salt and Pepper if needed. Garnish with fresh chopped Parsley leaves. Serve over hot cooked Spaghetti or Polenta." -// ), -// tags = mapOf( -// "Italian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Stew" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Herby" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// ), -// image = Res.drawable.cacciatore, -// ttt = TTT.TRIED, -// ) +val italianList = listOf( + Recipe( + title = "Pesto Sauce", + description = "Italian Sauce of Fresh Basil, Mozzarella, Garlic, and Spices.", + prepTime = Duration.parse("15m"), + cookTime = Duration.ZERO, + servings = "1 Batch", + ingredients = listOf( + "1 Bunch of Fresh Basil", + "0.5 Cups Mozzarella Cheese, hand shredded", + "0.25 Cups Garlic, Minced", + "0.5 Tsp Smoked Paprika", + "0.25 Tsp Cayenne Powder", + "Salt to taste", + "Garlic Olive Oil [as needed for consistency]", + "2 Tbsp White Wine, Semi-Sweet", + "2 Tsp of Lemon Juice", + ), + instructions = listOf( + "Shred Basil [1 Bunch] in a blender, slowly adding Garlic Oil until it blends smooth", + "Add Wine [2 Tbsp] and Mozzarella [0.5 Cups] and blend again.", + "Add in Garlic [0.25 Cups], Paprika [0.5 Tsp], Cayenne [0.25 Tsp], and Lemon Juice [2 Tbsp], blend, adding more Oil as needed." + ), + tags = mapOf( + "Italian" to TagType.CUISINE, + "Sauce" to TagType.TECHNIQUE, + "Blended" to TagType.TECHNIQUE, + "Vegetarian" to TagType.PROTEIN, + "Tangy" to TagType.FLAVOUR, + ), + image = Res.drawable.Pesto, + ttt = TTT.TRUE, + ), + + Recipe( + title = "Chicken Parmesan", + description = "Chicken Breaded and Pan Fried, slathered in Marinara and Cheese and Baked.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("40m"), + servings = "Makes 4 Cutlets", + ingredients = listOf( + "2 Large Chicken Breasts", + + "HEADER-Breading", + "0.5 Cups Flour", + "1 Tsp Salt", + "0.5 Tsp Pepper", + "2 Eggs, Beaten", + "0.5 Cups Panko", + "0.5 Cups Parmesan, grated", + + "HEADER-Finishing", + "2 Tbsp Olive Oil", + "24 Oz Marinara Sauce", + "1.5 Cups Shredded Mozzarella Cheese", + "1 Tbsp Fresh Basil Leaves, Chopped", + ), + instructions = listOf( + "Heat the Oven to 425F", + "Slice the Chicken Breasts [2] in half lengthwise to make [4] Cutlets", + "Stir together Flour [0.5 Cups], Salt [1 Tsp], Pepper [0.5 Tsp]. In another bowl, Stir together Panko [0.5 Cups] and Parmesan [0.5 Cups]", + "Coat Chicken in Flour Mixture, then Beaten Eggs, then Panko-Parm Mixture. Heat Olive Oil [2 Tbsp] in a shallow pan and saute the Chicken 3-4 min" + + " per side, until Golden Brown", + "Pour Half the Marinara [12 Oz] into a 9x13 Casserole Dish. Arrange Cutlets in a single layer. Slather each with the rest of the Marinara [12 Oz] then" + + " cover with Shredded Mozzarella [1.5 Cups]. Bake for 15 minutes, then Garnish with Basil [1 Tbsp] and Serve.", + ), + tags = mapOf( + "Italian" to TagType.CUISINE, + "Savory" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Entree" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + "Pan Fried" to TagType.TECHNIQUE, + "Creamy" to TagType.FLAVOUR + ), + image = Res.drawable.chicken_parmesan, + ttt = TTT.TESTED, + ), + + Recipe( + title = "Spaghetti all'Assassina | Assassin's Spaghetti", + description = "Burnt and Spicy Spaghetti in a Rich Tomato Sauce.", + prepTime = Duration.parse("10m"), + cookTime = Duration.parse("20m"), + servings = "Serves 4", + ingredients = listOf( + "4 Cups Water", + "28 oz Tomato Puree", + "2 Tbsp Tomato Paste", + "1 Tsp Salt", + "2 Tbsp Olive Oil", + "3 Cloves Garlic", + "1 Tsp Red Pepper Flakes", + "16 oz Spaghetti", + ), + instructions = listOf( + "Add Water [4 Cups] to a medium saucepan and bring to a boil. Add about 1/3rd of the Tomato Puree [9 oz] and the Tomato Paste [2 Tbsp]. " + + "Season with Salt [1 Tsp] and reduce heat to low. Keep hot, Set Aside.", + "In a pan large enough to lay the Spaghetti [16 Oz] in a flat layer, heat Oil [2 Tbsp].", + "Add Garlic [3 Cloves], Pepper Flakes [1 Tsp], and cook until fragrant, about 30 seconds.", + "Add the rest of the Tomato Puree [18 oz] and season with Salt.", + "Add the Pasta [16 oz] and spread out into a flat layer. Add Broth as needed to cover the Pasta.", + "Cook the Pasta, undisturbed, for about 5 minutes. The Sauce should look pretty dry.", + "Once the Pasta has burnt on the bottom, flip, scraping the burnt bits and covering with more Broth.", + "Repeat until all the Broth has been absorbed by the Pasta.", + ), + tags = mapOf( + "Vegan" to TagType.PROTEIN, + "Italian" to TagType.CUISINE, + "Spicy" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Entree" to TagType.COURSE, + "Pan Fried" to TagType.TECHNIQUE, + "Burnt" to TagType.FLAVOUR, + ), + image = Res.drawable.assassins_pasta, + ttt = TTT.TESTED, + ), + Recipe( + title = "Cacio e Pepe", + description = "A simple yet flavorful Italian pasta dish with Pecorino Romano Cheese and Black Pepper.", + prepTime = Duration.parse("5m"), + cookTime = Duration.parse("20m"), + servings = "Serves 4", + ingredients = listOf( + "8 ounces Spaghetti (may sub Bucatini)", + "1 Tsp Salt (for pasta water)", + "3 Tbsp Unsalted Butter", + "1 Tbsp Extra Virgin Olive Oil", + "1 Tsp Freshly-Cracked Coarse Black Pepper (about 50 turns)", + "1.5 cups Finely Freshly-Grated Pecorino Romano (NOT Parmesan)", + "8 cups Water" + ), + instructions = listOf( + "Add Water [8 cups] to a Dutch oven (or stockpot wide enough to fit Spaghetti). The water will be very shallow because we want it to be very starchy. Cover and bring to a boil. Uncover and stir in Salt [1 Tsp] then add Spaghetti. Cook pasta until barely al dente (usually a few minutes less than package directions), stirring often so the Spaghetti doesn’t stick. See next step to complete while pasta is cooking.", + "While the pasta is cooking, melt Butter [3 Tbsp] with Olive Oil [1 Tbsp] in a large skillet over medium heat. Add Pepper [1 Tsp], then cook for one minute. Set aside until pasta is done cooking.", + "Once pasta is al dente, reserve Pasta Water [.75 Cups], then drain pasta in a colander and set aside.", + "Slowly whisk in [.5 Cups] reserved Pasta Water into the Butter off heat. Let stand 3 minutes.", + "Gradually whisk Cheese [1.5 cups] into Butter water a little at a time until combined. Turn heat to LOW and whisk constantly until Cheese is completely melted and smooth.", + "Add half of the Pasta to the skillet and stir to coat. Add remaining Pasta and toss until evenly combined, adding additional pasta water if needed to loosen pasta.", + "Taste, and season with extra Salt and Pepper if desired. Serve warm." + ), + tags = mapOf( + "Italian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Savory" to TagType.FLAVOUR, + "Spicy" to TagType.FLAVOUR, + "Creamy" to TagType.FLAVOUR, + "Vegetarian" to TagType.PROTEIN, + "Simmered" to TagType.TECHNIQUE, + "Tossed" to TagType.TECHNIQUE, + ), + image = Res.drawable._10_strawberries, // Replace with your image resource + ttt = TTT.TRIED + ), + Recipe( + title = "Chicken Cacciatore", + description = "A hearty Italian stew with bone-in Chicken Thighs, Mushrooms, Onions, and Bell Peppers in a rich Tomato and Wine sauce.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("45m"), + servings = "Serves 4-6", + ingredients = listOf( + "3 lbs Bone-in, Skin-on Chicken Thighs (about 8)", + "1 Tbsp Olive Oil", + "Salt", + "Pepper", + "1 Large Onion, finely chopped", + "8 Ounces Fresh Mushrooms, sliced", + "3 Cloves Garlic, minced", + "0.5 Tsp Crushed Red Pepper Flakes (optional - more or less to taste)", + "2 Tbsp All-Purpose Flour", + "1 Cup Dry White Wine", + "14.5 Ounce Canned Diced Tomatoes (do not drain)", + "2 Tbsp Tomato Paste", + "3 Bay Leaves", + "1 Small Parmesan Rind", + "1 Tbsp Fresh Thyme Leaves or 1 Tsp Dried Thyme", + "1 Tsp Dried Oregano", + "1 Large Red Bell Pepper, ribs and seeds removed, chopped" + ), + instructions = listOf( + "Heat a large Dutch oven or skillet over medium heat. Add the Olive Oil [1 Tbsp].", + "Season the Chicken pieces with Salt and Pepper. Add half the Chicken and Cook, skin side down, until crisp and browned.", + "Turn the pieces over and Cook another 5 minutes. Remove to a plate and continue Browning in small batches until all Chicken is browned. Reserve [1 Tbsp] of the drippings in the pan.", + "Add the Onions [1 Large], Mushrooms [8 Ounces] and a pinch of Salt to the pan with the reserved drippings. Cook over medium-high heat until the vegetables begin to brown and the moisture evaporates.", + "Add the Garlic [3 Cloves] and Red Pepper Flakes [0.5 Tsp] to the pan and sauté until fragrant, about 30 seconds. Stir in the Flour [2 Tbsp] and continuing Cooking and stirring for 1 more minute.", + "Add the Wine [1 Cup], Tomatoes [14.5 Ounce], Tomato Paste [2 Tbsp], Bay Leaves [3], Parmesan Rind [1], Thyme [1 Tbsp or 1 Tsp], Oregano [1 Tsp] and Red Bell Pepper [1 Large].", + "Remove the skin from the Chicken and discard. Add the skinless Chicken pieces to the pan, pressing them down into the sauce so they are covered. ", + "Bring to a boil, cover and reduce the heat to low. Simmer until the Chicken is tender, about 40-45 minutes. Halfway through cooking, move the Chicken pieces around and/or turn them over to ensure even cooking.", + "Remove the Bay Leaves [3] and Parmesan Rind [1] and discard. Check seasoning and add Salt and Pepper if needed. Garnish with fresh chopped Parsley leaves. Serve over hot cooked Spaghetti or Polenta." + ), + tags = mapOf( + "Italian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Stew" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Herby" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + ), + image = Res.drawable.cacciatore, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Romanian.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Romanian.kt index 60f3361..7972f80 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Romanian.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/europe/Romanian.kt @@ -7,47 +7,47 @@ import bakersmenagerie.composeapp.generated.resources.ostropel import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val romanianList = listOf( -// Recipe( -// title = "Ostropel | Romanian Chicken Stew", -// description = "A traditional Romanian chicken stew with tender chicken legs in a flavorful garlic and tomato sauce.", -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("45m"), -// servings = "Serves 4-6", -// ingredients = listOf( -// "1 kg Chicken Legs (skin-on, bone-in, or mix with boneless)", -// "1 medium Onions", -// "1 Head Garlic", -// "2.5 Tbsp Oil", -// "Salt", -// "Pepper", -// "100 ml Dry White Wine", -// "400 g Canned Tomatoes (cubed) or 600 g Fresh Summer Tomatoes", -// "A handful of chopped Green Parsley" -// ), -// instructions = listOf( -// "Prepare the Ingredients: Chop the Onion [1 medium] and roughly chop half of the Garlic [0.5 Head, about 5 Cloves]. Slice the remaining Garlic [5 cloves].", -// "Fry the Chicken: In a large pan, heat Oil [2.5 Tbsp] over high heat. Season Chicken Legs [1 kg] with Salt and Pepper. Fry the Chicken until golden brown on both sides, about 8-10 minutes. Do not overcrowd the pan.", -// "Sauté Onions and Garlic: Do not remove the Chicken. Add chopped Onion and half of the chopped Garlic to the pan. Season with a pinch of Salt. Reduce heat to medium-low and sauté until the Onion is translucent, about 5 minutes.", -// "Deglaze with Wine: Pour Dry White Wine [100 ml] into the pan and cook for 2-3 minutes until the alcohol evaporates.", -// "Add Tomatoes: Add Canned Tomatoes [400 g] or Fresh Summer Tomatoes [600 g] (peeled and diced if desired) and Hot Water [200 ml] to the pan. If the sauce is too acidic, add a pinch of Sugar.", -// "Simmer the Stew: Cover the pan and simmer over low heat for 20-30 minutes, or until the Chicken is tender. Check for doneness with a fork.", -// "Add Remaining Garlic: Before removing from heat, add sliced Garlic to the stew and let it simmer for 1 minute.", -// "Garnish and Serve: Sprinkle chopped Green Parsley over the stew. Serve warm, optionally with a side of sour cream." -// ), -// tags = mapOf( -// "Romanian" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Stew" to TagType.COURSE, -// "Simmered" to TagType.TECHNIQUE, -// "Pan Fried" to TagType.TECHNIQUE, -// "Garlic" to TagType.FLAVOUR, -// "Savory" to TagType.FLAVOUR, -// "Tangy" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Herby" to TagType.FLAVOUR, -// ), -// image = Res.drawable.ostropel, -// ttt = TTT.TRIED, -// ) +val romanianList = listOf( + Recipe( + title = "Ostropel | Romanian Chicken Stew", + description = "A traditional Romanian chicken stew with tender chicken legs in a flavorful garlic and tomato sauce.", + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("45m"), + servings = "Serves 4-6", + ingredients = listOf( + "1 kg Chicken Legs (skin-on, bone-in, or mix with boneless)", + "1 medium Onions", + "1 Head Garlic", + "2.5 Tbsp Oil", + "Salt", + "Pepper", + "100 ml Dry White Wine", + "400 g Canned Tomatoes (cubed) or 600 g Fresh Summer Tomatoes", + "A handful of chopped Green Parsley" + ), + instructions = listOf( + "Prepare the Ingredients: Chop the Onion [1 medium] and roughly chop half of the Garlic [0.5 Head, about 5 Cloves]. Slice the remaining Garlic [5 cloves].", + "Fry the Chicken: In a large pan, heat Oil [2.5 Tbsp] over high heat. Season Chicken Legs [1 kg] with Salt and Pepper. Fry the Chicken until golden brown on both sides, about 8-10 minutes. Do not overcrowd the pan.", + "Sauté Onions and Garlic: Do not remove the Chicken. Add chopped Onion and half of the chopped Garlic to the pan. Season with a pinch of Salt. Reduce heat to medium-low and sauté until the Onion is translucent, about 5 minutes.", + "Deglaze with Wine: Pour Dry White Wine [100 ml] into the pan and cook for 2-3 minutes until the alcohol evaporates.", + "Add Tomatoes: Add Canned Tomatoes [400 g] or Fresh Summer Tomatoes [600 g] (peeled and diced if desired) and Hot Water [200 ml] to the pan. If the sauce is too acidic, add a pinch of Sugar.", + "Simmer the Stew: Cover the pan and simmer over low heat for 20-30 minutes, or until the Chicken is tender. Check for doneness with a fork.", + "Add Remaining Garlic: Before removing from heat, add sliced Garlic to the stew and let it simmer for 1 minute.", + "Garnish and Serve: Sprinkle chopped Green Parsley over the stew. Serve warm, optionally with a side of sour cream." + ), + tags = mapOf( + "Romanian" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Stew" to TagType.COURSE, + "Simmered" to TagType.TECHNIQUE, + "Pan Fried" to TagType.TECHNIQUE, + "Garlic" to TagType.FLAVOUR, + "Savory" to TagType.FLAVOUR, + "Tangy" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Herby" to TagType.FLAVOUR, + ), + image = Res.drawable.ostropel, + ttt = TTT.TRIED, + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/middleEast/PalestineData.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/middleEast/PalestineData.kt index 4ba9b2b..f431f99 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/middleEast/PalestineData.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/model/middleEast/PalestineData.kt @@ -7,53 +7,53 @@ import bakersmenagerie.composeapp.generated.resources.mussakhan import com.menagerie.bakers.model.TTT import kotlin.time.Duration -val palestineList = listOf( -// Recipe( -// title = "Musakhan", -// description = "Chicken and Onions on a Flatbread drenched in Oil, Sumac, and Almonds.", -// ingredients = listOf( -// -// "HEADER-Chicken Boil", -// "1 Whole Large Chickens, precut into ~6 pieces", -// "5 Cardamom Pods", -// "1 Tbsp Salt", -// -// "HEADER-Onions", -// "600 ml Olive Oil", -// "12-14 Onions, Chopped", -// "1 Tsp Cumin, ground", -// "Black Pepper and Cinnamon, to Taste", -// -// "HEADER-To Serve", -// "150g Sumac", -// "6 Flatbreads", -// "0.5 Cups Pine Nuts", -// "0.75 Cups Almonds, sliced", -// ), -// instructions = listOf( -// "Boil the Chicken in water with [5] Cardamom Pods and [1 Tbsp] of Salt.", -// "Heat Olive Oil in a large pan and saute Onions with Cumin [1 Tsp], Black Pepper, Cinnamon, and [1 Tbsp] Salt.", -// "Preheat oven to 475F/240C", -// "Arrange Chicken on a baking tray. Cover with some Onion, sprinkle with Sumac, and bake for 5 minutes or until browned.", -// "To Serve, slather Flatbreads with Onions, scatter the rest of the Sumac along with all the Nuts [.5 Cups] and Almonds [.75 Cups].", -// "Eat with your hands." -// ), -// tags = mapOf( -// "Palestine" to TagType.CUISINE, -// "Entree" to TagType.COURSE, -// "Baked" to TagType.TECHNIQUE, -// "Boiled" to TagType.TECHNIQUE, -// "Sauteed" to TagType.TECHNIQUE, -// "Savory" to TagType.FLAVOUR, -// "Carnivorous" to TagType.PROTEIN, -// "Tangy" to TagType.FLAVOUR, -// "Nutty" to TagType.FLAVOUR, -// "Warm" to TagType.FLAVOUR, -// ), -// prepTime = Duration.parse("20m"), -// cookTime = Duration.parse("1h 15m"), -// servings = "Serves 6 to 8 People", -// image = Res.drawable.mussakhan, -// ttt = TTT.TRUE -// ) +val palestineList = listOf( + Recipe( + title = "Musakhan", + description = "Chicken and Onions on a Flatbread drenched in Oil, Sumac, and Almonds.", + ingredients = listOf( + + "HEADER-Chicken Boil", + "1 Whole Large Chickens, precut into ~6 pieces", + "5 Cardamom Pods", + "1 Tbsp Salt", + + "HEADER-Onions", + "600 ml Olive Oil", + "12-14 Onions, Chopped", + "1 Tsp Cumin, ground", + "Black Pepper and Cinnamon, to Taste", + + "HEADER-To Serve", + "150g Sumac", + "6 Flatbreads", + "0.5 Cups Pine Nuts", + "0.75 Cups Almonds, sliced", + ), + instructions = listOf( + "Boil the Chicken in water with [5] Cardamom Pods and [1 Tbsp] of Salt.", + "Heat Olive Oil in a large pan and saute Onions with Cumin [1 Tsp], Black Pepper, Cinnamon, and [1 Tbsp] Salt.", + "Preheat oven to 475F/240C", + "Arrange Chicken on a baking tray. Cover with some Onion, sprinkle with Sumac, and bake for 5 minutes or until browned.", + "To Serve, slather Flatbreads with Onions, scatter the rest of the Sumac along with all the Nuts [.5 Cups] and Almonds [.75 Cups].", + "Eat with your hands." + ), + tags = mapOf( + "Palestine" to TagType.CUISINE, + "Entree" to TagType.COURSE, + "Baked" to TagType.TECHNIQUE, + "Boiled" to TagType.TECHNIQUE, + "Sauteed" to TagType.TECHNIQUE, + "Savory" to TagType.FLAVOUR, + "Carnivorous" to TagType.PROTEIN, + "Tangy" to TagType.FLAVOUR, + "Nutty" to TagType.FLAVOUR, + "Warm" to TagType.FLAVOUR, + ), + prepTime = Duration.parse("20m"), + cookTime = Duration.parse("1h 15m"), + servings = "Serves 6 to 8 People", + image = Res.drawable.mussakhan, + ttt = TTT.TRUE + ) ) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/SafeTemps.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/SafeTemps.kt deleted file mode 100644 index b9df6c0..0000000 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/SafeTemps.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.menagerie.bakers.util - -/** - * Common safe temperature values to use where necessary. - * Implemented for ease of unit conversion - * Data sourced from https://www.foodsafety.gov/food-safety-charts/safe-minimum-internal-temperatures - * unless otherwise stated - */ -enum class SafeTemps(val temp: DataWithUnit) { - /** - * Includes chicken, turkey, misc. poultry, and - * all contents thereof. - */ - POULTRY(DataWithUnit(165.0,Unit.FAHRENHEIT)), - - /** - * Cuts of meat such as steak, flank, or roast. - * Includes mutton, bison, and goat. - */ - BEEF(DataWithUnit(145.0,Unit.FAHRENHEIT)), - - /** - * All ground meat, save poultry, which is a separate category - */ - GROUND_MEAT(DataWithUnit(160.0,Unit.FAHRENHEIT)), - - /** - * All non-ground pork products, including raw ham. - */ - PORK(DataWithUnit(145.0,Unit.FAHRENHEIT)), - - /** - * Also includes venison for simplicity - */ - RABBIT(DataWithUnit(160.0,Unit.FAHRENHEIT)), - - /** - * All forms of fish - */ - FISH(DataWithUnit(145.0,Unit.FAHRENHEIT)), -} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/Units.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/Units.kt deleted file mode 100644 index 39fb13a..0000000 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/Units.kt +++ /dev/null @@ -1,640 +0,0 @@ -package com.menagerie.bakers.util - -import androidx.compose.ui.graphics.vector.PathNode -import kotlin.math.floor - -/** - * Helper object; pair Data with Unit - * - * @property amount Value - * @property unit Optional unit - * - * @author Blizzard Finnegan - * @since v1.1.0 - */ -data class DataWithUnit(var amount: Double = 0.0, var unit: Unit? = null){ - override fun equals(other: Any?): Boolean { - if (other !is DataWithUnit) { return false } - val castOther = other as DataWithUnit - if (castOther.unit === this.unit) { return this.amount.equals(castOther.amount) } - - //Null unit check - if (castOther.unit == null || this.unit == null) { - return false - } - - //Units are not equal and not null, must cast to same unit if possible - if(IMPERIAL_UNITS.contains(castOther.unit) && IMPERIAL_UNITS.contains(this.unit)) { - //Common imperial units. Resolve further - when (this.unit) { - Unit.TEASPOON -> { - return when (castOther.unit){ - Unit.TABLESPOON -> - this.amount == (castOther.amount * ConversionFactors.TBSP_TO_TSP) - Unit.CUP -> - this.amount == (castOther.amount * ConversionFactors.CUP_TO_TSP) - Unit.FLUID_OUNCE -> - (this.amount / ConversionFactors.TBSP_TO_TSP) == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) - Unit.PINT -> - (this.amount / ConversionFactors.CUP_TO_TSP) == (castOther.amount * ConversionFactors.PINT_TO_CUP) - Unit.QUART -> - (this.amount / ConversionFactors.CUP_TO_TSP) == (castOther.amount * ConversionFactors.QUART_TO_CUP) - Unit.GALLON -> - (this.amount / ConversionFactors.CUP_TO_TSP) == (castOther.amount * ConversionFactors.GALLON_TO_CUP) - else -> false - } - } - Unit.TABLESPOON -> { - return when (castOther.unit){ - Unit.TEASPOON -> - this.amount == (castOther.amount / ConversionFactors.TBSP_TO_TSP) - Unit.CUP -> - this.amount == (castOther.amount * ConversionFactors.CUP_TO_TBSP) - Unit.FLUID_OUNCE -> - this.amount == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) - Unit.PINT -> - (this.amount / ConversionFactors.CUP_TO_TBSP) == (castOther.amount * ConversionFactors.PINT_TO_CUP) - Unit.QUART -> - (this.amount / ConversionFactors.CUP_TO_TBSP) == (castOther.amount * ConversionFactors.QUART_TO_CUP) - Unit.GALLON -> - (this.amount / ConversionFactors.CUP_TO_TBSP) == (castOther.amount * ConversionFactors.GALLON_TO_CUP) - else -> false - } - } - Unit.CUP -> { - return when (castOther.unit){ - Unit.TEASPOON -> - this.amount == (castOther.amount / ConversionFactors.CUP_TO_TSP) - Unit.TABLESPOON -> - this.amount == (castOther.amount / ConversionFactors.CUP_TO_TBSP) - Unit.FLUID_OUNCE -> - (this.amount * ConversionFactors.CUP_TO_TBSP) == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) - Unit.PINT -> - this.amount == (castOther.amount * ConversionFactors.PINT_TO_CUP) - Unit.QUART -> - this.amount == (castOther.amount * ConversionFactors.QUART_TO_CUP) - Unit.GALLON -> - this.amount == (castOther.amount * ConversionFactors.GALLON_TO_CUP) - else -> false - } - } - Unit.FLUID_OUNCE -> { - return when (castOther.unit){ - Unit.TEASPOON -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) == (castOther.amount * ConversionFactors.TBSP_TO_TSP) - Unit.TABLESPOON -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) == castOther.amount - Unit.CUP -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) == (castOther.amount * ConversionFactors.CUP_TO_TBSP) - Unit.PINT -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP)== (castOther.amount * ConversionFactors.PINT_TO_CUP * ConversionFactors.CUP_TO_TBSP) - Unit.QUART -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP)== (castOther.amount * ConversionFactors.QUART_TO_CUP * ConversionFactors.CUP_TO_TBSP) - Unit.GALLON -> - (this.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP)== (castOther.amount * ConversionFactors.GALLON_TO_CUP * ConversionFactors.CUP_TO_TBSP) - else -> false - } - } - Unit.PINT -> { - return when (castOther.unit){ - Unit.TEASPOON -> - (this.amount * ConversionFactors.PINT_TO_CUP) == (castOther.amount / ConversionFactors.CUP_TO_TSP) - Unit.TABLESPOON -> - (this.amount * ConversionFactors.PINT_TO_CUP) == (castOther.amount / ConversionFactors.CUP_TO_TBSP) - Unit.FLUID_OUNCE -> - (this.amount * ConversionFactors.PINT_TO_CUP * ConversionFactors.CUP_TO_TBSP) == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP) - Unit.CUP -> - (this.amount * ConversionFactors.PINT_TO_CUP)== castOther.amount - Unit.QUART -> - (this.amount * ConversionFactors.PINT_TO_CUP)== (castOther.amount * ConversionFactors.QUART_TO_CUP) - Unit.GALLON -> - (this.amount * ConversionFactors.PINT_TO_CUP)== (castOther.amount * ConversionFactors.GALLON_TO_CUP) - else -> false - } - } - Unit.QUART -> { - return when (castOther.unit){ - Unit.TEASPOON -> - (this.amount * ConversionFactors.QUART_TO_CUP) == (castOther.amount / ConversionFactors.CUP_TO_TSP) - Unit.TABLESPOON -> - (this.amount * ConversionFactors.QUART_TO_CUP) == (castOther.amount / ConversionFactors.CUP_TO_TBSP) - Unit.FLUID_OUNCE -> - (this.amount * ConversionFactors.QUART_TO_CUP) == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP / ConversionFactors.CUP_TO_TBSP) - Unit.CUP -> - (this.amount * ConversionFactors.QUART_TO_CUP)== castOther.amount - Unit.PINT -> - (this.amount * ConversionFactors.QUART_TO_CUP)== (castOther.amount * ConversionFactors.PINT_TO_CUP) - Unit.GALLON -> - (this.amount * ConversionFactors.QUART_TO_CUP)== (castOther.amount * ConversionFactors.GALLON_TO_CUP) - else -> false - } - } - Unit.GALLON -> { - return when (castOther.unit){ - Unit.TEASPOON -> - (this.amount * ConversionFactors.GALLON_TO_CUP) == (castOther.amount * ConversionFactors.TBSP_TO_TSP) - Unit.TABLESPOON -> - (this.amount * ConversionFactors.GALLON_TO_CUP) == (castOther.amount / ConversionFactors.CUP_TO_TBSP) - Unit.FLUID_OUNCE -> - (this.amount * ConversionFactors.GALLON_TO_CUP) == (castOther.amount * ConversionFactors.FLUID_OUNCE_TO_TBSP / ConversionFactors.CUP_TO_TBSP) - Unit.CUP -> - (this.amount * ConversionFactors.GALLON_TO_CUP)== castOther.amount - Unit.PINT -> - (this.amount * ConversionFactors.GALLON_TO_CUP)== (castOther.amount * ConversionFactors.PINT_TO_CUP * ConversionFactors.CUP_TO_TBSP) - Unit.QUART -> - (this.amount * ConversionFactors.GALLON_TO_CUP)== (castOther.amount * ConversionFactors.QUART_TO_CUP * ConversionFactors.CUP_TO_TBSP) - else -> false - } - } - Unit.POUND -> { - if (castOther.unit == Unit.OUNCE) - return castOther.amount == (this.amount * ConversionFactors.LB_TO_OZ) - return false - } - Unit.OUNCE -> { - if (castOther.unit == Unit.POUND) { - return this.amount == (castOther.amount * ConversionFactors.LB_TO_OZ) - } - return false - } - Unit.FAHRENHEIT -> return false - else -> return false - } - } - else if (METRIC_UNITS.contains(castOther.unit) && METRIC_UNITS.contains(this.unit)) { - return if (this.unit == Unit.KILOGRAM && castOther.unit == Unit.GRAM){ - this.amount == castOther.amount * ConversionFactors.BASE_TO_KILO - } - else if (this.unit == Unit.GRAM && castOther.unit == Unit.KILOGRAM){ - this.amount * ConversionFactors.BASE_TO_KILO == castOther.amount - } - else if (this.unit == Unit.MILLILITER && castOther.unit == Unit.LITER){ - this.amount * ConversionFactors.MILLI_TO_BASE == castOther.amount - } - else if (this.unit == Unit.LITER && castOther.unit == Unit.MILLILITER){ - this.amount == castOther.amount * ConversionFactors.MILLI_TO_BASE - } - else false - } else { - //Both units are not in the same group of units, try again with converted type - return castOther.imperialMetricConvert() == this - } - } - override fun toString(): String { - val printAmount: String - - if (this.amount == -1.0) return "" - - if (this.amount % 1.0 == 0.0) { - //If the number is a whole number, just print the whole number - printAmount = floor(this.amount).toInt().toString() - } else if (METRIC_UNITS.contains(this.unit)) { - //Allow decimals for metric values - //TODO: Format decimals reasonably, so that fully extended decimals are not shown. - // Consider regex for this purpose, if necessary - printAmount = this.amount.toString() - } else if ((this.amount * 2) % 1.0 == 0.0) { - //If multiplying by 2 is a whole number - //Since the previous clause parses whole numbers already, this will only resolve on - //values that contain a 1/2 - if (this.amount > 1) - printAmount = floor(this.amount).toInt().toString().plus(SpecialCharacters.ONE_HALF.toString()) - else - printAmount = SpecialCharacters.ONE_HALF.toString() - } else if ((this.amount * 3) % 1.0 == 0.0) { - //If multiplying by 3 is a whole number - //Since the previous clause parses whole numbers already, this will only resolve on - //values that contain a 1/3 - // Compare against 1/2 - if (floor(this.amount) > 1) { - if (floor(this.amount) + 0.5 == this.amount) - printAmount = floor(this.amount).toInt().toString().plus(SpecialCharacters.TWO_THIRD) - else - printAmount = floor(this.amount).toInt().toString().plus(SpecialCharacters.ONE_THIRD) - } else { - if (floor(this.amount * 3).toInt() == 1) - printAmount = SpecialCharacters.ONE_THIRD.toString() - else - printAmount = SpecialCharacters.TWO_THIRD.toString() - } - } else if ((this.amount * 4) % 1.0 == 0.0) { - //If multiplying by 4 is a whole number - //Since 1/2 has already been removed, this will resolve on values that contain 1/4 or 3/4 - // Compare against 1/2 - if(floor(this.amount) + 0.5 > this.amount) - printAmount = SpecialCharacters.ONE_QUARTER.toString() - else - printAmount = SpecialCharacters.THREE_QUARTER.toString() - } else { - printAmount = this.amount.toString() - } - if (this.unit == null) return printAmount - - - return printAmount.plus(this.unit?.abbreviation) - } - override fun hashCode(): Int { - return this.amount.hashCode() * 31 + this.unit.hashCode() - } - - fun debugPrint(): String{ - return "DataWithUnit[amount: ". - plus(this.amount). - plus("; Unit: "). - plus(this.unit?.abbreviation). - plus("]") - } - /** - * Simplify data to the most readable unit. Value is reduced in toString override - * @return copy of this object with the reduced units - */ - fun simplifyUnit() : DataWithUnit { - //TODO: Implement - //TODO: Determine if value contains fraction, act accordingly? - when (this.unit) { - null -> return this - Unit.TEASPOON -> { - /* - Fractions acceptable - Compatible: - Tablespoon, cup - - If num > 48, convert to cup - else if num > 3 and num % 3 = 0, convert to tbsp - */ - } - Unit.TABLESPOON -> { - /* - fractions acceptable - Compatible: - Teaspoon, cup - if num < 1, convert to teaspoon - if num > 4 and num % 4 = 0, convert to cup - */ - } - Unit.CUP -> { - /* - fractions acceptable - Compatible: - Tablespoon, Teaspoon - if num < 1, always convert to tablespoon; recurse - */ - } - Unit.FLUID_OUNCE -> { - /* - fractions don't make sense - Compatible: - Cup, Teaspoon, Tablespoon - convert to teaspoon, recurse - */ - } - Unit.PINT -> { - /* - fractions don't make sense - Compatible: - cup, quart, gallon - if num < 1, convert to quart - If num % 4, convert to gallon - if num % 2, convert to quart - */ - } - Unit.QUART -> { - /* - fractions don't make sense - compatible: - cup, pint, gallon - if num * 2 < 1, convert to cup - if num < 1, convert to pint - */ - } - Unit.GALLON -> { - /* - fractions don't make sense - compatible: - cup, pint, quart - if num * 4 < 1, convert to cup, recurse - if num * 2 < 1, convert to pint - if num < 1, convert to quart - */ - } - Unit.KILOGRAM -> { - /* - Fractions don't make sense, decimals ok - compatible: - gram - */ - } - Unit.GRAM -> { - /* - Fractions don't make sense, decimals ok - compatible: - kilogram - */ - } - Unit.MILLILITER -> { - /* - Fractions don't make sense, decimals ok - compatible: - liter - */ - } - Unit.LITER -> { - /* - Fractions don't make sense, decimals ok - compatible: - milliliter - */ - } - Unit.POUND -> { - /* - Fractions don't make sense, use lb/oz for print statement - compatible: - ounce - */ - } - Unit.OUNCE -> { - /* - fractions don't make sense; decimals ok, consider rounding off - compatible: - pound - */ - } - else -> {} - } - return this - } - /** - * Convert the given value from imperial to metric, or vice-versa - * - * @return copy of this object converted to most useful unit in the opposite unit type - */ - fun imperialMetricConvert() : DataWithUnit { - TODO() - //simplifyUnit(generatedObject) - } - /** - * Helper function for temperature conversion. - * - * @return Copy of this object with converted temp if valid input, null otherwise - */ - fun tempConvert(): DataWithUnit?{ - when (this.unit) { - Unit.FAHRENHEIT -> { - val convertedTemp = ( this.amount - F_TO_C_CONVERT_OFFSET ) * F_TO_C_CONVERT_RATIO - return DataWithUnit(convertedTemp,Unit.CELSIUS) - } - Unit.CELSIUS -> { - val convertedTemp = (this.amount / F_TO_C_CONVERT_RATIO) + F_TO_C_CONVERT_OFFSET - return DataWithUnit(convertedTemp,Unit.FAHRENHEIT) - } - else -> {} - } - return null - } - - fun scale(factor: Double): DataWithUnit{ - val returnVar = DataWithUnit(this.amount*factor, this.unit) - returnVar.simplifyUnit() - return returnVar - } - - -} - - - -/** - * Map of imperial units, and their most reasonable metric conversion - */ -val IMPERIAL_TO_METRIC:HashMap = hashMapOf( - Unit.TEASPOON to Unit.MILLILITER, - Unit.TABLESPOON to Unit.MILLILITER, - Unit.CUP to Unit.MILLILITER, - Unit.FLUID_OUNCE to Unit.MILLILITER, - Unit.PINT to Unit.LITER, - Unit.QUART to Unit.LITER, - Unit.GALLON to Unit.LITER, - Unit.POUND to Unit.KILOGRAM, - Unit.OUNCE to Unit.GRAM, -) - -/** - * Map of metric units, and their most reasonable metric conversions - * Due to significantly less units in metric, if this map is used, calling - * [DataWithUnit.simplifyUnit] is advised - */ -val METRIC_TO_IMPERIAL:HashMap = hashMapOf( - Unit.MILLILITER to Unit.TEASPOON, - Unit.LITER to Unit.PINT, - Unit.KILOGRAM to Unit.POUND, - Unit.GRAM to Unit.OUNCE -) - -/** - * Array of units that are explicitly metric - */ -val METRIC_UNITS:Array = arrayOf( - Unit.KILOGRAM, - Unit.GRAM, - Unit.MILLILITER, - Unit.LITER, - Unit.CELSIUS -) - -/** - * Array of units that are explicitly imperial - */ -val IMPERIAL_UNITS:Array = arrayOf( - Unit.TEASPOON, - Unit.TABLESPOON, - Unit.CUP, - Unit.FLUID_OUNCE, - Unit.PINT, - Unit.QUART, - Unit.GALLON, - Unit.POUND, - Unit.OUNCE, - Unit.FAHRENHEIT -) - -/* -Conversions: - -1 tbsp -> 3 tsp -4 tbsp -> 1/4 cup; 1tbsp -> 1/16 cup -16 teaspoon -> 1/3 cup; 1tsp -> 1/48 cup -1 tsp -> 4.928922mL -1fl oz -> 2 tbsp -2 cup -> 1 pint -4 cup -> 1 quart -16 cup -> 1 gallon - -1 lb -> 0.45359237 kg -1 lb -> 16oz - */ - -/** - * Storage of conversion factors for unit conversion - * - * All Values stored within are multiplicative from the larger unit to the smaller - * i.e. TBSP_TO_TSP is used as tablespoon * TBSP_TO_TSP = teaspoon - */ -private data object ConversionFactors { - const val TBSP_TO_TSP = 3.0 as Double - const val CUP_TO_TBSP = 16.0 as Double - const val CUP_TO_TSP = 48.0 as Double - const val TSP_TO_ML = 4.928922 as Double - const val FLUID_OUNCE_TO_TBSP = 2.0 as Double - const val PINT_TO_CUP = 2.0 as Double - const val QUART_TO_CUP = 4.0 as Double - const val GALLON_TO_CUP = 16.0 as Double - const val LB_TO_OZ = 16.0 as Double - const val KG_TO_OZ = 35.27396195 as Double - const val BASE_TO_KILO = 1000.0 as Double - const val MILLI_TO_BASE = 1000.0 as Double -} - -/** - * Unicode codepoints used for displaying fractions. Stored here for general use - */ -data object SpecialCharacters { - const val ONE_QUARTER = '\u00bc' - const val ONE_THIRD = '\u2153' - const val ONE_HALF = '\u00bd' - const val TWO_THIRD = '\u2154' - const val THREE_QUARTER = '\u00be' -} - -const val F_TO_C_CONVERT_RATIO = 9.0 / 5.0 -const val F_TO_C_CONVERT_OFFSET = 32 - -/** - * Commonly used units in cooking. New units added here should also add the relevant data to - * the [ConversionFactors], [METRIC_TO_IMPERIAL], [METRIC_UNITS], [IMPERIAL_TO_METRIC], and - * [IMPERIAL_UNITS] as appropriate. Update to [DataWithUnit.equals] may also be necessary - * - * Enum also includes printable string with appropriate abbreviation. - */ -enum class Unit (val abbreviation: String){ - /** - * Teaspoon - * - * Some fractions acceptable in this unit: quarter, third, half. - * Smaller values should be either left as decimal(?) or converted to [MILLILITER] (?) - */ - TEASPOON("tsp"), - - /** - * Tablespoon - * - * Some fractions acceptable in this unit: quarter, third, half. - * Smaller values should be converted to [TEASPOON] - */ - TABLESPOON ("tbsp"), - - /** - * Cup - * - * Some fractions acceptable for this unit: quarter, third, half - * smaller values should be converted to [TABLESPOON] or [TEASPOON] - */ - CUP ("c"), - - /** - * Fluid ounce - * - * Smallest liquid volumetric value. Whole numbers only. - * Store decimals for precision, do not print. - */ - FLUID_OUNCE ("fl. oz."), - - /** - * Pint - * - * Whole numbers only. - * Smaller values should be down-converted to [CUP], at minimum. - */ - PINT("pint"), //Whole numbers only. If fraction, consider down-converting - - /** - * Quart - * - * Whole numbers only. - * Smaller values should be down-converted to [CUP], at minimum. - */ - QUART("qt."), //whole numbers only. If fraction, consider down-converting - - /** - * Gallon - * - * Whole numbers only. - * Smaller values should be down-converted to [CUP], at minimum. - * Possible down-conversion to Quart or Pint, depending on implementation. - */ - GALLON("gal."), //whole numbers only. If fraction, consider down-converting - - /** - * Kilogram - * - * No fractions; decimals acceptable. - * Values less than 1 should be converted down to [GRAM]. - */ - KILOGRAM("kg"), //decimals only - - /** - * Gram - * - * No fractions; Values less than 1 are questionably useful. - * Values larger than 1000 should be converted up to [KILOGRAM]. - */ - GRAM("g"), //decimals only - - /** - * Milliliter - * - * No fractions; values less than 1 are questionably useful. - * Values larger than 1000 should be converted up to [LITER]. - */ - MILLILITER("mL"), //decimals only - - /** - * Liter - * - * No fractions; decimals acceptable. - * Values smaller than 1 should be down-converted to [MILLILITER] - */ - LITER("L"), //decimals only - - /** - * Pound - * - * No fractions, no decimals. - * UNIQUE PRINT FORMATTING: lb, decimal ounces - * - * Values less than 1 should down-convert to [OUNCE] - */ - POUND("lb"), // lb oz formatting - - /** - * Ounce (weight) - * - * No fractions, decimals acceptable. - * Values less than 0.1 are questionably useful. - */ - OUNCE("oz."), //Decimals only - - /** - * Degrees Celsius - * - * No fractions, decimals encouraged for conversion to [FAHRENHEIT] compatibility. - */ - CELSIUS("\u00b0C"), //Decimals only - - /** - * Degrees Fahrenheit - * - * No fractions, decimals are questionably useful. - */ - FAHRENHEIT("\u00b0F") //Decimals only -} - diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/regex.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/regex.kt deleted file mode 100644 index 25815cb..0000000 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/util/regex.kt +++ /dev/null @@ -1,61 +0,0 @@ -package com.menagerie.bakers.util - - -//Scales ingredient amounts in instructions (only works for values in square brackets [2 Tbsp] -fun scaleRecipeServingsInstructions(input: String, value: Float): String { - val regex = Regex("\\[[+-]?([0-9]*[.])?[0-9]+") - return regex.replace(input) { matchResult -> - val number = matchResult.value.removePrefix("[").toFloat() - "[".plus(removeTrailingZeros(number * value)) - } -} - -//Scales all numbers in ingredients items (or any string), regardless of format -fun scaleRecipeServings(input: String, value: Float): String { - val regex = Regex("[+-]?([0-9]*[.])?[0-9]+") - return regex.replace(input) { matchResult -> - val number = matchResult.value.toFloat() - removeTrailingZeros(number * value) - } -} - -//removes trailing zeroes from floats -fun removeTrailingZeros(number: Float): String { - return if(number.toInt().toFloat() == number) - number.toInt().toString() - else - number.toString() -} - -//TODO : TABLE -//TODO : If anyone feels up to a *really* fun regex challenge, you can totally pull Pair.firsts as your lookup -// and whenever a % 0 version of the first shows up, replace it with a % 0 version of the second (so you're going to combine this with the multiplier regex, essentially) -// Loop through find and replace recipeScale(pair.first), recipeScale(pair.second) - -val commonConversions = listOf( - "3 Tsp" to "1 Tbsp", -) - -//Volume only -//TODO : Metric Regex -// uses a lookahead to find digits with the correct suffix (pair.first.removePrefix(regex(recipeScalerFindButDon'tReplace?)), maybe? ) -val imperialToMetric = listOf( - "1 Tsp" to "5 ml", -) - -//TODO : Regex for converting F to C and replacing in text, just needs a direction and the formula °C = (°F − 32) × 5/9 or °F = (°C × 9/5) + 32 -// uses a lookahead to find numbers in the instructions set with F or C as a suffix, replace with formula output and alternate suffix -//Temperature -//fun fToC() {} - -//fun cToF() {} - - -val measurementSkips = listOf( - "Tsp", - "Tbsp", - "Cup", - "lb", - "kg", - "ml", -) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/InstructionItem.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/InstructionItem.kt index 4732059..5a5307b 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/InstructionItem.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/InstructionItem.kt @@ -28,8 +28,6 @@ import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import com.menagerie.bakers.DisplayManager import com.menagerie.bakers.Size -import com.menagerie.bakers.model.Recipe -import com.menagerie.bakers.util.scaleRecipeServingsInstructions @Composable fun InstructionItem( diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/StepsAndDetails.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/StepsAndDetails.kt index 320f04e..0a5dc0f 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/StepsAndDetails.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/details/StepsAndDetails.kt @@ -20,9 +20,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import com.menagerie.bakers.DisplayManager import com.menagerie.bakers.Size -import com.menagerie.bakers.model.Ingredient import com.menagerie.bakers.model.Recipe -import com.menagerie.bakers.util.scaleRecipeServings @Composable @@ -140,13 +138,13 @@ internal fun LazyListScope.ingredients( slider: Float, animate: Boolean ){ - itemsIndexed(recipe.ingredients.values.toList()) { index, value -> + itemsIndexed(recipe.ingredients) { index, value -> AnimateInEffect( intervalStart = (index + 1) / (recipe.ingredients.size + 1).toFloat(), recipe = recipe, animate = animate, content = { - if (value.name.startsWith("HEADER-")) { + if (value.startsWith("HEADER-")) { Column { HorizontalDivider( thickness = 2.dp, @@ -154,14 +152,14 @@ internal fun LazyListScope.ingredients( modifier = Modifier.padding(top = 16.dp) ) Text( - text = value.toString().removePrefix("HEADER-"), + text = value.removePrefix("HEADER-"), style = MaterialTheme.typography.headlineSmall, modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp) ) } } else { - IngredientItem(recipe, value.scale(slider.toDouble()).toString(), index) + IngredientItem(recipe, scaleRecipeServings(value, slider), index) } } ) diff --git a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/util/GetRecipe.kt b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/util/GetRecipe.kt index 1f24b4e..66f04e7 100644 --- a/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/util/GetRecipe.kt +++ b/composeApp/src/commonMain/kotlin/com/menagerie/bakers/view/util/GetRecipe.kt @@ -53,9 +53,10 @@ fun getFilteredRecipeList( //then filter by the search bar search recipes = recipes.filter { - it.ingredients.values.toList().any { item -> + it.ingredients.any { item -> + + val actualIngredient = item.split(' ', limit = 3).getOrElse(2) { "" } - val actualIngredient = item.name fuzzyPartialMatch( actualIngredient.lowercase(), search.lowercase(),