User Guide

About FitBook
FitBook is a desktop application for managing clients, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, FitBook can get your client management tasks done faster than traditional GUI apps.
This User Guide provides brief documentation on how you can install the application and describes how each feature should be used. Start by looking at the quick start guide to get you started.
- Quick start
- User Interface Introduction
-
Features
- Prefixes for Client Commands
- Prefixes for Routine Commands
- Client Commands
- Client’s Weight Commands
-
Exercise Routine Commands
- Adding a routine:
addRoutine - Listing all Routines in FitBook :
listRoutines - Editing a routine :
editRoutine - Locating routines by name:
findRoutine - Deleting a routine :
deleteRoutine - Adding an exercise :
addExercise - Deleting an exercise :
deleteExercise - Clearing all routine entries :
clearRoutines - Exporting routine details :
exportRoutines
- Adding a routine:
- FitBook Miscellaneous Commands
- FitBook Storage Usage
- FAQ
- Command summary
Quick start
- Before using FitBook, make sure to install Java
11or later version in your Computer. This is required to ensure proper functionality of the application. Please install the correct Java version to use FitBook. -
Download the latest
fitbook.jarfrom here. - Copy the file to the folder you want to use as the home folder for your FitBook. You may create a new folder under any directory.
- Open a command terminal and navigate into the folder you put the jar file in using
cd. Then, use thejava -jar fitbook.jarcommand to run the application.
A GUI similar to the one shown below should appear in a few seconds. Note how the app contains some sample data.
- For example, if your jar file is stored in a folder ‘FitBook’ located in the desktop directory of your computer, the commands in the command terminal will be:
cd Desktopcd FitBookjava -jar fitbook.jar
- If you are unsure how to open the command terminal, you may refer to the guide below.

- For example, if your jar file is stored in a folder ‘FitBook’ located in the desktop directory of your computer, the commands in the command terminal will be:
-
Type the command in the command box and press Enter to execute it. e.g. typing
helpand pressing Enter will open the help window.
Some example commands you can try:-
listClients: Lists all Clients. -
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 w/50 g/M: Adds a contact namedJohn Doeto the FitBook. -
delete 3: Deletes the 3rd contact shown in the current list. -
clear: Deletes all contacts. -
export: Exports all Client’s details in FitBook into a csv file. -
exportRoutine: Exports all Routine details in FitBook into a csv file. -
addRoutine r/Cardio ex/3x5 1km Jog ex/3x10 Jumping Jacks: Adds a new routine namedCardiowith 2 exercises3x5 1km Jogand3x10 Jumping Jacks. -
exit: Exits the app.
-
- Refer to the Features below for details of each command.
User Interface Introduction
This section provides a brief overview of the graphical user interface (GUI) components that are present in FitBook. These components are designed to provide an easy-to-use interface that enables users to track and improve their clients’ fitness goals.

