User Guide
Mate is a desktop app that helps users quickly find the right hackathon teammates by surfacing peers based on skills and proficiency. With a simple CLI-first interface and color-coded skill tags, users can instantly discover, connect, and form balanced teams without wasting time on endless networking.
Mate is designed for hackathon participants across the technical spectrum — from developers, designers, and data scientists to product managers, domain experts, and non-technical contributors (e.g. UX, marketing, business). It serves students and professionals who value fast, pragmatic workflows.
- Quick start
-
Features
- Field constraints
- Viewing help :
help - Listing all persons :
list - Clearing all entries :
clear - Exiting the program :
exit - Adding a person:
add - Locating persons :
find - Deleting a person :
delete - Editing a person :
edit - Adding skills to a person :
addSkill - Removing a skill from a person :
removeSkill - Adding an interested hackathon to a person :
addHackathon - Removing an interested hackathon from a person :
removeHackathon - Listing all teams :
listTeam - Creating a team :
createTeam - Deleting a team :
deleteTeam - Adding a person to a team :
addToTeam - Removing a person from a team :
removeFromTeam - Saving the data
- Editing the data file
- FAQ
- Known issues
- Command summary
Quick start
-
Ensure you have Java
17or above installed in your Computer.
Mac users: Ensure you have the precise JDK version prescribed here. -
Download the latest
.jarfile from here. -
Copy the file to the folder you want to use as the home folder for Mate.
-
Open a command terminal,
cdinto the folder you put the jar file in, and use thejava -jar mate.jarcommand 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
helpand pressing Enter will open the help window.
Some example commands you can try:-
list: Lists all persons. -
listTeam: Lists all teams. -
add n/John Doe e/johnd@example.com t/JohnTG g/JohnGH: Adds a contact namedJohn Doeto Mate. -
delete p/3: Deletes the 3rd contact shown in the current list. -
createTeam tn/Development Team h/Hackathon 2024 p/1 p/2: Creates a team with the first two contacts as members. -
exit: Exits the app.
-
-
Refer to the Features below for details of each command.
Features
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 [h/HACKATHON]can be used asn/John Doe h/NUSHacksor asn/John Doe. -
Items with
… after them can be used multiple times including zero times.
e.g.[h/HACKATHON]…can be used as(i.e. 0 times),h/NUSHacks,h/NUSHacks h/NTUHacksetc. -
Parameters can be in any order.
e.g. if the command specifiesn/NAME t/TELEGRAM,t/TELEGRAM n/NAMEis also acceptable. -
Extraneous parameters for commands that do not take in parameters (such as
help,list,listTeam,exitandclear) will be ignored.
e.g. if the command specifieshelp 123, it will be interpreted ashelp. -
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.
-
Commands are case-insensitive. e.g.
ADD n/Johnis equivalent toadd n/John
Field constraints
This table summarises the input restrictions for each field in Mate:
- All fields cannot be empty.
- Fields with leading or trailing spaces will have the spaces trimmed automatically.
- Fields are case-insensitive unless otherwise specified.
| Field | Prefix | Constraints | Valid Examples | Invalid Examples |
|---|---|---|---|---|
| Name | n/ |
• Only alphabetical characters, spaces and /• Must be unique |
• John Doe• Vaikesh s/o Manimaran
|
• @John• Bob123• Amy_Wu
|
e/ |
• Format: local-part@domain• Local part: alphanumeric and +_.- only• Local part and domain cannot start/end with special characters • Domain: alphanumeric with hyphens allowed • Domain must end with at least 2 characters • Special characters must be between alphanumerical characters • Must be unique |
• john@example.com• user+tag@uni.edu.sg
|
• john-+.@ex.com• user@.com
|
|
| Telegram | t/ |
• 5–32 characters long • Only letters, numbers, and underscores • Cannot start with @• Cannot start or end with underscore • Cannot have consecutive underscores • Must be unique |
• john_doe• alice123
|
• _john• john_• jo__hn• @john
|
| GitHub | g/ |
• 1–39 characters long • Only letters, numbers, and hyphens • Cannot start or end with hyphen • Cannot have consecutive hyphens • No underscores, spaces, or symbols • Must be unique |
• john-doe• alice123
|
• -john• john-• jo--hn• john_doe
|
| Skill | sk/ |
• Only alphanumeric characters • May include +, #, ., -, or _ symbols• Cannot start with #• At least 1 character long • Optional level: Beginner, Intermediate, or Advanced (case-insensitive) |
• java• c++• .net• c#• python:Advanced
|
• #sharp• java:
|
| Hackathon | h/ |
• Only alphanumeric characters and spaces | • NUSHacks• AI Challenge 2024
|
•NUS_Hacks• @Event
|
| Team Name | tn/ |
• Only alphanumeric characters and spaces • Must be unique |
• Development Team• Alpha Squad
|
• Team_A• @TeamName
|
| Index | p/ |
• Must be a positive integer • Must be valid in the current displayed list |
• 1• 5• 100
|
• 0• -1• 1.5• abc
|
| Keyword | k/ |
• Can contain any characters including spaces | • John• c++• AI Hackathon 2024
|
(No restrictions) |
Viewing help : help
Shows a message explaining how to access the help page.

