User Guide
ReadyBakey is a desktop app that manages orders and customer contact information, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). It assists small bakeries by consolidating all the necessary requirements and information for successful order management.
Table of Contents
- Quick Start
-
Features
- Viewing help : help
- Customer Commands
- Order Commands
- Clearing all Customers and Orders: clear
- Exiting the program : exit
- Using Natural Dates
- Saving the data
- Editing the data file
- FAQ
- Command Summary
Quick start
-
Ensure you have Java
11
or above installed in your Computer. -
Download the latest
readybakey.jar
from here. -
Copy the file to the folder you want to use as the home folder for your ReadyBakey.
-
Open a command window in that folder
-
Run the command
java -jar readybakey.jar
(i.e., run the command in the same folder as the jar file) -
The GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
-
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.
Some example commands you can try:
-
listo
: Lists all orders. -
addp
n/John Doe p/98765432 e/johnd@example.com a/311, Clementi Ave 2, #02-25
: Adds a customer namedJohn Doe
to ReadyBakey’s contact list together with the necessary phone number, email and address. -
deletep
3
: Deletes the 3rd customer from ReadyBakey’s contact list. -
clear
: Clears all data in ReadyBakey. -
exit
: Exits the app.
Refer to the Features below for details of each command.
Features
Notes about the command format:
-
Command keywords i.e.
addo
editp
, has to be in lowercase. e.g.addo ...
is an acceptable keyword, butADDO..
is not acceptable. -
Prefixes used in command input has to be in lowercase. e.g.
add n/NAME...
, usesn/
butN/
is not acceptable. -
Words in
UPPER_CASE
are the parameters to be supplied by the user.
e.g. inadd n/NAME
,NAME
is a parameter which can be used asadd n/John Doe
. -
Items in square brackets are optional.
e.gn/NAME [t/TAG]
can be used asn/John Doe t/friend
or asn/John Doe
. -
Items with
…
after them can be used multiple times including zero times.
e.g.[t/TAG]…
can be used ast/friend
,t/friend t/family
etc. -
Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER
,p/PHONE_NUMBER n/NAME
is also acceptable. -
If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specifyp/12341234 p/56785678
, onlyp/56785678
will be taken. -
Extraneous parameters for commands that do not take in parameters (such as
help
,listo
,exit
andclear
) will be ignored.
e.g. if the command specifieshelp 123
, it will be interpreted ashelp
.
Viewing help : help
Shows a message explaining how to access the help page.
Format: help
Adding a customer: addp
Adds a customer to ReadyBakey’s contact list
- A customer’s name and phone number must not have appeared in ReadyBakey’s customer list. If it is not unique, you will not be allowed to add the customer.
Format: addp n/NAME p/PHONE e/EMAIL a/ADDRESS [r/REMARK] [t/TAG]…
- Names must be between 2 and 50 characters long and must only contain alphanumeric characters and spaces.
- The length of the
PHONE
must be between 3 and 15 numbers.- It does not allow for spaces or dashes as well.
- The length of the
EMAIL
must be between 6 and 50 characters.- It should be in the format
local-part@domain
and adhere to the following constraints:- The local-part should only contain alphanumeric characters and these special characters (+_.-), excluding the parentheses. The local-part may not start or end with any special characters.
- This is followed by a ‘@’ and then a domain name. The domain name is made up of domain labels separated by periods.
- The domain name must:
- end with a domain label at least 2 characters long
- have each domain label start and end with alphanumeric characters
- have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
- It should be in the format
- The length of the
ADDRESS
must be between 6 (inclusive) and 70 (inclusive) characters.- E.g. Keying in
a/short1
is acceptable but nota/short
.
- E.g. Keying in
- The length of the
REMARK
must be less than or equal to 70 characters. - The length of a tag must be less than or equal to 70 characters.
- The tag prefix cannot be left empty E.g.
t/
, an error will be thrown to the user.
- The tag prefix cannot be left empty E.g.
Examples:
-
addp n/John Doe p/98765432 e/johnd@example.com a/311, Clementi Ave 2, #02-25 r/Allergic to Peanuts t/Member t/Regular
adds a new customer to ReadyBakey with the name John Doe, phone number 98765432, email johnd@example. com, address 311, Clementi Ave 2, #02-25, with the remark that he is “Allergic to Peanuts”. He also tagged as a Member and also a Regular.
Delete a customer: deletep
Removes a customer from ReadyBakey’s contact list
Format: deletep INDEX
- Deletes the customer at the specified INDEX.
- The
INDEX
refers to the index number shown in the displayed customer list. - The
INDEX
must be a positive integer 1, 2, 3, … - Only customers with no orders can be deleted.
Examples:
-
deletep 2
deletes the customer at index 2 from ReadyBakey.
Listing all customers: listp
Shows a list of all customers in ReadyBakey.
Format: listp
Examples:
-
listp
lists all the customer in ReadyBakey.
Editing a customer’s information : editp
Edits an existing customer in ReadyBakey’s contact list.
Format: editp INDEX (must be a positive integer) [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/REMARK] [t/TAG]…
- Edits the customer at the specified
INDEX
. - The
INDEX
refers to the index number shown in the displayed customer list. - The
INDEX
must be a positive integer 1, 2, 3, … - At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
- Names must be between 2 and 50 characters long and must only contain alphanumeric characters and spaces.
- The length of the
PHONE
must be 3 to 15 numbers - The length of the
EMAIL
must be between 6 and 50 characters.- It should be in the format
local-part@domain
and adhere to the following constraints:- The local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters.
- This is followed by a ‘@’ and then a domain name. The domain name is made up of domain labels separated by periods.
- The domain name must:
- end with a domain label at least 2 characters long
- have each domain label start and end with alphanumeric characters
- have each domain label consist of alphanumeric characters, separated only by hyphens, if any.
- It should be in the format
- The length of the
ADDRESS
must be between 6 and 70 characters - The length of the
REMARK
must be less than or equal to 70 characters - The length of a tag must be less than or equal to 70 characters.
- If the tag prefix is left empty E.g.
t/
, it will remove all tags that are currently associated to the customer - If any tags are provided, existing tags will be removed and replaced by the tags provided
- If the tag prefix is left empty E.g.
Examples:
-
editp 1 p/83456789 e/declan@example.com
Edits the phone number and email address of the 1st customer to be83456789
anddeclan@example.com
respectively. -
editp 2 n/Declan
Edits the name of the 2nd customer to beDeclan
.
Locating customers by specific attribute: findp
Finds customer(s) whose name(s) contain any of the given keywords.
Format: findp [ATTRIBUTE] KEYWORD [MORE_KEYWORDS]
- The supported attributes are
n/
,p/
,e/
,a/
,r/
- The search is case-insensitive. e.g
gerald
will matchGerald
- The order of the keywords does not matter. e.g.
Gerald Tan
will matchTan Gerald
- Only the attribute specified is searched.
- Multiple attributes searching at the same time is not allowed. e.g.
findp n/Gerald r/Allergic
- Multiple attributes searching at the same time is not allowed. e.g.
- Multiple
[KEYWORDS]
provided will be split up by whitespace and searched individually-
findp n/Declan Gerald
will search for bothDeclan
andGerald
-
- Only full words will be matched e.g.
Gerald
will not matchGeralds
- Customers matching at least one keyword will be returned (i.e.
OR
search). e.g.Gerald Tan
will returnGerald Lim
,Gerald Lee
Examples:
-
findp n/Gerald
returns customers with names containingGerald
such asgerald
andGerald Tan
. -
findp n/alex david
returns customers with names containingalex
ordavid
such asAlex Yeoh
,David Li
. -
findp p/90029382
returns customers with the phone number90029382
. -
findp e/alex@abc.com
returns customers with the email addressalex@abc.com
. -
findp a/serangoon
returns customers with addresses containingserangoon
such asBlk 1 Serangoon Street 5
. -
findp r/Allergic
returns customers with remarks containingAllergic
such asAllergic to Tomatoes
Adding an order : addo
Adds an order to ReadyBakey’s order list.
Format: addo p/PHONE c/DELIVERYDATETIME m/COLLECTION_TYPE d/DETAILS… [r/REMARK]
-
p/PHONE
must be a phone number that is already stored in ReadyBakey’s customer list -
c/DELIVERYDATETIME
accepts dates in the past for record keeping purposes- It accepts datetimes in the form of
dd-mm-yyyy HH:mm
. e.g.01-01-2022 10:30
. - It can also accept natural dates with time. e.g.
Monday 10:30
orMon 10:30
. Natural dates are not case-sensitive.
- It accepts datetimes in the form of
-
d/DETAILS
accept values in the form [quantity]:[description]. It can also take in multiple details- A single Order accepts at least 1 detail and a maximum of 5 details.
- [quantity] is an integer that belongs to a range between 1 to 99.
- [description] cannot exceed the maximum length of 30 characters.
-
m/COLLECTION_TYPE
only accepts [delivery OR pickup] (case-insensitive) -
[r/REMARK]
The length of theREMARK
must be less than or equal to 70 characters. -
d/DETAIL
The length ofDETAIL
must be less than or equal to 70 characters.
Examples:
-
addo p/98765432 d/1: Jerry Favourite Cheese Cake c/25-12-2022 15:30 m/Delivery r/Add Cheese
adds an order with phone number 98765432, order details of 1: Jerry Favourite Cheese Cake, to be delivered on 25th December 2022 with a remark of “Add Cheese”.
Delete an order: deleteo
Removes an order from ReadyBakey
Format: deleteo INDEX
- Deletes the order at the specified
INDEX
- The
INDEX
refers to the index number shown in the displayed orders list. - The
INDEX
must be a positive integer 1, 2, 3, …
Examples:
-
deleteo 2
deletes an order from the Order list with the index of 2.
Listing all orders: listo
Shows a list of all orders in ReadyBakey
Format: listo
Examples:
listo
Editing an order’s information : edito
Edits an existing customer in ReadyBakey’s contact list.
Format: edito INDEX [c/DELIVERYDATETIME] [m/COLLECTION_TYPE] [d/DETAIL]… [r/REMARK]
- Edits the order at the specified
INDEX
- The
INDEX
refers to the index number shown in the displayed orders list. - The
INDEX
must be a positive integer 1, 2, 3, … -
[c/DELIVERYDATETIME]
accepts dates in the past for record keeping purposes- It accepts datetimes in the form of
dd-mm-yyyy HH:mm
. e.g.01-01-2022 10:30
. - It can also accept natural dates with time. e.g.
Monday 10:30
orMon 10:30
. Natural dates are not case-sensitive.
- It accepts datetimes in the form of
-
[m/COLLECTION_TYPE]
only accepts [delivery OR pickup] (case-insensitive) -
[d/DETAILS]
accept values in the form [quantity]:[description]. It can also take in multiple details- A single Order accepts at least 1 detail and a maximum of 5 details.
- [quantity] is an integer that belongs to a range between 1 to 99.
- [description] cannot exceed the maximum length of 30 characters.
- If the detail prefix is left empty E.g.
d/
, it will remove all details that are currently associated to the order - If any details are provided, existing details will be removed and replaced by the details provided
-
[r/REMARK]
The length of theREMARK
must be less than or equal to 70 characters.
Examples:
-
edito 1 d/1: black forest cake
- Edits the details of the 1st order to be
1: black forest cake
.
- Edits the details of the 1st order to be
-
edito 1 d/1: black forest cake d/2: Chocolate Cake
- Edits the details of the 1st order to be
1: black forest cake
and2: Chocolate Cake
.- In this case, to add two details to the order, each
d/
is for one detail.
- In this case, to add two details to the order, each
- Edits the details of the 1st order to be
-
edito 2 r/Two candles
- Edits the 2nd order’s remarks to be
Two candles
.
- Edits the 2nd order’s remarks to be
-
edito 2 m/Delivery
- Edits the 2nd order’s collection type to be
Delivery
.
- Edits the 2nd order’s collection type to be
-
edito 3 c/Monday 10:30
- Edits the 3rd order’s collection time to be
Monday, 04 Apr 2022, 10:30
.
- Edits the 3rd order’s collection time to be
-
edito 3 c/04-04-2022 10:30
- Edits the 3rd order’s collection time to be
Monday, 04 Apr 2022, 10:30
.
- Edits the 3rd order’s collection time to be
-
edito 1 d/1: black forest cake d/1: Cheese cake c/04-04-2022 10:30 m/Delivery r/Two candles
- Edits the first order to have order details with
1: black forest cake
and1: Cheese cake
. - The order delivery date is also now edited to be
Monday, 04 Apr 2022, 10:30
. - Collection type is changed to
Delivery
. - Detail remarks is also changed to
Two candles
- Edits the first order to have order details with
Locating orders by specific attribute: findo
Finds order(s) whose specific attribute contain any of the given keywords.
Format: findo [ATTRIBUTE] KEYWORD [MORE_KEYWORDS]
- The supported attributes are
- Order’s customer’s name:
n/
- Order’s customer’s phone number:
p/
- Order’s details:
d/
- Order’s collection type:
m/
- Order’s remarks:
r/
- Finding orders based on
c/DELIVERYDATETIME
is not supported in this command because the commandincompleteo
serves this purpose
- Order’s customer’s name:
- Only the attribute specified is searched.
- Multiple attributes searching at the same time is not allowed. e.g.
findo n/Gerald d/Cake
- For findo
d/[keyword]
, the keyword should only be the description of the detail and not the quantity- Valid Example:
findo d/Cake
- Invalid Example:
findo d/1:Cake
- Valid Example:
- Multiple attributes searching at the same time is not allowed. e.g.
- The search is case-insensitive. e.g
cake
will matchCake
- The order of the keywords does not matter. e.g.
banana cake
will matchcake banana
- Only full words will be matched e.g.
Cake
will not matchCakes
- Multiple
[KEYWORDS]
provided will be split up by whitespace and searched individually-
findo n/Declan Bob
will search for bothDeclan
andBob
-
- Orders matching at least one keyword will be returned (i.e.
OR
search). e.g.Banana Cake
will returnBanana Leaf
,Strawberry Cake
Examples:
-
findo n/Declan
returns orders with names containingDeclan
such asdeclan
andDeclan Lee
. -
findo p/90029382
returns orders with the phone number90029382
-
findo d/cake
returns orders with details containingcake
such asCake
andBanana Cake
. -
findo m/delivery
returns orders with the collection typeDelivery
-
findo r/birthday
returns order with remarks containingbirthday
such asBirthday celebration
andBirthday
Mark orders as complete: marko
Marks an order as complete in ReadyBakey
Format: marko INDEX
- Marks the order at the specified
INDEX
- The
INDEX
refers to the index number shown in the displayed orders list. - The
INDEX
must be a positive integer 1, 2, 3, … - If a complete order is marked again, it will remain as marked and no error will be thrown.
Examples:
-
marko 1
marks the first order as completed.
Marks orders as incomplete: unmarko
Marks an order as incomplete in ReadyBakey.
Format: unmarko INDEX
- Unmarks the order at the specified
INDEX
- The
INDEX
refers to the index number shown in the displayed orders list. - The
INDEX
must be a positive integer 1, 2, 3, …. - If an incomplete order is unmarked again, it will remain as unmarked and no error will be thrown.
Examples:
-
unmarko 1
marks the first order as incomplete.
Listing all incomplete orders: incompleteo
Shows a list of all incomplete orders in ReadyBakey before and during a given date and time
Format: incompleteo DELIVERYDATETIME
- Orders that are incomplete before and during
DELIVERYDATETIME
will be displayed - It accepts datetimes in the form of
dd-mm-yyyy HH:mm
. e.g.01-01-2022 10:30
. - It can also accept natural dates with time. e.g.
Monday 10:30
orMon 10:30
. Natural dates are not case-sensitive.
Examples:
-
incompleteo 25-12-2022 15:30
returns all orders which are marked incomplete and are due before 25th December 2022 at 3.30pm (inclusive) in the Orders List. -
incompleteo Monday 15:30
returns all orders which are marked incomplete and are due before the nearest Monday at 3.30pm (inclusive) in the Orders List.
Clearing all Customers and Orders: clear
Removes all customers and orders stored in ReadyBakey
Format: clear
Examples:
-
clear
clears all of the customers and orders stored in ReadyBakey.
Exiting the program : exit
Exits the program.
Format: exit
Examples:
-
exit
closes the application in 3 seconds.
Using Natural Dates
In order to provide a quicker method of referring to near dates, ReadyBakey allows users to use natural dates to refer to the directly upcoming days of the week. The closest upcoming date that corresponds to the natural date’s day input will be used. The time in HH:MM must still be provided by the user, along with the natural date.
This can be used in any command where dates are required, such as incompleteo
, edito
, and addo
.
Format: Day HH:mm
All potential natural dates that can be used:
Mon HH:mm
Monday HH:mm
Tues HH:mm
Tue HH:mm
Tuesday HH:mm
Weds HH:mm
Wed HH:mm
Wednesday HH:mm
Thurs HH:mm
Thur HH:mm
Thursday HH:mm
Fri HH:mm
Friday HH:mm
Sat HH:mm
Saturday HH:mm
Sun HH:mm
Sunday HH:mm
Example of natural date:
-
Monday 10:30
orMon 10:30
will create a datetime in the form ofdd-mm-yyyy HH:mm
that falls on the closest Monday, whereHH:mm
is10:30
-
Sunday 09:30
orSun 09:30
will create a datetime in the form ofdd-mm-yyyy HH:mm
that falls on the closest Sunday, whereHH:mm
is09:30
- If the current time is
7th April 2022 09:30
, which is a Thursday, inputtingThurs 08:30
will return14th April 2022
as the closest Thursday.- Reason:
08:30
has already passed the current time, hence ReadyBakey will look for a future date that is a Thursday instead.
- Reason:
- If the current time is
7th April 2022 09:30
, which is a Thursday, inputtingThurs 09:30
will return14th April 2022
as the closest Thursday.- Reason:
09:30
has already passed the current time, hence ReadyBakey will look for a future date that is a Thursday instead.
- Reason:
- If the current time is
7th April 2022 09:30
, which is a Thursday, inputtingThurs 10:30
will return7th April 2022
as the closest Thursday.- Reason:
10:30
has not passed the current time, hence ReadyBakey will look at the current day as the closest Thursday.
- Reason:
Example of natural dates in action:
incompleteo Monday 15:30
addo p/98765432 d/1: Jerry Favourite Cheese Cake c/Tuesday 15:30 m/Delivery r/Add Cheese
Note: You cannot specify which Natural Date you want. ReadyBakey automatically assigns the closest
Natural Date and it will be shown in the Response Box after the command is executed. (i.e. You cannot specify that
you want the date to be the Monday or any natural date 10 weeks from now)
Saving the data
ReadyBakey data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Editing the data file
ReadyBakey data are saved as a JSON file [JAR file location]/data/readybakey.json
. Advanced users are welcome to update data directly by editing that data file.

