User Guide
HackAssist is a desktop application which aims to help manage tasks in software development hackathons. In hackathon projects, task management is often hectic because we are required to complete a large number of tasks in a short amount of time. However, with HackAssist, we aim to make your task management workflow easier, so you can focus on building your hackathon project :)
This guide provides an overview on how to perform the main functionalities of HackAssist: People Management and Tasks Management.
For advanced users, you can go straight to the Command Summary.
- Quick start
 - Layout
 - Features
 - Command summary
 - FAQ
 - Glossary
 - Appendix
 
Quick start
- Ensure you have Java 
11or above installed in your Computer.- To check if you have Java installed, please open up a terminal (search for 
Command Prompton Windows andTerminalon Mac OS) and type injava -version. This will show your java version, if you have it installed. - If you do not have Java 11 or above installed, please proceed to this link and download the appropriate Java for your operating system.
 
 - To check if you have Java installed, please open up a terminal (search for 
 - 
    
Download the latest
HackAssist.jarfrom here. - 
    
Copy the file to the folder you want to use as the home folder for your HackAssist.
 - 
    
Double-click the file to start the app. A GUI similar to the one shown below will appear in a few seconds. Note how HackAssist contains sample data for you to experiment with.

 - 
    
Type the command in the command box and press Enter to execute it. e.g. typing
helpand pressing Enter will open the help window.
Some example commands you can try:- 
        
listTasks: Lists all tasks in the task list. - 
        
addTaskn/Create profile page d/User profile pr/medium c/frontend dl/2023-01-01: Adds taskCreate profile pageto the task list. - 
        
deleteTask1: Deletes the first task from the task list. - 
        
help: Displays help text. - 
        
exit: Exits the app. 
 - 
        
 
Refer to the Features below for details of each command.
Layout


- Command Box: This is where you key in your commands. Press Enter to execute it.
 - 
    
Feedback Box: This is where you can see the response from HackAssist when you execute a command. You will either see a confirmation message, or an error message informing you what went wrong with your command.
 - 
    
Tabs: This is where you can choose for HackAssist to display Members or Tasks List
 - 
    
Members/ Tasks List: This is where the current list is displayed which includes details about each member (person in your team) or task.
 - 
    
Storage Location: This is where you can see the location of HackAssist data file.
 - Tasks List Setting: This portion displays what the current sort and filter setting for Tasks List are, if any.
 
Features
This section provides information on how you can use HackAssist commands for people management and tasks management. You can click General to learn about general commands, People Management to learn about commands specific to People Management, or Task Management to learn about commands specific to Task Management.
Before you learn any commands, please read the following notes about HackAssist command format.
 Notes about the command format:
- 
      
Words in
UPPER_CASEare the parameters to be supplied by the user.
e.g. inadd n/NAME,NAMEis a parameter which can be used asadd n/John Doe. - 
      
Items in square brackets are optional.
e.gn/NAME [t/TAG]can be used asn/John Doe t/friendor asn/John Doe. - 
      
Items with
… after them can be used multiple times including zero times.
e.g.[t/TAG]…can be used as(i.e. 0 times),t/friend,t/friend t/familyetc. - 
      
Parameters can be in any order.
e.g. if the command specifiesn/NAME p/PHONE_NUMBER,p/PHONE_NUMBER n/NAMEis also acceptable. - 
      
If a parameter is expected only once in the command but you specified it multiple times, only the last occurrence of the parameter will be taken.
e.g. if you specifyp/12341234 p/56785678, onlyp/56785678will be taken. - 
      
Any parameters given for commands that do not take in parameters (such as
help,list,exitandclear) will be ignored.
e.g. if the command specifieshelp 123, it will be interpreted ashelp. 
General
Viewing help: help
Shows a message explaining how to access the help page.

Format: help
Clearing all entries: clear
Clears all contacts and tasks from the application.
Format: clear
Exiting the program: exit
Exits the program.
Format: exit
Saving the data
HackAssist 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
HackAssist data are saved as a JSON file [JAR file location]/data/addressbook.json. Advanced users are welcome to update data directly by editing that data file.
People Management
Adding a person: add
Adds a new person to the address book.
- Note: You cannot add a task if another task with the same name already exists in the task list.
 
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…
Refer to the Person Parameters section for details about the format of each parameter.
Examples:
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal
Deleting a person: delete
Deletes the specified person from the address book.
- Note: This will delete the person permanently
 
Format: delete INDEX
- Deletes the person at the specified 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:
- 
listfollowed bydelete 2deletes the 2nd person in the address book. - 
find Betsyfollowed bydelete 1deletes the 1st person in the results of the find command, which should be Betsy. 
Editing a person: edit
Edits an existing person in the address book.
The values inside [] indicate optional fields
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…
- Edits the person at the specified INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …
 - At least one of the optional fields must be provided, otherwise you would not be updating anything.
 - Existing values will be updated to the input values.
 - None of the provided optional fields may be of the same value as the original value
 - When editing tags, all existing tags of the person will be removed and completely replaced with the new tags.
 - You can remove all the person’s tags by typing 
t/without specifying any tags after it. - To edit what tasks a person is assigned to, instead of editing the person, edit the relevant task. The edit will be reflected in the person list after you edit the task. There is no way to edit a task using the edit person command.
 
Examples:
- 
edit 1 p/91234567 e/johndoe@example.comedits the phone number and email address of the 1st person to be91234567andjohndoe@example.comrespectively. - 
edit 2 n/Betsy Crower t/edits the name of the 2nd person to beBetsy Crowerand clears all existing tags. 
Locating persons by name: find
Finds persons whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
- The search is case-insensitive. e.g. hans will match Hans
 - The order of the keywords does not matter. e.g. Hans Bo will match Bo Hans
 - Only the names of people will be considered.
 - Only full words will be matched e.g. Han will not match Hans
 - Persons matching at least one keyword will be returned (i.e. only one keyword has to match). e.g. Hans Bo will return Hans Gruber, Bo Yang, despite the fact that neither match Hans Bo (both names match at least one word)
 
Examples:
- 
find Johnreturns john and John Doe - 
find alex davidreturns Alex Yeoh, David Li
 
Listing all persons: list
Shows a list of all persons in the address book. This command can be used to reset the displayed person list after a find command.
Format: list
Task Management
The following commands are for viewing and managing your hackathon tasks. These tasks may be related to software development, product design, project presentation etc. Each task can be assigned to a person to represent that they are responsible for completing that task.
Adding a task: addTask
Adds a task to the task list. Note that you cannot add a task if another task with the same name already exists in the task list.
Format: addTask n/TASK_NAME d/DESCRIPTION pr/PRIORITY c/CATEGORY dl/DEADLINE [pe/EMAIL_OF_PERSON_ASSIGNED]
- If the optional parameter 
pe/EMAIL_OF_PERSON_ASSIGNEDis provided, the task will be assigned to that person. If not, it will remain unassigned. This might be useful at the beginning of your project when you are scoping out the tasks that need to be done. 
Refer to the Task Parameters section for details about the format of each parameter.
Examples:
- 
addTask n/Fix toggle d/Fix dark mode button pr/low c/frontend dl/2022-12-12adds taskFix toggleto the task list - 
addTask n/Fix routing d/Handle routing for POST req pr/high c/backend dl/2022-11-11 pe/john@example.comadds taskFix routingto the task list and assigns it to person with emailjohn@example.com 
Deleting a task: deleteTask
Deletes a task from the task list.
- 
Note: The task will be permanently deleted. To mark a task as 
completedbut have it remain in the task list, use theeditTaskcommand instead. 
Format: deleteTask INDEX
- Deletes the task at the specified 
INDEX. - The index refers to the task number shown in the displayed task list.
 - The index must be a positive integer 1, 2, 3, …
 
Examples:
- 
deleteTask 1deletes the first task from the displayed task list 
Editing a Task: editTask
Edits the parameter(s) of an existing task in the task list. You can also use this command to mark tasks as completed or to assign the task to a person in your team.
Format: editTask INDEX [n/TASK_NAME] [d/DESCRIPTION] [pr/PRIORITY] [c/CATEGORY] [dl/DEADLINE] [pe/EMAIL_OF_PERSON_ASSIGNED] [do/IS_DONE]
- Edits the task at the specified 
INDEX. TheINDEXrefers to the index number shown in the displayed task list. It must be a positive integer 1, 2, 3, … and less than or equal to the number of tasks in the task list. - At least one of the optional fields must be provided.
 - None of the provided optional fields may be of the same value as the original value
 - Existing values will be updated to the input values.
 - To un-assign a person from a task, write 
nonein the EMAIL_OF_PERSON_ASSIGNED field, i.e.pe/none. - To mark a task’s status as 
completedornot completed, writetrueorfalsein the IS_DONE field, e.g.do/true. 
Refer to the Task Parameters section for details about the format of each parameter.
Examples:
- 
editTask 2 c/frontend pe/charlotte@example.comedits the category of the 2nd task in the displayed task list to befrontendand assigns the task to the person with emailcharlotte@example.com. - 
editTask 4 do/truemarks the 4th task in the displayed task list ascompleted. 
Finding a Task using keywords: findTask
Finds tasks with names or descriptions that contain any of the given keywords.
Format: findTask KEYWORD [MORE_KEYWORDS]...
- The search is case-insensitive. e.g. fix will match Fix
 - The order of the keywords does not matter. e.g. Toggle fix will match Fix toggle
 - The name and description are both searched.
 - Only full words will be matched e.g. Dark will not match Darkmode
 - Task with names or descriptions matching at least one keyword will be returned (i.e. OR search). e.g. Fix will return Fix toggle, Fix routing
 
Examples:
- 
findTask fixreturns Fix toggle and Fix routing - 
findTask darkreturns Fix routing (description: Fix dark mode button) 
Filtering tasks: filter
Filters the task list based on either CATEGORY or DEADLINE or both. Use this when you want to view only tasks in a certain category or before a certain deadline.
Format: filter [c/CATEGORY] [dl/DEADLINE]
- Filters the task list based on the parameters provided.
 - At least one of the optional parameters must be provided.
 - Only tasks that match the filter condition will be displayed in the task list.
 - To remove the filter, use the 
listTaskscommand. 
Refer to the Task Parameters section for details about the format of each parameter.
Examples:
- 
filter c/backenddisplays only tasks that havebackendas CATEGORY - 
filter c/backend dl/2022-12-12displays only tasks that havebackendas CATEGORY and DEADLINE on2022-12-12or before 
Viewing all tasks: listTasks
Displays all existing tasks in the task list. Use this after using the filter command to remove the filter.
Format: listTasks
Sorting tasks: sort
Sorts the task list by the specified field in the specified order. For instance, you can sort tasks in descending order of PRIORITY to help you decide which tasks should be done first.
Format: sort [pr/ORDER] [dl/ORDER]
- Exactly one of the optional parameters must be provided.
 - Use the 
pr/parameter to sort by PRIORITY. - Use the 
dl/parameter to sort by DEADLINE. - Order must be either 
ascfor ascending ordescfor descending. 
Examples:
- 
sort pr/ascsorts tasks by PRIORITY in ascending order 
Command summary
| Action | Format, Examples | 
|---|---|
| Add Person | 
add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]… e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague
 | 
    