Menu Bar
The menu bar is typically located at the top of the user interface and is primarily used for navigation purposes. It provides users with access to various features and functions within the application or dashboard, allowing them to easily navigate between different tabs. The menu bar is commonly used in user guides to help users understand how to navigate and use the different features within the application.
FitBook
- ‘Schedule’ item allows you to switch to the Schedule panel.
- ‘Exit’ item directly exits out of the application.
Exercise
- ‘Exercise’ menu item allows you to switch to Exercise panel.
Summary
- ‘Summary’ menu item allows you to switch to Summary panel.
Help
- Provides a new tab outside FitBook with the link to the User Guide.
Result Panel
Panels are empty when the data for that specific panel is empty.
Schedule
- Left panel (
Scheduletab) displays the list of clients’ basic information. -
Right panel (
Scheduletab) displays the list of appointments sorted chronologically. (Refresh the page by changing tabs or reopening FitBook to see the appointment get removed after it passes its deadline.)
Exercise
- Left panel (
Exercisetab) displays the list of clients’ basic information including weight, average calories, goal, any unique routines and exercises. -
Right panel (
Exercisetab) displays the list of routines added.
Summary
- Left panel (
Summarytab) displays the list of clients’ basic information including name and scheduled appointments. -
Right panel (
Summarytab) displays all information about the selected client. (Using the view command)
Result Display
When you enter a command into the Command Box of the application, the system will provide a feedback message to you through the display. This feedback message is designed to inform you of the status of the command you have entered, such as whether it was executed successfully or encountered an error. The feedback message may also include additional information related to the command, such as the results of the command’s execution or the specific error encountered.
Command Box
The Command Box is where you can type in your commands. It is found below the Feedback Box. To execute the command, simply press the “Enter” button on your keyboard. This will send the command to the system for processing.
Features
Notes about the command format:
-
These rules apply to all commands including for Clients and Routines.
-
Words in
UPPER_CASEare the parameters to be supplied by the user.
e.g. inadd n/NAME,NAMEis a parameter which can be used asadd n/John Doe. -
Items in square brackets are optional.
e.g.n/NAME [t/TAG]can be used asn/John Doe t/friendor asn/John Doe. -
Items with
… after them can be used multiple times including zero times.
e.g.[t/TAG]…can be used as(i.e. 0 times),t/friend,t/friend t/familyetc. -
Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER,p/PHONE_NUMBER n/NAMEis 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/56785678will be taken. -
Extraneous parameters for commands that do not take in parameters (such as
help,list,exit,export,exportRoutine,listRoutines,clearRoutinesandclear) will be ignored.
e.g. if the command specifieshelp 123, it will be interpreted ashelp. -
Client list can be found in the Client panel. Routine list can be found in the Routine Panel of the
Routinetab.
Prefixes for Client Commands
| Prefix | Compulsory field for adding client | Multiple Input | Prefix Meaning | Characters restrictions |
|---|---|---|---|---|
n/ |
Yes | Only Last Taken | Name of Client | Alphabets, numbers and spaces |
p/ |
Yes | Only Last Taken | Phone number | At least 3 digits |
e/ |
Yes | Only Last Taken | local-part@domain | |
a/ |
Yes | Only Last Taken | Address | Any characters except blank |
w/ |
Yes | Only Last Taken | Weight | Positive number from 0.1 to 999.9 with 0 or 1 decimal place |
g/ |
Yes | Only Last Taken | Gender | M or F (not case sensitive) |
c/ |
No | Only Last Taken | Recommended Calories | At least 4 digits long |
gl/ |
No | Only Last Taken | Goal for Client | Any characters except blank |
r/ |
No | All Taken | Routines for Client (Must be in Exercise Routine | Valid routine names in exercise routine portion |
t/ |
No | All Taken | Tag | Alphabets and numbers |
app/ |
No | All Taken | Appointment | dd-mm-yyyy HH:mm format that is after current date and time |
d/ |
NA | NA | Date used for adding weight | dd-mm-yyyy HH:mm format that is before current date and time |
Prefixes for Routine Commands
| Prefix | Compulsory field for adding routine | Multiple Input | Prefix Meaning | Characters restrictions |
|---|---|---|---|---|
r/ |
Yes | Only Last Taken | Routine Name | Alphabets, numbers and spaces |
ex/ |
No | All Taken | Exercise Name | Alphabets, numbers and spaces |
exno/ |
NA | NA | Exercise index | Numeric |
Multiple Input Column, Only Last Taken means that for example add n/John Doe n/Richard Yang... there are 2 name prefixes, the last name prefix which is Richard Yang will be stored as the name of the client to be added.
While All Taken means for example add ... t/friends t/VIP ... both tags will be added to the client. Client Commands
Adding a client: add
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS w/WEIGHT g/GENDER
[cal/RECOMMENDED_CALORIES_INTAKE] [g/GOAL] [r/ROUTINE]… [app/APPOINTMENT_TIME]… [t/TAG]…
- A client can have any number of
tags,appointmentsandexercise routines(including 0). - A user cannot add an exercise routine that does not exist in the exercise routine list in the
Exercisetab to a client. -
APPOINTMENTneeds to be later than the current time, or it will get deleted.
Gender should be either M or F (not case-sensitive). Routine is case sensitive. Weight is specified in kilograms (Kg). Examples:
-
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 w/50 g/M r/Cardio(Cardio routine has to exist in exercise routine). add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/93125841 t/John's Friend w/55 g/Fadd n/Betsy Crowe app/12-12-2030 12:00 cal/2300 g/F e/betsycrowe@example.com a/Newgate Prison p/93125841 t/Friend
Editing a client : edit
Format: edit CLIENT_INDEX n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS w/WEIGHT g/GENDER
[cal/RECOMMENDED_CALORIES_INTAKE] [g/GOAL] [r/ROUTINE]… [app/APPOINTMENT_TIME]… [t/TAG]…
- Edits the client at the specified
CLIENT_INDEX. The index refers to the index number shown in the displayed client list. - The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647 - At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
- When editing
tags,appointmentsandroutines, the existingtags,appointmentsandroutinesof the client will be removed i.e. adding oftags,appointmentsandroutinesare not cumulative. - You can remove all the client’s tags by typing
t/without specifying any tags after it. (same forappointmentswith/appprefix androutineswith/r) -
APPOINTMENTneeds to be later than the current time, or it will get deleted.
Gender should be either M or F (not case-sensitive). Routine is case sensitive. Examples:
-
edit 1 p/91234567 e/johndoe@example.comEdits the phone number and email address of the 1st client to be91234567andjohndoe@example.comrespectively. -
edit 2 n/Betsy Crower t/Edits the name of the 2nd client to beBetsy Crowerand clears all existing tags. -
edit 3 w/23.0Edits the weight of the 3rd client to23.0. -
edit 4 w/25.0 g/mEdits the weight and gender of the 4th client to25.0andm.
Locating clients by fields: find
Format: find n/NAME p/PHONE e/EMAIL a/ADDRESS w/WEIGHT g/GENDER cal/CALORIE t/TAG
app/APPOINTMENT gl/GOAL…
hans will match Hans Han will match Hans, John will match John Li and John Tan, 19 will match 1900 and 0190 Available Prefixes:
-
nfilters by Name -
pfilters by Phone -
efilers by Email -
afilters by Address -
tfilters by Tag -
wfilters by Weight -
gfilters by Gender -
glfilters by Goal -
calfilters by Calorie -
appfilters by Appointment
Examples:
-
find n/Alexreturns every client with ‘Alex’ in their name. -
find p/91234567returns every client with phone numbers that match or contains ‘91234567’. -
find n/Alex p/91234567returns every client with ‘Alex’ in their name OR with phone numbers that match or contain ‘91234567’
Deleting a client : delete
Format: delete INDEX
- Deletes the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647
Examples:
-
listfollowed bydelete 2deletes the 2nd client in the FitBook. -
find Betsyfollowed bydelete 1deletes the 1st client in the results of thefindcommand.
Viewing a client summary: view
Exercise Routines tagged to the client.
Format: view INDEX
- Views the summary of the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647
Examples:
-
view 1views the summary of the first client in the FitBook. -
find n/Alexfollowed byview 1views the summary of the 1st client in the results of theviewcommand.
Listing all clients : listClients
Format: listClients
- Initiate the command with
listClients - All clients in FitBook has been listed once again!
Clearing all entries : clear
Format: clear
Exporting client details : export
Format: export
- The exported client data includes:
- Name of Client
- Phone number of Client
- Email of Client
- Address of Client
- Weight of Client
- Gender of Client
-
Example generated CSV file when opened using Microsoft Excel:

Client’s Weight Commands
Adding new weight to a client: addWeight
Format: addWeight INDEX w/WEIGHT d/DATE
- Adds weight to the weight history of the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647 - The new
DATEmust be specified indd-MM-yyyy HH:mmformat. -
DATEfield must be a date that has passed. -
WEIGHTfield is specified in kilograms (Kg). - The weight of the client displayed in the client list is updated to the latest weight inputted by the user. Use
listClientsto refresh the client list and view the updated weight of the client.
Examples:
-
addWeight 1 w/70 d/10-03-2023 18:00adds weight 70kg to the weight history of the first client in the FitBook and dates the weight at 10 March 2023, 6pm. -
find n/Alexfollowed byaddWeight 1 w/70 d/10-03-2023 18:00adds weight 70kg, dated 10 March 2023, 6pm to the weight history of the 1st client in the results of thefindcommand.
Plotting weight history graph for a client: graph
Format: graph INDEX
- Plots the weight history of the client at the specified
INDEX. - The index refers to the index number shown in the displayed client list.
- The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647 - The weight history graph will be shown only for weights dated within one month of the current date and time.
Examples:
-
graph 1plots the weight history of the first client in the FitBook. -
find n/Alexfollowed bygraph 1plots the weight history of the 1st client in the results of thefindcommand.
Example:

Exercise Routine Commands
- All routines and exercises must be in alphanumeric characters and spaces between characters are allowed.
Adding a routine: addRoutine
Format: addRoutine r/ROUTINE_NAME [ex/EXERCISE]…
Exercise (including 0). Examples:
addRoutine r/CardioaddRoutine r/HIIT ex/3x10sets of Jumping ropes
Example: (Adding Routine without any exercises)

Listing all Routines in FitBook : listRoutines
Format: listRoutines
- Initiate the command with ‘listRoutines’
- All Routines in FitBook has been listed once again!
Editing a routine : editRoutine
Format: editRoutine ROUTINE_INDEX r/ROUTINE_NAME or editRoutine ROUTINE_INDEX exno/EXERCISE_INDEX ex/EXERCISE
- Edits the routine at the specified
ROUTINE_INDEX. The index refers to the index number shown in the displayed exercise routine list. - The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647 - At least one of the two types should be used. Mixture of the two types is not allowed.
- This command only allows the editing existing Routine’s name or existing Exercise’s name.
Examples:
-
editRoutine 1 r/Cardioedits the routine name of the 1st routine to beCardiorespectively. -
editRoutine 2 exno/1 ex/3x10sets dumbbellsedits the exercise of the 2nd routine to be3x10sets dumbbells. -
editRoutine 3 r/Cardio exno/1 ex/3x10 sets dumbbellswill throw an error as it attempts to change both the routine name and the exercises in the routine.
Locating routines by name: findRoutine
Format: findRoutine KEYWORD
cardio will match Cardio. Fun swimming will match Swimming fun. Examples:
findRoutine OPM
Example:

Deleting a routine : deleteRoutine
Format: deleteRoutine ROUTINE_INDEX
- Deletes the routine at the specified
ROUTINE_INDEX. - The index refers to the index number shown in the displayed exercise routine list in the
Exercise panel. - The index must be a positive integer 1, 2, 3, …
- The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647
Examples:
-
listRoutinesfollowed bydeleteRoutine 2deletes the 2nd Routine in FitBook. -
findRoutine Cardiofollowed bydeleteRoutine 1deletes the 1st Routine in the results of thefindRoutinecommand.
Adding an exercise : addExercise
Format: addExercise ROUTINE_INDEX ex/EXERCISE_NAME
- Adds an exercise
EXERCISE_NAMEto the routine in FitBook at the specifiedROUTINE_INDEX. - The
ROUTINE_INDEXrefers to the index number shown in the displayed exercise routine list in the exercise panel. - The
ROUTINE_INDEXmust be a positive integer 1, 2, 3, … - The index must not contain signs +1, +2, +3, …
- The index must not be larger than
Integer.MAX_VALUEi.e. 2147483647
Examples:
-
listRoutinesfollowed byaddExercise 1 ex/push upsadds the exercisepush upsto the first routine in the exercise routine list in FitBook.
Deleting an exercise : deleteExercise
Format: deleteExercise ROUTINE_INDEX EXERCISE_INDEX
- Deletes the exercise specified by the
EXERCISE_INDEXof the routine in FitBook specified byROUTINE_INDEX. - The
ROUTINE_INDEXrefers to the index number shown in the displayed exercise routine list in the exercise panel. - The
EXERCISE_INDEXrefers to the index number shown in the displayed exercise routine list in the exercise panel. - Both
ROUTINE_INDEXandEXERCISE_INDEXmust be a positive integer and a valid integer according to the list displayed 1, 2, 3, … - Both
ROUTINE_INDEXandEXERCISE_INDEXmust not contain signs +1, +2, +3, … - Both
ROUTINE_INDEXandEXERCISE_INDEXmust not be larger thanInteger.MAX_VALUEi.e. 2147483647
Examples:
-
listRoutinesfollowed bydeleteExercise 1 2deletes the exercise specified at index2from the Routine specified at index1in the Routine list in FitBook. -
findRoutine CardiofolloweddeleteExercise 1 1deletes the exercise specified at index1from the Routine specified at index1in the results of thefindRoutineCardiocommand.
Clearing all routine entries : clearRoutines
Exercise Tab.
Format: clearRoutines
Exporting routine details : exportRoutines
Format: exportRoutines
- The exported client data includes:
- Name of routine
- Exercises in the routine
-
Example generated CSV file when opened using Microsoft Excel:

FitBook Miscellaneous Commands
Viewing help : help
Format: help
Exiting the program : exit
Format: exit
FitBook Storage Usage
Saving the data
FitBook 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
FitBook data are saved as a JSON file [JAR file location]/data/fitbook.json. Advanced users are welcome to update data directly by editing that data file.
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 FitBook home folder.
Q: Must I exit the FitBook app through the exit command?
A: There is no need to exit the FitBook app through the exit command as everything is saved after each action changes to the list.
Q: Why can I not tag the exercise routine to the client?
A: The exercise routine is probably not inside the list of routines or the routine name is wrong. The routine name is case-sensitive.
Q: When I try to edit my weight a few times, and it updates in the client panel, but the data does not show up on the graph?
A: To view historical weight data on the line graph, more values of weight must be added using addWeight command. edit command only changes the latest weight of the client.
Q: Why is my FitBook empty even though I have data saved in the storage?
A: The format of your json file storage is invalid. Hence, it will create an empty storage system for the FitBook as a measure.
Command summary
| Action | Format, Examples |
|---|---|
| Add |
add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS w/WEIGHT g/GENDER [cal/RECOMMENDED_CALORIES_INTAKE] [g/GOAL] [r/ROUTINE_NAME]… [app/APPOINTMENT_TIME]… [t/TAG]… e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague w/55 g/M
|
| Clear all client entries in FitBook | clear |
| Delete |
delete INDEXe.g., delete 3
|
| Edit |
edit CLIENT_INDEX n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS w/WEIGHT g/GENDER [cal/RECOMMENDED_CALORIES_INTAKE] [gl/GOAL] [r/ROUTINE_NAME]… [app/APPOINTMENT_TIME]… [t/TAG]…e.g., edit 2 n/James Lee e/jameslee@example.com
|
| Find |
find n/NAME p/PHONE e/EMAIL a/ADDRESS w/WEIGHT g/GENDER cal/CALORIE t/TAG app/APPOINTMENT gl/GOALe.g., find n/James Jake e/jamesjake@example.com
|
| List | listClients |
| Help | help |
| Export Client Details | export |
| Add Exercise |
addExercise ROUTINE INDEX ex/EXERCISE e.g, addExercise 1 ex/4 x 3 sprints
|
| Add Routine |
addRoutine r/ROUTINE_NAME [ex/EXERCISE]… e/g, addRoutine r/Cardio ex/3x5 1km Jog ex/3x10 Jumping Jacks
|
| Edit Routine(RoutineName) |
editRoutine ROUTINE_INDEX r/ROUTINE_NAME e/g, editRoutine 1 r/Cardio
|
| Edit Routine(Exercise) |
editRoutine INDEX exno/EXERCISE_INDEX ex/EXERCISE e/g, editRoutine 1 exno/1 ex/3x10sets of Dumbbell curls
|
| Delete Exercise |
deleteExercise ROUTINE INDEX EXERCISE INDEX e.g, deleteExercise 1 2
|
| Delete Routine |
deleteRoutine ROUTINE INDEX e.g, deleteRoutine 1
|
| List Routine | listRoutines |
| Clear Routine | clearRoutines |
| Find Routine |
findRoutine ROUTINE NAME e.g, findRoutine Cardio
|
| Export Routine Details | exportRoutine |
| Add weight |
addWeight INDEX w/WEIGHT d/DATEe.g., addWeight 1 w/70 d/10-10-2023 18:00
|
| Graph |
graph INDEXe.g., graph 1
|
| View |
view INDEXe.g., view 1
|