Are you a Hiring Manager who's tired of managing applicant applications through cumbersome spreadsheets?
Upgrade your hiring process with JABPro (JobApplicationsBook Pro), a CLI based desktop app that allows you to:
From interns to full-time roles, software to marketing, JABPro’s versatile interface allows you to keep track of all kinds of job applicants in various industries.
If you are a Hiring Manager, looking to improve your applications management workflow, JABPro is the tool for you!
Access our self-curated user guide below to learn more on how you can integrate various JABPro’s functions into your workflow.
Jump back to Table of Contents
While JABPro offers a whole range of features, we believe that the following features are likely to be the most useful to you:
Viewing details of applicants:
viewTag colouring and categorisation:
createlistTeditEvent management and Scheduling:
eventscheduleComparing and filtering applicants:
filterThese features address the complications that Hiring Managers face when managing applicants:
Viewing details of applicants and Tag colouring and categorisation address this by creating an organized and intuitive way to view applicants and their details. This is done through colour coding and minimalistic design.
Event Management and Scheduling address this by allowing you to schedule events and view them in the same software. This means that you do not have to toggle between different software to manage applicants and schedule events.
Comparing and filtering applicants address this by allowing you to filter applicants by statistics and compare them. This means that you do not have to manually calculate summary statistics and compare applicants.Go to the Table of Contents to navigate to the feature that you are interested in
Our user guide takes into consideration your level of expertise in JABPro.
You are a beginner user if ...
ALl the notes and tips mentioned in this user guide are directed towards beginners unless otherwise stated.
You are an advanced user if ...
Notes and tips curated for you are labeled by the following box!
Advanced
Also, take note of the following icons and their meanings.
This is a warning. Watch out for these!
This refers to highlighted information that you should take note of!
This is a tip. It's good to know but not a must-have!
Jump back to Table of Contents
Ensure you have Java 11 or above installed in your Computer.
Download the latest jabpro.jar from here.
Copy the file to the folder you want to use as the home folder for your JabPro.
Open a command terminal, cd into the folder you put the jar file in, and use the java -jar jabpro.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.
Caution: ensure your JABPro contains some sample data. If it starts off empty then there might be some issues with the launch which might result in some commands to not run properly. See below to learn how to troubleshoot this problem!
My app does not contain any sample data! Not to worry, here are some steps you can take to fix this:
cd into the folder where you put the jar file in.cd Data to navigate to the Data folder. This is the folder where JABPro stores the application data on your computer.ls to view all the files stored in this folder.addressbook.json. Run rm addressbook.json to delete this file.cd .. to navigate back to the folder you were in before.java -jar jabpro.jar to relaunch the application. You should be able to see a GUI similar to the one above.If your UI looks compressed and words are being cut off such as that seen below, you should resize the window to a larger size by dragging the corners of the application window. The UI should now look like the example given above.
Here's what each part of the GUI signifies:
| Colour | Component | Description |
|---|---|---|
![]() | Menu Bar | Provides buttons for exiting, opening Help window, and opening Events window. |
![]() | Command Box | Allows you to enter a command. |
![]() | Result Display | Displays the result of the command execution. |
![]() | Applicant List Panel | Displays a list of all applicants in JABPro. |
![]() | Applicant Card | Displays certain details of an applicant for quick view, such as name, address, phone, email, tags, LinkedIn/GitHub username. |
![]() | Applicant Information Panel | Displays a detailed view of an applicant, providing information of status and remarks, in addition to the basic information about the applicant. |
![]() | Summary Statistics Panel | Displays summary statistics for a particular applicant pertaining to a specific tag. |
In addition, there are windows such as:
help command, or through Menu Bar].schedule command, or through Menu Bar].listT command].Details for each have been provided with the respective commands.
Jump back to Table of Contents
How to know if your command has failed?
The example below shows a command failure for view:
Jump back to Table of Contents
helpOpens the Help window that leads you to the User Guide for assistance on working with JABPro.
Format: help
Tip: The Help window can also be accessed by clicking Help > Help F1 in the menu bar, located at the top of the window.
Additionally, pressing the F1 key also opens the Help Window.
Example of successful execution of the help command:
helphelp command:The Help Window opens up as follows:
Jump back to Table of Contents
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 Doe.
Items in square brackets are optional.
e.g. n/NAME [t/TAGNAME] can be used as n/John Doe t/friend or as n/John Doe.
When using parentheses ( ) with items separated by the slash symbol /, at least one item must be included.
e.g. in the command search (n/NAME... st/STATUS... t/TAGNAME...), it is necessary to specify at least one search category.
Items with … after them can be used multiple times including zero times.
e.g. t/TAGNAME… can be used as (i.e. 0 times), t/swe t/intern for add commands or t/swe intern for search and delete commands.
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 help, listT, exit and clear) will be ignored.
e.g. if the command specifies help 123, it will be interpreted as help.
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.
Jump back to Table of Contents
Tags are meant to help you easily remember applicants details by appending different colour coding to different types of information.
createCreates a tag and categorises it to the specified category.
Format: create t/CATEGORY TAGNAME…
| Type | Field | Constraints |
|---|---|---|
| Mandatory | t/CATEGORY TAGNAME | TAGNAME must be alphanumeric (letters and numbers, no spaces and symbols allowed such as /, , ...) |
Note:
employment, role, and dept. However, you can define up to 3 more tag categories of your own!add or edit command. Tagging
applicant without previously creating the tags using create would still work but the tags would be uncategorised.create only allows tags to be categorised at creation meaning tags that have already been created, cannot be categorised further i.e. cannot edit tag categories of tags.t/CATEGORY TAGNAME must strictly contain only two words hence it is advisable for you to keep the TAGNAME alphanumerical (contains no spaces). Any other word
that comes after t/CATEGORY TAGNAME that is not preceded by a t/ prefix would be ignored and the tag for the first valid tag is created.
create t/role software developer would create the tag software and ignore the word developer.Tip:
create t/dept marketing t/role developer ...listT command.An example of the create command being successfully executed:
Enter the command create t/dept marketing t/role developer
This is what you should see upon successful execution of command.
View your newly created tags using the listT command.
Failed to create tags? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing create keyword: create | Unknown command | Follow the command format of create t/CATEGORY TAGNAME… closely |
Missing mandatory field e.g. create | Invalid command format! | Ensure that you specify at least one tag category and tag name of the tag you would like to create. |
Incomplete field e.g. create t/test | Invalid command format! | Ensure that both parts of the field are included i.e. specify both tag category and tag name. |
Invalid tag name e.g. create t/developer@ | Tags names should be alphanumeric. | Ensure that the tag name does not contain any non-alphanumeric characters i.e. no symbols and whitespaces. |
| Tag already exists | This tag already exists in the address book! | Since the tag already exists, there is no need for you to create a new one. You can reuse this same tag to tag applicants! |
Using commas as delimiters of different prefixes instead of whitespaces e.g. create t/dept software, t/role marketing | Invalid command format! | Remove the comma(s) e.g. create t/dept software, t/role marketing |
Jump back to Table of Contents
listTShows a list of all tags in JABPro
Format: listT
listT command does not require any additional parameters or arguments.listT command are unique and do not repeat.Example:
listT Shows a list of all tags.Jump back to Table of Contents
addAdds an applicant to JABPro.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/[CATEGORY] TAGNAME]…
| Type | Field | Constraints |
|---|---|---|
| Mandatory | n/NAME | NAME must be alphanumeric (Letters and numbers, no symbols allowed such as /, , ...). |
| Mandatory | p/PHONE_NUMBER | PHONE_NUMBER must contain numbers only and should be at-least 3 digits long. |
| Mandatory | e/EMAIL | EMAIL must be the standard email address format (There must be an email-prefix followed by @ symbol and email domain). |
| Mandatory | a/ADDRESS | ADDRESS can be any value, including special characters such as #, , ... |
| Optional | t/[CATEGORY] TAGNAME | [CATEGORY] is optional. TAGNAME` must be alphanumeric with no spaces. Any details after the space will be ignored. |
Notes regarding additional constraint on add command:
add command will be added to the end of the overall list of applicants (i.e. the list that you would get when you do list).Notes on adding tags:
create command,
you can specify the category that you would like it to be categorised to in the add command. e.g. ...t/role sweadd command,
the tag would still be saved, but it would be uncategorized by default.Tip:
An example of the add command being successfully executed:
Enter the command add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/dept finance
This is the result of the successful add command (Take note that command entered will not be shown in the result):
Failed to add applicants? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing add keyword: add | Unknown command | Follow the command format of add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAGNAME]… closely |
| Missing mandatory fields | Invalid command format! | Ensure that all mandatory fields are filled up. |
| Duplicate name | This person already exists in the address book | Ensure that the name of the applicant is unique. That is you cannot add the same name twice. Use some form of extra identification like a number |
| Invalid phone number | Phone numbers should only contain numbers, and it should be at least 3 digits long | Ensure that the phone number only contains number and should be at least 3 digits long |
| Invalid email | Emails should be of the format local-part@domain and adhere to the following constraints: | Ensure that the prefix and domain of the email is correct following the constraints stated by the error |
| Invalid tag name | Tag names should only contain alphanumeric characters and should not be blank | Ensure that the tag name only contains alphanumeric characters and should not be blank |
| Multiple prefixes of the same type being used | Multiple values specified for the following single-valued field(s): prefix/ | Remove the duplicate prefix. The command should only have 1 of every prefix except for t/ |
Jump back to Table of Contents
remarkEdits a remark of an existing applicant in JABPro.
Format: remark INDEX r/REMARK
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be an existing index in the displayed applicant list and it must not be greater than the total number of applicants in JABPro. |
| Optional | r/ [REMARK] | REMARK can be any value, including special characters such as #, , ... |
Notes regarding remark command:
r/ without any text after it or by omitting the r/ prefix.**REMARK** keyword. It will be replaced with the previous remark (see example below). The keyword **REMARK** is case-sensitive. This means that remark 1 r/**remark** will just replace the remark with the word **remark**.remark but only the last prefix will be used. This means that remark 1 r/remark r/remark2 will just replace the remark with remark2.An example of the remark command being successfully executed:
remark 1 r/Great attitude, hardworkingremark command (Take note that command entered will not be shown in the result):
An example of the remark command being successfully executed with the REMARK keyword:
remark 1 r/**REMARK** furthermore he is great at teamworkremark command (Take note that command entered will not be shown in the result):
Failed to add remark to an applicant? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing remark keyword: remark | Unknown command | Follow the command format of remark INDEX r/[REMARK] closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is valid. That is it is a number that is on the displayed applicant list. |
| Negative or 0 Index | Invalid command format! | Ensure that the index is a positive integer and is also a number that is on the displayed applicant list. |
Additional Examples:
remark 1 Empties the remark of the 1st applicant. It is equivalent to remark 1 r/.Jump back to Table of Contents
addL or addGAdds the username for their social profile [LinkedIn/GitHub] to the existing contact details of applicants.
Format: addL INDEX u/USERNAME or addG INDEX u/USERNAME
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be a non-zero unsigned integer and it must not be greater than the total number of applicants in JABPro. |
| Mandatory | u/USERNAME | USERNAME must be a string value. Only the prefix (i.e. u/) is mandatory. |
Notes regarding addL and addG command:
u/ is taken to be the username, except if the prefix u/ occurs multiple times.u/, however, JABPro only considers the set of characters entered after the last occurring instance of u/ as the username.USERNAME is a valid username for the respective social profile. If it is not a valid username, user will be redirected to the error page of the corresponding social profile when linkedin or github command is invoked. JABPro does not perform checks for the validity of the username for the corresponding social profile.addL or addG command for an applicant for whom a username has already been added, will simply overwrite the existing username with the new one.addL INDEX u/ or addG INDEX u/, i.e. providing no username, or simply providing blanks for the username. Such inputs are accepted by JABPro. However, it will prove to be erroneous when linkedin or github command is invoked.Example of successful execution of the addL command:
addL 1 u/alexyeohaddL commandaddG command is invoked in the same way.
Failed to add LinkedIn/Github username? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing addL or addG keyword | Unknown command | Follow the command format of addL INDEX u/USERNAME or addG INDEX u/USERNAME closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is valid. That is it is a number that is on the displayed applicant list. |
| Negative or 0 Index | Invalid command format! | Ensure that the index is a positive integer and is also a number that is on the displayed applicant list. |
| Missing username | Invalid command format! | Ensure that the username is filled up |
Jump back to Table of Contents
linkedin or githubRedirects user to applicant's LinkedIn or GitHub account.
Format: linkedin INDEX or github INDEX
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be a non-zero unsigned integer and it must not be greater than the total number of applicants in JABPro. |
Notes regarding LinkedIn and GitHub commands:
INDEX for an applicant for whom username [that is not blank, or does not comprise of only spaces] has been added previously.Example of successful execution of github command:
github 1github command [It is assumed an applicant exists in JABPro, with Github username previously added]:The GitHub window opens as follows, displaying the profile with the specified username, or error page in case profile with that username does not exist:
linkedin command is invoked in the same manner.
Failed to redirect to social profile? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing linkedin or github keyword | Unknown command | Follow the command format of linkedin INDEX or github INDEX closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is valid. That is it is a number that is on the displayed applicant list. |
| Negative or 0 Index | Invalid command format! | Ensure that the index is a positive integer and is also a number that is on the displayed applicant list. |
| Missing account for provided Index | No LinkedIn account has been added for this candidate. or No Github account has been added for this candidate. | Ensure that username has been previously added to the specified candidate |
Jump back to Table of Contents
setSets the applicant to a specific status ("Preliminary"/ "Interviewed"/ "Rejected"/ "Offered").
Format: set INDEX STATUS
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be an existing index in the displayed applicant list and it must not be greater than the total number of applicant in JABPro. It must also be a positive integer |
| Mandatory | STATUS | STATUS must be one of the following - "Preliminary", "Interviewed", "Rejected", "Accepted". It is case-insensitive. |
Examples:
list followed by set 2 Interviewed sets the 2nd applicant in the address book to "Interviewed".Jump back to Table of Contents
viewCreates a complete view for details of an applicant in the applicant information panel and summary statistics (if applicable) of an applicant in the summary statistics panel.
Format: view INDEX
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be an existing index in the displayed applicant list and it must not be greater than the total number of applicant in JABPro. It must also be a positive integer. |
Notes regarding view command:
Tip: Other operations that affect user's data will trigger a refresh of the view.
These include add, edit, set, remark, addL, addG.
This means that the view will be updated to reflect the latest changes to the data for that particular applicant.
An example of the view command being successfully executed:
Enter the command view 3
This is the result of the successful view command (Take note that command entered will not be shown in the result):
An example of the view command being successfully executed for applicant with tags and score:
Enter the command view 2 (Applicant with tags and score)
This is the result of the successful view command (Take note that command entered will not be shown in the result):
Failed to execute view command? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing view keyword: view | Unknown command | Follow the command format of view INDEX closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is valid. That is it is a number that is on the displayed applicant list. |
Jump back to Table of Contents
editEdits an existing applicant's detail in JABPro. It also includes the functionality to add scores to a specific applicant.
Format: edit INDEX ([n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAGNAME]… [sc/TAGNAME SCORE])
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be a non-zero unsigned integer and must also not be greater than the total number of applicants in JABPro. |
| Mandatory* | n/NAME | NAME must be alphanumeric (Letters and numbers, no symbols allowed such as /, , ...). |
| Mandatory* | p/PHONE_NUMBER | PHONE_NUMBER must contain numbers only and should be at-least 3 digits long. |
| Mandatory* | e/EMAIL | EMAIL must be the standard email address format (There must be an email-prefix followed by @ symbol and email domain). |
| Mandatory* | a/ADDRESS | ADDRESS can be any value, including special characters such as #, , ... |
| Mandatory* | t/[CATEGORY] TAGNAME | TAGNAME must be alphanumeric with no spaces. Any details after the space will be ignored. |
| Mandatory* | sc/TAGNAME SCORE | TAGNAME a tag that is being created or already exist for that applicant. SCORE must be a non-negative integer. |
*it is mandatory if and only if it is the only field used in the command.
Notes regarding edit command:
t/[CATEGORY] TAGNAME for more details.Tip: Editing an applicant's details will trigger a refresh of the view. This means that the view will be updated to reflect the latest changes to the data for that particular applicant.
Editing tags of an applicant? Take note of the following:
edit INDEX /t removes the tags of the applicant at that index.create in an edit command, the tag would still be added to the applicant, but it would be uncategorized.edit INDEX t/CATEGORY DUPLICATETAGNAMEAdvanced
edit INDEX t/CATEGORY TAGNAME.Caution:
If you tag a person with a tag that has not been categorised yet without specifying the category i.e. edit 1 t/UNCATEGORIZEDTAG, and then you created that same tag with a specific category using create,
you need to re-tag the person with the same tag name again in order to overwrite the previous uncategorized tag with the categorized tag.
This is because, create only creates new categorized tags. It does not categorize existing tags when you do create t/CATEGORY EXISTINGTAGNAME
Editing the score of an applicant? Take note of the following:
TAG in sc/TAGNAME SCORE must be a tag of the category assessment. You cannot use the sc/TAG SCORE field for tags that are not of the assessment category.SCORE in sc/TAG SCORE is non-negative, that is SCORE must be more than or equal to 0.sc/TAG SCORE field e.g. edit 1 t/SCORETAGedit INDEX sc/TAGNAME SCORE if they have been tagged with the assessment-related TAGNAME.Advanced
edit INDEX t/TAGNAME sc/TAGNAME SCORE.create with the category assessment. You cannot do this with a tag that hasn't been created even if you specified its category assessment i.e. edit INDEX t/assessment interview1 sc/interview1 100 does NOT
work. This is because, you cannot create tag and edit score at the same time as editing score relies on the fact that the tag has already existed.How is creating tags using edit different from create?
Both will create categorized tags and add them to the tag list but create serves the singular purpose of creating categorized tags, while the main purpose of edit
is to edit the details of an applicant which includes tags.
The reason why we've allowed you to create tags in the event you use edit with a tag that
hasn't been created is for the sake of convenience (i.e. if you had forgotten to create the tag, it would still be added to the applicant you were editing).
Nonetheless, we strongly recommend you to use create to create categorized tags if your only intention is to create tags.
An example of the edit command being successfully executed:
Enter the command edit 1 n/Alex Ho p/91234567 (edits name and phone number)
This is the result of the successful edit command (Take note that command entered will not be shown in the result):
An example of the edit command being successfully executed with tags and score:
Ensure that you have created a tag Interview under the assessment category using the create command. Enter the command create t/assessment Interview
Enter the command edit 1 t/Interview sc/Interview 80 (edits tag and score)
This is the result of the successful edit command (Take note that command entered will not be shown in the result):
An example of the edit command being successfully executed to clear a tags and score:
Enter the command edit 1 t/ (Clear all tags)
This is the result of the successful edit command (Take note that command entered will not be shown in the result):
Failed to edit an applicant's details? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing edit keyword: edit | Unknown command | Follow the command format of edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAGNAME]… [sc/TAGNAME SCORE] closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is a valid number on the displayed applicant list. |
| Missing at least one of the field | At least one field to edit must be provided. | Ensure that at least one of the field is filled up and to be changed. |
| Duplicate name | This person already exists in the address book | Ensure that the name of the applicant is unique. That is, you cannot add the same name twice. Use some form of extra identification like a number |
| Invalid phone number | Phone numbers should only contain numbers, and it should be at least 3 digits long | Ensure that the phone number only contains numbers and should be at least 3 digits long |
| Invalid email | Emails should be of the format local-part@domain and adhere to the following constraints: ... | Ensure that the prefix and domain of the email is correct, following the constraints stated by the error |
| Invalid tag name | Tag names should only contain alphanumeric characters and should not be blank | Ensure that the tag name only contains alphanumeric characters and should not be blank |
Multiple prefixes of the same type being used (does not apply to tag prefix t) | Multiple values specified for the following single-valued field(s): prefix/ | Remove the duplicate prefix. The command should only have 1 of every prefix except for t/ |
| Missing score for tag | Invalid score, score must be non-negative integer. | Ensure that the score is filled up and is separated from the TAGNAME by a whitespace (NOT commas). |
| Invalid tag to attach score | Invalid score tag, tag must a tag of the category assessment and must exist on the applicant | Ensure that the tag is of the category assessment and it exists on the applicant. If it's the wrong category, use create i.e. create t/assessment TAGNAME to firstly create the categorized tag. If it is not tagged to the person use edit i.e. edit INDEX t/TAGNAME |
| Missing valid score-tag on applicant | The tag does not exist, cannot attach a score to it | Ensure that the applicant has the tag and it is of category assessment, this is what is considered a valid score-tag. This is done by creating an assessment category for the tag name using create and update tag using edit INDEX t/TAGNAME ... |
| Tag ambiguity | Multiple tags exists with the same name! Specify the category of the tag when adding it to a person e.g. edit 1 t/experience 3 | Specify the category of the tag you want to add in the field e.g.edit INDEX t/CATEGORY DUPLICATETAGNAME |
Jump back to Table of Contents
deleteDeletes the specified job applicants from the address book.
Format: delete INDEX
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be a non-zero unsigned integer and must also not be greater than the total number of applicants in JABPro. |
Format: delete (t/TAGNAME... st/STATUS...)
| Type | Field | Constraints |
|---|---|---|
| Mandatory* | t/TAGNAME | TAGNAME must be alphanumeric and contains no spaces. |
| Mandatory* | st/STATUS | STATUS must either be preliminary, interviewed, offered, rejected. |
*it is mandatory if and only if it is the only field used in the command.
Note:
delete 1 t/hardworking is not allowed.delete by tags & status requires at least ONE delete parameter i.e. st/STATUS, or t/TAGNAME.delete st/preliminary intervieweddelete t/interN is the same as delete t/internAdvanced
Note:
delete command e.g. delete st/interviewed t/internAn example of delete by index command being successfully executed:
Similarly, here are some examples of delete by tags & status command being successfully executed:
Assuming this as the data after executing list:

delete t/marketing software
The above delete command deleted all applicants whose tags match ANY of the given keywords. This is because
delete does an OR search within a specific category.
delete st/interviewed t/software
The above delete command only deleted Bernice because delete does an AND search across multiple categories.
What does it mean to do an OR delete within a single category and an AND delete across multiple categories?
It's best to explain this by breaking down an example delete command!
delete st/interviewed rejected t/intern manager will delete applicants whose:
OR rejectedAND has a tag intern or manager.Failed to execute the delete command? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
| Missing delete keyword | Unknown command! | Follow the command format delete INDEX OR delete (st/STATUS... t/TAGNAME...) |
Missing delete categories e.g. delete | Invalid command format! | Make sure you include at least one of the delete categories i.e. /st, /t. |
Invalid INDEX e.g. delete 0, delete -1 | Invalid command format! | Make sure INDEX is a positive integer. |
Invalid status e.g. delete st/in, delete st/ | Status should be either one of the following: 'Preliminary','Interviewed', 'Offered', 'Rejected' and it should not be blank. | Check that the status is one of the following: preliminary, interviewed, rejected, offered. |
Invalid tag e.g. delete t/intern@, delete t/ | Tags names should be alphanumeric. | Ensure that tag does not contain any non alphanumeric characters such as &, $, @, -, %, *, _, empty space, etc. |
Multiple prefixes of the same category being used e.g. delete t/intern t/manager | Multiple values specified for the following single-valued field(s): prefix/. | Remove the duplicate prefix. The command should only have at most one of every prefix. |
Using commas as delimiters of different parameters instead of spaces e.g. delete t/intern, manager | Status should be either one of the following: 'Preliminary','Interviewed', 'Offered', 'Rejected' and it should not be blank Tags names should be alphanumeric. | Remove the comma(s) e.g. delete t/intern manager |
Using commas as delimiters of different parameters instead of spaces e.g. delete st/interviewed, t/intern | Should display the error message for either invalid status or tag depending on the first prefix because it will consider the comma and anything that comes after it as part of the first prefix. | Remove the comma(s) e.g. delete n/alex t/intern |
Jump back to Table of Contents
searchFinds job applicants whose profiles match the specified categories' keywords. The search categories are: name, status, tag.
Format: search (n/NAME... st/STATUS... t/TAGNAME...)
| Type | Field | Constraints |
|---|---|---|
| Mandatory* | n/NAME | NAME must be alphanumeric (Letters and numbers, no symbols allowed such as /, , ...). |
| Mandatory* | st/STATUS | STATUS must either be preliminary, interviewed, offered, rejected. |
| Mandatory* | t/TAGNAME | TAGNAME must be alphanumeric and contains no spaces. |
*it is mandatory if and only if it is the only field used in the command.
Note:
search requires at least ONE search parameter i.e. n/NAME, st/STATUS, or t/TAGNAME.search st/preliminary interviewedsearch n/aLeX is the same as search n/alexAdvanced
Note:
search command e.g. search n/alex st/interviewed t/internHere are some examples of search command being successfully executed:
Enter search n/alex bernice
The above search command displayed all applicants whose name match ANY of the given keywords. This is because
search does an OR search within a specific category.
Enter search n/alex bernice st/interviewed t/intern
Notice how the above search command did not display "Alex" despite his profile matching
the name and tag categories. This is because search does an AND search across multiple categories.
What does it mean to do an OR search within a single category and an AND search across multiple categories?
It's best to explain this by breaking down an example search command!
search n/alex bernice st/interviewed t/intern will output applicants whose:
OR BerniceAND status is either interviewedAND has a tag internFailed to execute the search command? Here are some possible reasons why
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
| Missing search keyword | Unknown command! | Follow the command format search (n/NAME... st/STATUS... t/TAGNAME...) |
Missing search categories e.g. search | Invalid command format! | Make sure you include at least one of the search categories i.e. /n, /st, /t. |
Invalid name e.g. search n/alex@, search n/ | Names should only contain alphanumeric characters and spaces, and it should not be blank. | Ensure that name does not contain any non-alphanumeric characters such as &, $, @, -, %, *, _, etc. |
Invalid status e.g. search st/in, search st/ | Status should be either one of the following: 'Preliminary','Interviewed', 'Offered', 'Rejected' and it should not be blank. | Check that the status is one of the following: preliminary, interviewed, rejected, offered. Enter the command again with any of the 4 metric |
Invalid tag e.g. search t/intern@, search t/ | Tags names should be alphanumeric. | Ensure that tag does not contain any non alphanumeric characters such as &, $, @, -, %, *, _, empty space, etc. |
Multiple prefixes of the same category being used e.g. search n/alex n/bernice | Multiple values specified for the following single-valued field(s): prefix/. | Remove the duplicate prefix. The command should only have at most one of every prefix. |
Using commas as delimiters of different parameters instead of spaces e.g. search n/alex, bernice | Names should only contain alphanumeric characters and spaces, and it should not be blank Status should be either one of the following: 'Preliminary','Interviewed', 'Offered', 'Rejected' and it should not be blank Tags names should be alphanumeric. | Remove the comma(s) e.g. search n/alex yeoh |
Using commas as delimiters of different parameters instead of spaces e.g. search n/alex, t/intern | Should display the error message for either invalid name, status, or tag depending on the first prefix because it will consider the comma and anything that comes after it as part of the first prefix. | Remove the comma(s) e.g. search n/alex t/intern |
Jump back to Table of Contents
filterFilters and display applicants in the current displayed applicant list using statistical metrics and values.
In essence, this allows you to find job applicants whose performance rating is above a certain percentile, score or mean/median score for that tag.
Ideally, this feature can then be used to find the best applicants easily and quickly without having to manually look through the list of applicants.
Format:filter t/TAGNAME met/METRIC val/VALUE or filter t/TAGNAME met/METRIC
| Type | Field | Constraints |
|---|---|---|
| Mandatory | t/TAGNAME | TAGNAME must be a tag that is of the category assessment. |
| Mandatory | met/METRIC | METRIC must be either score, percentile, mean, median. |
| Mandatory* | val/VALUE | VALUE must be a non-negative integer and is a mandatory field only for score and percentile |
*val/VALUE is an optional field for mean and median
METRIC that is score or percentile, filter displays job applicants whose value is greater than or equal to the specified value for the specified statistic metric.METRIC that is mean or median, the VALUE is optional. Specifying a VALUE here will be ignored accordingly. filter t/TAGNAME met/METRIC is equivalent to filter t/TAGNAME met/METRIC val/X where X is any positive integer.Notes:
list before using filter to ensure that you are filtering the correct list of job applicants.list again.You should use filter after you have tagged most of the job applicants with a tag that has a score.
This is because some metrics such as percentile, mean and median require a certain number of scores to be considered meaningful.
Read more about this in the Summary Statistics section.
Set up for examples when you first start JABPro with default data:
list
create t/assessment interview to create a tag interview under the assessment category.
edit 1 t/interview sc/interview 80
edit 2 t/interview sc/interview 90
edit 3 t/interview sc/interview 70
The result of the above commands should look like this:
An example of the filter command being successfully executed:
Enter the command list
Enter the command filter t/interview met/percentile val/80 (Filter by percentile)
This is the result of the successful filter command (Take note that command entered will not be shown in the result):
An example of the filter command being successfully executed with median:
Enter the command list
Enter the command filter t/interview met/median (Filter by median)
This is the result of the successful filter command (Take note that command entered will not be shown in the result):
Failed to execute the filter command? Here are some possible reasons why:
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing filter keyword: filter | Unknown command! | Follow the command format strictly of filter t/TAGNAME met/METRIC val/VALUE for score and percentile or filter t/TAGNAME met/METRIC for mean or median. |
| Missing parameters | Incomplete parameter inputs. t/TAG and met/SCORE are compulsory fields. | Enter the command again with the correct parameters. |
| Tag missing on applicants | Tag does not exist! | Check that the tag is used on at least one applicant and that the tag is a assessment tag also. Add the tag to the applicants using edit |
| Invalid tag name | Invalid tag provided. Needs to be non-empty name | Check that the tag name is not empty and is alphanumeric (a valid tag name) and does not contain space. Additionally, the tag must already have a category of assessment, ensure this by using listT |
| Invalid metric | Invalid metric provided. Needs to be one of: score, mean, median, percentile | Check that the metric is one of the following: score, mean, median, percentile and that it is spelt correctly. Enter the command again with any of the 4 metric |
| Invalid value | Invalid value provided. Needs to be a non negative integer that is more than or equal to 0 | Check that the value is a non-negative integer that is more than or equal to 0. Enter the command again with the correct value. |
| Missing value | val/VALUE is missing, it is compulsory. | Enter a value for val/VALUE since the metric requires it. |
| Multiple prefixes of the same type being used | Multiple values specified for the following single-valued field(s): prefix/ | Remove the duplicate prefix. The command should only have 1 of every prefix |
Jump back to Table of Contents
listShows a list of all applicants in JABPro
Format:
list [so/ATTRIBUTE]
| Type | Field | Constraints |
|---|---|---|
| Optional | so/ATTRIBUTE | ATTRIBUTE must either be name or email. |
Note:
list so/NAME and list so/name return the same result.Jump back to Table of Contents
eventAdds an event, associated with an applicant, to JABPro.
Format: event INDEX d/DESCRIPTION bt/BEGIN_TIME et/END_TIME
| Type | Field | Constraints |
|---|---|---|
| Mandatory | INDEX | INDEX must be a non-zero unsigned integer and it must not be greater than the total number of applicant in JABPro |
| Mandatory | d/DESCRIPTION | DESCRIPTION must be a string value. Only the prefix (i.e. d/) is mandatory. |
| Mandatory | bt/BEGIN_TIME | BEGIN_TIME must be a valid date-time, in the format yyyy-MM-dd HH:mm |
| Mandatory | et/END_TIME | END_TIME must be a valid date-time, in the format yyyy-MM-dd HH:mm, and after the BEGIN_TIME |
Note:
data/eventbook.json file. Existing events are also read from the file when JABPro starts up.DESCRIPTIONs can also be added. However, the prefix d/ must still be present.Example of successful execution of event command:
event 1 d/Interview bt/2023-11-12 10:00 et/2023-11-12 12:00event command [It is assumed an applicant called Alex Yeoh exists in JABPro]:The changes in UI take place in the Events Window. Please find more details in Viewing Events.
Failed to execute teh event command? Here are some possible reasons why:
| Reason for Error | Error Message | Remedy / Suggested course of action |
|---|---|---|
Missing event keyword: event | Unknown command | Follow the command format of event INDEX d/DESCRIPTION bt/START_TIME et/END_TIME closely |
| Missing Index | Invalid command format! | Ensure that the index is filled up. |
| Invalid Index | The person index provided is invalid | Ensure that the index is valid. That is it is a number that is on the displayed applicant list. |
| Negative or 0 Index | Invalid command format! | Ensure that the index is a positive integer and is also a number that is on the displayed applicant list. |
| Missing description | Invalid command format! | Ensure that the description is filled up |
| Missing start time | Invalid command format! | Ensure that the start time is filled up |
| Missing end time | Invalid command format! | Ensure that the end time is filled up |
| Start time/End time not in correct format | Date is not in correct format! | Ensure that the start time/end time is in yyyy-MM-dd format |
| Start time/End time not a valid date-time | Date entered is invalid! | Ensure that the start time/end time is a semantically valid date |
| End time before or same as start time | End time must be after start time! | Ensure that the end time is after the start time |
Jump back to Table of Contents
scheduleDisplays all events that have been added to JABPro.
Format: schedule
Note:
schedule command will open the Events window regardless of whether there are events in JABPro or not.schedule keyword will be ignored. E.g.: schedule a1b2c3Tip: The Events window can also be accessed by clicking Events > Events in the menu bar, located at the top of the window.

Example of successful execution of schedule command:
scheduleschedule command [It is assumed that an event was previously added using the command `event 1 d/Interview bt/2023-11-12 10:00 et/2023-11-12 12:00]:The Events window opens up:
There is no possibility of a "failed" execution of the schedule command.
Jump back to Table of Contents
exportFormat: export
Exports the entries into a .csv file located in the current directory as (/data/export.csv)
Note:
Examples:
export exports the data to /data/export.csvJump back to Table of Contents
clearClears all entries from JABPro - including applicants and events.
Format: clear
Note:
clear command empties all records, not only in the current running instance of JABPro, but from the json files as well where the data is written to/read from. Hence, a subsequent launch of JABPro will display an empty application.clear command can be invoked on an already empty instance of JABPro as well, without any errors being raised. There is no effect of running this command.Example of the successful execution of the clear command:
Jump back to Table of Contents
exitExits the program.
Format: exit
Jump back to Table of Contents
Advanced
Summary Statistics is a table generated by JABPro that displays the following information about an applicant:
It is generated for tags that are categorised under the assessment category.
| Statistic / Metric | Description |
|---|---|
score | The score of the applicant for the tag. |
mean | The mean score of applicant with that tag. |
median | The median score of applicant with that tag. |
minimum | The minimum score of applicant with that tag. |
maximum | The maximum score of applicant with that tag. |
percentile | The percentile of the applicant for that tag. |
You should ensure that you have sufficient candidates of more than 20 with a score for the tag you are interested in, before using the summary statistics to make comparisons.
Notes on why you should have sufficient applicants with a score for the tag you are interested in:
Tip:
median and percentile to make your judgement on the performance of an applicant.median to find applicants who are the better performing halfpercentile as where this applicant stands among all other applicants (treat it like a ranking system, the higher the percentile, the better the applicant is performing)Advanced
Note:
percentile has limited functionality in some context. This is because if two applicants have the same score, they are rank the same. This means that the percentile of both applicants will be the same.
rank the same.Formula used to calculate the summary statistics:
sum of all scores with that tag / number of applicants with that tagmiddle score of all scores with that taglowest score of all scores with that taghighest score of all scores with that tagnumber of applicants with a score strictly lower than the applicant / total number of applicants with that tagJump back to Table of Contents
JABPro data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
JABPro 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, JABPro 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.
Jump back to Table of Contents
Q: What would happen if I used JABPro for the first time without the sample data? Would the app break? A: Not necessarily, we've tested out the JABPro launch without any sample data and basic functionalities are working fine. However, we do not recommend this because there could be unexpected behaviours that we might have not accounted for. It is always advisable to follow the quickstart instructions and launch JABPro with the sample data!
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 JABPro home folder.
Jump back to Table of Contents
| Action | Format, Examples |
|---|---|
| Add | add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/[CATEGORY] TAGNAME]… e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/developer t/intern |
| Remark | remark r/REMARK e.g., remark 1 r/Great attitude, hardworking |
| Add LinkedIn/Github | addL INDEX u/USERNAME or addG INDEX u/USERNAME e.g., addL 1 u/alex-yeoh, addG 2 u/bernicesanders123 |
| Open LinkedIn/Github | linkedin INDEX or github INDEX e.g., linkedin 1, github 2 |
| Set | set INDEX STATUSe.g., set 2 Interviewed |
| View | view INDEX e.g., view 1 |
| Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAGNAME] [sc/TAGNAME SCORE]e.g., edit 2 n/James Lee e/jameslee@example.com t\MarketingInterview sc\MarketingInterview 50 |
| Delete | delete INDEX or delete (t/TAGNAME... st/STATUS...) e.g., delete 3, delete t/intern st/rejected |
| Create | create t/CATEGORY NAME… e.g. create t/dept software |
| ListT | listT |
| Search | search (n/NAME... st/STATUS... t/TAGNAME...) e.g., search n/alex |
| Filter | filter t/TAGNAME met/METRIC val/VALUE e.g., filter t/interview met/score val/80 |
| List | list so/ATTRIBUTE e.g. list so/name |
| Event | event INDEX d/DESCRIPTION bt/START_TIME et/END_TIME |
| Schedule | schedule |
| Help | help |
| Export | export |
| Clear | clear |
Jump back to Table of Contents
| Prefix | Description | Commands | Constraint |
|---|---|---|---|
n/ | Name | Add, Edit, Search | Must be alphanumeric (Letters and numbers, no symbols allowed such as /, , ...). |
p/ | Phone Number | Add, Edit | Must contain numbers only and should be at-least 3 digits long. |
e/ | Add, Edit | Must be the standard email address format (There must be an email-prefix followed by @ symbol and email domain). | |
a/ | Address | Add, Edit | can be any value, including special characters such as #, , ... |
t/ | Tag | Add, Edit, Search, Create, Delete | Must be alphanumeric with no spaces. Any details after the space will be ignored. |
sc/ | Score | Edit | Must be a non-negative integer. |
st/ | Status | Search, Delete, Set | Must either be preliminary, interviewed, offered, rejected. |
r/ | Remark | Remark | can be any value, including special characters such as #, , ... |
u/ | Username | Add Github/LinkedIn | Must be a string value. |
met/ | Metric | Filter | Must be either score, percentile, mean, median. |
val/ | Value | Filter | Optional only for mean and median. Otherwise, must be a non-negative integer. |
so/ | Sort | List | Must be either name or email. |
d/ | Description | Event | Must be a string value. |
bt/ | Begin Time | Event | Must be a valid date-time, in the format yyyy-MM-dd HH:mm. |
et/ | End Time | Event | Must be a valid date-time, in the format yyyy-MM-dd HH:mm. |
Jump back to Table of Contents
| Keyword | Definition |
|---|---|
| Alphanumeric | Letters and numbers. Should NOT contain symbols, or whitespaces. |
| Index | The index of the applicant of the currently displayed list in the applicant list panel. |
| Parameter | Details about the job applicant that will be included in the command. |
| Command | Instructions that JABPro will execute. |
| JAR | Compressed file of JABPro that is in the form of a Java Archive. |