| Delete Person | 
delete INDEXe.g., delete 3
 | 
    
| Edit Person | 
edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]… e.g., edit 2 n/James Lee e/jameslee@example.com
 | 
    
| Find Person | 
find KEYWORD [MORE_KEYWORDS] e.g., find James Jake
 | 
    
| List People | list | 
    
| Clear All Entries | clear | 
    
| Help | help | 
    
| Add Task | 
addTask n/TASK_NAME d/DESCRIPTION pr/PRIORITY c/CATEGORY dl/DEADLINE [pe/EMAIL_OF_PERSON_ASSIGNED] e.g., addTask n/Fix toggle d/Fix dark mode button pr/low c/frontend dl/2022-12-12 pe/charlotte@example.com
 | 
    
| Edit Task | 
editTask INDEX [n/TASK_NAME] [d/DESCRIPTION] [pr/PRIORITY] [c/CATEGORY] [dl/DEADLINE] [pe/EMAIL_OF_PERSON_ASSIGNED] [do/IS_DONE] e.g., editTask 2 c/frontend pe/charlotte@example.com
 | 
    
| Delete Task | 
deleteTask INDEX e.g., deleteTask 1
 | 
    
| List Tasks | listTasks | 
    
| Find Task | 
findTask KEYWORD [MORE_KEYWORDS]... e.g., findTask refactor
 | 
    
