HitList User Guide

HitList is a desktop app for managing contacts, 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, HitList can get your contact management tasks done faster than traditional GUI apps.

HitList is targeted towards recruiters and headhunters who are fast typist and need to manage a large number of contacts and companies.


Table of Contents


Quick start

  1. Ensure you have Java 17 or above installed in your Computer.
  2. Mac users: Ensure you have the precise JDK version prescribed here.
  3. Download the latest .jar file from here.
  4. Copy the file to the folder you want to use as the home folder for your HitList.
  5. Open a command terminal, cd into the folder you put the jar file in, and use the java -jar hitlist.jar command to run the application.
  6. A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
Ui

  1. 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.
  2. Some example commands you can try:
    • add /n John Doe /p 98765432 : Adds a contact named John Doe to the HitList.
    • list : Lists all contacts.
    • delete 3 : Deletes the 3rd contact shown in the current list.
    • clear : Deletes all contacts.
    • exit : Exits the app.
  3. Refer to the Features below for details of each command.

Features

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. edit INDEX [/n NAME] [/p PHONE_NUMBER] can be used as edit 3 /n John Doe or as edit 3 /p 98765432
  • 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, list, 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.

Getting help : help

Shows a message explaining how to access the help page.

Format: help

Help message

Adding a contact : add

Adds a contact to the HitList.

Format: add /n NAME /p PHONE_NUMBER [/e EMAIL] [/a ADDRESS]

  • The NAME and PHONE_NUMBER parameters are mandatory.
  • NAME must be unique and not the same as any existing contact in HitList.
  • PHONE_NUMBER must be unique and not the same as any existing contact in HitList.
  • All other parameters are optional.

Limitations:

  • NAME can only contain alphabetic characters, dashes, apostrophes, and spaces (No support for chinese characters and names with '/').
  • PHONE_NUMBER must only contain digits, and must not be blank.
  • EMAIL must be in the format local-part@domain, where local-part and domain are non-empty strings that do not contain spaces or /.
  • EMAIL does not implement uniqueness check, so multiple contacts can have the same email.
  • ADDRESS must not contain / and must not be blank.

Examples:

  • add /n John Doe /p 98765432
Before Adding John Doe to HitList
Add John Doe to HitList

  • add /n Betsy Crowe /p 87654321 /e betsy.crowe@gmail.com /a 321, Clementi Rd, 123465
Before Adding Betsy Crowe to HitList
Add Betsy Crowe to HitList

Editing a contact : edit

Edits an existing contact in the HitList.

Format: edit INDEX [/n NAME] [/p PHONE_NUMBER] [/e EMAIL] [/a ADDRESS]

  • Edits the contact at the specified INDEX.
  • The index refers to the index number shown in the displayed HitList.
  • The index must be a positive integer 1, 2, 3, …
  • At least one of the optional fields must be provided.
  • Existing values will be updated to the input values.

Examples:

  • edit 1 /p 91234567 edits the phone number of the first contact to 91234567
Before Edit of HitList
Edit 1st Contact number in HitList

  • edit 2 /n Betsy Crower edits the name of the second contact to Betsy Crower
Before Editing 2nd Contact
Edit 2nd Contact Name to Betsy Crowe in HitList

Deleting a contact : delete

Deletes the specified contact from HitList.

CAUTION: Irreversible Action

This command deletes the selected contact in HitList. Use with caution. The action is irreversible and there is no confirmation prompt before the action is executed.

Format: delete INDEX or delete /n NAME or del INDEX or del /n NAME

  • Deletes the contact at the specified INDEX or the contact with the specified NAME from HitList.
  • The index refers to the index number shown in the displayed HitList.
  • The index must be a positive integer 1, 2, 3, …
  • The contact name you enter must exactly match an existing contact in HitList, but it is case-insensitive. For example, if the contact is saved as 'Alfred Lim', entering 'alfred lim', 'ALFRED LIM', or 'Alfred Lim' will all successfully match.
  • Either the index or the name can be used to delete a contact, but not both at the same time.

Examples:

  • list followed by delete 2 deletes the second contact in HitList
