User Guide
ClubTrack is a desktop app for managing club members and attendance, optimized for use via a Command Line Interface (CLI) while retaining the benefits of a Graphical User Interface (GUI).
- Target User Profile
- Value Proposition
- Quick Start
-
Features
- Viewing help :
help - Adding a member :
add - Listing all members :
list - Editing a member :
edit - Locating members by keyword :
find - Searching members by tag prefix :
search - Marking attendance :
present - Unmarking attendance :
absent - Viewing attendance :
attendance - Switching between lists :
switch - Removing a list :
remove - Adding points :
addpoints - Deleting points :
minuspoints - Viewing member points :
points - Adding tags to a member :
tag - Removing tags from a member :
untag - Deleting a member :
delete - Clearing all entries in the current list :
clear - Exiting the program :
exit - Saving the data
- Editing the data files
- Viewing help :
- FAQ
- Command summary
Target User Profile
ClubTrack is designed for university student club executive committee (exco) members who need to:
- Manage large member databases (50–500 members)
- Track attendance across multiple events and sessions
- Assign roles and responsibilities to members
- Monitor member participation through points systems
Ideal users are:
- Comfortable with command-line interfaces
- Need to perform member management tasks quickly
- Prefer keyboard input over mouse clicking
- Manage active clubs with regular events and meetings
Value Proposition
ClubTrack enables club executives to manage members, track attendance, and assign points up to 3× faster than traditional spreadsheet-based solutions through an intuitive command-line interface optimized for power users.
Quick Start
-
Check your Java version
ClubTrack requires Java 17 to run.
To check your version, open a terminal and type:
java -versionIf you do not have Java 17 installed, please download it here:
-
Download ClubTrack
Download the latest
.jarfile from our GitHub releases page. -
Choose a home folder
Move the
.jarfile to the folder where you would like ClubTrack to save your data. -
Open your terminal and navigate to that folder
cd /path/to/your/folder -
Run the app
java -jar ClubTrack.jar
A GUI similar to the one below should appear in a few seconds. The app starts with sample data.

