HealthSync is a desktop application designed specifically for healthcare administrators in family clinics. It consolidates patients’ personal details and emergency contact information into a unified, easily accessible database, streamlining the management of critical data.
By integrating the speed and efficiency of a Command Line Interface (CLI) with the design of a Graphical User Interface (GUI), HealthSync empowers fast-typing administrators to retrieve vital patient information and reach out to emergency contacts more swiftly than with traditional GUI-only systems.
This hybrid approach supports rapid responses in a healthcare environment where every second counts.
⚠️ Warning: HealthSync is only designed for Singapore-based family clinics. It operates exclusively in English and does not support other languages or international clinic formats.
Using HealthSync with other languages or across multiple countries and timezones may lead to unexpected behaviour.
helpaddschedulelistsorteditemergencyfindarchivelistarchiveunarchivedeleteclearundoredoexitThis User Guide is designed to help you understand and use HealthSync effectively. Below are some tips on how to navigate and use this guide:
By referring to these sections, you can quickly find the information you need and fully utilize HealthSync.
⚠️: The symbol serves as a warning that executing a specific command in a given context may result in unexpected behavior.
Ensure you have Java 17 or above installed in your Computer.
Download the latest release of the HealthSync.jar file from here.
Copy the file to the folder you want to use as the home folder for HealthSync. The home folder will be where all the data files will be saved.
For Windows: Open the home folder and right-click anywhere in the blue box, as shown in the image below. Click "Open in Terminal". A terminal window will pop up, then type in the command java -jar HealthSync.jar to run the application.
For MacOS: Right-click home folder. Select "New Terminal at folder". A terminal window will pop up, then type in the command java -jar HealthSync.jar to run the application.

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 patients.add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 : Adds a patient named John Doe to HealthSync.emergency 1 n/John Smith p/98788692 r/Father : Sets an emergency contact for the 1st patient.delete 3 : Deletes the 3rd patient shown in the current list.clear : Deletes all patients.exit : Exits the app.Refer to the Features below for details of each command.
HealthSync features a clean and intuitive graphical user interface (GUI) designed to help users efficiently manage patient records and appointments. The main interface consists of several key components:
File:
Help: Opens a link to the HealthSync User Guide, providing instructions on how to use the application.

⚠️ Warning: To ensure the UI updates consistently, click on a patient contact after making any changes to refresh the display. This ensures the interface reflects the latest data.
HealthSync operates using two primary modes, which determine the patient list displayed and the commands available:
You can switch between modes using the following commands:
list command to view the active patient list and switch to Normal Mode if you are not.listarchive command to view the archived patient list and switch to Archive Mode.The current mode significantly impacts which operations you can perform.
The following table clearly outlines which commands are functional in each mode:
| Command | Available in Normal Mode? | Available in Archive Mode? | Notes |
|---|---|---|---|
add | ✅ Yes | ❌ No | Adds active patients |
edit | ✅ Yes | ❌ No | Edits active patients |
delete | ✅ Yes | ❌ No | Deletes active patients permanently |
schedule | ✅ Yes | ❌ No | Schedules for active patients |
emergency | ✅ Yes | ❌ No | Sets emergency contacts for active patients |
tag (add/del) | ✅ Yes | ❌ No | Manages tags for active patients |
sort | ✅ Yes | ❌ No | Sorts the active patient list |
archive | ✅ Yes | ❌ No | Moves an active patient to the archive |
clear | ✅ Yes | ❌ No | Clears all active patients (archive is unaffected) |
undo | ✅ Yes | ❌ No | Applies mainly to Normal Mode changes |
redo | ✅ Yes | ❌ No | Applies mainly to Normal Mode changes |
unarchive | ❌ No | ✅ Yes | Moves an archived patient back to the active list |
list | ✅ Yes | ✅ Yes | Switches to/Refreshes Normal Mode |
listarchive | ✅ Yes | ✅ Yes | Switches to/Refreshes Archive Mode |
find | ✅ Yes | ✅ Yes | Finds within the currently displayed list |
help | ✅ Yes | ✅ Yes | Available in both modes |
exit | ✅ Yes | ✅ Yes | Available in both modes |
Note on undo/redo: These commands primarily revert changes made while in Normal Mode. Their effectiveness across mode switches or on actions performed in Archive Mode (like unarchive) might be limited. Refer to the specific command descriptions for details on undo/redo limitations.
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.
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.
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.
add, edit, and emergency commands.⚠️ Warning: For commands that require confirmation such as
edit,delete,exitorclear, entering anything other than 'Y' or 'N' (in either uppercase or lowercase) will result in the command being cancelled.
helpShows a message explaining how to access the help page.
Format: help
addAdds a patient to HealthSync.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS
Examples:
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01add n/Betsy Crowe e/betsycrowe@example.com a/Newgate Prison p/91234567⚠️ Warning: An entry is considered a duplicate if it shares the same name and phone number or the same name and email address.
Phone numbers must be exactly 8 digits and begin with 6, 8, or 9.
HealthSync permits entries with identical phone numbers or email addresses, such as in parent-child relationships, but their names must be different to avoid duplication.
scheduleSchedules an appointment for a patient in HealthSync.
Format:
schedule INDEX dd-MM-yyyy HH:mm
Examples:
schedule 1 12-04-2025 14:30schedule 2 05-06-2025 09:00⚠️ Warning: An appointment is considered a duplicate if it has the same date and time as an existing appointment. HealthSync only allows scheduling up to one upcoming appointment at a time.
listShows a list of all patients in HealthSync.
Format: list
sortSorts the list of patients by a specified field.
Format: sort FIELD
FIELD.name, appointmentExamples:
sort name Sorts patients in ascending alphabetical order by name. In the case of duplicate names, the most recently added patient will be listed first.
sort appointment Sorts patients by appointment date in lexicographical order, with the nearest upcoming appointment listed first. For patients with no appointments, the patients with appointments will be sorted first, followed by patients without appointments.