Listing of HitList
Deleting of Contact in HitList

  • find irfan followed by delete 1 deletes the first contact in the results of the find command
Find Irfan in HitList
Deleting Irfan in HitList

  • list followed by delete /n David Li deletes the contact named David Li from HitList
Listing of HitList
Deleting David Li in HitList

Listing all contacts : list

Shows a list of all contacts in the HitList.

Format: list

Before Edit of HitList

Locating contacts : find

Finds contacts whose names match the given substring.

Format: find KEYWORD...

  • Name search is case-insensitive. e.g. HANS matches Hans
  • Name search uses substring matching. e.g. Ha matches Hans e.g. an matches Hans
  • If multiple name keywords are given, a contact matching any one of them is returned.

Examples:

  • find John returns john and John Doe
Find john

  • find alex krishnan returns Alex Yeoh, Roy Balakrishnan
Find Alex and krishnan in HitList

Adding a contact group : grpadd

Adds a contact group to the HitList. Optionally, existing contacts can be added to the group at the time of group creation.

Format: grpadd /g GROUP_NAME [/n NAME]...

Examples:

  • grplist followed by grpadd /g Experienced
Before creation of group Experienced in HitList
Creation of group Experienced in HitList

  • grplist followed by grpadd /g Admins /n Betsy Crowe
Before creation of group Admins in HitList
Creation of group Admins in HitList

Deleting a contact group : grpdel

Deletes the specified contact group from HitList.

CAUTION: Irreversible Action

This command instantly deletes the selected contact group. There is no confirmation prompt.

INFO: Good to know

This only deletes the group itself and the association of contacts to that group. The actual contacts (e.g., John Doe) remain safe in your HitList database.

Format: grpdel /g GROUP_NAME

Examples:

  • grplist followed by grpdel /g Admins
Listing of groups
Deletion of group Admins in HitList

Listing contacts in a contact group : grplist

List all contact groups in HitList. Optionally, if a group name is specified, shows a list of contact members in that group.

Format: grplist [/g GROUP_NAME]

Examples:

  • grplist
List all groups in HitList

  • grplist /g Students
List group members of Students group

Assigning a contact to a contact group : grpassign

Adds an existing contact to an existing contact group.

Format: grpassign /n NAME /g GROUP_NAME

  • The contact name must exactly match an existing contact in HitList.
  • The group name must exactly match an existing contact group in HitList.

Examples:

  • grplist /g experienced followed by grpassign /n Alex Yeoh /g Experienced
Before Assigning Alex Yeoh to Experienced Group
After Assigning Alex Yeoh to Experienced Group

Unassigning a contact from a contact group : grpunassign

Removes an existing contact from an existing contact group.

Format: grpunassign /n NAME /g GROUP_NAME

  • The contact name must exactly match an existing contact in HitList.
  • The group name must exactly match an existing contact group in HitList.
  • The contact must already belong to the specified group.

Examples:

  • grplist /g experienced followed by grpunassign /n Alex Yeoh /g Experienced
Before unassigning of Alex Yeoh from Experienced group
After unassigning of Alex Yeoh from Experienced group

Adding a company : cmpadd

Adds a company to the HitList.

Format: cmpadd /c COMPANY_NAME /d COMPANY_DESCRIPTION

  • The company name must be unique and not the same as any existing company in HitList.
  • The company name can be any string which does not include / or invisible characters.
  • The company description can be any string which does not include / or invisible characters.

Limitations:

  • Company name is restricted to a maximum of 30 characters.
  • Company description is restricted to a maximum of 100 characters.
  • No full support for languages other than English.

Examples:

  • cmplist followed by cmpadd /c Bata /d Shoe company
Before creation of company Bata with description Shoe company
Creation of company Bata with description Shoe company

Deleting a company : cmpdel

Deletes the specified company from HitList.

CAUTION: Cascading Deletion

This command instantly deletes the specified company. There is no confirmation prompt. Please note that all roles associated with this company will also be permanently deleted from HitList. Use with extreme caution.