| Filter Tasks | 
filter [c/CATEGORY] [dl/DEADLINE] e.g., filter c/backend dl/2022-12-12
 | 
    
| Sort Tasks | 
sort [pr/ORDER] [dl/ORDER] e.g., sort pr/asc
 | 
    
FAQ
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 HackAssist home folder.
Q: Do I need internet to run HackAssist?
A: Internet is not needed to run the application.
Q: Will my data be lost after closing the application?
A: No, your data will be stored in the HackAssist.json file. Data will only be lost if HackAssist.json file is deleted.
Q: How do I backup my data?
A: Create a copy of the HackAssist.json file in another directory.
Q: What is the difference between member (members) and person (people)?
A: Member (or team member) refers to Person objects in the contact.
Glossary
| Word | Definition | 
|---|---|
| GUI | Graphical User Interface - The visual representation of the application | 
| Parameter | Inputs provided after the main command. For example, c/uiux is a parameter to the command filter c/uiux, | 
    
| JSON file | A file format (JavaScript Object Notation) used for storing data | 
Appendix
Person Parameters
| Parameter | Format | 
|---|---|
| n/NAME | Should contain only alphanumeric characters and spaces | 
| d/PHONE_NUMBER | Should contain only numbers | 
| e/EMAIL | Has 2 parts separated by a ‘@’ character. The first should only contain alphanumeric characters and these special characters, +_.- The second part should consists of one or more labels. These labels should : - have start and end with alphanumeric characters, - have be at least 2 characters long - have be separated only by hyphens, if any.  | 
    
| c/ADDRESS | No restriction on what characters can be entered in this field | 
Task Parameters
| Parameter | Format | 
|---|---|
| n/NAME | Should contain only alphanumeric characters and spaces | 
| d/DESCRIPTION | Should contain only alphanumeric characters and spaces | 
| pr/PRIORITY | Should be either  high, medium, or low (case-insensitive) | 
    
| c/CATEGORY | Should be one of the following (case-insensitive):  - database- frontend- backend- uiux- presentation- others
 | 
    
| dl/DEADLINE | Should be in the format YYYY-MM-DD and after the current date | 
    
| pe/EMAIL_OF_PERSON_ASSIGNED | Should be the email address of an existing person (case-insensitive) in your contacts. For the editTask command, it can also be none, i.e. pe/none. | 
    
| do/IS_DONE | 
For editTask command only. Should be either true or false (case-insensitive) |