MatchMate is a desktop app for Computer Science students in NUS to create groups among their friends / acquaintances, as well as to allow students to find balanced groups with diverse skill sets out of their own contact list. It is optimized for Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
This User Guide assumes that you have zero knowledge of our app and does not require any programming knowledge. However, familiarity with keyboard shortcuts will significantly improve your experience with Matchmate.
This user guide serves as an introductory guide to our app, MatchMate. Through this user guide, we hope to introduce to users what features are available, the format for each command, as well as to give instructions to aid users when a command is invalid or fails.
Ready to connect with other like-minded students and create the best group possible? Then jump right in with our list of features:
CourseMate Management
add
.edit
.add-skill
.delete-skill
.find-mate
command does exactly that!rate-mate
helps you to keep track of those experiences!list
.delete
.Group Management
create-group
.add-member
.delete-member
has you covered!edit-tg-chat-url
.require-skill
.unrequire-sklill
.mark-important
.unmark-important
reverses that.suggest-mate
helps you find course mates that fulfills the group's required skills.find-group
command does exactly that!delete-group
.Forgot about the features and formats for each command? Head over to the Command Summary for a quick overview.
There may be some unfamiliar terms and tech jargon sprinkled within our user guide. As such, this segment aims to simplify those terms to improve your experience with MatchMate.
Terms | Meaning |
---|---|
ASCII | Stands for American Standard Code for Information Interchange. It assigns standard numeric values to letters, numerals, punctuation marks, and other characters used in computers |
Command | A user input that will cause the application to perform an operation according to the MatchMate UserGuide |
Command History | A record that keeps track of commands that has been executed |
Command Line Interface | A text-based interface where you can input commands |
CourseMate | A friend or classmate that you expect to form a group based on certain skills they might have |
Graphical User Interface | A digital interface in which a user interacts with graphical components such as icons, buttons, and menus |
Group | A grouping/team of courseMates for a course, project, or activity |
JSON | Stands for JavaScript Object Notation. It uses human-readable text to store and transmit data objects |
Skill | Knowledge, ability, or experience that a courseMate has |
Substring | A contiguous sequence of characters within a word. |
UI | Stands for User Interface. It is the space where interactions between humans and the application occur |
URL | Stands for Uniform Resource Locator. It is the address of a specific webpage or file (such as video, image, GIF, etc.) on the internet |
Symbol | Meaning of target text |
---|---|
Tip | |
Additional useful information |
Ensure you have Java 11 or above installed in your Computer.
First check if you have Java 11 by opening your terminal, and typing in java -version
. If the command fails, that means that
you have not downloaded Java yet. If you do not have Java 11 installed yet, then you can download it from here.
Download the latest matchmate.jar
from here.
Copy the file to the folder you want to use as the home folder for your app.
Select "Open in Terminal" in the folder you put the jar file in, and use the java -jar matchmate.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, these commands simulate the user flow of adding contacts, creating a group that require skills, and finding members for said group:
list
: Lists all courseMates.
add John Doe -p 87654321 -e johndoe@example.com -s Leadership -s C++
: Adds a courseMate named John Doe
to the courseMate list.
delete #3
: Deletes the 3rd courseMate shown in the current list.
create-group CS Group -cm John Doe -s C++ -s Java
: Creates a group containing John Doe, this group also requires the skill C++.
suggest-mate CS Group
: Suggests a possible courseMate whose skills match some unfulfilled skills in the group CS Group
.
exit
: Exits the app.
Refer to the Features above for details of each command.
The UI consists of four main components:
Command Box: You can type your commands here and press Enter to execute them. You can also use the and arrow keys to navigate through your command history.
Note: The key will retrieve the previous command in the command history. When there is no previous command, it will cycle back to the most recent command. The key will retrieve the next command. However, it will not cycle if you have reached the most recent command.
This behavior is similar to the command history in a typical terminal.
CourseMate List Panel: Displays the list of courseMates. Press Enter or double click to select a courseMate from the courseMate list panel.
CourseMate Detail Panel: Displays the details of a selected courseMate.
Group List Panel: Displays the list of groups.
You can use the Tab key to switch between the command box and the courseMate list panel.
Example If you want to add a few selected courseMates to a group, you can:
add-member GROUP_NAME -cm ##
in the command box and press Enter.This way, you can quickly add multiple courseMates to a group without having to type the courseMate names each time.
Notes about the command format:
Words in UPPER_CASE
are the parameters to be supplied by the user.
e.g. in add NAME
, NAME
is a parameter which can be used as add John Doe
.
Items in square brackets are optional.
e.g. add NAME [-p PHONE_NUMBER]
can be used as add John Doe -p 8762318
or as add John Doe
.
Items with ...
after them can be used multiple times including zero times.
e.g. [-s SKILL]...
can be used as (i.e. 0 times),
-s C++
, -s C++ -s Python
etc.
Extraneous parameters for commands that do not take in parameters (such as help
, list
and exit
) will be ignored.
e.g. if the command specifies help 123
, it will be interpreted as help
.
help
Shows a message that explains how to access the help page.
Format: help
list
Lists all courseMates and groups in the lists.
Format: list
Expected output:
Message: Listed all courseMates and groups
exit
Exits the program.
Format: exit
add
Adds a courseMate to the courseMate list. A name and an email will be required, and all other information will be optional.
Format: add NAME -e EMAIL [-p PHONE_NUMBER] [-t TELEGRAM_HANDLE] [-s SKILL]...
Parameters:
NAME
: Name of the courseMate. The string must only contain alphanumeric characters and spaces. Pick a nickname if the name is not fully alphanumeric.EMAIL
: Email of the courseMate. Refer to the notes below for the acceptable format.PHONE_NUMBER
(optional): Phone number of the courseMate. Accept strings with numeric characters only.TELEGRAM_HANDLE
(optional): Telegram handle of the courseMate. Accept strings formed by alphanumeric characters and underscores only, and its length must be between 5 and 32 characters.SKILL
(zero or multiple allowed): Skill(s) of the courseMate. Accepts any strings, except that words cannot start with the hyphen (-) character.Tip: A courseMate's name is case-insensitive. Adding a new courseMate with the same string but different capitalization will be rejected. Consider adding a suffix to the name to differentiate them.
Tip: A courseMate can have any number of skills (including 0). Skill names are also case-insensitive.
Examples:
add John Doe -e e1234567@u.nus.edu
add John Doe -e johndoe@example.com -p 87654321 -t johndoe -s Leadership -s C++
Notes about Email format:
Emails should be of the format local-part@domain
and adhere to the following constraints:
+
, _
, .
and -
.
The local-part may not start or end with any special characters.@
and then a domain name. The domain name is made up of domain labels separated by periods.
The domain name must:
edit
Edits an existing courseMate with a given name. This command supports changing the name, email, phone number and telegram handle.
Format: edit COURSEMATE [-n NEW_NAME] [-e NEW_EMAIL] [-p NEW_PHONE_NUMBER] [-t NEW_TELEGRAM_HANDLE]
(at least one field to edit must be supplied)
Parameters:
COURSEMATE
: Name of the existing courseMate or aliases (substrings or in hashtag (#) notation).NEW_NAME
(optional): New name of the courseMate. The string must only contain alphanumeric characters and spaces. Pick a nickname if the name is not fully alphanumeric.NEW_EMAIL
(optional): New email of the courseMate. Refer to the notes above for the acceptable format.NEW_PHONE_NUMBER
(optional): New phone number of the courseMate. Accept strings with numeric characters only.NEW_TELEGRAM_HANDLE
(optional): New Telegram handle of the courseMate. Accept strings formed by alphanumeric characters and underscores only, and its length must be between 5 and 32 characters.Tip:
Instead of supplying a full name to identify an existing courseMate, you can use the following shortcuts:
#1
, #2
, ..., #n
(where n is the number of courseMates currently displayed in the courseMate list panel) – #k
references the k-th courseMate currently displayed in the courseMate list panel.
##
– References the courseMate currently displayed in the detailed view panel.
A substring of the name instead of the full name.
There are ? course mates with name containing ???. You can retry by giving the course mate's complete name or use the index of the contact.
and the list of matching courseMates will be displayed in the courseMate list panel.#
) to identify the courseMate.
Example
#1 Benson
#2 Ben
edit Ben
will display a warning message for having multiple matches.edit Benson ...
or just its substring edit Bens ...
.edit #1 ...
.edit #2 ...
as you must specify its index in the list.Examples:
edit John Doe -n Joe Schmo
edit #1 -n Joe Schmo
edit John -e johndoe@gmail.com -p 98765432
add-skill
Adds a list of skills to a courseMate. Adding a skill that already exists in the courseMate will still succeed, but it won't show duplicate skills.
Format: add-skill COURSEMATE -s SKILL [-s SKILL]...
Parameters:
COURSEMATE
: Name of the existing courseMate. Accept aliases (substrings or in hashtag (#) notation).SKILL
(one or multiple allowed): Skill(s) of the courseMate. Accepts any strings containing ASCII characters (characters with ASCII value from 0-127), except that words cannot start with the hyphen (-) character.Examples:
add-skill John Doe -s C++ -s Leadership
delete-skill
Deletes a list of skills from a courseMate.
Format: delete-skill COURSEMATE -s SKILL [-s SKILL]...
Parameters:
COURSEMATE
: Name of the existing courseMate. Accept aliases (substrings or in hashtag (#) notation).SKILL
: (one or multiple allowed): Skill(s) of the courseMate. These must be existing skills that the courseMate contains.Examples:
delete-skill John Doe -s C++ -s Leadership
find-mate
Finds all courseMates whose names or skills contain the specified keyphrase (case-insensitive).
To match a courseMate’s skill, the keywords should match exactly with the skill. To match a courseMate’s name, the keywords can be a case-insensitive substring of the name.
Format: find-mate KEYPHRASE
Parameters:
KEYPHRASE
: Combination of keywords to be used for the search. Accepts any strings including spaces.Examples:
find-mate John
find-mate C++
delete
Deletes a courseMate with a given name.
Format: delete COURSEMATE
Parameters:
COURSEMATE
: Name of the existing courseMate. Accept aliases (substrings or in hashtag (#) notation).Examples:
delete ##
delete John
rate-mate
Rates a courseMate by up to five stars.
Format: rate-mate COURSEMATE -r RATING
Parameters:
COURSEMATE
: Name of the existing courseMate to give the rating to. Accept aliases (substrings or in hashtag (#) notation).RATING
: The rating given, which is a single digit integer between 0 and 5, where 0 signifies that no rating is given.Examples:
rate-mate Bob -r 5
create-group
Creates a group project. You can specify the courseMates in the group when creating the group, or choose to add them later.
Format: create-group GROUP_NAME [-t TELEGRAM_CHAT_URL] [-cm COURSEMATE]... [-s SKILL]...
Parameters:
GROUP_NAME
: The group name. The string must only contain alphanumeric characters and spaces. Pick a nickname if the name is not fully alphanumeric.TELEGRAM_CHAT_URL
(optional): The URL of the Telegram chat for the group. Accept strings that start with https://t.me/
and followed by alphanumeric characters and the special characters +
, -
and _
.COURSEMATE
(zero or multiple allowed): Name of the existing courseMates to be added to the group. Accept aliases (substrings or in hashtag (#) notation).SKILL
(zero or multiple allowed): Required skill(s) of the group. Accepts any strings, except that words cannot start with the hyphen (-) character.Examples:
create-group CS2103T G18
create-group CS2103T G18 -t https://t.me/+WDTg34uuUlH8Ml2d
create-group CS2103T G18 -cm John -cm #2 -s C++ -s Java
create-group CS2103T G18 -cm John -s C++ -s Java -cm #2 -t https://t.me/+WDTg34uuUlH8Ml2d
add-member
Adds some team members to an existing group.
Format: add-member GROUP_NAME -cm COURSEMATE [-cm COURSEMATE]...
Parameters:
GROUP_NAME
: Name of the existing group.COURSEMATE
(one or multiple allowed): Name of the existing courseMates to be added to the group. Accept aliases (substrings or in hashtag (#) notation).Examples:
add-member CS2103T G18 -cm Ivan -cm #1
add-member CS2103T G18 -cm ##
Tip: Different from courseMate names, group names must be an exact match.
delete-member
Deletes some team members from an existing group.
Format: delete-member GROUP_NAME -cm COURSEMATE [-cm COURSEMATE]...
Parameters:
GROUP_NAME
: Name of the existing group.COURSEMATE
(one or multiple allowed): Name of the existing courseMates to be deleted from the group. Accept aliases (substrings or in hashtag (#) notation).Examples:
delete-member CS2103T G18 -cm Ivan -cm #1
delete-member CS2103T G18 -cm ##
edit-tg-chat-url
Edits the telegram chat URL of a group.
Format: edit-tg-chat-url GROUP_NAME -t NEW_TELEGRAM_CHAT_URL
Parameters:
GROUP_NAME
: Name of the existing group.NEW_TELEGRAM_CHAT_URL
: New URL of the Telegram chat for the group. Accept strings that start with https://t.me/
and followed by alphanumeric characters and the special characters +
, -
and _
.Examples:
edit-tg-chat-url CS2103T G18 -t https://t.me/+WDTg34uuUlH8Ml2d
Only the last supplied telegram chat URL will be considered when URLs are given
require-skill
Add skills that should be required or necessary for the group. You only need one member that possesses the skill for it to be marked as fulfilled. Fulfilled skills are marked in green while unfulfilled ones are marked in red.
Format: require-skill GROUP_NAME -s SKILL [-s SKILL]...
Parameters:
GROUP_NAME
: Name of the existing group.SKILL
(one or multiple allowed): Required skill(s) of the group. Accepts any strings, except that words cannot start with the hyphen (-) character.Examples:
require-skill CS2103T G18 -s C++ -s Java
unrequire-skill
Mark skills that are no longer required or necessary for the group.
Format: unrequire-skill GROUP_NAME -s SKILL [-s SKILL]...
Parameters:
GROUP_NAME
: Name of the existing group.SKILL
(one or multiple allowed): Skill(s) to be marked as no longer required in the group. Accepts any strings, except that words cannot start with the hyphen (-) character.Examples:
unrequire-skill CS2103T G18 -s C++ -s Java
mark-important
Mark skills that are considered as important in the group. Important skills are signified with a [!] notation.
Format: mark-important GROUP_NAME -s SKILL [-s SKILL]...
Parameters:
GROUP_NAME
: Name of the existing group.SKILL
(one or multiple allowed): Skill(s) to be marked as no longer required in the group. Accepts any strings, except that words cannot start with the hyphen (-) character.Examples:
mark-important CS2103T G18 -s C++ -s Java
unmark-important
Mark skills that are no longer considered as important in the group.
Format: unmark-important GROUP_NAME -s SKILL [-s SKILL]...
Parameters:
GROUP_NAME
: Name of the existing group.SKILL
(one or multiple allowed): Skill(s) to be marked as no longer required in the group. Accepts any strings, except that words cannot start with the hyphen (-) character.Examples:
unmark-important CS2103T G18 -s C++ -s Java
suggest-mate
Searches courseMates that has any of the required skills from the group that is not fulfilled yet. CourseMates already in the group will not be listed.
Format: suggest-mate GROUP_NAME
Parameters:
GROUP_NAME
: Name of the existing group.Examples:
suggest-mate CS2103T G18
find-group
Search groups that include all matching keywords in their name.
To match a group's name, the keywords can be a case-insensitive substring of the name.
Format: find-group KEYPHRASE
Parameters:
KEYPHRASE
: Combination of keywords to be used for the search. Accepts any strings including spaces.Examples:
find-group CS2103T G18
delete-group
Deletes a group.
Format: delete-group GROUP_NAME
Example: delete-group CS2103T G18
Parameters:
GROUP_NAME
: Name of the existing group.Load the saved data when starting the app. Save the state of courseMates and groups every time it is updated via adding or editing. This should run automatically on start and subsequently after a command that alters the state of the app (e.g. add, edit).
MatchMate data are saved automatically as JSON files in [JAR file location]/data/
. It is possible but not recommended to edit the different .json
files directly instead of through the app.
Caution:
It is recommended to take a backup of the original save file before editing it.
Certain edits can cause the MatchMate 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.
Q: I encountered the error message Invalid command format!
when I tried to execute a command. What should I do?
A: You are likely to have missed out on a required parameter for the command. Refer to the Command Summary for the correct format of the command.
Note that parameters in square brackets are optional, while those without square brackets are required.
Q: I encountered the error message Some of the specified members could not be found.
when I tried to add a member to a group. What should I do?
A: If you used the hashtag notation (##
or #n
) to refer to a courseMate, check if the courseMate is displayed in the panel. Retry the command with an existing hashtag. Otherwise, you may have misspelled the courseMate's name. You can use the find-mate
command to search for the courseMate.
Q: I accidentally deleted a courseMate. Can I undo the deletion?
A: Unfortunately, the deletion of a courseMate is irreversible. You will need to re-add the courseMate to the list.
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 MatchMate home folder.
Q: Do I need internet connection to run MatchMate?
A: MatchMate is an offline application that does not require any internet connection.
Q: How do I save the changes that I have made?
A: All your data is automatically saved, so there's no need to manually save it.
preferences.json
file created by the application before running the application again.Action | Format, Examples |
---|---|
Add a courseMate | add NAME -e EMAIL [-p PHONE_NUMBER] [-t TELEGRAM_HANDLE] [-s SKILL]... e.g., add John Doe -e johndoe@example.com -p 87654321 -t johndoe -s Leadership -s C++ |
Add group members | add-member GROUP_NAME -cm COURSEMATE [-cm COURSEMATE]... e.g., add-member CS2103T G18 -cm Ivan -cm ## |
Add skills | add-skill COURSEMATE -s SKILL [-s SKILL]... e.g., add-skill John Doe -s C++ -s Leadership |
Create group | create-group GROUP_NAME [-t TELEGRAM_CHAT_URL] [-cm COURSEMATE]... [-s SKILL]... e.g., create-group CS2103T G18 -cm John -s C++ -s Java -cm #2 -t https://t.me/+WDTg34uuUlH8Ml2d |
Delete courseMate | delete COURSEMATE e.g., delete John |
Delete group | delete-group GROUP_NAME e.g., delete-group CS2103T G18 |
Delete group members | delete-member GROUP_NAME -cm COURSEMATE [-cm COURSEMATE]... e.g., delete-member CS2103T G18 -cm Ivan -cm #1 |
Delete skills | delete-skill COURSEMATE -s SKILL [-s SKILL]... e.g., delete-skill John Doe -s C++ -s Leadership |
Edit courseMate | edit COURSEMATE [-n NEW_NAME] [-e NEW_EMAIL] [-p NEW_PHONE_NUMBER] [-t NEW_TELEGRAM_HANDLE] (at least one field to edit must be supplied) e.g., edit John -p 98765432 -e johndoe@gmail.com -t johndoe1234 |
Edit group telegram chat URL | edit-tg-chat-url GROUP_NAME -t NEW_TELEGRAM_CHAT_URL e.g., edit-tg-chat-url CS2103T G18 -t https://t.me/+WDTg34uuUlH8Ml2d |
Find courseMate | find-mate KEYPHRASE e.g., find John |
Find group | find-group KEYPHRASE e.g., find CS2103T |
Help | help |
List | list |
Mark skills as important in group | mark-important GROUP_NAME -s SKILL [-s SKILL]... e.g., mark-important CS2103T G18 -s C++ -s Java |
Require skills in group | require-skill GROUP_NAME -s SKILL [-s SKILL]... e.g., require-skill CS2103T G18 -s C++ -s Java |
Suggest courseMates for group | suggest-mate GROUP_NAME e.g., suggest-mate CS2103T G18 |
Unmark skills as important in group | unmark-important GROUP_NAME -s SKILL [-s SKILL]... e.g., unmark-important CS2103T G18 -s C++ -s Java |
Unrequire skills in group | unrequire-skill GROUP_NAME -s SKILL [-s SKILL]... e.g., unrequire-skill CS2103T G18 -s C++ -s Java |