UniGenda User Guide
UniGenda is a desktop app for managing contacts and schedules, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you are a university student having a hard time organising your timetable, or find difficulty scheduling a suitable time to meet up with your project group mates or friends, UniGenda is the app just for you!
With features such as the ability to import your friends’ schedules, find friends who are free at a certain date and time, and find common timings to meet with your project teammates, UniGenda makes your university life easier by helping you keep track of not only your own, but also your friends’ schedules!
Table of Contents
- Quick Start
- General Commands
- Contact Management Commands
-
Schedule Management Commands
- Adding an event to a person’s schedule
- Deleting an event in a person’s schedule
- Editing an event in a person’s schedule
- Clearing a person’s schedule
- Importing a person’s schedule
- Exporting a person’s schedule
- Viewing a person’s schedule
- Getting persons who are free
- Getting common free timings of persons by tag
- FAQ
- Command Summary
1. Quick Start
-
Ensure you have Java
11or above installed in your Computer. -
Download the latest
UniGenda.jarfrom here*. -
Copy the file to the folder you want to use as the home folder for your UniGenda.
-
Double-click the file to start the app. The GUI similar to the below should appear in a few seconds. Also note the name for each section of the UI, as it will be referenced throughout the User Guide.

-
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:-
list: Lists all persons inUniGenda. -
addn/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01: Adds a person namedJohn Doeto UniGenda. -
delete3: Deletes the 3rd person shown in the current person list. -
addEvent1 ed/CS2103T Tutorial da/2022-03-16 ti/10:00 du/1: Adds a CS2103T Tutorial event to the first person. -
exit: Exits the app.
-
Refer below for details of each command.
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.g.n/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. -
Extraneous parameters 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. -
All leading and trailing whitespaces will be trimmed for each input to each prefix.
-
All commands are case-insensitive. For example
addeventorAdDEvenTworks foraddEventcommands. -
The indices, i.e., INDEX and EVENT_NUMBER are integer based. Hence, the maximum value of an index is 2147483647.
2. General Commands
2.1 Viewing help : help
Shows a message explaining how to access the help page.

