TalentFolio is a powerful yet easy-to-use application designed for hiring managers to efficiently manage information on job candidates. It is optimized for users who prefer a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you're a fast typist, TalentFolio can significantly speed up your hiring workflow!
helpshowaddlisteditlinkfinddeleteclearfiltersortsort-numundoexitFollow these simple steps to get TalentFolio up and running:
TalentFolio requires Java 17 or later to run. Check your Java version by opening a terminal or command prompt and typing:
java -version
If Java is not installed or is an older version:
Get the latest version of TalentFolio from our official release page. Download the latest .jar file available.
Move the .jar file to the folder you want to use as the home folder for TalentFolio. This folder will store the TalentFolio application data. We recommend choosing a convenient location that you have read, write and execute permissions for.
Open a command terminal:
Win + R, type cmd, and hit Enter..jar file. You can do this using the cd command. For example:cd path/to/your/folderjava -jar talentfolio.jar
TalentFolio's graphical user interface
Type the command in the command box and press Enter to execute it. For example, typing help and pressing Enter will open the help window.
Some example commands you can try:
list : Lists all candidates.
add n/John Doe p/98765432 e/johnd@example.com : Adds a candidate named John Doe to the database.
edit 1 a/GPA=3.9 ra/CAP : Adds a GPA and removes a CAP from the 1st candidate shown in the current list.
filter a/Major=Computer Science : Filters all candidates who major in Computer Science.
sort a/Graduation Year : Sorts candidates in alphabetically ascending order of Graduation Year.
delete 3 : Deletes the 3rd candidate shown in the current list.
clear : Deletes all candidates.
undo : Undoes the last command.
exit : Exits the app.
Quick notes on some commands:
The find command can be used to search candidates by name, while the filter command allows you to search by attributes.
The add/edit commands add/edit attributes at the individual candidate level, whereas the link command creates an association between the attribute name and a site link at the app-wide level.
For a complete list of features and detailed instructions of each command, check out the Features section below.
Enjoy using TalentFolio to streamline your hiring process!
Notes about the command format:
Words in UPPER_CASE are parameters for you to supply.
For example: in add n/NAME, NAME should be replaced with the person's actual name. For a person named John Doe, this would be add n/John Doe.
Items in square brackets are optional.
For example: n/NAME [t/TAG] can be used as n/John Doe t/Excel or as n/John Doe.
Items with … after them can be used as many times as desired – if the items are optional, 0 or more times; otherwise, 1 or more times.
For example: [t/TAG]… can be used as (i.e. 0 times), t/Excel, t/C++ t/Java, etc.
Parameters can be in any order.
For example: if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.
Extraneous parameters immediately after the command word will be ignored.
For example:
If you type help 123, it will be interpreted as help.
If you type sort t/Excel a/Major, it will be interpreted as sort a/Major.
sort a/Major t/Excel will not be accepted, since the extraneous parameter t/Excel is after the actual parameter a/Major.
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 a message explaining how to access the help page.
Help message window
Format: help
showShows the specified person's details in the right panel.
Format: show INDEX
Example:
show 1 shows the details of the 1st person.
Results after typing show 1Tip: In the right panel, you can click on the phone number or email address to copy it to your clipboard.
addAdds a person to the database.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL [t/TAG]… [a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE]…
Examples:
add n/John Doe p/98765432 e/johnd@example.com adds a person named John Doe with phone number 98765432 and email address johnd@example.com.add n/Betsy Crowe t/C++ e/betsycrowe@example.com p/1234567 t/Java a/Major=Data Science and Analytics adds a person named Betsy Crowe with phone number 1234567, email address betsycrowe@example.com, tags C++ and Java, and an attribute named Major with the value Data Science and Analytics.Tip: A person can have any number of tags and attributes (including 0).
Restrictions on parameters
Names:
()/@-',._.If you have a name that cannot be written in the English alphabet, you will need to romanize the name. Here are some examples:
Phone numbers:
+-#*).Email addresses:
Should have the format LOCAL_PART@DOMAIN and adhere to the following constraints:
LOCAL_PART should only contain alphanumeric characters and these special characters: +_.-. It should not be blank and should not start or end with any special characters.DOMAIN is a domain name, which is made up of domain labels separated by periods. The domain name must:
Tags:
/ or \, should not be blank, and should not be longer than 50 characters.Attribute names and values:
/, \, or =, should not be blank, and should not be longer than 50 characters.More information on attributes:
Major is treated the same as major, so a person cannot have both Major and major as an attribute.
Major, that's how it will be stored and displayed.listShows a list of all persons in the database.
Format: list
editEdits an existing person in the database.
Format: edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [t/TAG]… [rt/TAG_TO_REMOVE]… [a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE]… [ra/NAME_OF_ATTRIBUTE_TO_REMOVE]…
INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …Examples:
edit 1 p/91234567 e/johndoe@example.com Edits the phone number and email address of the 1st person to be 91234567 and johndoe@example.com respectively.edit 2 n/Betsy Crower t/Top candidate Edits the name of the 2nd person to be Betsy Crower and adds a tag Top candidate.edit 3 rt/SQL Edits the 3rd person, removing the tag SQL.edit 1 a/Graduation Year=2027 Adds or edits an attribute named Graduation Year to the 1st person.edit 1 ra/Graduation Year Removes the attribute named Graduation Year from the 1st person.For tags:
edit 1 t/Ideal rt/Ideal is not allowed.For attributes:
edit 1 a/Major=Physics ra/Major is not allowed.Filters:
filter or find command) when a person is edited, that person may no longer pass the existing filtering criteria. Hence, to ensure that the person is still shown in the UI, filters are cleared after a person is edited.linkAssociates an attribute name with a website URL for all candidates. This means that you can visit the website by clicking on the attribute in a person's detailed view (which can be shown by clicking on them or by using the show command).
Format (to add a link): link a/ATTRIBUTE_NAME=SITE_LINK
ATTRIBUTE_NAME with SITE_LINK. This change applies to all persons that have an attribute with this name. Attributes with this name that are added in the future will also be linked to this site URL.https://) has to be included too.Format (to remove an existing link): link ra/ATTRIBUTE_NAME
ATTRIBUTE_NAME and the website it was associated with.Examples:
link a/github=https://github.com/ https://github.com/ATTRIBUTE_VALUE by clicking on the attribute.GitHub and the value pochitaro2025 (usually their username), you will be directed to https://github.com/pochitaro2025!link ra/github github and https://github.com/.Attribute names are case-insensitive. link a/github=https://github.com/ has the same effect as link a/GitHub=https://github.com/.
If an attribute corresponds to an invalid link (i.e., the app cannot open the site link), clicking on it may copy it instead of opening it.
It is recommended to include the prefix — such as https:// or http:// — as omitting it may cause the above issue.
Tip: Associations for github and linkedin (https://github.com/ and https://www.linkedin.com/in/) are added by default!
Enjoy the easy management of websites!
Clicking on the attribute GitHub: example-alexyeoh opens
the link https://github.com/example-alexyeoh
findFinds persons whose names contain any of the given keywords.
Format: find KEYWORD…
hans will match Hans.Hans Bo will match Bo Hans.Han will match Hans.
Has will not match Hans.OR search).
For example, Hans Bo will match Hans Gruber, Bo YangExamples:
find John matches any person with John as a substring in their name.find alex david matches any person with alex OR david as a substring in their name.
Results after typing find alex daviddeleteDeletes the specified person.
Format: delete INDEX
INDEX.Examples:
list followed by delete 2 deletes the 2nd person in the database.find Betsy followed by delete 1 deletes the 1st person in the results of the find command.clearClears all entries.
Format: clear
filterFilters the candidates based on whether they have a specific attribute or not.
Format: filter a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE…
ATTRIBUTE_NAME and ATTRIBUTE_VALUE are matched case-insensitively.Additional notes on warning messages:
GraduatOIn year will be corrected to GraduatIOn year automatically, if only Graduation year exists as an attribute name.Major=Engineering and Graduation year=2027, no warning will be shown by an input Major=2027.Autocorrection is different from autocompletion. For example, Majo and Makor will match Major, but Maj will not, as it is considered too far from the original Major.
This autocorrection only occurs if at least one candidate has an attribute with this name Major. The same logic applies to the attribute value.
To avoid unintentional corrections, autocorrection does not modify the numeric portions of attribute names/values. For example, the attribute value 2022 would not be autocorrected to 2027, nor would the attribute name TOEFL 2023 be changed to TOEFL 2024.
Examples:
| Command | Filtered condition |
|---|---|
filter a/Major=Computer Science a/Graduation year=2027 | major in Computer Science AND will graduate in 2027 |
filter a/Major=Computer Science a/Major=Mathematics | major in Computer Science OR Mathematics |
filter a/Major=Computer Science a/Major=Mathematics a/Graduation year=2027 | major in either Computer Science OR Mathematics, AND will graduate in 2027 |
For the last command example,
| Major | Graduation Year | Matched? | Reason (if not matched) |
|---|---|---|---|
| Computer Science | 2027 | Yes | |
| Mathematics | 2027 | Yes | |
| Engineering | 2027 | No | do not meet the first condition |
| Computer Science | 2026 | No | do not meet the second condition |
| (no info) | 2027 | No | missing (= do not meet) the first condition |
| Computer Science | (no info) | No | missing (= do not meet) the second condition |
You can also obtain the same result with filter a/Major=Computer Science a/Graduation year=2027 a/Major=Mathematics, because the order of the arguments does not matter.
Results after typing filter a/Major=Computer Sciencea/Major=Mathematics a/Graduation year=2027
sortSorts the current view of entries by the value of the specified attribute name in alphabetically ascending or descending order.
Format: sort a/ATTRIBUTE_NAME [o/ORDER]
ATTRIBUTE_NAME is matched case-insensitively. For instance, a command sort a/graduation year can sort all entries that have an attribute with name Graduation Year.ORDER is specified, entries will be sorted in ascending order by default. Otherwise, the first character of the user input (case-insensitive) will determine the order: if it starts with 'a', entries will be sorted in ascending order; if it starts with 'd', they will be sorted in descending order.Autocorrection is different from autocompletion. For example, Majo and Makor will match Major, but Maj will not, as it is considered too far from the original Major.
This autocorrection only occurs if at least one candidate has an attribute with this name Major.
To avoid unintentional corrections, autocorrection does not modify the numeric portions of attribute names/values. For example, the attribute name TOEFL 2023 will not be autocorrected to TOEFL 2024.
Example:
sort a/major sorts entries in ascending order according to their Major alphabetically.
Major as an attribute will be sorted to the end of the list.sort a/locaton o/desc sorts entries in descending order according to their Location alphabetically.
locaton can be autocorrect to Location with a warning.
Results after typing sort a/locaton o/desc
sort-numSorts the current view of entries by the numeric value of the specified attribute name in ascending or descending order.
Format: sort-num a/ATTRIBUTE_NAME [o/ORDER]
ATTRIBUTE_NAME is matched case-insensitively. For instance, a command sort a/graduation year can sort all entries that have an attribute with name Graduation Year.ORDER is specified, entries will be sorted in ascending order by default. Otherwise, the first character of the user input (case-insensitive) will determine the order: if it starts with 'a', entries will be sorted in ascending order; if it starts with 'd', they will be sorted in descending order.Example:
sort-num a/expected salary sorts entries numerically (in ascending order) according to their Expected Salary.
Expected Salary will be placed at the end of the list, with those having Expected Salary as an attribute but lacking a valid numerical value appearing first.sort-num a/GPA o/desc sorts entries numerically (in descending order) according to their GPA.
Results after typing sort-num a/GPA o/desc
undoUndoes the last data change. Also clears any existing filters applied.
For instance, suppose a user intended to type delete 5 but accidentally types and executes delete 4. They can just type undo to restore the deleted entry.
Note that commands that do not change the underlying data will be skipped -- such as filter, find and show.
Format: undo
undo can be used multiple times in succession to undo more changes.undo on a freshly opened app will not change anything.Examples:
delete 4, then undo will get the result: Last data change command undone: delete 4sort-num a/Graduation Year, then undo will get the result: Last data change command undone: sort-num a/Graduation YearThere is no change to undo!. Note that existing filters will not be cleared, as the command was not successful:
show 3 then undofind n/Alex then undofilter a/Graduation Year=2025 then undodelete 4, then filter a/Graduation Year=2026, then undo will skip over the filtering. It will undo delete 4 and clear the filter
Results after typing delete 4, then filter a/Graduation Year=2026, then undo
Navigates through command history, replacing the text in the command box with the past executed command.
Format: Press the up arrow (↑) or down arrow (↓) key while the command box is selected.
ENTER is not required to be pressed for navigation.exitExits the program.
Format: exit
TalentFolio data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
TalentFolio data is saved automatically as a JSON file [JAR file location]/data/talentfolio.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, TalentFolio 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 TalentFolio to behave in unexpected ways (for example, 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.
Here are some tips on website linking. You can manually modify the correspondence between attribute names and site links by updating the urlSettings section in talentfolio.json.
Unlike the usual link command, you can leave the site link empty (i.e., ""). This allows you to copy the raw attribute value!
If you add multiple linkings with the same attribute name, the site link appearing the first will be used–note that attribute names are case-insensitive.
Be careful: if the attribute name is empty or invalid (i.e., containing /, \, or =), the app will clear all 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 TalentFolio home folder.
Q: How do I manage multiple candidates with the same name?
A: While the app does not currently allow candidates with the same name, you can mitigate this by slightly modifying the name based on your use case. For instance, with 2 candidates of the name "John Tan", the second candidate "John Tan 2" or "John Tan (NUS)". Note that names are case-insensitive, naming them "John Tan" and "john tan" wouldn't work.
Q: Can I sort students by multiple different attributes?
A: You can perform multiple rounds of sorting, since sorting by an attribute name will preserve the relative order of candidates that have the same attribute value for that attribute name. For example, if you want to sort primarily by graduation year and have candidates with the same graduation year sorted by GPA, you can do sort a/GPA, then sort a/Graduation Year.
Q: Does TalentFolio support international phone numbers?
A: We will implement that in the future, but phone numbers currently must be all numeric. However, phone numbers still work without spaces and hyphens. One possible workaround is to use a 00 prefix to denote the + symbol.
Q: What can I do if I accidentally delete an entry?
A: No worries, you can simply undo the last command!
Q: What can I do if I accidentally press Enter when I was typing my command halfway, and the command executed?
A: If the command executed changes any data, you can use undo to undo the data change. Then, to continue typing the last command, you can use the arrow key ↑ to retrieve the command you typed halfway, and resume typing it.
Q: Is there a limit to how many candidates I can add?
A: There is no limit we impose. However, with an excessively large number of candidates, the app would use more computer memory, which may cause your computer to lag.
Q: Does linking create a new attribute?
A: No. link is intended for portfolio websites. For instance, the default data links github attribute to https://github.com/, so that if a user has an attribute github=example-username, that attribute will have a link to https://github.com/example-username. Linking is intended to be universal, and not user-specific.
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 |
|---|---|
| Help | help |
| Show | show INDEX Example: show 1 |
| Add | add n/NAME p/PHONE_NUMBER e/EMAIL [t/TAG]… [a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE]… Example: add n/James Ho p/22224444 e/jamesho@example.com t/C++ t/Java a/Major=Data Science and Analytics |
| List | list |
| Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [t/TAG]… [rt/TAG]… [a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE]… [ra/ATTRIBUTE_NAME]… Example: edit 2 n/James Lee e/jameslee@example.com |
| Link (to add a link) | link a/ATTRIBUTE_NAME=SITE_LINK |
| Link (to remove a link) | link ra/ATTRIBUTE_NAME |
| Find | find KEYWORD…Example: find James Jake |
| Delete | delete INDEXExample: delete 3 |
| Clear | clear |
| Filter | filter a/ATTRIBUTE_NAME=ATTRIBUTE_VALUE… Example: filter a/Major=Computer Science |
| Sort | sort a/ATTRIBUTE_NAME [o/ORDER]Example: sort a/Degree o/ascending |
| Numerical Sort | sort-num a/ATTRIBUTE_NAME [o/ORDER]Example: sort-num a/GPA o/descending |
| Undo | undo |
| Navigate Past Commands | ↑ ↓ |
| Exit | exit |