Format: help
Listing all persons : list
Shows a list of all persons in Mate.
Format: list
Clearing all entries : clear
Clears all entries from Mate.
Format: clear
Exiting the program : exit
Exits the program.
Format: exit
Adding a person: add
Adds a person to Mate.
Format: add n/NAME e/EMAIL t/TELEGRAM_NAME g/GITHUB_NAME [sk/SKILL[:LEVEL]]… [h/HACKATHON]…
- Skills are displayed with color-coded backgrounds: Beginner (Green), Intermediate (Blue), Advanced (Purple).
- Skills are sorted by level (Advanced → Intermediate → Beginner), then alphabetically.
-
HACKATHONentries are added to the person’s interested hackathons. - Duplicate skills or hackathons are not allowed.
- See Field Constraints for input requirements.
Examples:
add n/John Doe e/johnd@example.com t/JohnTG g/JohnGHadd n/Alice e/alice@example.com t/alice_tg g/alice123 sk/docker h/TechChallengeadd n/Betsy Crowe e/betsycrowe@example.com t/Betsygram g/Betsy03 sk/c#:Intermediate sk/java:Advanced h/NUSHack h/iNTUition
Locating persons : find
Finds persons who match all the given keywords.
Format: find k/KEYWORD [k/MORE_KEYWORDS]…
- Searches across name, email, Telegram, GitHub, skills, and hackathons.
- Returns persons matching all keywords (AND search).
- Partial matching is supported (e.g.
NUSmatchesNUSHackandNUS TechJam). - See Field Constraints for input requirements.
Examples:
-
find k/Johnreturns persons with namejohnorJohn Doe, or emailjohn@example.com, or Telegramjohn123 -
find k/java k/pythonreturns persons that have bothjavaANDpythonas skills. -
find k/AI Hackathon 2024returns persons interested in or participating in hackathons containingAI Hackathon 2024
Deleting a person : delete
Deletes the specified person from Mate.
Format: delete p/INDEX
- Deletes the person at the specified
INDEX. - See Field Constraints for index requirements.
Examples:
-
listfollowed bydelete p/2deletes the 2nd person in the displayed list. -
find k/Betsyfollowed bydelete p/1deletes the 1st person in the results of thefindcommand.
Editing a person : edit
Edits an existing person’s contact details in Mate.
Format: edit p/INDEX [n/NAME] [e/EMAIL] [t/TELEGRAM_NAME] [g/GITHUB_NAME]
- At least one of the optional fields must be provided.
- Existing values will be updated to the input values.
- See Field Constraints for input requirements.
addSkill, removeSkill) and hackathons (addHackathon, removeHackathon).
Examples:
-
edit p/2 n/Betsy Croweredits the name of the 2nd person in the displayed list toBetsy Crower. -
edit p/1 e/johndoe@example.com t/johndoe_tgedits the email address and Telegram name of the 1st person in the displayed list.
Adding skills to a person : addSkill
Adds one or more skills (with optional levels) to a person.
Format: addSkill p/INDEX sk/SKILL[:LEVEL] [sk/SKILL[:LEVEL]]...
- If the skill already exists, it will be upgraded/downgraded to the new level.
- Duplicate skills in the parameters with different levels will cause the command to fail (no partial addition).
- See Field Constraints for input requirements.
Examples:
-
addSkill p/1 sk/java:Advancedadds Java (Advanced) to the 1st person in the displayed list (or upgrades it if a lower level existed). -
addSkill p/2 sk/python sk/docker:Intermediateadds Python (Beginner) and Docker (Intermediate) to the 2nd person in the displayed list.
Removing a skill from a person : removeSkill
Removes one or more skills from a person in Mate.
Format: removeSkill p/INDEX sk/SKILL [sk/SKILL]...
- If the person doesn’t have any of the specified skills, the command fails (no partial removal).
- See Field Constraints for input requirements.
Examples:
-
removeSkill p/1 sk/pythonremoves the Python skill from the 1st person in the displayed list.
Adding an interested hackathon to a person : addHackathon
Adds one or more hackathons to a person’s interested list.
Format: addHackathon p/INDEX h/HACKATHON_NAME [h/HACKATHON_NAME]...
- A hackathon cannot be added to the interested list if the person is already participating in it via a team.
- If a hackathon is already in the interested list, the other hackathons are added (partial addition).
- See Field Constraints for input requirements.
Examples:
-
addHackathon p/1 h/NUSHackadds NUSHack to the 1st person’s interested list. -
addHackathon p/2 h/NUSHack h/iNTUitionadds both hackathons to the 2nd person’s interested list.
Removing an interested hackathon from a person : removeHackathon
Removes one or more hackathons from a person’s interested hackathon list.
Format: removeHackathon p/INDEX h/HACKATHON_NAME [h/HACKATHON_NAME]...
- Cannot remove a hackathon the person is currently participating in (they must be removed from the team first).
- See Field Constraints for input requirements.
Examples:
-
removeHackathon p/2 h/TechChallengeremoves TechChallenge from 2nd person’s interested list. -
removeHackathon p/4 h/NUSHack h/iNTUitionremoves both hackathons from 4th person’s interested list.
Listing all teams : listTeam
Shows a list of all teams in Mate.