Format: cmpdel /c COMPANY_NAME

  • The company name must be an existing company in HitList.
  • The company name search is case-insensitive (e.g., google matches Google/GoOgLe/GOOGLE).
  • The search matches the exact company name as stored in HitList. For example, cmpdel /c google will match a company named exactly Google, but will not match Google Inc. or google.com since those are different company names.
  • The company will be displayed with its original registered name (e.g., Google) after the operation.

Example:

  • cmplist followed by cmpdel /c Bata
Before deletion of company Bata
Deletion of company Bata

Listing all companies : cmplist

Shows a list of all companies and the description in the HitList. Optionally, if a company name is specified, shows the roles of the company.

Format: cmplist [/c COMPANY_NAME]

  • If the company name is specified, shows the roles of the company.
  • If the company name is not specified, shows a list of all companies with its description in HitList.

Example:

  • cmplist
List all companies in HitList

  • cmplist /c Google Inc.
List details of company Google in HitList

Locating companies : cmpfind

Finds companies whose names match any given substring.

Format: cmpfind KEYWORD...

  • Company name search is case-insensitive. e.g. google matches Google
  • Company name search uses substring matching. e.g. fli matches Netflix
  • If multiple company name keywords are given, a Company matching any one of them is returned.

Examples:

  • cmpfind inc
Finding Inc

  • cmpfind google flix
Find Google and Netflix in HitList

Adding a role to a company : roleadd

Adds a role to a specified existing company in the HitList.

Format: roleadd /r ROLE_NAME /d ROLE_DESCRIPTION /c COMPANY_NAME

  • The role name must be unique within the company and not the same as any existing role in that company.
  • The role name can be any string which does not include / or have invisible characters󠀨.
  • The role description can be any string which does not include / or have invisible characters󠀨.
  • The company name must be an existing company in HitList.
  • The company name search is case-insensitive (e.g., google matches Google/GoOgLe/GOOGLE).
  • The search matches the exact company name as stored in HitList. For example, roleadd /c google will match a company named exactly Google, but will not match Google Inc. or google.com since those are different company names.
  • The company will be displayed with its original registered name (e.g., Google) after the operation.

Limitations:

  • Role name is restricted to a maximum of 50 characters.
  • Role description is restricted to a maximum of 100 characters.
  • No full support for languages other than English.

Examples:

  • cmplist /c Google Inc. followed by roleadd /r Quality Assurance Engineer /d Ensures software products meet quality standards by developing test plans /c Google Inc.
Before addition of Quality Assurance Engineer role to company Google Inc.
Addition of Quality Assurance Engineer role to company Google Inc.

Deleting a role from a company : roledel

Deletes a role from a specified existing company in the HitList.

CAUTION: Irreversible Action

This command deletes the specified role from the company in HitList. Use with caution. The action is irreversible and there is no confirmation prompt before the action is executed.

Format: roledel /r ROLE_NAME /c COMPANY_NAME or roledel INDEX /c COMPANY_NAME

  • Deletes a role from the company by either specifying the role name or the role's index number.
  • The role name must be an existing role within the company.
  • The index refers to the position of the role in the company's role list (1-based indexing).
  • The company name must be an existing company in HitList.
  • The company name search is case-insensitive (e.g., google matches Google/GoOgLe/GOOGLE).
  • The search matches the exact company name as stored in HitList. For example, roledel /c google will match a company named exactly Google, but will not match Google Inc. or google.com since those are different company names.
  • The company will be displayed with its original registered name (e.g., Google) after the operation.

Examples:

  • cmplist /c Google Inc. followed by roledel /r Quality Assurance Engineer /c Google Inc.
Before deletion of Quality Assurance Engineer role from company Google Inc.
Deletion of Quality Assurance Engineer role from company Google Inc.

  • cmplist /c Meta Platforms, Inc. followed by roledel 1 /c Meta Platforms, Inc.
Before deletion of first role from company Meta Platforms, Inc.
Deletion of first role from company Meta Platforms, Inc.

Clearing all entries : clear

Clears all entries from the HitList.

CAUTION: Complete Data Wipe

This command deletes all contacts, contact groups, companies, and roles from HitList. Use with extreme caution. The action is irreversible and there is no confirmation prompt before the action is executed.

Format: clear

Exiting the program : exit

Exits the program.

Format: exit

Saving the data

HitList 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

HitList data are saved automatically as a JSON file [JAR file location]/data/hitlist.json.

Advanced users are welcome to update data directly by editing that data file.

CAUTION: Manual Modification

If your changes to the data file make its format invalid, HitList 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 HitList 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.

Archiving data files [coming in v2.0]

Details coming soon ...


Glossary

  1. CLI (Command Line Interface): A text based interface where you interact with the application by typing commands.

  2. GUI (Graphical User Interface): A visual interface allowing users to interact with the software through graphical icons and visual indicators.

  3. JAR (Java ARchive): The file format used to distribute the HitList application.

  4. JDK (Java Development Kit): The software development environment required to run the Java application.

  5. JSON (JavaScript Object Notation): The lightweight data format used by HitList to save your contacts and preferences automatically.

  6. Parameter: Specific data provided alongside a command to tell the application exactly what to do (for example, supplying a name or phone number).

  7. Index: The positive integer corresponding to an item in the currently displayed list, used to target specific records for editing or deletion.

  8. Substring Matching: A search behavior where typing a sequence of letters matches any word that contains those letters anywhere inside it (beginning, middle, or end).


FAQ

Who is the intended user for HitList?

HitList is optimized for headhunters managing extensive lists of contacts, roles, and companies, but it remains fully usable by anyone needing efficient contact management.

How do I save my progress?

There is no need to save manually. HitList automatically saves all changes to a JSON file on your hard drive immediately after any command alters the data.

Can I undo a deletion?

No. Commands that remove data, such as deleting contacts, groups, companies, or clearing the entire list, are irreversible and execute immediately without a confirmation prompt. Exercise caution.

How do I transfer my data to another computer?

Install the app on the other computer and overwrite the empty data file it creates with the file that contains the data of your previous HitList home folder.

Can I edit the data file directly?

Yes, advanced users can directly edit the hitlist.json file. You can refer to the following section.

Known issues

  1. When the hitlist.json file is corrupted, HitList will wipe the file and start with an empty data file. The application does not show visual feedback to the user regarding the error. The error is generically logged in the log file. Users may not understand that their data file has been wiped and that they have lost all their data. A better implementation would be to show a pop-up message to the user when this error occurs, informing them of the issue and the loss of data.

Command summary

Action Format Examples
Getting help help help
Add contact add /n NAME /p PHONE_NUMBER [/e EMAIL] [/a ADDRESS] add /n Betsy Crowe /p 87654321 /e betsy.crowe@gmail.com /a 321, Clementi Rd, 123465
Delete contact del INDEX
or
del /n NAME
or
delete INDEX
or
delete /n NAME
del 3
or
del /n David Li
or
delete 3
or
delete /n David Li
Edit contact edit INDEX [/n NAME] [/p PHONE_NUMBER] [/e EMAIL] [/a ADDRESS] edit 2 /n James Lee /e jameslee@example.com
List contacts list list
Find contact(s) find KEYWORD... find John
Add contact group grpadd /g GROUP_NAME grpadd /g Students
Delete contact group grpdel /g GROUP_NAME grpdel /g Students
List contact groups grplist grplist
List contacts in group grplist /g GROUP_NAME grplist /g Students
Assign contact to group grpassign /n NAME /g GROUP_NAME grpassign /n Alex Yeoh /g Students
Unassign contact from group grpunassign /n NAME /g GROUP_NAME grpunassign /n Alex Yeoh /g Students
Add company cmpadd /c COMPANY_NAME /d COMPANY_DESCRIPTION cmpadd /c Google /d Tech giant
Delete company cmpdel /c COMPANY_NAME cmpdel /c Google
List companies cmplist cmplist
Find company cmpfind KEYWORD... cmpfind inc
Add role to company roleadd /r ROLE_NAME /d ROLE_DESCRIPTION /c COMPANY_NAME roleadd /r Software Tester /d Tests provided software /c Google Inc.
Delete role from company roledel /r ROLE_NAME /c COMPANY_NAME
or
roledel INDEX /c COMPANY_NAME
roledel /r Software Engineer /c Google Inc.
or
roledel 1 /c Google Inc.
Clear clear clear
Exit exit exit