PowerRoster is a desktop app built to help Freelance Personal Fitness Trainers manage client contacts. It is a centralised client management system for trainers to keep track and access client information such as personal details, gym locations, and individual notes. It is optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
Ensure you have Java 17 or above installed in your Computer.
Mac users: Ensure you have the precise JDK version prescribed here.
Download the latest .jar file from here.
Copy the file to the folder you want to use as the home folder for your PowerRoster.
Open a command terminal, cd into the folder you put the jar file in, and use the java -jar PowerRoster.jar command to run the application.
A 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:
list : Lists all contacts.
add n/John Tan g/M dob/24/12/1999 p/98765432 e/johnt@example.com a/123 Sengkang East, #01-01 l/ActiveSG @ Fernvale Square t/beginner : Adds a contact named John Tan to the PowerRoster.
delete 3 : Deletes the 3rd contact shown in the current list.
clear : Deletes all contacts.
exit : Exits the app.
Refer to the Features below for details of each command.
Notes about the command format:
Words in UPPER_CASE are the parameters to be supplied by the user.
e.g. in add n/NAME, NAME is a parameter which can be used as add n/John Tan.
Items in square brackets are optional.
e.g n/NAME [t/TAG] can be used as n/John Tan t/beginner or as n/John Tan.
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/beginner, t/teen t/intermediate etc.
Parameters can be in any order.
e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.
Extraneous parameters for commands that do not take in parameters (such as list, exit and clear) will be ignored.
e.g. if the command specifies exit 123, it will be interpreted as exit.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
helpShows program usage instructions for all commands or a specific command.
Format: help [COMMAND_WORD]
help shows usage instructions for all available commands.help COMMAND_WORD shows usage instructions for the specified command only.help ADD works the same as help addExamples:
help shows all available commands and their usagehelp add shows only the usage instructions for the add commandhelp filter shows only the usage instructions for the filter commandaddAdds a client to PowerRoster.
Format: add n/NAME g/GENDER dob/DATE_OF_BIRTH p/PHONE_NUMBER e/EMAIL_ADDRESS a/ADDRESS [l/LOCATION] [t/TAG]…
NAME are case-sensitive for duplicate detectionEMAIL_ADDRESS must not contain consecutive special characters in the local-part (the part before @).GENDER must be either M or F (case-insensitive)DATE_OF_BIRTH must follow the format 'DD/MM/YYYY'DATE_OF_BIRTH must be a valid date, not in the future, and not more than 100 years in the past.l/LOCATION is omitted, the client is treated as having no specified location and the UI displays N/A.Tip: A client can have any number of tags (including 0)
Examples:
add n/John Tan g/M dob/24/12/1999 p/98765432 e/johnt@example.com a/123 Sengkang East, #01-01 l/ActiveSG @ Fernvale Square t/beginneradd n/Danielle Lim g/F dob/13/06/2001 t/athlete e/danielle@example.com a/456 Jurong West, #02-02 l/GymBoxx @ JCube MalllistShows a list of all clients in PowerRoster.
Format: list
list shows all clients by resetting any active filter, while preserving the current sor order (if any).viewShows the full profile of a client in the Client Details panel.
Format: view INDEX
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, …Examples:
view 1 shows the full profile of the 1st client in the current list.find Alex followed by view 1 shows the full profile of the 1st client in the filtered results.editEdits an existing client in PowerRoster.
Format: edit INDEX [n/NAME] [g/GENDER] [dob/DATE_OF_BIRTH] [p/PHONE] [e/EMAIL] [a/ADDRESS] [l/LOCATION] [t/TAG]…
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, …added/updated or unchanged) is shown per specified field.t/ without specifying any tags after it.Examples:
edit 1 p/91234567 e/johndoe@example.com Edits the phone number and email address of the 1st client to be 91234567 and johndoe@example.com respectively.edit 2 n/Dylan Lim t/ Edits the name of the 2nd client to be Dylan Lim and clears all existing tags.noteAdds / appends a note to an existing client in PowerRoster.
Format: note INDEX n/NOTE or note INDEX a/NOTE
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, …n/NOTE and a/NOTE must be provided, but not both.n/first n/second) is not allowed.n/NOTE adds a note to the client. Any existing notes will be replaced by the new note.a/NOTE appends a note to the client's existing notes (if any) with a space in between. If the client has no existing notes, a/NOTE behaves the same as n/NOTE.n/ without specifying any note after it.Examples:
note 1 n/Prefers morning sessions. adds the note Prefers morning sessions. to the 1st client, replacing any existing notes.note 2 a/Just recovered from a knee injury. appends the note Just recovered from a knee injury. to the 2nd client's existing notes. If the 2nd client has no existing notes, this behaves the same as n/Just recovered from a knee injury..planAssigns / unassigns the workout programme of an existing client in PowerRoster.
Format: plan INDEX wp/PLAN_CATEGORY
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, ...wp/ prefix is required.PLAN_CATEGORY must be one of: PUSH, PULL, LEGS, CORE, CARDIO, MOBILITY, FULL BODY, CONDITIONING (case-insensitive).wp/ with no value unassigns the client's assigned workout programme.wp/ prefixes are not allowed.plan (not edit).Examples:
plan 1 wp/PUSH assigns the 1st client to the PUSH programme.plan 2 wp/full body assigns the 2nd client to the FULL BODY programme.plan 3 wp/ unassigns the 3rd client's workout programme.rateSets / clears the session rate of an existing client in PowerRoster.
Format: rate INDEX r/RATE
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, …RATE must be either blank or a non-negative monetary value with up to 2 decimal places.120, 120.5, 120.50, .50, and 120..-10, 1,000, 100.000, $100.r/ with no value clears the client's existing rate.rate (not edit).Examples:
rate 1 r/120 sets the 1st client's rate to 120.00.rate 2 r/80.5 sets the 2nd client's rate to 80.50.rate 3 r/ clears the 3rd client's rate.measureSets / clears body measurements of an existing client in PowerRoster.
Format: measure INDEX [h/HEIGHT_CM] [w/WEIGHT_KG] [bf/BODY_FAT_PERCENTAGE]
INDEX. The index refers to the index number shown in the displayed client list. The index must be a positive integer 1, 2, 3, ...h/, w/, or bf/ must be provided.measure INDEX without any of h/, w/, or bf/ is invalid (e.g., measure 1).HEIGHT_CM must be either blank or a number in cm between 50.0 and 300.0, with up to 1 decimal place.WEIGHT_KG must be either blank or a number in kg between 20.0 and 500.0, with up to 1 decimal place.BODY_FAT_PERCENTAGE must be either blank or a number between 1.0 and 75.0, with up to 1 decimal place.170. are accepted and normalized to 1 decimal place when stored and displayed in the UI.h/, w/, or bf/ with no value clears that specific measurement.measure (not edit).Examples:
measure 1 h/175.5 sets the 1st client's height to 175.5.measure 2 w/72.0 bf/14.8 sets the 2nd client's weight and body fat percentage.measure 3 h/ w/ bf/ clears all three measurements for the 3rd client.measure 4 w/ clears the 4th client's weight.statusChanges the status of an existing client in PowerRoster between active and inactive.
Format: status INDEX s/STATUS
INDEX.STATUS must be either active or inactive (case-insensitive).s/active). Providing it more than once (e.g. status 1 s/active s/inactive) will result in an error.active status when added.Examples:
status 1 s/inactive changes the 1st client's status to inactive.status 2 s/active changes the 2nd client's status to active.status 3 s/INACTIVE changes the 3rd client's status to inactive (case-insensitive).findFinds clients whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
hans will match HansHans Bo will match Bo HansHan will not match HansOR search).
e.g. Hans Bo will return Hans Gruber, Bo YangExamples:
filterFilters clients whose gym location contain any of the given location phrase(s).
Format: filter l/LOCATION_PHRASE [l/MORE_LOCATION_PHRASES]...
l/ prefix must be provided.l/Clementi will match Clementi ActiveSG Gym.l/ prefix is treated as one location phrase. e.g. filter l/Anytime Fitness Jurong will use Anytime Fitness Jurong as a phrase to match.l/ prefixes are supported and clients matching at least one phrase are returned (i.e. OR search).filter l/Anytime Fitness will be treated as filter l/Anytime Fitness.l/ with no value filters clients with no specified location.l/ prefixes are provided, each must have a non-blank value. e.g. filter l/Clementi l/ is invalid.Examples:
filter l/Clementi returns all clients whose locations contain the phrase Clementi such as Clementi ActiveSG Gym and Anytime Fitness Clementi.filter l/Anytime Fitness Jurong returns all clients whose locations contain the phrase Anytime Fitness Jurong such as Anytime Fitness Jurong East but not Anytime Fitness Clementi or Jurong Point ActiveSG Gym.filter l/Anytime Fitness l/Clementi returns clients whose locations contain Anytime Fitness or Clementi.filter l/ returns clients with no specified location.sortSorts the client list by a specified attribute in ascending or descending order.
Format: sort ATTRIBUTE/ [o/ORDER]
asc) if not specified.n/ - Sort by namel/ - Sort by locationdob/ - Sort by date of birthp/ - Sort by phone numbere/ - Sort by email addressa/ - Sort by addressg/ - Sort by genders/ - Sort by status (active before inactive)wp/ - Sort by workout plan (alphabetical)r/ - Sort by session rate (clients with no rate set sort first)o/asc - Ascending order (A to Z, earliest to latest, 0 to 9)o/desc - Descending order (Z to A, latest to earliest, 9 to 0)sort n/ o/desc is valid, but sort n/o/desc is not and will result in an error.Examples:
sort n/ sorts the displayed client list by name in ascending order (A to Z).sort n/ o/desc sorts the displayed client list by name in descending order (Z to A).sort dob/ o/asc sorts the displayed client list by date of birth in ascending order (oldest to youngest).sort l/ sorts the displayed client list by gym location in ascending order.sort s/ sorts the displayed client list by status, active clients first.sort r/ o/desc sorts the displayed client list by session rate, highest rate first.sort wp/ sorts the displayed client list by workout plan alphabetically.filter l/Clementi followed by sort n/ filters clients at Clementi locations, then sorts only those filtered results by name.deleteDeletes the specified client from PowerRoster.
Format: delete INDEX
INDEX.Examples:
list followed by delete 2 deletes the 2nd client in PowerRoster.find Betsy followed by delete 1 deletes the 1st client in the results of the find command.logLogs a workout for the specified client.
Format: log INDEX [time/TIME] [l/LOCATION]
INDEXTIME must be a valid date and time not in the future, nor more than 50 years in the past.TIME must be in the format: "DD/MM/YYYY HH:mm"TIME is not declared, the current time will be used.LOCATION is not specified, the client's preset location will be used.LOCATION is not specified and the client does not have a preset location, N/A will be used.Examples:
log 1 Logs a workout for the first client in the displayed list using the current time and their specified location.log 3 time/26/03/2026 14:18 Logs a workout for the third client in the displayed list using their specified location and 26/03/2026 14:18 as the workout time.log 2 l/Sengkang ActiveSG Gym Logs a workout for the second client in the displayed list using the current time with the location set to "Sengkang ActiveSG Gym"lastRetrieves the details of the most recent workout for the specified client.
Format: last INDEX
INDEXExamples:
last 5 Retrieves the Date and Location of the last workout for the fifth client in the displayed list.clearClears all entries from PowerRoster.
Format: clear
exitExits the program.
Format: exit
PowerRoster data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
PowerRoster data are saved automatically as a JSON file [JAR file location]/data/addressbook.json. Advanced users are welcome to update data directly by editing that data file.
Caution:
If your changes to the data file makes its format invalid, PowerRoster will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
Furthermore, certain edits can cause the PowerRoster to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
[coming in v2.0]Details coming soon ...
[coming soon]Details coming soon ...
[coming soon]Details coming soon ...
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 PowerRoster home folder.
preferences.json file created by the application before running the application again.help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.| Action | Format, Examples |
|---|---|
| Add | add n/NAME g/GENDER dob/DATE_OF_BIRTH p/PHONE_NUMBER e/EMAIL_ADDRESS a/ADDRESS [l/LOCATION] [t/TAG]… e.g., add n/John Tan g/M dob/24/12/1999 p/98765432 e/johnt@example.com a/123 Sengkang East, #01-01 l/ActiveSG @ Fernvale Square t/beginner |
| Clear | clear |
| Delete | delete INDEXe.g., delete 3 |
| Log | log INDEX [time/TIME] [l/LOCATION] e.g., log 2 l/Sengkang ActiveSG Gym |
| Last | last INDEX e.g., last 5 |
| Edit | edit INDEX [n/NAME] [g/GENDER] [dob/DATE_OF_BIRTH] [p/PHONE] [e/EMAIL] [a/ADDRESS] [l/LOCATION] [t/TAG]…e.g., edit 2 n/James Lee e/jameslee@example.com |
| Note | note INDEX n/NOTE or note INDEX a/NOTEe.g., note 1 n/Prefers morning sessions. |
| Plan | plan INDEX wp/PLAN_CATEGORYe.g., plan 1 wp/PUSH, plan 2 wp/FULL BODY, plan 3 wp/ |
| Rate | rate INDEX r/RATEe.g., rate 1 r/120.50, rate 2 r/ |
| Measure | measure INDEX [h/HEIGHT_CM] [w/WEIGHT_KG] [bf/BODY_FAT_PERCENTAGE]e.g., measure 1 h/175.5 w/72.0 bf/14.8, measure 2 h/ |
| Status | status INDEX s/STATUSe.g., status 1 s/inactive |
| Find | find KEYWORD [MORE_KEYWORDS]e.g., find James Jake |
| Filter | filter l/LOCATION_PHRASE [l/MORE_LOCATION_PHRASES]...e.g., filter l/Clementi, filter l/Anytime Fitness l/Clementi, filter l/ |
| Sort | sort ATTRIBUTE/ [o/ORDER]e.g., sort n/, sort dob/ o/desc, sort r/ o/desc, sort s/, sort wp/ |
| List | list |
| View | view INDEXe.g., view 1 |
| Help | help [COMMAND_WORD]e.g., help, help add |