Format: listTeam
Creating a team : createTeam
Creates a new team in Mate with the specified team members.
Format: createTeam tn/TEAM_NAME h/HACKATHON_NAME p/INDEX [p/INDEX]…
- A team can be created with zero or more members.
- Team members cannot be in multiple teams for the same hackathon.
- The hackathon is automatically moved from interested to participating hackathons for all members.
- See Field Constraints for input requirements.
list command first to see the current index numbers of persons before creating a team.
p/1 p/1 p/1), Mate will de-duplicate indices when creating a team — the team will contain that single person only. To add multiple different members, pass each member’s index once.Examples:
-
createTeam tn/Alpha Squad h/AI Challenge p/2 p/4 p/5creates a team called “Alpha Squad” for the “AI Challenge” hackathon with the 2nd, 4th, and 5th persons as members.
Deleting a team : deleteTeam
Deletes a team from Mate and removes all members from that team.
Format: deleteTeam tn/TEAM_NAME
- All team members are automatically removed from the team.
- The team’s hackathon is removed from all members’ participating hackathons (but NOT added back to interested hackathons).
- See Field Constraints for input requirements.
listTeam command first to see the team names before deleting one.
Examples:
-
deleteTeam tn/Alpha Squaddeletes the team named “Alpha Squad”.
Adding a person to a team : addToTeam
Adds an existing person to an existing team in Mate.
Format: addToTeam p/INDEX tn/TEAM_NAME
- The team must already exist.
- A person can be in multiple teams for different hackathons, but not multiple teams for the same hackathon.
- The team’s hackathon is automatically moved from interested to participating hackathons for the person.
- See Field Constraints for input requirements.
Examples:
-
addToTeam p/1 tn/Alpha Squadadds the 1st person to the “Alpha Squad” team.
Removing a person from a team : removeFromTeam
Removes an existing person from an existing team in Mate.
Format: removeFromTeam p/INDEX tn/TEAM_NAME
- The team must already exist and the person must be a member.
- The team’s hackathon is automatically moved from participating to interested hackathons for the person.
- See Field Constraints for input requirements.
Examples:
-
removeFromTeam p/1 tn/Alpha Squadremoves the 1st person in the displayed list from the “Alpha Squad” team.
Saving the data
Mate’s data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Editing the data file
Mate’s data is saved automatically as a JSON file [JAR file location]/data/mate.json. Advanced users are welcome to update data directly by editing that data file.
Furthermore, certain edits can cause Mate 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.
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 Mate home folder.
Known issues
-
When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the
preferences.jsonfile created by the application before running the application again. -
If you minimise the Help Window and then run the
helpcommand (or use theHelpmenu, or the keyboard shortcutF1) again, the original Help Window will remain minimised, and no new Help Window will appear. The remedy is to manually restore the minimised Help Window.
Command summary
| Action | Format, Examples |
|---|---|
| Help | help |
| List | list |
| Clear | clear |
| Exit | exit |
| Add Person |
add n/NAME e/EMAIL t/TELEGRAM_NAME g/GITHUB_NAME [sk/SKILL[:LEVEL]]… [h/HACKATHON]… e.g. add n/John Doe e/johnd@example.com t/JohnTG g/JohnGH sk/Python:Advanced h/NUSHack
|
| Find |
find k/KEYWORD [k/MORE_KEYWORDS]…e.g. find k/Java
|
| Delete Person |
delete p/INDEXe.g. delete p/3
|
| Edit Person |
edit p/INDEX [n/NAME] [e/EMAIL] [t/TELEGRAM_NAME] [g/GITHUB_NAME]e.g. edit p/2 n/James Lee
|
| Add Skill |
addSkill p/INDEX sk/SKILL[:LEVEL] [sk/SKILL[:LEVEL]]...e.g. addSkill p/1 sk/java:Advanced
|
| Remove Skill |
removeSkill p/INDEX sk/SKILL [sk/SKILL]...e.g. removeSkill p/1 sk/Java
|
| Add Hackathon |
addHackathon p/INDEX h/HACKATHON_NAME [h/HACKATHON_NAME]...e.g. addHackathon p/1 h/NUSHack
|
| Remove Hackathon |
removeHackathon p/INDEX h/HACKATHON_NAME [h/HACKATHON_NAME]...e.g. removeHackathon p/1 h/NUSHack
|
| List Team | listTeam |
| Create Team |
createTeam tn/TEAM_NAME h/HACKATHON_NAME p/INDEX [p/INDEX]… e.g. createTeam tn/Development Team h/Tech Innovation 2024 p/1 p/3
|
| Delete Team |
deleteTeam tn/TEAM_NAMEe.g. deleteTeam tn/Development Team
|
| Add Person to Team |
addToTeam p/INDEX tn/TEAM_NAME e.g. addToTeam p/3 tn/Development Team
|
| Remove Person from Team |
removeFromTeam p/INDEX tn/TEAM_NAME e.g. removeFromTeam p/3 tn/Development Team
|