Welcome to HappyEverAfter - a quick, robust, and intuitive Wedding Planner designed to help wedding organisers keep track of their weddings. HappyEverAfter provides a plethora of features, including creating weddings and adding different people with different roles to each wedding. Wedding planning can get hectic, especially for a busy planner like you, and with just some simple commands, HappyEverAfter can help you get organised and sorted in no time!
Ensure you have Java 17 or above installed in your Computer. To check your Java version, open a terminal or command prompt and type java -version
If Java is not installed or is an older version:
Download the latest version of HappyEverAfter
happyeverafter.jar. Ensure that you download from the latest release.Move the file to a folder
Running HappyEverAfter
Open the "Command Prompt" (for Windows, press Win + R, type cmd and hit Enter) or "Terminal" (for Mac/Linux, search for the Terminal app).
Enter cd followed by the folder location where you saved the HappyEverAfter file. For example:
cd C:\Users\JohnDoe\Desktop\HappyEverAftercd /Users/JohnDoe/Desktop/HappyEverAfterRun this command to launch HappyEverAfter: java -jar happyeverafter.jar
A Graphical User Interface (GUI) similar to the image below should appear in a few seconds. Note how the app contains some sample data. You can choose to clear the data for a clean setup.
Type the command in the command box where it says Enter command here... and press Enter to execute the command.
list : Lists all weddingsclear : Clears all weddingsexit : Exits HappyEverAfternew n/John and Janice's Wedding d/21082025 : Creates a new wedding named John and Janice's Wedding on 21 Aug 2025. Enter the subsequent commands when prompted.
add n/Janice p/98765432 e/janice@gmail.com a/Block 09 Prince George's Park t/bride : Add Janice as a brideadd n/John p/98989898 e/john@gmail.com a/Block 10 Prince George's Park t/groom : Add John as a groomsort : Sorts weddings in ascending order of the dateSome things you need to know about the features before getting started:
Commands are case-insensitive.
Help and help will run the same command.Words in UPPER_CASE are the parameters to be supplied by you, the user.
new n/WEDDING_NAME, you should replace WEDDING_NAME with the actual name, like new n/John & MaryFor commands requiring an INDEX (such as open or delete), all inputs must be a valid positive integer passed to the INDEX field.
INDEX is passed (such as if the INDEX is larger than the number of weddings), an error message will be displayed.Items in square brackets are optional.
n/NAME [t/TAG] can be used as n/John Doe t/friend or simply as n/John Doe.Items with … after them can be used multiple times including zero times.
[t/TAG]… can be used as (i.e. 0 times), t/friend, t/friend t/family etc.Parameters can be provided in any order.
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.
help 123, it will be interpreted as help.Special role tags to identify the bride and groom:
t/bride to designate a person as the bridet/groom to designate a person as the groomHappyEverAfter uses a Graphical User Interface (GUI) to display visual information to the user. Here is a brief overview of the GUI.
On the left pane of the GUI, all weddings are listed. If you have more weddings than the height of the left pane, you can use the mousewheel
to scroll down the weddings. Each wedding is displayed with the name of the wedding (eg Jason and Wendy) and the date of the wedding (eg 09 June 2025). The
index of the wedding is displayed on the left of the name, from 1 onward. You can use this index for commands such as open and delete.
At the bottom of the GUI is the section for you to enter commands. Type in your command in the pane where it says
Enter command here... and press Enter to run the command. The result of the command will be displayed in the grey pane
above the input box.
When a wedding is opened using the open command (eg open 1), it is set as an active wedding and displayed
on the right pane of the GUI. The pane displays all members of the wedding, starting with the bride and groom.
If the number of members exceeds the height of the pane, you can scroll within the pane using your mousewheel. Each member card
displays the following information in order : The name of the person, the tags of the person, the phone number of the person,
the address of the person and the email of the person.
listYou can view a list of all weddings in the wedding planner.
Format: list
newYou can create and add a new wedding to the wedding planner.
Format: new n/WEDDING_NAME d/DATE
Example:
new n/John & Mary d/25122025 : Adds a wedding named John & Mary that happens on 25 December 2025.t/bride to designate a person as the bride.t/groom to designate a person as the groom.WEDDING_NAME and DATE as one that already exists.You will not be able to issue other commands while in the process of creating a wedding
To cancel creating the wedding, type n. To exit the app, type exit.
Restrictions on Parameters
Names:
Dates:
DATE Parameter has to be in the format DDMMYYYY.
25122025 for the 25th December 2025openYou can open a wedding from the Wedding Planner to view its people and edit its people.
Format: open INDEX
Examples:
open 1 : Opens the first wedding in the listopen 3 : Opens the third wedding in the listAfter a wedding is open, the members belonging to that wedding will be displayed on the right pane as shown below. You can then proceed to perform further operations like adding members or editing members.:
Tip: You can open a new wedding without closing the current one. HappyEverAfter will automatically close the current wedding and open the new one.
closeYou can close the currently open wedding project to return to the main view.
Format: close
sortYou can view the displayed weddings by chronological order - with the earliest wedding at the top.
Format: sort
deleteYou can delete a wedding from the wedding planner based on the provided index.
Format: delete INDEX
Examples:
delete 1 : Deletes the first wedding in the list)delete 3 : Deletes the third wedding in the list)clearDeletes All weddings and associated contacts from the wedding planner.
Format:
clear followed by y will delete all weddings from the wedding planner.clear followed by n will abort the delete operation, and it will not clear the weddings.clear to
confirm the deletion.y or n command, the clearing will be automatically aborted.Tip: You can use clear to set up a fresh wedding planner if you don't want the sample data.
addYou can add a person to the opened Wedding Planner. You can use tags to specify if the person is a bride, groom, or other wedding party participant. The new person will be displayed on the right pane of the GUI.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…
Examples:
add n/Mary Muller p/98765432 e/mary@example.com a/123 Kent Ridge St t/brideadd n/John Danny p/89989788 e/john@example.com a/456 UTR Ave t/groomadd n/Harry Kane p/13701978 e/kane@example.com a/789 NUS Rd t/bridesmaidadd n/Alan Wayne p/98775633 e/alan@example.com a/123 Clementi Rd t/photographerRestrictions on Parameters
Names:
, or ' or . or -)Phone numbers:
Email addresses:
LOCAL_PART@DOMAIN, with the following constraints:LOCAL_PART has the following constraints:
+_.-.DOMAIN is a domain name, which is made up of 1 or more domain labels separated by periods.admin@localhoste1234567@u.nus.educhae-won@gmail.comfong_hrishi@out-look.comAddresses:
Tags:
groom and bride tags. These tags are case-insensitive.groom and bride tag, specified with t/groom and t/bride respectively.
findYou can search for all weddings that contain the names of people that match any one of the provided search terms.
Format: find [NAME]…
Examples:
find Sunfind Sun Hrishifind sun timoNote:
find will be counted as an invalid command.find sun will produce a match for a person named SUNfind will match names to at least one of the search terms. For instance, find sun timo will return results for both the person named sun and the person named timo.find Zhe Hao will return the same result as find Hao Zhe.find timo will result a result for a person named timothy timo, find tim will return a result but find tio will not return a result.The result of the search will be outputted on the result box above the command input box. You can then use the open command to
open a wedding based on the result. A sample output is shown below:
filterYou can filter the list of the currently opened wedding to display all people that match at least one of the tags.
Format: filter [TAG]…
Examples:
filter bride : Displays only the bridefilter groom : Displays only the groomfilter : Displays all people without filteringfilter photographer caterer guest : Displays all people that has at least one of the tags. For example, if Person 1 has the photographer tag and Person 2 has the guest tag, both Person 1 and Person 2 will be displayed in the filtered result.Note:
filter photographer guest will match all people that have either photographer or guest tag or both tags. The person does not need to have the exact same tags as all the tags specified in the filter command.filter photographer will match a person that has both the tags photographer and guest. The filter command does not have to contain all tags for the person; it only has to match at least one.filter pho will not match a person with the tag photographer. The individual tag string must be an exact match.Tip: If you want to clear the filters, use the filter command with no tags, i.e. filter
removeYou can remove a person from the currently opened wedding based on the provided index. The index refers to the index number shown in the displayed list. The index must be a positive integer. The active wedding pane will be automatically updated with the new list of members
Format: remove INDEX
Example:
remove 3 : Removes the third person in the listIn the example usage below, issuing remove 3 will remove the person named timo from the active wedding.