Format: help
2.2 Clearing all entries : clear
Clears all entries from UniGenda.
Format: clear
2.3 Listing all persons : list
Lists all persons in UniGenda.
Format: list
2.4 Exiting the program : exit
Exits UniGenda.
Format: exit
3. Contact Management Commands
3.1 Adding a person: add
Adds a person to UniGenda.
Format: add n/NAME p/PHONE_NUMBER [tg/TELEGRAM] [gh/GITHUB] [e/EMAIL] [a/ADDRESS] [t/TAG]...
-
TAGis case-insensitive (BestFriendandbestFriendwill be considered the same tag) and will be converted to the lowercase for display. Duplicate tags will be ignored and only one will be taken. - You cannot add duplicate persons. Persons are considered to be duplicates if they share the same name (case-insensitive) and phone number.
Examples:
- add n/John Doe p/98765432
- add n/Betsy Crow t/friend p/1234567 a/Newgate Prison t/Criminal
3.2 Deleting a person : delete
Deletes the specified person from UniGenda.
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 UniGenda -
find Betsyfollowed bydelete 1deletes the 1st person in the results of thefindcommand
3.3 Editing a person : edit
Edits an existing person in the UniGenda.
Format: edit INDEX [n/NAME] [p/PHONE_NUMBER] [tg/TELEGRAM] [gh/GITHUB] [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.
- Existing values will be updated to the input values.
- When editing tags, the existing tags of the person will be removed, i.e., adding of tags is not cumulative.
- You can remove all the person’s tags by typing
t/without specifying any tags after it. - You can also remove telegram, github, email, or address by typing its corresponding prefix without specifying anything after it.
-
TAGis case-insensitive (BestFriendandbestFriendwill be considered the same tag) and will be converted to the lowercase for display. Duplicate tags will be ignored and only one will be taken. - You cannot edit a person’s name and/or phone number such that there will be duplicate persons in UniGenda. Persons are considered to be duplicates if they share the same name (case-insensitive) and phone number.
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. -
edit 1 p/91234567 e/Removes the 1st person’s email address, if it exists previously.
3.4 Setting a person as the user : setUser
Shifts the person to the top of the list.
Format: setUser INDEX
- Sets the person at the specified
INDEXas the user and shifts his/her contact to the top of the contact list. 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 bysetUser 2sets the 2nd person in UniGenda as the user -
find Betsyfollowed bysetUser 1sets the 1st person in the results of thefindcommand as the user
3.5 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.
hanswill matchHans. - The order of the keywords does not matter. e.g.
Hans Bowill matchBo Hans. - Only the name is searched.
- Only full words will be matched e.g.
Hanwill not matchHans. - Persons matching at least one keyword will be returned (i.e.
ORsearch). e.g.Hans Bowill returnHans Gruber,Bo Yang.
Examples:
-
find JohnreturnsjohnandJohn Doe -
find alex davidreturnsAlex Yeoh,David Li
3.6 Viewing persons by tags: viewGroup
Shows a list of all persons with the specified tag.
Format: viewGroup t/TAG
- Ensure that the tag is present for at least one person in the person list!
Example:
viewGroup t/groupmates
4. Schedule Management Commands
4.1 Adding an event to a person’s schedule: addEvent
Adds an event to the schedule of the specified person.
Format: addEvent INDEX ed/EVENT_DESCRIPTION da/DATE [ti/TIME] [du/DURATION] [r/RECUR_FREQUENCY]
- Adds an event to the schedule of 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, … - You cannot add duplicate events. Events are considered to be duplicates if they share the same event description (case-insensitive), time, duration, recur frequency and recur on the same dates.
Note: CS2103T Tutorial 2022-01-01 10:00-11:00 (Weekly) is considered the same event as cs103t tutorial 2022-01-08 10:00-11:00 (Weekly) because they have the same event description and they eventually recur on the same dates.
- If
TIMEis not specified, the added event will have a duration of 24 hours and start from 00:00. - If
TIMEis specified but notDURATION, the duration will be defaulted to 2 hours. - If
DURATIONis specified,TIMEalso needs to be specified. -
DATEshould be a valid date in “YYYY-MM-DD” format, and YYYY must be between 2000-2100. -
TIMEshould be a valid time in “HH:MM” format. -
DURATION, if provided, should be in one of the following formats (case-insensitive):
| Value | Duration | Example |
|---|---|---|
HhMm |
H hours M minutes | 3h30m |
Hh |
H hours | 2h |
Mm |
M minutes | 20m |
H |
H hours | 3 |
-
RECUR_FREQUENCY, if provided, must be one of the following values (case-insensitive):
| Value | Frequency |
|---|---|
D, DAILY
|
Daily |
W, WEEKLY
|
Weekly |
BW, BIWEEKLY
|
Biweekly |
Examples:
addEvent 3 ed/Open House da/2022-12-20addEvent 2 ed/CCA Meeting da/2023-11-23 ti/12:00 du/1H30M r/WaddEvent 1 ed/CS2103T Coding da/2023-10-23 ti/12:00 du/1H30M r/Daily
4.2 Deleting an event from a person’s schedule: deleteEvent
Deletes an event from the schedule of the specified person.
Format: deleteEvent INDEX EVENT_NUMBER
-
INDEXrefers to the index number shown in the displayed person list, whereasEVENT_NUMBERrefers to the event’s index shown in the person’s full schedule. Both indices must be positive integers 1, 2, 3, …
Example:
deleteEvent 3 3
4.3 Editing an event in a person’s schedule: editEvent
Edits the specified event in the schedule of the specified person.
Format: editEvent INDEX EVENT_NUMBER [ed/EVENT_DESCRIPTION] [da/DATE] [ti/TIME] [du/DURATION] [r/RECUR_FREQUENCY]
-
INDEXrefers to the index number shown in the displayed person list, whereasEVENT_NUMBERrefers to the event’s index shown in the person’s full schedule. Both indices must be positive integers 1, 2, 3, … - At least one of the optional fields must be provided.
- You cannot edit an event’s attributes such that there will be duplicate events in UniGenda. Events are considered to be duplicates if they share the same event description (case-insensitive), time, duration, recur frequency and recur on the same dates.
Note: CS2103T Tutorial 2022-01-01 10:00-11:00 (Weekly) is considered the same event as cs103t tutorial 2022-01-08 10:00-11:00 (Weekly) because they have the same event description and they eventually recur on the same dates.
-
DATEshould be a valid date in “YYYY-MM-DD” format, and YYYY must be between 2000-2100. -
TIMEshould be a valid time in “HH:MM” format. -
DURATION, if provided, should be in one of the following formats (case-insensitive):
| Format | Duration | Example |
|---|---|---|
HhMm |
H hours M minutes | 3h30m |
Hh |
H hours | 2h |
Mm |
M minutes | 20m |
H |
H hours | 3 |
- RECUR_FREQUENCY, if provided, must be one of the following values (case-insensitive) :
| Value | Frequency |
|---|---|
D, DAILY
|
Daily |
W, WEEKLY
|
Weekly |
BW, BIWEEKLY
|
Biweekly |
Examples:
editEvent 3 3 da/2022-12-21editEvent 3 1 ed/CS2103T tutorial da/2022-12-18 ti/14:00 du/2editEvent 3 1 ed/CS2103T lecture
4.4 Clearing a person’s schedule: clearSchedule
Format: clearSchedule INDEX
- Clears the schedule of 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, …
4.5 Importing a person’s schedule: importSchedule
Imports a schedule from a file to the specified person. The specified person’s schedule will be overwritten.
Format: importSchedule INDEX pa/FILE_PATH
- Imports a schedule to 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, … - The file’s data must be in json format, but the file itself may have any extension (e.g. .json, .txt etc.).
- The imported
Schedulecannot be empty. -
FILE_PATHmay be absolute or relative to the folder where the application was opened. More information of absolute and relative file paths can be found here.
Example:
- Assuming that you started the application from the directory containing
UniGenda.jar, and the json file was saved here:
Result ofimportSchedule 2 pa/Han Qin.json:
4.6 Exporting a person’s schedule: exportSchedule
Format: exportSchedule INDEX
- Allows user to export schedule of person at 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, … - The exported data will be named
[NAME].json, where[NAME]is the name of the person on indexINDEX. - The exported data will be saved in the
data/export/folder relative to the folder where the application was opened.
Example:
-
exportSchedule 1
4.7 Viewing a person’s schedule : viewSchedule
Views the specified person’s schedule.
Format: viewSchedule INDEX
- Views the schedule of 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, … - The person’s schedule for the next 7 days (from system’s date, including the current date) will be shown, along with the person’s full list of events.
- The schedule will be displayed in the schedule panel of UniGenda.
- If your system’s date changes (for example after it passes midnight), the Upcoming Schedule will not update automatically as well. You need to enter the command once again to view the updated Upcoming Schedule.
- The events displayed will be in the following format:
STARTING_DATE STARTING_TIME-ENDING_TIME [(+x)] [(Frequency)] EVENT_DESCRIPTION
(+x)means the event ends atENDING_TIME, x days after theSTARTING_DATE.
(Frequency)only displayed if the event is occurring Daily, Weekly, or Biweekly.
For example,28-Apr-2022 23:00-10:00 (+2) Sleepover at Grandma'smeans Sleepover at Grandma’s will occur from 23:00 of 28-Apr-2022 to 10:00 of 30-April-2022.
Examples:
-
listfollowed byviewSchedule 4views the 4th person in UniGenda
-
find Betsyfollowed byviewSchedule 1views the 1st person in the results of thefindcommand
4.8 Getting persons who are free: whoIsFree
Shows a list of persons who are free at specified time and date. You may also choose to additionally filter the list using tags.
Format: whoIsFree ti/TIME [da/ DATE] [t/TAG]...
-
TIMEshould be a valid time in “HH:MM” format. -
DATEshould be a valid date in “YYYY-MM-DD” format. - If the date is not given, today’s date will be the default date used for checking.
Examples:
-
whoIsFree ti/23:00display all persons who are free today at 23:00.
-
whoIsFree ti/12:00 t/friendsdisplays all persons withfriendtag who are free today at 12:00.
4.9 Getting common free timing of persons by tag: findCommonTiming
Lists all timings on the given date in which all contacts with the given tag are free.
Format: findCommonTiming t/TAG da/DATE
- Ensure that the tag is present for at least one person in the person list!
- Timings are filtered in 30-minute blocks, except 23:30-23:59 which is a 29-minute block.
Example:
findCommonTiming t/groupmates da/2022-03-04
5. FAQ
Q: How do I save the data file?
A: UniGenda’s data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Q: Is there any way for me to edit the data file?
A: UniGenda data are saved as a JSON file [JAR file location]/data/addressbook.json. Advanced users are welcome to update data directly by editing it.
Q: Why do some starting dates of the Events change when I launch UniGenda on different days?
A: UniGenda will update the date of the recurring event once it passes the ending date of the event so that it reflects the next occurrence of that event.
Q: Can I check if my contacts were free last week?
A: Yes, however, the results might not be what you expect. This is because the events’ dates are might change when you restart the application.
Q: Why I can check if my contacts were free last week?
A: There can exist non-recurring events in a person’s schedule. Therefore, we allow the ability to search the availabilities of your contacts’ past events if you wish to.
Q: Why does UniGenda have sample data when it is first launched?
A: Sample data is preloaded onto the application to allow for users to be able to familiarise themselves with the features of UniGenda by being able to experiment easily without having to manually add events and persons one by one. To start afresh, you may use the clear command to clear existing data.
Q: Why do some starting dates of the Events change when I launch UniGenda on different days?
A: UniGenda will update the date of the recurring event once it passes the ending date of the event so that it reflects the next occurrence of that event.
Q: How do I transfer my data to another Computer?
A: Install the app in the other computer and overwrite the empty data folder with the folder that contains the data of your previous UniGenda home folder.
Q: Where do I locate my export files?
A:
Case 1: If steps in the Quick Start guide were followed, a folder named data should appear in the same folder as your UniGenda application. The exported file would be in data/export/ folder.
Case 2: If the application is opened with terminal or command prompt, ensure that you are in the correct directory that the UniGenda application is in before entering the command: java -jar UniGenda.jar. A folder named data should appear in the same folder as your UniGenda application. The exported file would be in data/export/.
6. Command Summary
General Commands
| Action | Format |
|---|---|
| Help | help |
| Clear | clear |
| List | list |
| Exit | exit |
Contact Management Commands
| Action | Format, Examples |
|---|---|
| Add |
add n/NAME p/PHONE_NUMBER [tg/TELEGRAM] [gh/GITHUB] [e/EMAIL] [a/ADDRESS] [t/TAG]… e.g., add n/James Ho p/22224444 tg/jdoe123 gh/jdoe123 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague
|
| Delete |
delete INDEXe.g., delete 3
|
| Edit |
edit INDEX [n/NAME] [tg/TELEGRAM] [gh/GITHUB] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…e.g., edit 2 n/James Lee e/jameslee@example.com
|
| SetUser |
setUser INDEXe.g., setUser 3
|
| Find |
find KEYWORD [MORE_KEYWORDS]e.g., find James Jake
|
| ViewGroup |
viewGroup t/tage.g., viewGroup t/groupmates
|
Schedule Management Commands
| Action | Format, Examples |
|---|---|
| AddEvent |
addEvent INDEX ed/EVENT_DESCRIPTION da/DATE [ti/TIME] [du/DURATION] [r/RECUR_FREQUENCY] e.g., addEvent 1 ed/CS2103T Tutorial da/2022-03-16 ti/10:00 du/1H30M r/WEEKLY
|
| DeleteEvent |
deleteEvent INDEX EVENT_NUMBER e.g., deleteEvent 3 3
|
| EditEvent |
editEvent INDEX EVENT_NUMBER [ed/EVENT_DESCRIPTION] [da/DATE] [ti/TIME] [du/DURATION] [r/RECUR_FREQUENCY] e.g., editEvent 3 1 ed/CS2103T tutorial da/18-12-2022 ti/1400 du/2 r/WEEKLY
|
| ClearSchedule |
clearSchedule INDEXe.g., clearSchedule 1
|
| ImportSchedule |
importSchedule INDEX pa/FILE_PATHe.g., importSchedule 1 pa/typicalSchedule.json
|
| ExportSchedule |
exportSchedule INDEXe.g., exportSchedule 1
|
| ViewSchedule |
viewSchedule INDEXe.g., viewSchedule 1
|
| WhoIsFree |
whoIsFree ti/TIME [da/DATE]e.g., whoIsFree ti/10:00 da/2022-03-14
|
| FindCommonTiming |
findCommonTiming t/TAG da/DATEe.g., findCommonTiming t/groupmates da/2022-03-04
|