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 |
help
Shows 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
tab
Switch views to the specific tab.
Format: tab TAB_NAME
RESULT: Tab will be switched to
TAB_NAME
on 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 |
exit
Exits the program.
Format: exit
clear
Clears 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!
list
Shows a list of all contacts in the Contacts tab.
Format: list
RESULT: Listed all persons
add
Adds 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 |
edit
Edits 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 |
delete
Deletes 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 -3 delete 0 | Invalid Command Format Choose a positive INDEX that is within contact list |
NAME
: Contacts Tab → filter-n
Shows a list of contacts whose NAME
contains specific string
Format: filter-n KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched) persons listed!
NAME
Al
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-c
Shows a list of contacts whose COMPANY
contains specific string
Format: filter-c KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched) persons listed!
COMPANY
Goo
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!
list
Shows 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:commission expense | commission expense com expesne |
add-c
Adds 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-e
Adds 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 |
edit
Edits 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 |
delete
Deletes 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-c
Filters 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-t
Filters 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 |
summary
Returns 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 workParameter | 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!
list
Shows a list of all upcoming events in the Events tab.
Format: list
RESULT: Listed all upcoming events
list-all
Shows a list of all events, including past and future, in the Events tab.
Format: list-all
RESULT: Listed all events
add
Adds 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 TIMEEND
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) |
---|---|---|
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 |
edit
Edits 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 TIMEEND
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) |
---|---|---|
[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 |
delete
Deletes 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-c
Shows 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-n
Filters events by their name in the Events tab.
Format: filter-n KEYWORD [MORE_KEYWORDS]...
RESULT: (Number of matched events) events listed!
NAME
Con
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-t
Filters 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.json
FreelanceBuddy 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: INFO
userPrefsFilePath
: Determines the file that is used to read the user's preferences from. Default: preferences.json
For the preferences file (which depends on the userPrefsFilePath
in config.json
):
guiSettings.windowWidth
: The width of FreelanceBuddy's GUI window. Default: 740.0
guiSettings.windowHeight
: The height of FreelanceBuddy's GUI window. Default: 600.0
guiSettings.windowCoordinates
: The coordinates at which FreelanceBuddy is located on your display.addressBookFilePath
: The filepath of the AddressBook data file. Default: data/addressbook.json
eventsFilePath
: The filepath of the Events data file. Default: data/eventsbook.json
financeFilePath
: The filepath of the Finance data file. Default: data/financebook.json
For 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 |
---|---|---|
today tdy | - | Date of the current date |
tomorrow tmr | - | Date of the next day with reference to current date |
yesterday ytd | - | 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 now 1 hr from now | Date and time from the specified timeframe of the instant the command runs |
in <number> <hour/minute> | in 30 mins in 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 | now 5 mins from now in 2 hours |
Combining any valid<DATE> and <TIME> inputs together | 1-1-23 18:00 1 Jan 23 18:00 tmr 6pm next 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 INDEX e.g., delete 3 |
Filter by Client Name | filter-c KEYWORD e.g., filter-c John |
Filter by Time Frame | filter-t s/START_TIME e/END_TIME e.g., filter-t s/tdy e/next week |
Summary | summary CLIENT e.g., summary John Doe |
Action | Format, Examples |
---|---|
List Upcoming | list |
List All | list-all e.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 INDEX e.g., delete 3 |
Filter by Client Name | filter-c KEYWORD e.g., filter-c Alex |
Filter by Event Name | filter-n KEYWORD e.g., filter-n birthday |
Filter by Time | filter-t TIMESTAMP e.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