Note:
editYou can edit the details of a person in the currently opened wedding.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]...
Examples:
edit 1 p/91234567 e/newemail@example.com will update the phone and email of the person at index 1 to be 91234567 and newemail@example.com respectively.edit 2 n/New Name a/New Address will update the name and address of the person at index 2 to be New Name and New Address respectively.Note:
bride/groom tags of a person.Brother, and you want to add a new tag Coming, you will have to run the command edit INDEX t/Brother t/Coming.t/ with no tags behind. This will remove all tags from the person at the specified index.Restrictions on Parameters:
Tip: If you need to change the bride or groom of a wedding, use edit to change their information instead of editing the tag of another person to make them bride/groom.
helpYou can view a message providing a web link to access the User Guide.
Format: help
exitYou can exit the HappyEverAfter application.
Format: exit
HappyEverAfter data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
HappyEverAfter data is saved locally as a JSON file in [JAR file location]/data/weddingplanner.json.
Advanced users are welcome to update the data directly by editing that data file.
Caution:
If your changes to the data file makes its format invalid, HappyEverAfter will discard all data and start
with an empty data file at the next run. Hence, it is recommended to make a backup of the file before editing it.
Furthermore, certain edits can cause HappyEverAfter 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: How do I transfer my wedding planner data to another computer?
A: Install HappyEverAfter on the other computer and replace the data file it creates with the file from your original installation (located at /data/weddingplanner.json).
Q: Can I add multiple weddings at once?
A: No, you need to create weddings one at a time using the new command. Alternatively, for advanced users: you may update the data file yourself. Look through the "Editing the data file" section for more support.
Q: What happens if I try to add a second bride or groom to a wedding?
A: The system will display an error message as the current implementation of HappyEverAfter supports only one bride and one groom per wedding.
Q: How many weddings can I have in HappyEverAfter?
A: There is no limit to how many weddings can be added. However, we would advise you to keep it under a reasonable amount (such as 100) as many weddings may lead to performance loss.
Q: How many people can I add to a wedding?
A: As of the most recent version, you can add at most 100 people for one wedding.
Q: Can I add international phone numbers?
A: Unfortunately, international phone numbers will only be implemented in future. However, HappyEverAfter supports variable length numbers for phone numbers. One possible option would be to use a custom combination of numbers to denote the + symbol such as 000.
Q: I renamed the bride and groom of a wedding. How do I change the wedding name?
A: The system currently does not support the editing of wedding names directly. However, you may update the data file yourself. Look through the "Editing the data file" section for more support.
| Action | Format, Examples |
|---|---|
| Create Wedding | new n/WEDDING_NAME d/DATEe.g., new n/John & Mary d/25122025 |
| Open Wedding | open INDEXe.g., open 2 |
| Close Wedding | close |
| List Weddings | list |
| Sort Weddings by Date | sort |
| Delete Wedding | delete INDEXe.g., delete 2 |
| Clear All Weddings | clear |
| Add Person | add n/NAME p/PHONE e/EMAIL a/ADDRESS [t/TAG]...e.g., add n/Mary Smith p/98765432 e/mary@example.com a/123 Wedding St t/bride |
| Find Person | find [SEARCH TERMS...]e.g., find John Doe |
| Filter People by Tag | filter [TAGS...]e.g., filter groom bride |
| Remove Person | remove INDEXe.g., remove 3 |
| Edit Person | edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]...e.g., edit 1 p/91234567 e/newemail@example.com |
| Help | help |
| Exit | exit |