FreelanceBuddy is a powerful and efficient Command Line Interface (CLI) optimized app designed just for you!
It's your one-stop solution for managing multiple clients, staying on top of your financial reports and keeping track of your meetings with ease. If you are a freelancer who is looking to optimize your workflow, look no further! FreelanceBuddy might just be the buddy for you!
NEW USER? Check out our Quick Start guide or see what Features our application has!
NEED HELP? Take a look at the Commands section!
ADVANCED USER? Jump ahead to the Command Summary to get an overview of all the commands!
Navigate the User Guide by clicking on the headings below.
Beginner
Ensure you have Java 11 or above installed on your computer. Not sure how to do that? Check out the instructions here.
Download the latest FreelanceBuddy.jar from our releases page.
Copy the file to the folder you want to use as the home folder for your app. This is where all the saved and configuration data will be stored!
On a command terminal, cd into the home folder you chose earlier, and enter the following command to run the application:
java -jar FreelanceBuddy.jar
The FreelanceBuddy GUI should appear in a few seconds, as shown below.
The app comes with some sample data when you first run it!
Upon successful launch, you should see 3 tabs:
To find out what each tab does, check out our Features section!
At the top, there is a command box with the text "Enter command here...". This is where you type your commands. After typing each command, press Enter to execute it.
For certain commands, there may be a message indicating the success or failure of that command displayed in the console, located right under the command box.
Now that you've got FreelanceBuddy set up, here are some example commands to get you started!
add n/John Doe p/98765432 e/johnd@example.com : Adds a contact named John Doe to the contact list with phone number 98765432 and email johnd@example.com.
delete 3 : Deletes the 3rd contact shown in the contact list.
filter-n Alex : Filters all the contacts named Alex. You should see only the contacts that have Alex in their name.
list : Lists all the contacts in the contact list.
tab finance : Switches the displayed tab to the Finance tab.
add-e d/Chatbot a/200 : Adds a 200 dollar expense with the description Chatbot.
list expense : Lists only expenses in the finance list. One of them should be the expense you just added!
exit : Exits the app.
For more commands such as edit and filter commands, as well as detailed instructions on how to use each of them, check out the Commands section below!
Beginner
The FreelanceBuddy User Guide is built to be user-friendly for all levels of users!
Beginner : Sections for beginners or new users.
Advanced : Sections for advanced or experienced users.
We have included a mini table of contents to help you navigate each section quickly. An example is shown below:
Beginner
FreelanceBuddy is made up of three main systems. It has:
The following sections describe the data stored in FreelanceBuddy.
A contact in FreelanceBuddy represents a client, or a representative of a company that is using your services.
Each contact contains the following information:
| Type of information | Description | Required? |
|---|---|---|
| Name | The name of the client. | ✅ |
| Phone Number | The client's phone number. | ✅ |
| The client's email. | ✅ | |
| Address | The client's address. | ❌ |
| Company | The company that the client belongs to, or represents. | ❌ |
| Telegram Name | The client's Telegram username. | ❌ |
You can check out commands related to Contacts here. A summary of Contacts Tab commands can also be found here.
A finance entry in FreelanceBuddy could be either a Commission or an Expense. These are from the perspective of your personal finances.
A commission represents a payment made by a client to you, while an expense represents some cost incurred on either personal spending or on your projects.
For instance, if you received + 200 from a client for making a chatbot, that's a commission.
If you spent - 80 on a Photoshop subscription for your client's project, that's an expense.
Both commissions and expenses are considered finance entries so they are on the same list, but you can filter them using commands such as list commission or list expense!
Each finance entry contains the following information:
| Type of information | Description | Required for Commission? | Required for Expense? |
|---|---|---|---|
| Description | A description of the finance entry. | ✅ | ✅ |
| Client Name | The client associated with the finance entry, if any. Required for commissions only, as every commission must come from some client! Client must exist in your contact list at the time of creation! This is not checked after creation, so make sure your contacts are correct! | ✅ | ❌ |
| Amount | Amount of money associated with the entry, in dollars. | ✅ | ✅ |
| Time Due | The time by which the finance entry should be settled. By default, this is the creation time. | ❌ | ❌ |
You can check out commands related to Finance here. A summary of Finance Tab commands can also be found here.
Keep track of your daily schedule by creating events in FreelanceBuddy!
Be it your personal task, or appointments that are related to clients, you can input them into FreelanceBuddy and manage them seamlessly!
| Type of information | Description | Required? |
|---|---|---|
| Name | The name of the event. | ✅ |
| Start Time | The start time of the event | ✅ |
| End Time | The end time of the event | ✅ |
| Clients | The clients' tagged to this particular event. | ❌ |
| Location | The location that the event is taking place at | ❌ |
| Description | Additional remarks that are related to the event | ❌ |
You can check out commands related to Events here. A summary of Events Tab commands can also be found here.
Beginner
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.
Items in square brackets are optional.
e.g n/NAME [t/TELEGRAM_NAME] can be used as n/John Doe t/@johnnyd or as n/John Doe.
Items with … after them can be used any number of times.
e.g. [c/CLIENT]… can be used as c/Alex Yeoh, c/Alex Yeoh c/Bernice Yu or omitted entirely.
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.
Extraneous parameters for commands that do not take in parameters (such as help, exit and clear) will be ignored.
e.g. if the input is help 123, it will be interpreted as help.
Note that those with the same command may mean different things in different tabs.
e.g. filter-c in Contacts filters by company name, while filter-c in Events tab filters by client's name
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.
Beginner
This is a mini table of contents for general commands to help you navigate this section quickly.
Click on the commands or description to jump to the desired section!
| Command | Brief Description |
|---|---|
help | Opens help window with link to User Guide |
tab | Navigate between tabs |
exit | Exits the program |
clear | Clears all entries |
helpShows a link to this help page. Each tab will show the link specifically for the tab itself, and pressing F1 will show the link to this general User Guide as shown below.
Format: help
tabSwitch views to the specific tab.
Format: tab TAB_NAME
RESULT: Tab will be switched to
TAB_NAMEon GUI
Acceptable values for TAB_NAME:
contacts
events
finance
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
tab contacts | tab contact | Invalid command format Wrong spelling for "contacts" |
tab events | tab | Invalid Command format Missing TAB_NAME |
exitExits the program.
Format: exit
clearClears all entries from the Tab you are on.
Format: clear
RESULT: Address/Finance/Events book has been cleared!
Beginner
To view contacts tab, either click on the “contacts” button, or use the command tab contacts to switch tabs.
Note that the terms "contact", "person", and "client" are used interchangeably (all means the same thing).
This is a mini table of contents for general commands to help you navigate this section quickly.
Click on the commands or description to jump to the desired section!
listShows a list of all contacts in the Contacts tab.
Format: list
RESULT: Listed all persons
addAdds a new contact into the Contacts tab.
Format: add n/NAME p/PHONE_NUMBER e/EMAIL [a/ADDRESS] [c/COMPANY] [t/TELEGRAM_NAME]
RESULT: New Person Added:
NAME;PHONE;ADDRESS;COMPANY;TELEGRAM_NAME
[a/ADDRESS] should preferably be the company’s addressJohn Doe and john Doe is ok but another John Doe is strictly not allowedIf a client is updated or deleted after it is used to create a Finance entry or Event, changes will be reflected in the Contacts tab, but not in the Finance or Events tab
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
NAME | Text up to 256 characters Must be unique | Annie Dunkins 'Chewbaca' The 1st |
PHONE_NUMBER | Valid international phone number with an optional country code | 81234567 +65 81234567 A0u38niufd (phone number cannot contain alphabets) |
EMAIL | [emailID]@[domainName] Check email format here | anniedun.kins@gmail.com @gmail.com (no email ID) |
[ADDRESS] | Text up to 256 characters | 5 Science Park Dr, Singapore 118265 |
[COMPANY] | Text up to 256 characters | Shopee Sh0p33 |
[TELEGRAM_NAME] | Start with @, directly followed by only A-Z, a-z, 0-9, and/or underscores | @destiny_30 @destiny.30 (Telegram doesn't accept '.' in their username format) |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
add n/‘Chewbaca’ The 1st p/+659123139 e/chewie@gmail.com | add p/+659832139 e/chewie@gmail.com | Invalid command formatn/NAME is missing |
add n/John Doe p/+6234-34344 e/mysteriousdeer@gmail.com | add | Invalid command formatn/NAME, p/PHONE_NUMBER, and e/EMAIL is missing |
add n/Annie Dunkins p/+610489630614 e/ann1e@gmail.com a/Opera house c/NAB t/@anniebirds | add n/Annie Dunkins p/+610489630614 e/ann1e@gmail.com a/Opera house c/NAB c/Atlassian t/@anniebirds | Multiple values specified At most one [c/COMPANY] name is allowed |
editEdits an existing contact in the address book.
Format: edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [c/COMPANY] [t/TELEGRAM_NAME]
RESULT: Edited Person:
NAME;PHONE;ADDRESS;COMPANY;TELEGRAM_NAME
INDEX refers to the index number shown in the displayed contact list.PREFIX/ without specifying anything after. e.g., t/ If a client is updated or deleted after it is used to create a Finance entry or Event, changes will be reflected in the Contacts tab, but not in the Finance or Events tab
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
INDEX | Positive integers | (Assuming that there are 10 entries) 1 123 (not within range of indices) -1 (must be positive number) |
[NAME] | Text up to 256 characters Must be unique | Annie Dunkins 'Chewbaca' The 1st |
[PHONE_NUMBER] | Valid international phone number with an optional country code | 81234567 +6581234567 A0u38niufd (phone number cannot contain alphabets) |
[EMAIL] | [emailID]@[domainName] Check email format here | anniedun.kins@gmail.com @gmail.com (no email ID) |
[ADDRESS] | Text up to 256 characters | 5 Science Park Dr, Singapore 118265 |
[COMPANY] | Text up to 256 characters | Shopee Sh0p33 |
[TELEGRAM_NAME] | Start with @, directly followed by only A-Z, a-z, 0-9, and/or underscores | @destiny_30 @destiny.30 (Telegram doesn't accept '.' in their username format) |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
edit 1 n/‘Chewbaca’ The 1st | edit n/‘Chewbaca’ The 1st | Invalid Command FormatINDEX is missing |
edit 2 n/Betsy Crower t/ | edit 1 n/‘Chewbaca’ The 1st n/‘Chewbaca’ The 1st | Multiple Values Specified Multiple [n/NAME] is not allowed |
deleteDeletes the specified contact from the Contacts tab using INDEX.
Format: delete INDEX
RESULT: Deleted Person:
NAME;PHONE;ADDRESS;COMPANY;TELEGRAM_NAME
The INDEX refers to the index number shown in the displayed contact list.
If a client is updated or deleted after it is used to create a Finance entry or Event, changes will be reflected in the Contacts tab, but not in the Finance or Events tab
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
INDEX | Positive integers | (Assuming that there are 10 entries) 1 123 (not within range of indices) -1 (must be positive number) |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
delete 1 | delete | Invalid Command FormatINDEX is missing |
delete 2 | delete 2000 | Invalid IndexINDEX is out of range, choose an INDEX that is within the contact list |
delete 3 | delete -3delete 0 | Invalid Command Format Choose a positive INDEX that is within contact list |
NAME: Contacts Tab → filter-nShows a list of contacts whose NAME contains specific string
Format: filter-n KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched) persons listed!
NAMEAl will not match with Alex
aLeX→ 1. Alex Yeoh
Alex Roy→ 1. Alex Yeoh 2. Roy Balakrishnan
Roy Alex→ 1. Alex Yeoh 2. Roy Balakrishnan
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
KEYWORD | Text up to 256 characters | Hans 3 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-n Alex | filter-n | Invalid Command Format Please add a KEYWORD to search with |
filter-n aLEx rOy |
COMPANY: Contacts Tab → filter-cShows a list of contacts whose COMPANY contains specific string
Format: filter-c KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched) persons listed!
COMPANYGoo will not match with Google
FAPro NUS→ 1. Bernice Yu (FAPro) 2. Charlotte Oliveiro (NUS)
NUS FAPro→ 1. Bernice Yu (FAPro) 2. Charlotte Oliveiro (NUS)
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
KEYWORD | Text up to 256 characters | Google 3 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-c google | filter-c | Invalid Command Format Please add a KEYWORD to search with |
filter-c gOoGle nUs |
Beginner
To view finance tab, either click on the “finance” button, or use the command tab finance to switch tabs.
This is a mini table of contents for general commands to help you navigate this section quickly.
Click on the commands or description to jump to the desired section!
listShows a list of all finances/commissions/expenses in the Finance Tab.
Format: list [TYPE]
RESULT: Listed all finances/commissions/expenses
commission is given as the TYPE, only commissions are listed
expense is given as the TYPE, only expenses are listed
TYPE is omitted, all finance entries are listed
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
TYPE | Either of the following:commissionexpense | commission expense com expesne |
add-cAdds a commission to the Finance tab. Once added, the AMOUNT will be highlighted in green to indicate that
the entry is a commission.
e.g., + 100
Format: add-c d/DESCRIPTION a/AMOUNT c/CLIENT [t/TIME]
RESULT: New commission added: Amount:
AMOUNT; Client:CLIENT; Description:DESCRIPTION; Time:TIME
DESCRIPTION is used to provide details about the commission
[t/TIME] will be the time at which the command is entered
For CLIENT, the name MUST EXIST in your Contacts. Note that this is case-sensitive.
Refer to the filter-n command within the Contacts tab to search whether the contact exists.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
DESCRIPTION | Text up to 256 characters, cannot be empty | This is an example description |
AMOUNT | Positive numbers up to two decimal points | 5.60 56908 $50730 (not a valid number) -1 or 0 (not a positive number) 556.9834 (too many decimal places) |
CLIENT | Text up to 256 characters | Annie Dun Samuel Dames |
[TIME] | Refer to accepted Date-time formats |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
add-c c/John Doe a/800 d/Wedding Photoshoot t/tmr | add-c c/John Doe a/$800 d/Wedding Photoshoot t/tmr | Invalid Parameter $800 is not a valid parameter, as a/AMOUNT only takes positive numeric values |
add-c c/Steph Evans a/300 d/UI design for NinjaVan | add-c c/Steph Evans d/UI design for NinjaVan | Invalid Command Format The a/AMOUNT parameter is mandatory and should not be omitted |
add-c a/100 c/Betsy Crower d/Wedding Photoshoot(Betsy Crower is not in the contact list) | Client Does Not Existc/CLIENT 'Betsy Crower' does not exist in your contacts |
add-eAdds an expense to the Finance tab. Once added, the AMOUNT will be highlighted in red to indicate that
the entry is an expense.
e.g., - 100
Format: add-e d/DESCRIPTION a/AMOUNT [c/CLIENT] [t/TIME]
RESULT: New expense added: Amount:
AMOUNT; Client:CLIENT; Description:DESCRIPTION; Time:TIME
DESCRIPTION is used to provide details about the expense
[t/TIME] will be the time at which the command is entered
For CLIENT, the name MUST EXIST in your Contacts. Note that this is case-sensitive.
Refer to the filter-n command within the Contacts tab to search whether the contact exists.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
DESCRIPTION | Text up to 256 characters, cannot be empty | This is an example description |
AMOUNT | Positive numbers up to two decimal points | 5.60 1902.1 56908 $50730 (not a valid number) -1 or 0 (not a positive number) 556.9834 (too many decimal places) |
[CLIENT] | Text up to 256 characters | Annie Dun Samuel Dames |
[TIME] | Refer to accepted Date-time formats |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
add-e c/John Doe a/200 d/Dinner t/tmr | add-e c/John Doe a/$200 d/Dinner t/tmr | Invalid Parameter $200 is not a valid parameter, as a/AMOUNT only takes positive numeric values |
add-e a/100 d/Adobe Photoshop | add-e d/Adobe Photoshop | Invalid Format The a/AMOUNT parameter is mandatory and should not be omitted |
add-e a/100 e/Betsy Crower d/Adobe Photoshop(Betsy Crower is not in the contact list) | Client Does Not Exist[c/CLIENT] 'Betsy Crower' does not exist in your contacts |
editEdits an existing finance entry in the Finance tab.
Format: edit INDEX [d/DESCRIPTION] [a/AMOUNT] [c/CLIENT] [t/TIME]
INDEX refers to the index number shown in the displayed finance list.PREFIX/ without specifying anything after. e.g., d/ CLIENT from expense, but not from commissionsFor CLIENT, the name MUST EXIST in your Contacts. Note that this is case-sensitive.
Refer to the filter-n command within the Contacts tab to search whether the contact exists.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
INDEX | Positive integer within range of indices in finance list | (Assuming that there are 10 entries) 2 10 13 (not within range of indices) -1 or 0 (not a positive number) 56.9834 (not an integer) |
[DESCRIPTION] | Text up to 256 characters, cannot be empty | This is an example description |
[AMOUNT] | Positive numbers up to two decimal points | 5.60 1902.1 56908 $50730 (not a valid number) -1 or 0 (not a positive number) 556.9834 (too many decimal places) |
[CLIENT] | Text up to 256 characters | Annie Dun Samuel Dames |
[TIME] | Refer to accepted Date-time formats |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
edit 1 c/ a/20 d/Lunch t/tmr (editing an expense) | edit 1 c/ a/50 d/Painting t/tmr (editing a commission) | Unable to Remove Client You can't remove [c/CLIENT] from commissions |
edit 1 d/Adobe Photoshop (editing a commission) | edit 1 c/Betsy Crower(Betsy Crower is not in the contact list) | Client Does Not Exist[c/CLIENT] 'Betsy Crower' does not exist in your contacts |
deleteDeletes the specified Finance entry (expense or commission) from the Finance tab using INDEX.
Format: delete INDEX
RESULT: Deleted Finance Entry: Amount:
AMOUNT; Client:CLIENT; Description:DESCRIPTION; Time:TIME
The INDEX refers to the index number shown in the displayed finance list.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
INDEX | Positive integer within range of indices in Finance list listed | Assuming there are 10 entries: 2 10 14 -1 2.4 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
delete 2 | delete -1 | Invalid Command Format Choose a positive INDEX that is within finance list |
delete 4 | delete one | Invalid Command Format "one" is not a valid parameter, as INDEX only takes positive numeric values |
delete 150 (while there are less than 150 entries in the finance list) | Invalid IndexINDEX is out of range, choose an INDEX that is within the finance list |
CLIENT: Finance Tab → filter-cFilters the finances in the Finance tab by the given client. Finds all clients whose names contain any of the specified keywords and displays them as a list with index numbers.
Format: filter-c KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched finance) finances listed!
CLIENT, see filter-n in Contacts Tab for more detailsAl will not match with Alex
aLeX→ 1. Alex Yeoh
Alex Roy→ 1. Alex Yeoh 2. Roy Balakrishnan
Roy Alex→ 1. Alex Yeoh 2. Roy Balakrishnan
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
KEYWORD | Text up to 256 characters | John Doe 3 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-c John Doe | filter-c | Invalid Command Format A KEYWORD is required for the filter |
filter-c JOhN |
TIME FRAME: Finance Tab → filter-tFilters the finances in the Finance tab by the given time frame. Finds all finances whose time due falls within the given time frame.
Format: filter-t s/START_TIME e/END_TIME
RESULT: (Number of matched finance) finances listed!
Read this for more information about editing START_TIME and END_TIME
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
s/START_TIME / e/END_TIME | Refer to the accepted Date-time formats |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-t s/tmr e/next week | filter-t s/next week e/tmr | Invalid Date-Time Duratione/END_TIME must be chronologically after s/START_TIME |
filter-t s/2023-10-10 e/2023-10-11 | filter-t | Invalid Command Format Missing s/START_TIME and e/END_TIME |
summaryReturns a summary of the finances in the Finance tab for the given client.
Format: summary CLIENT
RESULT: You have earned/lost [Total Amount] from/due to
CLIENT
The summary command provides the following details with regard to a CLIENT :
CLIENT name must match the exact CLIENT name (case-sensitive) that is found in the Contacts tab. CLIENT exists in contacts, so even if you have remaining finance entries linked to a specific CLIENT, if you delete the CLIENT in the contacts, then the summary command won't work| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
CLIENT | Text up to 256 characters | John Doe 'Chewbacca' the 1st |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
summary John Doe | summary | Invalid Command Format Missing CLIENT name |
summary John(John is not in the contact list) | Client Does Not ExistCLIENT 'John' does not exist in your contacts |
Beginner
To view events tab, either click on the “events” button, or use the command tab events to switch tabs.
By default, only upcoming events will be shown. To view all events, use the list-all command.
This is a mini table of contents for general commands to help you navigate this section quickly.
Click on the commands or description to jump to the desired section!
listShows a list of all upcoming events in the Events tab.
Format: list
RESULT: Listed all upcoming events
list-allShows a list of all events, including past and future, in the Events tab.
Format: list-all
RESULT: Listed all events
addAdds a new event into the Events tab.
Format: add n/NAME s/TIMESTART e/TIMEEND [c/CLIENT]… [l/LOCATION] [d/DESCRIPTION]
RESULT: New event added:
NAME; Start:TIMESTART; End:TIMEEND; Clients:CLIENTS…; Location:LOCATION; Description:DESCRIPTION
NAME refers to the title of the event.TIMESTART and TIMEEND refer to starting and ending times of the event respectively.c/David c/Richard c/Anna)NAME, TIMESTART and TIMEENDFor CLIENT, the name MUST EXIST in your Contacts. Note that this is case-sensitive.
Refer to the filter-n command within the Contacts tab to search whether the contact exists.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
NAME | Text up to 256 characters | Annie Dunkins 'Chewbaca' The 1st |
TIMESTART / TIMEEND | Refer to the accepted Date-time formats | |
[CLIENT] | Text up to 256 characters | John Doe Ranchoddas Shamaldas Chanchad |
[LOCATION] | Text up to 256 characters | 50 Cuscaden Rd, #02-01 Hpl House, Singapore 249724 My House |
[DESCRIPTION] | Text up to 256 characters | Bring notes for Davidson Concerning new commission |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
add n/Tennis s/31-09-2023 19:30 e/31-09-2023 21:30 l/20 Lower Kent Ridge Road, 119080 | add s/31-09-2023 19:30 e/31-09-2023 21:30 l/20 Lower Kent Ridge Road, 119080 | Invalid Command Formatn/NAME is missing |
add n/Meetup s/2 hrs from now e/3 hrs from now c/Alex Yeoh c/Bernice Yu | add n/Meetup s/21022023130pm e/21-02-2023230pm c/Alex Yeoh c/Bernice Yu | Invalid Date-Time Format Date-time Format is incorrect for s/TIMESTART and/or e/TIMEEND |
add n/Gym s/21-02-2023 13:30 e/21-02-2023 14:30 | add n/Gym s/21-02-2023 13:30 e/21-02-2023 12:30 | Invalid Date-Time Duratione/TIMEEND must be chronologically after s/TIMESTART |
editEdits an existing event in the Events tab.
Format: edit INDEX [n/NAME] [s/TIMESTART] [e/TIMEEND] [c/CLIENT]… [l/LOCATION] [d/DESCRIPTION]
RESULT:
Edited Event:
NAME; Start:TIMESTART; End:TIMEEND; Clients:CLIENTS…; Location:LOCATION; Description:DESCRIPTION
INDEX refers to the index number shown in the displayed event list.PREFIX/ without specifying anything after. e.g., d/ TIMESTART and TIMEENDFor CLIENT, the name MUST EXIST in your Contacts. Note that this is case-sensitive.
Refer to the filter-n command within the Contacts tab to search whether the contact exists.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
[NAME] | Text up to 256 characters Must be unique | Annie Dunkins 'Chewbaca' The 1st |
[TIMESTART] / [TIMEEND] | Refer to the accepted Date-time formats | |
[CLIENT] | Text up to 256 characters | John Doe Ranchoddas Shamaldas Chanchad |
[LOCATION] | Text up to 256 characters | 50 Cuscaden Rd, #02-01 Hpl House, Singapore 249724 My House |
[DESCRIPTION] | Text up to 256 characters | Bring notes for Davidson Concerning new commission |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
edit 1 n/Tennis | edit 1 s/31-09-2023 19:30 e/31-09-2023 16:00 | Invalid Date-Time Duration[e/TIMEEND] must be chronologically after [s/TIMESTART] |
edit 2 n/Meetup s/01-12-2023 2pm e/01-12-2023 3pm c/Alex Yeoh c/Bernice Yu | edit 1 c/Potato Client(If "Potato Client" does not exists in Contacts) | Client Does Not Exist Client 'Potato Client' does not exist in your contacts |
deleteDeletes the specified event from the Events tab using INDEX.
Format: delete INDEX
RESULT: Deleted Event:
NAME; Start:TIMESTART; End:TIMEEND; Clients:CLIENTS…; Location:LOCATION; Description:DESCRIPTION
The INDEX refers to the index number shown in the displayed event list.
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
INDEX | Positive integer within range of indices in Event list listed | Assuming there are 10 entries: 2 10 14 -1 2.4 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
delete 2 | delete -1 | Invalid Command Format Choose a positive INDEX that is within event list |
delete 4 | delete one | Invalid Command Format "one" is not a valid parameter, as INDEX only takes positive numeric values |
delete 150 (while there are less than 150 entries in the event list) | Invalid IndexINDEX is out of range, choose an INDEX that is within the event list |
CLIENT: Events Tab → filter-cShows a list of events that contains client's names who matches KEYWORD.
Format: filter-c KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched events) events listed!
CLIENT, see filter-n in Contacts Tab for more detailsAl will not match with Alex
aLeX→ 1. Alex Yeoh
Alex Roy→ 1. Alex Yeoh 2. Roy Balakrishnan
Roy Alex→ 1. Alex Yeoh 2. Roy Balakrishnan
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
KEYWORD | Text up to 256 characters | Hans 3 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-c alex | filter-c | Invalid Command Format Please add a KEYWORD to search with |
filter-c aLeX rOy |
NAME: Events Tab → filter-nFilters events by their name in the Events tab.
Format: filter-n KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched events) events listed!
NAMECon will not match with Conference
cOnFerEnce→ 1. Conference with Bernice
Conference Meeting→ 1. Conference with Bernice 2. Meeting with Alex
Meeting Conference→ 1. Conference with Bernice 2. Meeting with Alex
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
KEYWORD | Text up to 256 characters | Meeting 3 |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-n meeting | filter-n | Invalid Command Format Please add a KEYWORD to search with |
filter-n cOnFerence |
TIME: Events Tab → filter-tFilters events by time in the Events tab.
Format: filter-t TIMESTAMP
RESULT: (Number of matched events) events listed!
All events with TIMESTART before the time specified in TIMESTAMP will be returned. e.g. tmr noon will return all
events starting before tomorrow noon (12 pm)
| Parameter | Format | Examples (Valid/Invalid) |
|---|---|---|
TIMESTAMP | Refer to the accepted accepted Date-time formats |
| Positive Examples | Negative Examples | Reason for Error |
|---|---|---|
filter-t next week | filter-t my phone | Invalid Date-Time Format Date-time Format is incorrect for TIMESTAMP |
filter-t 23-01-2024 | filter-t | Invalid Command Format Please add a TIMESTAMP to search with |
Beginner
AddressBook, EventsBook, and FinanceBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
Advanced
The following data are saved automatically as a JSON file. Advanced users are welcome to update data directly by editing that data file.
[JAR file location]/data/addressbook.json[JAR file location]/data/eventsbook.json[JAR file location]/data/financebook.jsonFreelanceBuddy currently does not support client validation on loading data files. If you change client details on the FinanceBook and EventsBook, they may not correspond to client details on AddressBook! Here is our explanation.
Advanced
FreelanceBuddy stores its configurations in two files; By default they are config.json and preferences.json.
While these files come with defaults that are tried and tested to be effective for everyday use, feel free to change some of their values.
For config.json:
logLevel : The logging level of the application. Default: INFOuserPrefsFilePath : Determines the file that is used to read the user's preferences from. Default: preferences.jsonFor the preferences file (which depends on the userPrefsFilePath in config.json):
guiSettings.windowWidth : The width of FreelanceBuddy's GUI window. Default: 740.0guiSettings.windowHeight : The height of FreelanceBuddy's GUI window. Default: 600.0guiSettings.windowCoordinates : The coordinates at which FreelanceBuddy is located on your display.addressBookFilePath : The filepath of the AddressBook data file. Default: data/addressbook.jsoneventsFilePath : The filepath of the Events data file. Default: data/eventsbook.jsonfinanceFilePath : The filepath of the Finance data file. Default: data/financebook.jsonFor the CLI experience to be optimised, FreelanceBuddy accepts a variety of date-time formats so that you can type in your date-time inputs quickly and without hassle. Pick and choose any of your preferred format at your convenience.
As this section is relatively long, we have provided a mini table of content for quick navigation.
TIMESTART TIMEEND in EventsBeginner
Below is a table of accepted numbered date formats, these represent <DATE> only.
| Format | Examples | Remarks |
|---|---|---|
d/M/yyyy | 1/1/2023, 01/12/2023 | |
d-M-yyyy | 1-1-2023, 01-12-2023 | |
d/M/yy | 1/1/23, 01/12/12 | |
d-M-yy | 1-1-23, 01-12-12 | |
MMM d yyyy | Jan 1 2023, jan 1 2023 | Not case sensitive |
MMM d yy | Jan 1 23, jan 1 23 | Not case sensitive |
d MMM yyyy | 1 Jan 2023, 1 jan 2023 | Not case sensitive |
d MMM yy | Jan 1 2023, 1 jan 23 | Not case sensitive |
yyyy/M/d | 2023/1/1, 2023/12/01 | |
yy/M/d | 23/1/1, 23/12/01 | |
yyyy-M-d | 2023-1-1, 2023-12-01 | |
yy-M-d | 23-1-1, 23-12-01 | |
d/M | 1/1, 01/12 | |
d-M | 1-1, 01-12 | |
MMM d | Jan 1, jan 1 | Not case sensitive |
d MMM | 1 Jan, jan 1 | Not case sensitive |
🏷 Note inputs without year will be assumed to be the current year.
Beginner
Below is a table of accepted natural language date formats, these represent <DATE> only.
🏷 Note: all inputs are not case-sensitive.
| Format | Examples | Remarks |
|---|---|---|
todaytdy | - | Date of the current date |
tomorrowtmr | - | Date of the next day with reference to current date |
yesterdayytd | - | Date of the previous day with reference to current date |
next <day/week/month/year> | next day | Date of the next specified timeframe with reference to current date |
next <DayOfWeek> | next Mon,next Sunday | Date of the next occurrence of the day of week specified Day of the week can be short-form (3 letters). |
in <number> <day/week/month/year> | in 5 days,in 1 week | Date of next specified timeframe with reference to current date |
Beginner
Below is a table of accepted numbered time formats, these represent <TIME> only.
🏷 Note all inputs are not case-sensitive.
| Format | Examples | Remarks |
|---|---|---|
HHmm | 1800, 0600 | |
HH:mm | 18:00, 06:00 | |
HH.mm | 18.00, 06.00 | |
h a | 6 pm, 6 PM | |
ha | 6pm, 6PM | |
h:mm a | 6:00 PM, 6:00 am | Not case sensitive |
h:mma | 6:00pm, 6:00AM | Not case sensitive |
h.mm a | 6.00 pm, 6.00 AM | Not case sensitive |
h.mma | 6.00PM, 6.00am | Not case sensitive |
Beginner
Below is a table of accepted natural language time formats, these represent <TIME> only.
| Format | Examples | Remarks |
|---|---|---|
noon | - | 12:00 |
midnight | - | 00:00 |
Beginner
Below is a table of accepted natural language time formats, these represent <DATE> AND <TIME>!
Note for all inputs,
- they are not case-sensitive
- they represent both a date and time
| Format | Examples | Remarks |
|---|---|---|
now | - | Date and time of instance that the command runs |
<number> <time_unit> from now | 2 days from now1 hr from now | Date and time from the specified timeframe of the instant the command runs |
in <number> <hour/minute> | in 30 minsin 1 hour | Date and time from the specified timeframe of the instant the command runs |
Beginner
In most cases, you may use date-only or time-only inputs, otherwise you may wish to combine the two.
A <DATE> <TIME> combination can be acheived in the following ways:
| Method | Example |
|---|---|
Using <DATE> <TIME> inputs | now5 mins from nowin 2 hours |
Combining any valid<DATE> and <TIME> inputs together | 1-1-23 18:001 Jan 23 18:00tmr 6pmnext Sunday 6pm |
🏷 TO NOTE
<DATE>must always come before<TIME>
Beginner
Relevant for:
s/TIMESTART and e/TIMEEND parameters.filter-t method in Finance to get Finance record within specified timeframe.🏷 TO NOTE
There are several rules and assumptions that FreelanceBuddy date time reader makes use of that would be useful to understand to optimise your user experience.
s/ and e/
<DATE>and<TIME>placeholder represents the<DATE>and<TIME>formats that are shown above.
s/ | e/ |
|---|---|
<DATE> <TIME> | <DATE> <TIME> |
<DATE> <TIME> | <TIME> |
<DATE> | <DATE> |
<TIME> | <TIME> |
<TIME> | <DATE> <TIME> |
<DATE> <TIME> | <DATE> |
<DATE> | <DATE> <TIME> |
Beginner In general, just use a
s/ande/combination that makes sense to you. A format that will always work is to state your date and times explicitly such as,1 Jan 2023 17:00.
General Rules:
<DATE> to <TIME> or vice versa.e/ cannnot be earlier than s/.Advanced
FreelanceBuddy streamlines the input process for the s/ and e/ parameters.
For instance, in the case of same-day events, you'll only need to provide a date in the s/ input field.
FreelanceBuddy will intelligently use this date as both the start and end date, eliminating the need for redundant input in the e/ field.
This feature hopes to enhance efficiency and simplify the event creation process, creating a more user-friendly experience for you.
Here is a list of all Date-time Combination Assumptions:
| Input | Assumptions |
|---|---|
s/<DATE> <TIME> e/<TIME> | End date will be taken from the start date input. Start time must be before end time. Example: s/tmr 6pm e/8pm sets the event for tomorrow, 6-8pm. |
s/<DATE> e/<DATE> | Time of start date will be set to 00:00, while end date will be set to 23:59. Example: s/1 Jan 23 e/1 Jan 23 sets the event from 1st Jan 2023, 12am to 11:59pm |
s/<TIME> e/<TIME> | Date of both start and end time will be set to the next occurrence of such a duration. Example: (Assume current time is 12pm) s/9am e/10am sets the event date to the next day as this duration has passed.s/10am e/5pm sets the event date to the current day as this duration has not yet passed. |
s/<TIME> e/<DATE> <TIME> | Start date will be set to the date of the next occurrence of the specified time. Example: (Assume current time is 12pm) s/9am e/tmr 10am sets the event for tomorrow, 9-10am.s/5pm e/tmr 5am sets the event from today, 5pm to tomorrow 5am. |
s/<DATE> <TIME> e/<DATE> | End date time will be set to 23:59. Example: s/1 Jan 2023 9am e/1 Jan sets the event for 1st Jan 2023, 9am to 11:59pm. |
s/<DATE> e/<DATE> <TIME> | Start date time will be set to 00:00. Example: s/1 Jan 2023 e/ 1 Jan 2023 5pm sets the event for 1st Jan 2023, 12am to 5pm. |
Beginner
Relevant for:
t/TIMEDUE parameterfilter-t method in Events to get relevant Events that are from now to the specified time.You might want to consider the assumptions made for either <DATE> or <TIME> if either is left blank.
| Input | Assumptions |
|---|---|
<DATE> <TIME> | As specified |
<DATE> | Time is set to 12am of the specified date |
<TIME> | Date is set to next occurrence of specified time |
TIMESTART TIMEEND in EventsAdvanced
Context
When editing events TIMESTART TIMEEND you may encounter the issue where keying in a valid <DATE> <TIME> is blocked.
An example (Assume current date is 12-11-2023 and the time is 5pm):
Even if the start time appears to be before the stored end time.
Problem
s/ input is assumed to be for the next day.BEFORE EDITING
Sample Event
Start: 12-11-2023 16:00
End: 12-11-2023 18:00
Current date time: 12-11-2023 17:00, and you enter edit 1 s/3pm.
This will register the start time to tomorrow (13-11-2023 15:00) instead of today (12-11-2023 15:00).
AFTER EDITING
Sample Event
Start: 13-11-2023 15:00
End: 12-11-2023 18:00Note that now start date time is LATER than end date time, which is clearly not allowed.
The problem extends beyond this specific example and can happen when modifying TIMEEND only as well.
Solution
s/13-11-2023 3pm instead of s/3pm)Explanation
When modifying only one input, FreelanceBuddy will assume the other unmodified value to be the <DATE> <TIME> as shown by the UI. For the example above, the modified TIMESTART TIMEEND input is read as such:
s/<modified_TIME> e/<modified_DATE> <unmodified_TIME>
Using the Date-time Combinations Assumptions the TIMESTART will be determined to be for 13-11-2023 3pm. Hence, FreelanceBuddy blocks the modification.
Hence, it is important to understand that when modifying either TIMESTART or TIMEEND, the new input will be parsed with other unmodified <DATE> <TIME> value, with the assumptions described here
A GOOD PRACTICE ✅
Modify TIMESTART and TIMEEND inputs together! If you understood how to use date-time Formats for Duration when adding events or filtering finance inputs by timeframe, it works the same way when modifying both inputs together for an event.
Advanced
A quick overview of all the commands and their formats.
Click on the action to jump to the desired section!
Commands that applies to ALL tabs
| Action | Format, Examples |
|---|---|
List all contacts | list |
Add | add n/NAME p/PHONE_NUMBER e/EMAIL [a/ADDRESS] [c/COMPANY] [t/TELEGRAM_NAME] e.g., add n/‘Chewbaca’ The 1st p/+659123139 e/chewie@gmail.com |
Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [c/COMPANY] [t/TELEGRAM_NAME] e.g., edit 2 n/Betsy Crower t/ |
Delete | delete INDEX e.g., delete 1 |
Filter by Name | filter-n KEYWORD [MORE_KEYWORDS]… e.g., filter-n David Li |
Filter by Company | filter-c KEYWORD [MORE_KEYWORDS]… e.g., filter-c Google |
| Action | Format, Examples |
|---|---|
List | list [TYPE]e.g., list commission |
Add Commission | add-c d/DESCRIPTION a/AMOUNT c/CLIENT [t/TIME] e.g., add-c n/Betsy Crower a/800 d/UI design for NinjaVan t/tmr |
Add Expense | add-e d/DESCRIPTION a/AMOUNT [c/CLIENT] [t/TIME] e.g., add-e n/Betsy Crower a/100 d/Adobe Photoshop subscription t/now |
Edit | edit INDEX [d/DESCRIPTION] [a/AMOUNT] [c/CLIENT] [t/TIME] e.g., edit 1 d/Photoshop subscription a/300 |
Delete | delete INDEXe.g., delete 3 |
Filter by Client Name | filter-c KEYWORDe.g., filter-c John |
Filter by Time Frame | filter-t s/START_TIME e/END_TIMEe.g., filter-t s/tdy e/next week |
Summary | summary CLIENTe.g., summary John Doe |
| Action | Format, Examples |
|---|---|
List Upcoming | list |
List All | list-alle.g., list-all |
Add | add n/NAME s/TIMESTART e/TIMEEND [c/CLIENT] [l/LOCATION] [d/DESCRIPTION] e.g., add n/Tennis s/31-09-2023 19:30 e/31-09-2023 21:30 l/20 Lower Kent Ridge Road, 119080 |
Edit | edit INDEX [n/NAME] [s/TIMESTART] [e/TIMEEND] [c/CLIENT]… [l/LOCATION] [d/DESCRIPTION] e.g., edit 1 n/Tennis |
Delete | delete INDEXe.g., delete 3 |
Filter by Client Name | filter-c KEYWORDe.g., filter-c Alex |
Filter by Event Name | filter-n KEYWORDe.g., filter-n birthday |
Filter by Time | filter-t TIMESTAMPe.g., filter-t next week |
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 FreelanceBuddy home folder.
Q: My GUI seems to be appearing off-screen, why does this happen and how do I fix this?
A: This problem occurs after you have moved the application to a secondary screen when using multiple screens, and then switched to using only the primary screen. To fix this, simply delete the preferences.json file created by the application before running the application again.
Q: Why is it that after I update or delete a contact, the changes are not displayed on the Finance or Event tabs?
A: FreelanceBuddy currently does not support propagation of changes from Contact Tab to the other tabs. Moreover, there is often a need for users to keep track of old transactions or appointments with clients that may not exist anymore, or exist as a different entity in the database.
Q: Why does the input not accept $ for finance / Why is the $ sign not shown in Finance Tab?
A: We don't want to discriminate other types of currencies that we may have missed out
Still having issues? Please email us at freelancebuddy@gmail.com