editEdits an existing patient in HealthSync.
Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS]
INDEX. The index refers to the index number shown in the displayed patient list. The index must be a positive integer 1, 2, 3, …Examples:
edit 1 p/91234567 e/johndoe@example.com Edits the phone number and email address of the 1st patient to be 91234567 and johndoe@example.com respectively.edit 2 n/Betsy Crower Edits the name of the 2nd patient to be Betsy Crower.emergencySets or updates the emergency contact for a patient in HealthSync.
Format: emergency INDEX n/NAME p/PHONE_NUMBER r/RELATIONSHIP
INDEX.Examples:
emergency 1 n/Alden Tan p/98765432 r/Boyfriend Sets the emergency contact for the 1st patient to be Alden Tan (Boyfriend) with phone number 98765432.emergency 2 n/Mary Goh p/88761432 r/Mother Sets the emergency contact for the 2nd patient to be Mary Goh (Mother) with phone number 88761432.findFinds patients whose names 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 YangExamples:
find John returns john and John Doefind david roy returns David Li, Roy Balakrishnan
find Charles returns Charles and charlesfind 81782349 returns the patient associated with the phone number 81782349.itscominghome@gmail.com returns the patient associated with the email itscominghome@gmail.comarchiveArchives the patient at the specified INDEX from the main patient list and adds them into the archive list.
Format: archive INDEX
INDEX.list command.Example:
list to view patients, then enter archive 2 to archive the 2nd patient in the main HealthSync patient list.⚠️ Warning: The
archivecommand is not available while viewing the archived patient list.
listarchiveShows a list of all patients being archived.
Format: listarchive
unarchiveRemove the specified patient from archive list and add them back to HealthSync.
Format: unarchive INDEX
INDEX from archive list.Example:
listarchive followed by unarchive 2 adds the 2nd patient in archive list back to HealthSync.⚠️ Warning: The
unarchivecommand is not available while viewing the displayed patient list.
deleteDeletes the specified patient from HealthSync.
Format: delete INDEX
INDEX.Examples:
list followed by delete 2 deletes the 2nd patient in HealthSync.find Betsy followed by delete 1 deletes the 1st patient in the results of the find command.clearClears all entries from HealthSync.
Format: clear
ta/ ti/ tc/Peanuts will not match peanutsbroken legFormat: tag <INDEX> ta/ALLERGY tag <INDEX> ti/INSURANCE tag <INDEX> tc/CONDITION
Examples:
tag 1 ta/Shellfish assigns an allergy tag 'Shellfish' to the patient at index 1.

tag 2 ti/prudential assigns an insurance tag 'prudential' to the patient at index 2.
tag 3 tc/diabetes assigns a medical condition tag 'diabetes' to the patient at index 3.
tag 4 ta/peanuts tc/headache ti/public assigns an allergy tag 'peanuts', a medical condition tag 'headache' and insurance tag 'public' to the patient at index 4.
⚠️ Warning: If the tag already exists for the patient, it will be treated as a duplicate and not added again.
td/Peanut will not match peanutPeanut will not match PeanutsFormat: tag <INDEX> td/TAGNAME
Examples:
tag 1 td/Shellfish deletes the tag 'Shellfish' from the patient at index 1.

