KeepInTouch is a desktop app for managing contacts for job-seekers. It can also help job-seekers to manage events for career purposes. KeepInTouch is optimized for use via a Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, KeepInTouch can get your contact management tasks done faster than traditional GUI apps.
helplist contactadd contactdelete contactfindadd tagdelete tagadd notedelete notelist eventsadd eventdelete eventclearexitEnsure you have Java 11 installed in your Computer.
Download the latest keepintouch.jar from here.
Copy the file to the folder you want to use as the home directory for your KeepInTouch app.
Open a command terminal, cd into the home directory, and use the java -jar keepintouch.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 show the list of all available commands.
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 delete contact CONTACT_ID, CONTACT_ID is a parameter which can be used as delete contact 1.
Items in square brackets are optional.
e.g add contact -n NAME [-p PHONE_NUMBER] [-a ADDRESS] [-e EMAIL] [-t TAGNAME...] can be used as add contact -n Aaron -p 12345678 -a Baker Street 12 -e aaron123@gmail.com -t Frontend or as add contact -n Aaron -e aaron123@gmail.com.
Items with … after them can be used multiple times.
e.g. [-t TAGNAME...] can be used as -t Frontend, -t Frontend -t Java etc.
Parameters can be in any order.
e.g. if the command specifies -tit NOTE_TITLE -con NOTE_CONTENT, -con NOTE_CONTENT -tit NOTE_TITLE is also acceptable.
Extraneous parameters for commands that do not take in parameters (such as list contact and exit, etc.) 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.
Requirements and details on user supplied parameters:
CONTACT_ID is the number that is on the left of the contact's name in each contact card.
CONTACT_ID should be a positive integer less than 2,147,483,648.
NAME should be alphanumeric, spaces are allowed.
PHONE_NUMBER should be numbers at least 3 digits long.
EMAIL should be of the format local-part@domain:
+, _, ., -. The local-part should not start or end with any special characters.TAGNAME should be alphanumeric, with no spaces.
TAGNAME is case-sensitive. For example, a contact can have tags Frontend and frontend at the same time.
START_TIME and END_TIME can be in one of the following formats:
yyyy-MM-dd HH:mm[:ss] 2023-10-12 20:05, 2023-10-12 20:05:30yyyy-MM-dd 2023-10-12HH:mm[:ss] 00:10, 05:01:45helpShows a list of commands and functionalities.
Format: help [COMMAND_WORD]
COMMAND_WORD after help to view the specific functionalities of the command.COMMAND_WORD includes: add, delete, clear, find, list.Examples:
helphelp addlist contactShows a list of all contacts in the contact list if tags not specified. Otherwise, shows a list of contacts which contains any one of the specified tags.
Format: list contact [-t TAGNAME...]
Examples:
list contact to show all contacts.list contact -t Recruiter to show all contacts which have a recruiter tag.add contactAdds a contact to the contact list.
Format: add contact -n NAME -p PHONE_NUMBER -a ADDRESS -e EMAIL [-t TAGNAME...]
Examples:
add contact -n Aaron -p 12345678 -a Baker Street 12 -e aaron123@gmail.comUnsuccessful output:
This contact already exists in the contact listPhone numbers should only contain numbers, and it should be at least 3 digits longdelete contactDeletes the specified contact from the contact list.
Format: delete contact CONTACT_ID
Examples:
delete contact 1 deletes the first contact in the contact list.Unsuccessful output:
The person index provided is invalidfindFinds a contact by their name by matching keywords with the contact's name. Only word-word matches will be detected, and partial words match will not be detected. For example, Ale will not match Alex, but Alex will match Alex Wong. Keywords are case insensitive.
Format: find KEYWORD [OTHER_KEYWORDS...]
Examples:
find Davidadd tagAdds one or more tags to a contact. Contact list will go back to showing all contacts upon successful addition.
Format: add tag -id CONTACT_ID -t TAGNAME...
Examples:
add tag -id 1 -t Frontend adds a tag with tag name "Frontend" to the first contact in the contact list.add tag -id 1 -t Frontend -t Java adds two tags with tag name "Frontend" and "Java" to the first contact in the contact list.Unsuccessful output:
Can not find the target contact with ID: 100delete tagDeletes one or more tags to a contact. Contact list will go back to showing all contacts upon successful deletion.
Format: delete tag -id CONTACT_ID -t TAGNAME...
TAGNAME are accepted, but they will be treated as one.Examples:
delete tag -id 1 -t Frontend deletes a tag with tag name "Frontend" from the first contact in the contact list.delete tag -id 1 -t Frontend -t Java deletes two tags with tag name "Frontend" and "Java" from the first contact in the contact list.Unsuccessful output:
Can not find the target contact with ID: 100add noteAdds a note to a contact from the contact list.
Format: add note -id CONTACT_ID -tit NOTE_TITLE -con NOTE_CONTENT
Examples:
add note -id 1 -tit Meeting Topics -con The topic is about the framework design of the projectadd note -id 2 -tit Open Position -con Applications for SWE full-time positions will open soonUnsuccessful output:
Can not find the target contact with ID: 100delete noteDeletes the specified note from the contact list.
Format: delete note -id CONTACT_ID -nid NOTE_ID
NOTE_ID from the contact with id CONTACT_ID.Examples:
delete note -id 1 -nid 1 deletes the first note from the first contact in the contact list.Unsuccessful output:
Can not find the target contact with ID: 100Note not found: ID = 5list eventsShows a list of all events or events within a specified time interval.
Format: list events [-descending] [-st START_TIME] [-et END_TIME] (start time and end time are inclusive)
Arguments -st and -et must both present or both not present.
By default, the list of events are sorted by the start time in ascending order (i.e. from earliest to latest). If you want to use descending order, add -descending to the command.
Executing this command will create a popup window, which shows a table representing the events within the specified time interval. The columns inside the table are resizeable.
Examples:
list eventslist events -st 2023-11-01 -et 2023-11-02list events -descending -st 2023-11-01 -et 2023-11-02add eventAdds an event to a contact. The event should not have clashes in timing with other existing events in the contact list. Events with start time earlier than the current time are allowed for keeping track of past events.
Format: add event -id CONTACT_ID -en EVENT_NAME -st START_TIME [-et END_TIME] [-loc LOCATION] [-info INFORMATION]
END_TIME is not given, it will be defaulted to the START_TIME.START_TIME is exactly equals to END_TIME, the END_TIME for the event will not be displayed in text-based UI.Examples:
add event -id 1 -en Meeting with professor -st 12:00 -et 13:00 -loc COM 1 Basement -info Discuss the project implementation with the professoradd event -id 2 -en Chat with TikTok recruiter -st 17:00Unsuccessful output:
Error: Operation would result in duplicate eventsCan not find the target contact with ID: 100Invalid date-time format! Text '29/05/2024' could not be parsed at index 2delete eventDeletes the specified event from a contact.
Format: delete event -id CONTACT_ID -eid EVENT_ID
EVENT_ID from the contact CONTACT_ID.EVENT_ID is the number that are in the left of the event line under each contact card.Examples:
delete event -id 1 -eid 2 deletes the second event from the first contact in the contact list.Unsuccessful output:
Can not find the target contact with ID: 100Event not found: ID = 5clearClears all KeepInTouch entries.
Format: clear
exitExits the program.
Format: exit
KeepInTouch data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
More features coming soon ...
The directory where the jar file for the application and the data folder presents.
The unit for storing the contact information for a person/entity in the address book. You can add tags, notes and events to a contact.
Short tags to be added to the contact for you to reference. It can be the type of the contact, for example, company, HR, etc.
A piece of additional information for a contact that you want to store and reference in the future. It can be any additional information you'd like to keep with the contact.
A representative of an event that you will happen with a person/entity in a contact in the future. It can be job interviews, career fairs or HR meeting appointments.
Q: Why can't I run the app?
A: Make sure you have Java 11 installed before running the app, and make sure you have followed the way mentioned in Quick Start.
Q: How do I transfer my data to another device?
A: Please follow these steps:
data folder is always in the new home directory together with the jar file.Q: Can I modify the data file outside the application itself?
A: No, you should NOT directly modify the data file outside the application at anytime, otherwise it may lead to unpredictable consequences and errors to the application.
No known issues at the moment
| Action | Format, Examples |
|---|---|
| List Contact | list contact [-t TAGNAME...] e.g., list contact -t Recruiter |
| Add Contact | add contact -n NAME -p PHONE_NUMBER -a ADDRESS -e EMAIL [-t TAGNAME...] e.g., add contact -n Aaron -p 12345678 -a Baker Street 12 -e aaron123@gmail.com -t Frontend |
| Delete Contact | delete contact CONTACT_IDe.g., delete contact 1 |
| Find Contact | find KEYWORD [OTHER_KEYWORDS...]e.g., find Alex |
| Add Tag | add tag -id CONTACT_ID -t TAGNAME... eg., add tag -id 1 -t Frontend |
| Delete Tag | delete tag -id CONTACT_ID -t TAGNAME... eg., delete tag -id 1 -t Frontend |
| Add Note | add note -id CONTACT_ID -tit NOTE_TITLE -con NOTE_CONTENT e.g., add note -id 2 -tit Open Position -con Applications for SWE full-time positions will open soon |
| Delete Note | delete note -id CONTACT_ID -nid NOTE_IDe.g., delete note -id 1 -nid 1 |
| List Events | list events [-descending] [-st START_TIME] [-et END_TIME]e.g., list events -descending -st 2023-11-01 -et 2023-11-02 |
| Add Event | add event -id CONTACT_ID -en EVENT_NAME -st START_TIME [-et END_TIME] [-loc LOCATION] [-info INFORMATION] e.g., add event -id 1 -en Meeting with professor -st 12:00 -et 13:00 -loc COM 1 Basement -info Discuss the project implementation with the professor |
| Delete Event | delete event -id CONTACT_ID -eid EVENT_IDe.g., delete event -id 1 -eid 1 |
| Clear Data | clear |
| Help | help [COMMAND_WORD] e.g., help add |