By: Team W10-4 Since: SEP 2018 Licence: MIT

1. Introduction

Souschef is your smart cooking sidekick, offering personalised guidance every step of the way. From recipe recommendations just for you, to meal planning and inventory management, Sous Chef has everything you need to improve life in the kitchen. The application works with a Command Line Interface (CLI) for speedy provision of recipe choices, management of your cooking plan while guiding you through the preparation process. With a few commands, this kitchen helper will be there to keep cooking as simple as ABC. Get started with Section 2, “Quick Start” and experience the fun from cooking meals.

2. Quick Start

  1. Ensure you have Java version 9 or later installed in your Computer.

  2. Download the latest souschef.jar here.

  3. Copy the file to the folder you want to use as the home folder.

  4. Double-click the file to start the app. The GUI should appear in a few seconds.

    Ui
  5. Type the command in the command box and press Enter to execute it.
    e.g. typing -help and pressing Enter will open the help window.

  6. Some example commands you can try:

    • find KEYWORD…​ : search for recipes related and excluded from the keywords (only within recipe context)

    • -mealplanner : Switch to meal planner context and display personal meal schedule

    • -exit : exits the app

  7. Refer to Section 3, “Features” for details of each command.

3. Features

In Sous Chef, there are 2 types of command: universal commands and context-unique commands.

The universal commands can be used throughout the application and perform application-wide action. You can identify a universal command from its "-" convention followed by a keyword (e.g. -exit).

The context-unique commands on the other hand are only valid for that context. (e.g. Section 3.2, “Recipes Commands (Only applicable in recipe context)” can only be used in -recipe context). These commands contains only a action key word followed by the required parameters, if any. (e.g. select INDEX)

Command Format Convention

  • Words in UPPER_CASE are the parameters to be supplied by the user e.g. in add n/NAME c/COOKTIME d/DIFFICULTY [t/TAG], NAME, COOKTIME and DIFFICULTY and TAG are parameters are to be replaced: add n/Fried Chicken d/2 c/20M t/Fastfood.

  • Items in square brackets are optional (i.e. can be omitted).

  • Items with ​ after them can be used multiple times e.g. [t/TAG]…​ can be used 1 or more: t/Japanese, t/Halal t/Seafood etc. With [] it can also be omitted totally too.

3.1. Universal Commands

3.1.1. View help: -help

To view the help menu containing all the universal commands.
Format:
-help

3.1.2. View history: -history

To view previous commands entered.
Format:
-history

3.1.3. Switch to recipe context: -recipe

Switch to recipe context and display recipes.
See Section 3.2, “Recipes Commands (Only applicable in recipe context)” to view commands for recipe context.
Format:
-recipe

3.1.4. Switch to ingredient manager context: -ingredient

Switch to ingredient manager context and display ingredient manager, which helps stock tracking of ingredient that the user currently have.
See Section 3.3, “Ingredient Manager Commands (Only applicable in ingredient context)” to view commands for ingredient manager context.
Format:
-ingredient

3.1.5. Switch to favourites context: -favourite

Switch to favourites context and display favourites list, which keeps a list of all the users' favourite recipes.
See Section 3.4, “Favourite Recipe Commands (Only applicable in favourites context)” to view commands for favourites context.
Format:
-favourite

3.1.6. Switch to ingredient-recipe query context: -cross

Switch to ingredient-recipe query context and where you can sort, filter the recipe list by name of ingredients included and get information of needed amounts of ingredients.
See Section 3.5, “Ingredient-Recipe Query Commands (Only applicable in cross context)” to view commands for ingredient-recipe query context.
Format:
-cross

3.1.7. Switch to meal planner context: -mealplanner

Switch to meal planner context and display the planned meals for breakfast, lunch and dinner for previously planned days.
See Section 3.6, “Meal Planner Commands (Only applicable in meal planner context)” to view commands for meal planner context.
Format:
-mealplanner