Type a command in the command box and press Enter to execute it.
For example, typing help will open the help window.
Some example commands you can try:
* `list` : Lists all members in the current list.
* `add n/John Doe p/98123456 e/johnd@example.com a/John street y/2 f/SOC` : Adds a member named John Doe.
* `present 1` : Marks the first member as present.
* `switch Training_2025_10_20` : Switches to (or creates) a list for that event.
* `clear` : Deletes all members **in the current list**.
* `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 [t/TAG]can be used asn/John Doe t/Treasureror 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/Treasurer,t/Treasurer t/Logisticsetc. -
Parameters can be in any order. e.g. if the command specifies
n/NAME p/PHONE_NUMBER,p/PHONE_NUMBER n/NAMEis also acceptable. -
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. -
List names used in
switchandremoveare plain text strings. Underscores and dashes are allowed, e.g.Training_2025_10_20.
Viewing help : help
Shows a message explaining how to access the help page.
Format: help
Adding a member : add
Adds a member to ClubTrack.
Format:
add n/NAME p/PHONE e/EMAIL a/ADDRESS y/YEAR_OF_STUDY f/FACULTY [t/TAG]…
Field constraints:
- Name — up to 100 characters; must contain only letters, numbers, and spaces.
- Phone — 8 digits, must start with 8 or 9.
- Email — up to 254 characters, must be a valid email format.
- Address — up to 200 characters.
- Faculty — cannot be blank, up to 100 characters.
- Year of Study — integer 1 to 5.
- Tag — alphanumeric; up to 50 characters each.
Examples:
add n/John Doe p/98123456 e/johnd@example.com a/John street y/3 f/SOCadd n/Betsy Crowe p/83123456 e/betsycrowe@example.com a/Newgate Prison y/2 f/CDE t/Treasurer t/Logistics
Listing all members : list
Shows a list of all members in the current list.
Format: list
Editing a member : edit
Edits an existing member.
Format:
edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [y/YEAR] [f/FACULTY] [t/TAG]…
- Edits the member at the specified
INDEX. The index refers to the index number shown in the displayed member 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 member will be replaced.
- You can remove all tags by typing
t/without specifying any tags after it.
Field constraints (e.g., max lengths, year 1–5) follow the same rules as in add.
Examples:
edit 1 p/91234567 e/johndoe@example.comedit 2 n/Betsy Crower t/
Locating members by keyword : find
Finds members whose name field only contains any of the given keywords.
Format:
find KEYWORD [MORE_KEYWORDS]
What it searches:
- name only (for quick lookup by name)
Rules:
- Match is case-insensitive (
johnmatchesJohn) - Match is substring-based (
alexmatchesAlexander) - Order of keywords does not matter
- A member is returned if the name field contains any of the keywords (logical OR)
-
Does NOT search tags, faculty, year, phone, email, or address — use
searchfor tag-based filtering
Examples:
-
find john→ matchesJohn,Johnathan -
find alex david→ matchesAlex David,Alexander,David Lee
Searching members by tag prefix : search
Finds members whose tags start with the given prefix(es).
Use this when your club has tag conventions like exco-*, dance-*, logi-*.
Format:
search t/TAG_PREFIX…
Rules:
- Match is case-insensitive
- Match is prefix-based:
t/logmatcheslogi,logistics,log-2025 - You can give multiple prefixes; member is returned if it matches any prefix (logical OR)
- At least one
t/must be supplied
Examples:
-
search t/exco→ matchesexco,exco-head,exco-programme -
search t/dan t/perf→ matches members taggeddance,dance-lead,performance,performer -
search t/comm→ matchescommittee,comm-head,comm-logi
Marking attendance : present
Marks the specified member as present in the current list.
Format:
present INDEX
Examples:
present 1present 4
Unmarking attendance : absent
Unmarks the specified member, setting them as absent in the current list.
Format:
absent INDEX
Examples:
absent 1absent 3
Viewing attendance : attendance
Displays the current attendance list, showing who is present for the current list.
Format:
attendance
Note: This command shows only members who are marked as present. To see all members (both present and absent), use the list command.
Switching between lists : switch
Switches between different member/attendance lists, such as separate event rosters.
If the specified list does not exist, ClubTrack creates a new empty list with that name.
The app starts on the default list named ClubTrack.
Format:
switch NAME_OF_LIST
Examples:
switch Training_2025_10_20switch MatchDay-1
After switching, all subsequent commands (add, present, clear, list, delete, points, etc.) apply only to the current list.
Removing a list : remove
Removes an existing list from ClubTrack.
Format:
remove NAME_OF_LIST
Example:
remove Training_2025_10_20
Adding points : addpoints
Adds a specified number of points to a member.
Format:
addpoints INDEX pts/VALUE
- Points can represent participation, merit, or performance.
- The integer VALUE can only be a positive integer.
- In line with typical club operations, points are usually awarded in small increments (<=100), and therefore would be unrealistic to have large increments in points e.g., adding 10000000 points at once.
Examples:
addpoints 2 pts/5addpoints 1 pts/10
Deleting points : minuspoints
Removes a specified number of points from a member.
Format:
minuspoints INDEX pts/VALUE
- Similar to the ‘addpoints’ command, points are usually deducted in small decrements (<=100), and would be unrealistic to have large decrements in points e.g., subtracting 100000000 points at once.
- The integer VALUE can only be a positive integer.
Examples:
minuspoints 1 pts/3minuspoints 4 pts/10
Viewing member points : points
Shows the current points of a specified member in the current list.
Format:
points INDEX
Examples:
points 1points 3
Adding tags to a member : tag
Adds a tag to the specified member.
Format:
tag INDEX TAG
- Tags must be alphanumeric and ≤ 50 characters.
Examples:
tag 1 Treasurertag 2 Committee
Removing tags from a member : untag
Removes a tag from the specified member.
Format:
untag INDEX TAG
- Tags must be alphanumeric and ≤ 50 characters.
Examples:
untag 1 Treasureruntag 2 Committee
Deleting a member : delete
Deletes the specified member from the current list.
Format:
delete INDEX
Examples:
delete 3-
find Johnfollowed bydelete 1
Clearing all entries in the current list : clear
Clears all members in the current list. Other lists are not affected.
Format:
clear
Exiting the program : exit
Exits the ClubTrack application.
Format:
exit
Saving the data
ClubTrack data are saved automatically after any command that changes the data. There is no need to save manually.
Editing the data files
ClubTrack stores each list in its own JSON file inside the data/ folder (next to the .jar).
- The default list is saved as:
data/ClubTrack.json - When you run
switch Training_2025_10_20, ClubTrack creates/uses:data/Training_2025_10_20.json - Every list name maps 1-to-1 to a JSON file with the same name.
Advanced users may edit these JSON files directly.
Caution:
- Make sure the JSON stays valid (correct braces, field names, commas).
- If a file is edited incorrectly, ClubTrack may reset that list or refuse to load it.
- Do not rename the JSON files manually unless you also use the same name in the
switchcommand.
FAQ
Q: How do I transfer my data to another computer?
A: Install the app on the other computer and replace the empty data file it creates with your existing ClubTrack data file.
Q: I entered the wrong command. Will it break my data?
A: No. Invalid commands are safely ignored, and an error message will appear.
Q: The app does not open.
A: Ensure you are using Java 17 or above. If issues persist, download the latest .jar file and try again.
Q: Will I have to create a completely new list from scratch for separate events?
A: No, excos can simply duplicate a previous event’s JSON file, rename it, and load it as a new list to serve as a base template, eliminating the need to re-enter records manually. From there, edit the names accordingly.
Q: Why do some fields reject very long input?
A: To ensure smooth performance and prevent corrupted files, ClubTrack limits field lengths (e.g., Name ≤ 100 chars).
Command summary
| Action | Format, Examples |
|---|---|
| Add Member |
add n/NAME p/PHONE e/EMAIL a/ADDRESS y/YEAR f/FACULTY [t/TAG]… e.g. add n/John Doe p/98123456 e/john@example.com a/Blk 12 Hillview y/2 f/SOC t/Captain
|
| Edit Member |
edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [y/YEAR] [f/FACULTY] [a/ADDRESS] [t/TAG]… e.g. edit 2 n/Betsy Crowe t/Treasurer
|
| Delete Member |
delete INDEX e.g. delete 3
|
| List Members | list |
| Find Member |
find KEYWORD [MORE_KEYWORDS] e.g. find John David
|
| Search by Tags |
search t/TAG_PREFIX… e.g. search t/exco t/dance
|
| Mark Attendance | present INDEX |
| Unmark Attendance | absent INDEX |
| View Attendance | attendance |
| Switch Lists |
switch NAME_OF_LIST e.g. switch Training_2025_10_20
|
| Remove List |
remove NAME_OF_LIST e.g. remove Training_2025_10_20
|
| Add Points |
addpoints INDEX pts/VALUE e.g. addpoints 1 pts/5
|
| Minus Points |
minuspoints INDEX pts/VALUE e.g. minuspoints 2 pts/5
|
| View Points |
points INDEX e.g. points 1
|
| Add Tag |
tag INDEX TAG e.g. tag 1 Treasurer
|
| Remove Tag |
untag INDEX TAG e.g. untag 1 Treasurer
|
| Clear Current List | clear |
| Help | help |
| Exit | exit |