Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
ac4cf32a9d | |||
|
5a77f09a2f | ||
00bab7d27c | |||
9e6421c5a4 | |||
4e517fbd45 | |||
7600e7dd9d | |||
8691be2a4d |
39 changed files with 4065 additions and 3200 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -14,3 +14,4 @@ iosApp/iosApp.xcworkspace/*
|
|||
iosApp/iosApp.xcodeproj/*
|
||||
!iosApp/iosApp.xcodeproj/project.pbxproj
|
||||
shared/shared.podspec
|
||||
kls_database.db
|
||||
|
|
|
@ -86,7 +86,7 @@ enum class RecipeAppScreen {
|
|||
DetailHistory,
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSharedTransitionApi::class) //This is a test commit comment
|
||||
@OptIn(ExperimentalSharedTransitionApi::class)
|
||||
@Composable
|
||||
fun App(
|
||||
onClose: () -> Unit = {}
|
||||
|
|
|
@ -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<Recipe> {
|
||||
return EuropeRecipes.getAllRecipes() +
|
||||
AsiaRecipes.getAllRecipes() +
|
||||
NorthAmericaRecipes.getAllRecipes() +
|
||||
SouthAmericaRecipes.getAllRecipes() +
|
||||
MiddleEastRecipes.getAllRecipes() +
|
||||
AfricaRecipes.getAllRecipes()
|
||||
//return EuropeRecipes.getAllRecipes() +
|
||||
// AsiaRecipes.getAllRecipes() +
|
||||
// NorthAmericaRecipes.getAllRecipes() +
|
||||
// SouthAmericaRecipes.getAllRecipes() +
|
||||
// MiddleEastRecipes.getAllRecipes() +
|
||||
return 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<Recipe> {
|
||||
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<Recipe>
|
||||
{
|
||||
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<Recipe> {
|
||||
return americanRecipes +
|
||||
mexicanRecipes +
|
||||
SCPBPRecipes +
|
||||
everythingRecipe +
|
||||
remouladeRecipe +
|
||||
jamaicanRecipes +
|
||||
burntMisoRecipe
|
||||
}
|
||||
}
|
||||
|
||||
private object SouthAmericaRecipes {
|
||||
|
||||
private val brazilianRecipes = brazilianList
|
||||
private val peruvianRecipes = peruvianList
|
||||
|
||||
fun getAllRecipes() : List<Recipe>
|
||||
{
|
||||
return brazilianRecipes +
|
||||
peruvianRecipes
|
||||
}
|
||||
}
|
||||
|
||||
private object MiddleEastRecipes {
|
||||
|
||||
private val palestineRecipes = palestineList
|
||||
|
||||
fun getAllRecipes() : List<Recipe>
|
||||
{
|
||||
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<Recipe> {
|
||||
// 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<Recipe>
|
||||
// {
|
||||
// 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<Recipe> {
|
||||
// return americanRecipes +
|
||||
// mexicanRecipes +
|
||||
// SCPBPRecipes +
|
||||
// everythingRecipe +
|
||||
// remouladeRecipe +
|
||||
// jamaicanRecipes +
|
||||
// burntMisoRecipe
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//private object SouthAmericaRecipes {
|
||||
//
|
||||
// private val brazilianRecipes = brazilianList
|
||||
// private val peruvianRecipes = peruvianList
|
||||
//
|
||||
// fun getAllRecipes() : List<Recipe>
|
||||
// {
|
||||
// return brazilianRecipes +
|
||||
// peruvianRecipes
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//private object MiddleEastRecipes {
|
||||
//
|
||||
// private val palestineRecipes = palestineList
|
||||
//
|
||||
// fun getAllRecipes() : List<Recipe>
|
||||
// {
|
||||
// return palestineRecipes
|
||||
// }
|
||||
//
|
||||
//}
|
||||
|
||||
private object AfricaRecipes {
|
||||
|
||||
private val senegalRecipes = sengaleseList
|
||||
//private val senegalRecipes = sengaleseList
|
||||
private val kenyanRecipes = kenyanList
|
||||
|
||||
|
||||
fun getAllRecipes() : List<Recipe>
|
||||
{
|
||||
return senegalRecipes +
|
||||
kenyanRecipes
|
||||
//return senegalRecipes +
|
||||
return kenyanRecipes
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
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()
|
||||
}
|
||||
}
|
|
@ -27,8 +27,8 @@ data class Recipe(
|
|||
val prepTime: Duration = Duration.INFINITE,
|
||||
val cookTime: Duration = Duration.INFINITE,
|
||||
val servings: String = "Enough",
|
||||
val ingredients: List<String> = listOf(),
|
||||
val instructions: List<String> = listOf(),
|
||||
val ingredients: Map<String,Ingredient> = mapOf(),
|
||||
var instructions: List<String> = listOf(),
|
||||
val tags: Map<String, TagType> = mapOf(),
|
||||
val image: DrawableResource = Res.drawable._10_strawberries,
|
||||
val linkedRecipes : List<Recipe> = listOf(),
|
||||
|
@ -36,5 +36,18 @@ 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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ 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!",
|
||||
|
|
|
@ -5,7 +5,11 @@ 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(
|
||||
|
@ -14,42 +18,42 @@ val kenyanList = listOf(
|
|||
prepTime = Duration.parse("30m"),
|
||||
cookTime = Duration.parse("45m"),
|
||||
servings = "Serves 4-6",
|
||||
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."
|
||||
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")
|
||||
),
|
||||
instructions = listOf(),
|
||||
tags = mapOf(
|
||||
"Kenyan" to TagType.CUISINE,
|
||||
"African" to TagType.CUISINE,
|
||||
|
@ -67,5 +71,35 @@ 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."
|
||||
|
||||
)
|
||||
}
|
||||
)
|
|
@ -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>(
|
||||
// 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
|
||||
// )
|
||||
)
|
File diff suppressed because it is too large
Load diff
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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
|
||||
)
|
||||
//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
|
||||
//)
|
|
@ -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>(
|
||||
// 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
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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,
|
||||
)
|
||||
//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,
|
||||
//)
|
|
@ -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>(
|
||||
// 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,
|
||||
// ),
|
||||
)
|
File diff suppressed because it is too large
Load diff
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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
|
||||
//)
|
||||
|
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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)
|
||||
//)
|
||||
)
|
|
@ -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
|
||||
)
|
||||
//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
|
||||
//)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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,
|
||||
// )
|
||||
)
|
|
@ -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>(
|
||||
// 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
|
||||
// )
|
||||
)
|
|
@ -0,0 +1,41 @@
|
|||
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)),
|
||||
}
|
|
@ -0,0 +1,640 @@
|
|||
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<Unit, Unit> = 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<Unit, Unit> = 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<Unit> = arrayOf(
|
||||
Unit.KILOGRAM,
|
||||
Unit.GRAM,
|
||||
Unit.MILLILITER,
|
||||
Unit.LITER,
|
||||
Unit.CELSIUS
|
||||
)
|
||||
|
||||
/**
|
||||
* Array of units that are explicitly imperial
|
||||
*/
|
||||
val IMPERIAL_UNITS:Array<Unit> = 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
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
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",
|
||||
)
|
|
@ -28,6 +28,8 @@ 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(
|
||||
|
|
|
@ -20,7 +20,9 @@ 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
|
||||
|
@ -138,13 +140,13 @@ internal fun LazyListScope.ingredients(
|
|||
slider: Float,
|
||||
animate: Boolean
|
||||
){
|
||||
itemsIndexed(recipe.ingredients) { index, value ->
|
||||
itemsIndexed(recipe.ingredients.values.toList()) { index, value ->
|
||||
AnimateInEffect(
|
||||
intervalStart = (index + 1) / (recipe.ingredients.size + 1).toFloat(),
|
||||
recipe = recipe,
|
||||
animate = animate,
|
||||
content = {
|
||||
if (value.startsWith("HEADER-")) {
|
||||
if (value.name.startsWith("HEADER-")) {
|
||||
Column {
|
||||
HorizontalDivider(
|
||||
thickness = 2.dp,
|
||||
|
@ -152,14 +154,14 @@ internal fun LazyListScope.ingredients(
|
|||
modifier = Modifier.padding(top = 16.dp)
|
||||
)
|
||||
Text(
|
||||
text = value.removePrefix("HEADER-"),
|
||||
text = value.toString().removePrefix("HEADER-"),
|
||||
style = MaterialTheme.typography.headlineSmall,
|
||||
modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp)
|
||||
)
|
||||
|
||||
}
|
||||
} else {
|
||||
IngredientItem(recipe, scaleRecipeServings(value, slider), index)
|
||||
IngredientItem(recipe, value.scale(slider.toDouble()).toString(), index)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
|
@ -53,10 +53,9 @@ fun getFilteredRecipeList(
|
|||
//then filter by the search bar search
|
||||
recipes = recipes.filter {
|
||||
|
||||
it.ingredients.any { item ->
|
||||
|
||||
val actualIngredient = item.split(' ', limit = 3).getOrElse(2) { "" }
|
||||
it.ingredients.values.toList().any { item ->
|
||||
|
||||
val actualIngredient = item.name
|
||||
fuzzyPartialMatch(
|
||||
actualIngredient.lowercase(),
|
||||
search.lowercase(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue