Moddie is a desktop app for managing schedules, interests, and tags of contacts optimized for use via a Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, Moddie can get your contact and schedule management tasks done faster than traditional GUI apps.
Ensure you have Java 11 or above installed in your Computer.
Download the latest Moddie.jar from here.
Copy the file to the folder you want to use as the home folder for your Moddie.
Open a command terminal, cd into the folder you put the jar file in, and use the java -jar Moddie.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 open the help window.
Some example commands you can try:
list : Lists all contacts.
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 : Adds a contact named John Doe to the Address Book.
delete 3 : Deletes the 3rd contact shown in the current list.
clear : Deletes all contacts.
exit : Exits the app.
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 add n/NAME, NAME is a parameter which can be used as add n/John Doe.
Items in square brackets are optional.
e.g n/NAME [t/TAG] can be used as n/John Doe t/friend or as n/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/family etc.
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.
helpShows a message explaning how to access the help page.
Format: help
Expected success outcome:
Opened help window.
Expected failure outcome:
Help not available. Please try again.
Prompts suggestions to user based on their inputs. Expected success outcome:
Lists down similar suggestion seperated by whitespaces matching user inputs
Upon typing some input and deleting it entirely, will prompt it to list down all commands!
addAdds a person to the address book with their information.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL [a/ADDRESS] [t/TAG]… [i/INTEREST]…
tag are added, separate with a space (e.g t/friends t/neighbours)interest are added, separate with a space (e.g i/basketball i/shopping)Tip: A person can have any number of tags or interests (including 0)
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/83329001 t/criminal i/huntingExpected success outcome:
New person added: …
Expected failure outcome:
Invalid command format!
Potential Errors:
listShows a list of all persons in the address book.
Format: list
Expected success outcome:
Listed all persons
editEdits an existing person's information in the address book.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]… [i/INTEREST]…
INDEX. The index refers to the index number shown in the displayed person list.
The index must be a positive integer 1, 2, 3, …t/ without
specifying any tags after it.i/ without
specifying any interests after it.Examples:
edit 1 p/91234567 e/johndoe@example.com i/Bird Watching Edits the phone number, email address and interest of the
1st person to be 91234567, johndoe@example.com and Bird Watching respectively.edit 2 n/Betsy Crower t/ Edits the name of the 2nd person to be Betsy Crower and clears all existing tags.find alex and then running edit 1 n/Alen a/10 Admiralty St #04-01 will only edit the 1st person who is displayed
on the contact list.Expected success outcome:
Edited Person: …
Expected failure outcome:
Phone numbers should only contain numbers, and it should be at 8 digits long and starts with either 6, 8 or 9
OR
The person index provided is invalid.
Potential Errors:
findFinds persons whose names, phone number, email, address or tag contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
hans will match HansHans Bo will match Bo HansHan will not match HansOR search).
e.g. Hans Bo will return Hans Gruber, Bo YangDisclaimer:
list if find command is called.Examples:
find John returns john and John Doefind alex david returns Alex Yeoh, David Lifind 9123 returns the phone numbers 91236547 and 23912376find gmail returns the emails alexY@gmail.com and davidL@gmail.comfind road returns the address Upper Thomson Road and Lower Kent Ridge Roadfind friend returns anyone with the tag friend 
Expected success outcome:
xx persons listed!
...
Expected failure outcome:
0 persons listed!
deleteDeletes the specified person from the address book.
Format: delete INDEX
INDEX.Examples:
list followed by delete 2 deletes the 2nd person in the address book.find Betsy followed by delete 1 deletes the 1st person in the results of the find command.Expected success outcome:
Deleted Person: …
Expected failure outcome:
The person index provided is invalid.
clearClears all entries from the address book.
Format: clear
Expected success outcome:
Address book has been cleared!
addSchedAdds an event with contact from specified date with time
Format: addSched PERSON_INDEX [MORE_PERSON_INDEX] s/SCHEDULE_NAME start/START_DATETIME end/END_DATETIME
find Betsy followed by addSched 1 s/Exam start/2024-03-05 16:00 end/2024-03-05 18:00 adds the 1st person in
the results of the find command to the event stated.Examples:
addSched 4 s/Exam start/2024-03-05 16:00 end/2024-03-05 18:00 will add the 4th person in the address list to the Exam event which
would take place on 5th March 2024 from 4pm - 6pmaddSched 1, 2, 3 s/CSMeeting start/2024-03-18 13:00 end/2024-03-18 19:00 will add the 1st, 2nd and 3rd persons in the address list
to the CSMeeting event which would take place on 18th March 2024 from 3pm - 7pmExpected success outcome:
New schedule added: ...
start:
end:
Expected failure outcome:
Invalid command format!
addSched: Adds a schedule to person(s) in address book. Parameters: PERSON INDEX(S) (must be positive integer)
s/SCHEDULE start/START_DATETIME (yyyy-MM-dd HH:mm) end/END_DATETIME (yyyy-MM-dd HH:mm)
(START_DATETIME and END_DATETIME must be in the same day and between 08:00 and 21:00)
Example: addSched 1, 2 s/CS2103 weekly meeting start/2024-02-24 09:00 end/2024-02-24 17:00
OR
The date format provided is invalid. Format: yyyy-MM-dd HH:mm
OR
Duplicate Schedule cannot be added to same Person
Potential Errors:
deleteSchedDeletes a schedule that associated with a person
Format: deleteSched PERSON_INDEX schedule/SCHEDULE_INDEX
find Betsy followed by deleteSched 1 schedule/2 deletes the 2nd schedule from the 1st person in
the results of the find command.Examples:
deleteSched 1 schedule/2 will delete the 2nd schedule from the 1st person in the address listExpected success outcome:
The schedule deleted: …
Expected failure outcome:
Invalid command format!
deleteSched: Deletes a schedule in address book. Parameters: Person INDEX(S) (must be positive integer)
schedule/Schedule INDEX(S) (must be positive integer)
Example: deleteSched 1 schedule/ 1
OR
The schedule index provided is invalid
Potential Errors:
editSchedEdit a schedule that associated with a person with new information, and optionally, you may also edit the group associated with the schedule.
Format: editSched PERSON_INDEX schedule/SCHEDULE_INDEX [s/SCHEDULE_NAME] [start/START_DATETIME] [end/END_DATETIME]
find Betsy followed by editSched 1 schedule/2 s/CCA meeting edits the 2nd schedule from the 1st person in
the results of the find command with the new schedule name CCA meeting, as well as the schedule for every other
participants.Examples:
editSched 1 schedule/2 s/CS1101S meeting start/2024-02-03 12:00 end/2024-02-03 15:00 will copy the
2nd schedule from the 1st person in the address list with the new name CS1101S meeting on the
new timing from 3rd February 2024 12pm to 3rd February 2024 3pm, for the 1st person only.editSched 1 schedule/2 s/CS2040S class will copy the 2nd schedule from the 1st person in the address list and create a separate schedule with the new name CS2040S class for the 1st person only.editSched 1 schedule/2 start/2024-03-05 11:00 will copy the 2nd schedule from the 1st person in the address list and create a separate schedule with the new starting date time of 5th March 2024 11am for the 1st person only.editSched 1 schedule/2 end/2024-06-12 20:00 will copy the 2nd schedule from the 1st person in the address list and create a separate schedule with the new ending date time of 12th June 2024 8pm for the 1st person only.Expected success outcome:
Edited Schedule: …
Expected failure outcome:
Invalid command format!
editSched: Edit a schedule in address book. Parameters: PERSON INDEX(S) (must be positive integer)
schedule/TASK INDEX(S) (must be positive integer) [start/ START DATETIME (yyyy-MM-dd HH:mm)]
[end/ END DATETIME (yyyy-MM-dd HH:mm)]
Example: editSched 1 schedule/ 1, 2 [s/ CS2103 weekly meeting] [start/ 2024-02-24 15:00] [end/ 2024-02-24 17:00]
OR
At least one field to edit must be provided.
Potential Errors:
exitExits the program.
Format: exit
The schedule display allows users to be able to view the schedule of their classmates and determine if there are any conflicts in timing.
When there is no conflict between the schedules, the schedule would be displayed with a black border as shown below.

The schedule which the user would like to view can be done using the dropdown box which displays all the names that of the classmates within the contact list.
If 2 or more people are participants in the same schedule, the schedule border would be colored blue and it would called
'Group schedule'.
By hovering over the Group schedule, you would be able to view all the participants of that specific group schedule.


Important Notes:
Moddie data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Moddie data are saved automatically as a JSON file [JAR file location]/data/addressbook.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, Moddie 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 the Moddie to behave in unexpected ways (e.g., 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.
[coming in v2.0]Details coming soon ...
n/John Doe and n/john doe are both considered the same valid name.p/82710912e/CS2103_grp@nus.sga/Blk 810 Sengkang St 21.t/friendsi/fruits2024-07-07 12:00 and END_DATETIME = 2024-07-07 17:00John Doe, Phone number = 98765432, Email = john@gmail.comJohn Doe, Phone number = 98765432, Email = johnD@outlook.comJohn Doe, Phone number = 87654321, Email = john@gmail.comJack Black, Phone number = 98765432, Email = john@gmail.comJohn Doe, Phone number = 81234567, Email = jonnyBoy@gmail.comQ: 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 Moddie home folder.
preferences.json file created by the application before running the application again.| Command | Format, Examples |
|---|---|
| Help | help |
| Add | add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [i/INTEREST]… [t/TAG]… e.g., add n/James Ho p/94458770 e/jamesho@example.com a/123, Clementi Rd, 1234665 i/ basketball t/friend t/colleague |
| List | list |
| Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [i/INTEREST]… [t/TAG]…e.g., edit 2 n/James Lee e/jameslee@example.com |
| Find | find KEYWORD [MORE_KEYWORDS]e.g., find James Jake |
| Delete | delete INDEXe.g., delete 3 |
| Clear | clear |
| Add Schedule | addSched INDEX [MORE_INDEX] s/SCHEDULE_NAME start/START_DATETIME end/END_DATETIME e.g. addSched 1, 2, 3 s/CSMeeting start/2024-04-04 09:00 end/2024-04-04 17:00 |
| Delete Schedule | deleteSched PERSON_INDEX schedule/SCHEDULE_INDEX e.g. deleteSched 1 schedule/2 |
| Edit Schedule | editSched PERSON_INDEX schedule/SCHEDULE_INDEX [s/SCHEDULE_NAME] [start/START_DATETIME] [end/END_DATETIME] e.g. editSched 1 schedule/1 s/CS1101S meeting start/ 2024-04-04 12:00 end/ 2024-04-04 15:00 |
| Exit | exit |