FAQ
Q: Is an order tied to a specific customer in the customer list?
A: Yes, an order is tied to the specific customer as per the customers’ ID.
Command summary
Action | Format | Example |
---|---|---|
addp | addp n/NAME p/PHONE e/EMAIL a/ADDRESS [r/REMARK] [t/TAG]… |
addp n/John Doe p/98765432 e/johnd@example.com a/311, Clementi Ave 2, #02-25 r/Allergic to Peanuts t/owesMoney |
deletep | deletep INDEX |
deletep 2 |
listp | listp |
listp |
editp | editp INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/REMARK] [t/TAG]… |
editp 1 p/12345678 n/John Doey a/NUS r/loves chocolate t/member |
findp | findp [ATTRIBUTE_PREFIX] KEYWORD [MORE_KEYWORDS]... |
findp n/Gerald |
addo | addo p/PHONE_NUM [r/REMARK] d/DETAILS... c/DELIVERYDATETIME m/COLLECTION_TYPE |
addo p/87654321 r/no candles d/1:Chocolate Cake c/27-12-2022 12:30 m/Delivery |
deleteo | deleteo INDEX |
deleteo 2 |
listo | listo |
listo |
marko | marko INDEX |
marko 1 |
unmarko | unmarko INDEX |
unmarko 1 |
edito | edito INDEX [c/DELIVERYDATETIME] [m/COLLECTION_TYPE] [r/REMARK] [d/DETAIL]… |
edito 1 r/Add Cheese d/1: Jerry Favourite Cheese Cake d/2: Chocolate Cake c/25-12-2022 15:30 m/Delivery |
findo | findo [ATTRIBUTE_PREFIX] KEYWORD [MORE_KEYWORDS]... |
findo n/Gerald Declan |
clear | clear |
clear |
exit | exit |
exit |