3.1.8. Switch to health plan context: -healthplan

Switch to health plan context and display health plan set by the user and the days added into the plan which is tied to meal plans.
See Section 3.7, “Health Plan Commands (Only applicable in health plan context)” to view commands for health plan context.
Format:
-healthplan

3.2. Recipes Commands (Only applicable in recipe context)

3.2.1. List recipes: list

Show all recipes.
Format:
list

3.2.2. Add a recipe: add cont end

Add new recipe.
Format:
add n/NAME c/COOKTIME d/DIFFICULTY [t/TAG]…​
cont i/INSTRUCTION…​ [c/COOKTIME]
cont…​
end


INSTRUCTION:
TEXT…​ [#INGREDIENT_NAME AMOUNT SERVING_UNIT]…​

Full set of commands add cont end must be performed for the adding of recipe to be completed.

  • This is a multi-line command. (i.e. add, cont and end must be in a seperate command entry)

  • Command starts with add and should include name, cook time and difficulty. Tags can be added as required.

    • NAME should come with any alphanumeric characters.

    • COOKTIME should have a integer value each with a postfix of H/M/S. A mixture of up to 2 postfixes are allowed i.e. H & M or M & S. Valid examples: 1H15M, 30M20S, 35M.

    • DIFFICULTY should range from 1 to 5.

    • TAG should come with any alphanumberic character.

  • Subsequence lines must start with cont and should only include details on one instructional step each.

    • Details to be included are instruction text, instruction exclusive cook time (optional) and ingredients (optional).

    • Instruction will be saved in the same sequence as it is inputted.

    • Ingredients can be embedded into instruction text via #INGREDIENT_NAME AMOUNT SERVING_UNIT.

      • Compound INGREDIENT_NAME is acceptable. e.g. Bleached Wheat Flour.

      • AMOUNT accepts both integer and decimal. Decimal must come with a leading 0 for values less than 1. e.g. 0.25

      • SERVING_UNIT should be single-worded. e.g. gram, g, ml.

  • User can perform other commands and continue adding instructions as required. cont command need not be continuous.

  • To overwrite existing recipe that has yet been added (i.e. end command not used), simply use the add command and enter a new recipe details as desired.

  • The end command record and save the recipe.

Recipes containing the same name, difficulty and cooktime are considered as duplicates and is not be allowed.

Examples:

  • add n/Chicken Rice d/2 c/45M
    cont i/Clean and cut #chicken 1.2 kg.
    cont i/Put the chicken in #boiled water 900 ml for 10 mins. c/10M
    cont i/Remove the chicken and put #soy sauce 100 ml.
    cont i/Cook for another 20 mins. c/20M
    end

3.2.3. Edit a recipe: edit

Edit new recipe.
Format:
edit INDEX [n/NAME] [c/COOKTIME] [d/DIFFICULTY] [t/TAG]…​
or
edit INDEX s/STEP i/INSTRUCTION [c/COOKTIME]

INSTRUCTION:
TEXT…​ [#INGREDIENT_NAME AMOUNT SERVING_UNIT]…​

  • Attributes included are to be edited on a replacement basis (not concatenation e.g. tags are being replaced and not added)

  • INDEX should be the index number of the recipe displayed.

  • There are 2 types of edit command.

    • First: Used to edit recipe generic information namely name, cook time, difficulty and tags.

      • NAME should come with any alphanumeric characters.

      • COOKTIME should have a integer value each with a postfix of H/M/S. A mixture of up to 2 postfixes are allowed i.e. H & M or M & S. Valid examples: 1H15M, 30M20S, 35M.

      • DIFFICULTY should range from 1 to 5.

      • TAG should come with any alphanumberic character.

    • Second: Used to edit/add a single instruction of/to that recipe.

      • STEP refers to the instruction number of the recipe. It should be existing instruction to replace the instruction or a number higher than highest existing STEP to add. (e.g. 6 existing instruction steps, use s/7 to add instead of replace)

      • INSTRUCTION must be included and should come with any alphanumeric characters. Ingredients can be added using #INGREDIENT_NAME AMOUNT SERVING_UNIT as required.

      • COOKTIME should have a integer value each with a postfix of H/M/S. A mixture of up to 2 postfixes are allowed i.e. H & M or M & S. Valid examples: 1H15M, 30M20S, 35M.

Examples:

  • edit 1 c/20M t/Asian t/Staple

  • edit 1 s/2 i/Pour #water 300 ml into the mix.

3.2.4. Display recipe details: select

View a recipe and its details from the list.
Format:
select INDEX

  • INDEX should be the index number of the recipe displayed.

  • All serving unit will be converted (approximately) to our common serving unit "gram" for display.

3.2.5. Search recipes: find

Show recipes related to the keyword(s). Keywords include but not limited to cuisines (Indian, Japanese), dietary types (Vegetarian, Halal), ingredients (egg, broccoli), preparation time (30M, 1H40M) and difficulty (1, 2, …​, 5).
Format:
find KEYWORD…​

  • KEYWORD is case insensitive.

  • The order of keywords does not matter.

Examples:

  • find rice asian 3

  • find korean kimchi staple

3.2.6. Delete recipe: delete

Delete a recipe and its details from the list.
Format:
delete INDEX

  • INDEX should be the index number of the recipe displayed.

3.2.7. Activate cook-mode [coming in V2.0]: cook

A cook mode that provides step-by-step guidance to aid real-time cooking.
Format:
cook INDEX

  • INDEX should be the index number of the recipe displayed.

3.2.8. Add recipe to favourite: favourite

Add a recipe to their favourites list.
Format:
favourite INDEX

  • INDEX should be the index number of the recipe displayed.

3.2.9. Surprise: surprise

Displays a random recipe for the user. If you cannot make up your mind, why not key this in for a surprise?
Format:
surprise ==== Add to meal plan: plan Add a specified recipe to meal plan.
Format:
plan INDEX DATE MEAL

  • INDEX should be the index number of the recipe displayed.

  • DATE should be entered in the format yyyy-mm-dd.

  • MEAL can be specified with the following keywords: breakfast, lunch, dinner.

3.2.10. Add to review [coming in V2.0]: review

Add comment and rating to current recipe.
Format:
review [COMMENT] RATING

  • Local command on recipe page.

  • Rating must be between 1 to 5.

3.3. Ingredient Manager Commands (Only applicable in ingredient context)

3.3.1. Add an ingredient: add

Adds an ingredient to the ingredient manager.
Format:
add NAME AMOUNT SERVING_UNIT DATE

  • For compound word, ‘_’ is used to separate words.

  • Serving units are pre-defined in the serving unit dictionary. Those undefined in the dictionary are not available.

  • Currently available serving units are gram(g), kilogram(kg), pinch, piece, whole, clove, cm3, ml, l, tablespoon, teaspoon and cup.

  • Amounts are converted with common serving unit(e.g. gram).

  • Format for date should be MONTH-DAY-YEAR.

  • Date is meant to be the date of input, but it is up to user to tweak its usage. For example, it can be used to show expiry date.

  • It is not allowed to add ingredients with same name and same date. To add in more amount, edit function should be used instead.

3.3.2. Sort and list all ingredients: list

Shows a list of ingredients in ingredient manager. Ingredients are sorted by date, so that the ingredients with earlier date are placed high in order.
Format:
list

3.3.3. Edit ingredient info: edit

Edit an existing ingredient in ingredient manager.
Format:
edit INDEX FIELD_NAME NEW_VALUE [MORE FIELD_NAME NEW_VALUE]…​

  • Field name is either name, amount, or date.

  • Restrictions for respective field’s input are same as in add command(3.3.1.).

3.3.4. Find ingredient: find

Find ingredients in ingredient manager whose name contains any of the given keywords.
Format:
find KEYWORD [MORE_KEYWORDS]…​

  • Only the name is searched.

  • Match by full words.

3.3.5. Delete ingredient: delete

Delete ingredient in ingredient manager according to its index in the last shown list.
Format:
delete INDEX

3.3.6. Clear all ingredients: clear

Clears all ingredients in ingredient manager.
Format:
clear

3.4. Favourite Recipe Commands (Only applicable in favourites context)

3.4.1. List favourite recipes: list

Show all favourite recipes.
Format:
list

3.4.2. Display favourite recipe details: select

View a favourite recipe and its details from the list.
Format:
select INDEX

  • INDEX should be as displayed in the list.

  • All serving unit will be converted (approximately) to our common serving unit "gram" for display.

3.4.3. Find favourite recipe: find

Show favourite recipes related to the keyword(s). Keywords include but not limited to cuisines (Indian, Japanese), dietary types (Vegetarian, Halal), ingredients (egg, broccoli), preparation time (30M, 1H40M) and difficulty (1, 2, …​, 5).
Format:
find KEYWORD…​

  • KEYWORD is case insensitive.

  • The order of keywords does not matter.

Examples:

  • find rice asian 3

  • find korean kimchi staple

3.4.4. Delete favourite recipe: delete

Delete favourite recipe in favourites according to its index in the last shown list.
Format:
delete INDEX

3.4.5. Clear all favourite recipes: clear

Clears all favourite recipes in favourites.
Format:
clear

3.5. Ingredient-Recipe Query Commands (Only applicable in cross context)

3.5.1. View Recipes based on Ingredients view

By default, the page show the recipe list that is same with the recipe list shown in recipe context at the point of initiation of the application. User can filter or sort the recipes based on ingredients contained in recipes. Also, needed amounts of ingredients are calculated by considering the number of serving units and ingredients stored in ingredient manager, so that user can take a look by applying select command later.
Format:
view NUMBER_OF_SERVINGS [include [inventory] KEYWORD [MORE_KEYWORDS]…​] [prioritize [inventory] KEYWORD [MORE_KEYWORDS]…​]

  • Number of servings can be a floating point value.

  • Names of ingredients are used as keywords. If the keyword is a compound word, '_' is used to separate between the words. (For example, spring_onion)

  • "include" keyword filters the list, only leaving the recipes that includes all of following ingredients in the list.

  • "prioritize" keyword sorts the recipes based on number of the following ingredients contained. Recipes containing the most number of following ingredients would be placed high in order.

  • "include" part and "prioritize" part is optional. It is possible that only one of either part is provided. (For example, "view 1 prioritize onion") If both are not provided(For example, "view 4"), recipe list remains the same and only the number of servings are considered for calculation of needed amounts ingredients.

  • "inventory" keyword provides all the ingredients in Ingredient Manager as parameter to the keyword it follows.

  • It is not allowed to provide same ingredient as a parameter for both "include" and "prioritize" part. This is also applicable for "inventory" parameter becasues it is also a set of ingredients.

3.5.2. View needed amounts of ingredients for a Recipe select

For a recipe in the list shown as a result of above command(3.4.1.), user can view amounts of respective ingredient in the recipe that needs to be additionally prepared. It reflects number of serving units and refers to Ingredient Manager to get the amount of ingredients the user currently have.
Format:
select INDEX

  • Amounts of necessary ingredients are calculated based on the information in Ingredient Manager.
    e.g. If positive, (Number of Servings × Total Amount of an ingredient for a Recipe - Amount of an ingredient stored in ingredient manager). Otherwise, 0.

3.5.3. List all recipes and undo calculation: list

Shows a list of recipes. It restores the default state of the list, undoing the calculation resulting from 'view recipes based on ingredients' command(3.4.1.).
Format:
list

3.6. Meal Planner Commands (Only applicable in meal planner context)

  • DATE should be entered in the format yyyy-mm-dd

  • MEAL can be specified with the following keywords: breakfast, lunch, dinner

3.6.1. Delete recipe: delete

After displaying the meal planner, deletes the specified day.

Format: delete INDEX

Clears all the meal slots of the meal planner.

Format: clear

3.6.2. Select recipe: select

Selects and views the details of a recipe at a specified meal slot of a specified day.

Format: select INDEX MEAL

3.6.3. Find recipe: find

Finds the Day with the specified date.

Format: find DATE

3.6.4. List all recipes: list

Lists all the currently planned Days in the Meal Planner.

Format: list

3.7. Health Plan Commands (Only applicable in health plan context)

3.7.1. Add plan: add

Adds a health plan under the user.
Required parameters are NAME, AGE, CURRENT HEIGHT, CURRENT WEIGHT,
TARGET WEIGHT, AND DURATION

Format:
add n/NAME a/AGE h/HEIGHT w/CURRENT_WEIGHT t/TARGET_WEIGHT d/DURATION

  • Height is numeric and input is of centimetre units

  • Current weight is numeric and input is of Kilogram units

  • Target Weight is numeric and input is of Kilogram units

  • AGE must be numeric

  • DURATION specifies an integer input of time in days desired by user to achieve said GOAL, has to be numeric and more than 0

3.7.2. Delete plan: delete

After listing the list of health plans by user.
Deletes the plan selected by user.
Format:
delete INDEX

  • INDEX has to be numeric and more than 0

3.7.3. Edit plan: edit

After listing the list of health plans by User.
Prompts for edit on the plan selected by the user.
Format :
edit INDEX [n/NAME] [a/AGE] [t/TARGET_WEIGHT] [h/HEIGHT] [w/CURRENT_WEIGHT] [d/DURATION]

  • INDEX specifies the entry to edit, has to be numeric and more than 0

  • Height is numeric, be more than 0 and input is of centimetre units

  • Current weight is numeric, be more than 0 and input is of Kilogram units

  • Target Weight is numeric, be more than 0 and input is of Kilogram units

  • AGE must be numeric and more than 0

  • DURATION specifies an integer input of time in days desired by user to achieve said GOAL, has to be numeric and more than 0

3.7.4. Add current intake item: addDay

After being shown the meal planner list by the system
User selects to add to intake List
Format:
addDay p/PLAN_INDEX d/DAY_INDEX

  • Plan Index specifies the plan to add to, has to be more than 0 and be a valid index on the list

  • Day index specifies the day to add into the specified plan, has to be more than 0 and be a valid index on the list

3.7.5. Remove current intake item: deleteDay

After being shown the list of days from intake list
User selects day to remove and also the plan to remove from
Format:
deleteDay p/PLAN_INDEX d/DAY_INDEX

  • Plan Index specifies the plan to delete from, has to be more than 0 and be a valid index on the list

  • Day index specifies the day to delete from the specified plan, has to be more than 0 and be a valid index on the list

3.7.6. Show Meal Planner list beside Health Plan List : showMeal

User enters command to view the full list of meals beside the health plan list Format:
showMeal

3.7.7. Hide view on the right : hideMeal

User enters command to hide any view that is currently displayed on the right Format:
hideMeal

3.7.8. View plan details : showDetails

After shown the list of health plans by the system
User enters command to see the details of the plan specified
Format:
showDetails INDEX

  • INDEX is the target plan to view details, needs to be numeric more than 0 and be a valid index found on the list

3.7.9. Compare overall intake against : compareIntake [coming in V2.0]

After being shown list of health plans
User enters command to compare against set health plan.
Format:
compareIntake PLAN_ID

3.8. Cook-Mode Commands [coming in V2.0]

3.8.1. Next Instruction

Proceed to next instruction.
Format:
Hit Enter key

3.8.2. Previous Instruction: b

Revert to previous instruction.
Format:
b/back

3.8.3. Start timer: s

Begin countdown timer.
Format:
s/start

3.8.4. Pause timer: p

Pause countdown timer.
Format:
p/pause

3.8.5. Reset timer: r

End/Reset countdown timer.
Format:
r/reset

3.8.6. End cook-mode: end

To end step-by-step instruction of cook-mode.
Format:
end

4. FAQ

Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous Souschef folder.

5. Command Summary

Universal Commands

  • View help: -help

  • View history: -history

  • Switch to recipe context: -recipe

  • Switch to ingredient manager context: -ingredient

  • Switch to ingredient-recipe query context: -cross

  • Switch to meal planner context: -mealplanner

  • Switch to health plan context: -healthplan

  • Exit application: -exit

Recipes Commands (Only applicable in recipe context)

  • List recipes: list

  • Add a recipe: add n/NAME c/COOKTIME d/DIFFICULTY [t/TAG]…​
    cont i/INSTRUCTION [c/COOKTIME]
    cont…​
    end

    • INSTRUCTION: [TEXT]…​ [#INGREDIENT_NAME AMOUNT SERVING_UNIT]…​

  • Edit a recipe:
    edit INDEX [n/NAME] [c/COOKTIME] [d/DIFFICULTY] [t/TAG]…​
    or
    edit INDEX s/STEP i/INSTRUCTION [c/COOKTIME]

    • INSTRUCTION: TEXT…​ [#INGREDIENT_NAME AMOUNT SERVING_UNIT]…​

  • Display recipe details: select INDEX

  • Search recipes: find KEYWORD…​

  • Delete recipe details: delete INDEX

  • Activate cook-mode [coming in V2.0]: cook INDEX

  • Add recipe to favourite: favourite

  • Add to meal plan: plan INDEX DATE MEAL

  • Add to review [Coming in V2.0]: review [COMMENT] RATING

Ingredient Manager Commands (Only applicable in ingredient context)

  • Add an ingredient: add NAME AMOUNT SERVING_UNIT DATE

  • Sort and list all ingredients: list

  • Edit ingredient info: edit INDEX FIELD_NAME NEW_INFO [MORE FIELD_NAME NEW_INFO]…​

  • Find ingredient: find KEYWORD [MORE_KEYWORDS]…​

  • Delete ingredient: delete INDEX

  • Clear all ingredients: clear

Recipe-Ingredient Query Commands (Only applicable in cross context)

  • View Recipe based on Ingredients: view NUMBER_OF_SERVINGS [include [inventory] KEYWORD [MORE_KEYWORDS]…​] [prioritize [inventory] KEYWORD [MORE_KEYWORDS]…​]

  • View needed amount of ingredients for a Recipe: select INDEX

  • List all recipes and undo calculation: list

Meal Planner Commands (Only applicable in meal planner context)

  • Delete day: delete INDEX

  • Clear planner: clear

  • View recipe details: select INDEX MEAL

  • Find recipe by date: find DATE

  • List all recipes: list

Health Plan Commands

  • Add health plan: add n/NAME a/AGE h/HEIGHT w/CURRENT_WEIGHT t/TARGET_WEIGHT d/DURATION

  • Delete health plan delete INDEX

  • Edit health plan: edit INDEX [n/NAME] [a/AGE] [t/TARGET_WEIGHT] [h/HEIGHT] [w/CURRENT_WEIGHT] [d/DURATION]

  • Show all current meals planned in system: showMeal

  • Hide panels on the right: hideMeal

  • Show details of a health plan: showDetails INDEX

  • Add a day from meal planner into a health plan: addDay p/PLAN_INDEX d/DAY_INDEX

  • Remove a day from the list of meals in health plan: deleteDay p/PLAN_INDEX d/DAY_INDEX

Cook-Mode Commands [coming in V2.0]

  • Next Instruction: Hit Enter key

  • Previous Instruction: b

  • Start timer: s

  • Pause timer: p

  • Reset timer: r

  • End cook-mode: end