tag 2 td/diabetes deletes the tag 'diabetes' from the patient at index 2.
undoReverts the last command that modified data.
Format: undo
⚠️ Warning:
- Cannot be used repeatedly to undo multiple actions.
- Cannot undo
undo,redo,help,list,findorexitcommands.- The undo command can only revert the most recent action and cannot be used repeatedly to undo multiple past actions.
- The right panel may not automatically update after using the undo command, requiring manual re-selection of the patient or another patient to view the reverted data.
Example:
undo (Restores the state before the last action)redoRestores the last undone command.
Format: redo
⚠️ Warning:
- Can only be used if
undowas previously executed.- Cannot redo commands that were not undone.
- Cannot be used repeatedly to redo multiple actions.
- The right panel may not automatically update after using the undo command, requiring manual re-selection of the patient or another patient to view the reverted data.
Example:
redo (Restores the last undone action)exitExits the program.
Format: exit
HealthSync data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
HealthSync 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.
⚠️ Warning: If your changes to the data file makes its format invalid, HealthSync 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 HealthSync 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 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 HealthSync home folder.
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.json file created by the application before running the application again.
If you minimise the Help Window and then run the help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimised, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.
When the listarchive command is executed with a selected patient, the details panel is not refreshed. To resolve this, click on a patient in the archive list to refresh. If the list is empty, switch back to the main patient list and ensure no patient is selected before running the command again.
Currently, appointments remain visible even after their date/time has passed. Automatic handling or deletion of past appointments is planned for a future release
Currently, when an administrator tries to schedule an appointment for the same patient within a 15-minute window of their previous appointment, the system blocks it—even if there are no conflicting appointments with others. A workaround is to first schedule the appointment at a completely different time, then reschedule it to the desired time.
A patient is uniquely identified by their NAME and PHONE_NUMBER or NAME and EMAIL. Patients with the same NAME and PHONE_NUMBER or NAME and EMAIL will be flagged as duplicates and cannot be added to HealthSync.
This also does not apply to emergency contacts because many patients can have the same emergency contact person.
| Parameter | Details | Example |
|---|---|---|
name/ NAME | This parameter accepts alphanumeric characters, the words s/o, d/o, spaces, and the following characters: -, @, /, '. The first character of this parameter needs to be alphanumeric. | Mason's James, Soumya d/o Ramesh, Kai Havertz @ Gallagher are examples of names you can provide in an add, edit. |
phone/PHONE_NUMBER | The phone number must be exactly 8 digits long and can only start with 6, 8, or 9. The field cannot be blank. | 91884567 and 88705469 are examples of phone numbers you can provide in an add, edit |
email/ EMAIL | HealthSync follows the valid email address format detailed here Emails should be of the format local-part@domain and adhere to the following constraints: 1. local-part should only contain alphanumeric characters and these special characters, excluding the parentheses, (+_.-). The local-part may not start or end with any special characters. 2. This is followed by a @ and then a domain name for domain. The domain name is made up of domain labels separated by periods. The domain name must:- end with a domain label at least 2 characters long - have each domain label start and end with alphanumeric characters - have each domain label consist of alphanumeric characters, separated only by hyphens, if any. | thomastuchel@yahoo.com.sg and bellechoy@gmail.com are examples of emails you can provide in an add, edit. |
address/ ADDRESS | Addresses can be any value, but they cannot be blank. | 987, Kensington Rd, 123465 and Block 666, Westminster Street 6, #08-111 are examples of addresses you can provide in an add, edit |
| Action | Format, Examples |
|---|---|
| Add Patient | add n/NAME p/PHONE e/EMAIL a/ADDRESSe.g., add n/John Doe p/98765432 e/johnd@example.com a/123 Street |
| Edit Patient | edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS]e.g., edit 2 n/John Smith p/91234567 |
| Delete Patient | delete INDEXe.g., delete 3 |
| Find Patient | find KEYWORD [MORE_KEYWORDS]e.g., find John |
| List Patients | list |
| Schedule Appointment | schedule INDEX [DD-MM-YYYY HH:MM]e.g, schedule 1 30-03-2026 12:00 |
| Sort Patients | sort FIELDe.g., sort name |
| Set Emergency Contact | emergency INDEX n/NAME p/PHONE r/RELATIONSHIPe.g., emergency 1 n/Jane Doe p/81234567 r/Mother |
| Archive Patient | archive INDEXe.g., archive 2 |
| List Archived Patients | listarchive |
| Unarchive Patient | unarchive INDEXe.g., unarchive 2 |
| Clear All Entries | clear |
| Undo Command | undo |
| Redo Command | redo |
| Add Allergy Tag | tag INDEX ta/ALLERGYe.g., tag 1 ta/peanuts |
| Add Condition Tag | tag INDEX tc/CONDITIONe.g., tag 1 tc/asthma |
| Add Insurance Tag | tag INDEX ti/INSURANCEe.g., tag 1 ti/medishield |
| Delete Tag | tag INDEX td/TAGNAMEe.g., tag 1 td/peanuts |
| Help | help |
| Exit | exit |
| Term | Details | Example |
|---|---|---|
| Alphanumeric | Characters that are letters or numbers. | 1, 2, 3, A, b, c are alphanumeric characters. |
| Command | Instructions for HealthSync to execute. | Features are commands that HealthSync can execute. list is one such command. |
| Command Line Interface (CLI) | An interface where users type commands. | The command line acts as a CLI in HealthSync. |
| Fast-typing | Users whose average typing speed exceeds 41.4 words per minute | A healthcare administrator with a typing speed of 49.4 words per minute |
| Graphical User Interface (GUI) | An interface using buttons, icons and visuals | HealthSync acts as a GUI. |
| JSON | JSON (JavaScript Object Notation) is a lightweight format for storing and exchanging data. | The data file used by HealthSync is in JSON format. |
| Keyword | The word you want to search for in a find command. | Searching for a patient named Eden Lampard could be done by using keywords Eden or Lampard. |
| Parameter | Required input for a command. | NAME and EMAIL are examples of parameters you have to provide in an add command.Terry John and terry@hotmail.com are possible examples to provide to the respective parameters. |