FreelanceBuddy User Guide

Getting Started

Attention, full-time freelancers!

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!

Table of Contents


Navigate the User Guide by clicking on the headings below.

Quick Start


Beginner

  1. Ensure you have Java 11 or above installed on your computer. Not sure how to do that? Check out the instructions here.

  2. Download the latest FreelanceBuddy.jar from our releases page.

  3. 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!

  4. 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!

    Ui

  5. Upon successful launch, you should see 3 tabs:

    • Contacts (This tab is opened by default)
    • Finance
    • Events

    To find out what each tab does, check out our Features section!

  6. 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.

  7. 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!

  1. 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.

  2. delete 3 : Deletes the 3rd contact shown in the contact list.

  3. filter-n Alex : Filters all the contacts named Alex. You should see only the contacts that have Alex in their name.

  4. list : Lists all the contacts in the contact list.

  5. tab finance : Switches the displayed tab to the Finance tab.

  6. add-e d/Chatbot a/200 : Adds a 200 dollar expense with the description Chatbot.

  7. list expense : Lists only expenses in the finance list. One of them should be the expense you just added!

  8. 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!

↑ Back to Table of Contents


Beginner

The FreelanceBuddy User Guide is built to be user-friendly for all levels of users!

Conventions Used

Beginner : Sections for beginners or new users.

Advanced : Sections for advanced or experienced users.

Format of Longer Sections

We have included a mini table of contents to help you navigate each section quickly. An example is shown below:

miniToc

  • You can click on the command or the brief description to quickly jump to that sub-section.
  • Each sub-section includes a "Back to ..." link for you to jump back up to the table of contents where you can continue exploring from there.

↑ Back to Table of Contents

Features


Beginner

FreelanceBuddy is made up of three main systems. It has:

  • A contact management system
  • A finance tracker
  • An event scheduling system for events, tasks and meetings.

The following sections describe the data stored in FreelanceBuddy.

Contact Management System

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.
Email 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.

Finance Tracker

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.

Event Scheduling System

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.

↑ Back to Table of Contents

Commands


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.

General Commands

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!

↑ Back to Table of Contents

Viewing help → 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.

dashboard help message

Format: help

Back to General Commands

Switching tabs → 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

Back to General Commands

Exiting the program → exit

Exits the program.

Format: exit

Back to General Commands

Clearing all entries → clear

Clears all entries from the Tab you are on.

Format: clear

RESULT: Address/Finance/Events book has been cleared!

This is a destructive command that deletes all your data!

Back to General Commands

Contacts Management


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!

↑ Back to Table of Contents

Listing all Contacts: Contacts Tab → list

Shows a list of all contacts in the Contacts tab.

Format: list

RESULT: Listed all persons

Back to Contacts Management

Adding a Contact: Contacts Tab → 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;EMAIL;ADDRESS;COMPANY;TELEGRAM_NAME

  • [a/ADDRESS] should preferably be the company’s address
  • There cannot be duplicate contact names!
    • For example: John Doe and john Doe is ok but another John Doe is strictly not allowed

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)
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 format
n/NAME is missing
add n/John Doe p/+6234-34344 e/mysteriousdeer@gmail.com add Invalid command format
n/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

Back to Contacts Management

Editing a Contact : Contacts Tab → 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;EMAIL;ADDRESS;COMPANY;TELEGRAM_NAME

  • The INDEX refers to the index number shown in the displayed contact list.
  • At least one of the [optional] fields must be provided.
  • You can remove [optional] fields by typing 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 Format
INDEX 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

Back to Contacts Management

Deleting a Contact entry: Contacts Tab → delete

Deletes the specified contact from the Contacts tab using INDEX.

Format: delete INDEX

RESULT: Deleted Person:NAME;PHONE;EMAIL;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 Format
INDEX is missing
delete 2 delete 2000 Invalid Index
INDEX 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

Back to Contacts Management

Filtering Contacts by 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!

  • The search is case-insensitive.
  • The search is by the Contact's NAME
  • Only full keywords will be matched. e.g. Al will not match with Alex

aLeX → 1. Alex Yeoh

  • Contacts name matching at least one keyword will be returned (i.e. OR search)

Alex Roy → 1. Alex Yeoh 2. Roy Balakrishnan

  • The order of the keywords does not matter.

Roy Alex → 1. Alex Yeoh 2. Roy Balakrishnan

Example: contacts filter-n demo

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

Back to Contacts Management

Filtering Contacts by 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!

  • The search is case-insensitive.
  • The search is by the Contact's COMPANY
  • Only full keywords will be matched. e.g. Goo will not match with Google
  • Contacts name matching at least one keyword will be returned (i.e. OR search)

FAPro NUS → 1. Bernice Yu (FAPro) 2. Charlotte Oliveiro (NUS)

  • The order of the keywords does not matter.

NUS FAPro → 1. Bernice Yu (FAPro) 2. Charlotte Oliveiro (NUS)

Example: contacts filter-c demo

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

Back to Contacts Management

Finance Management


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!

↑ Back to Table of Contents

Listing finances: Finance Tab → list

Shows a list of all finances/commissions/expenses in the Finance Tab.

Format: list [TYPE]

RESULT: Listed all finances/commissions/expenses

  • When commission is given as the TYPE, only commissions are listed
  • When expense is given as the TYPE, only expenses are listed
  • When TYPE is omitted, all finance entries are listed
Parameter Format Examples (Valid/Invalid)
TYPE Either of the following:
commission
expense
commission
expense
com
expesne

Back to Finance Management

Adding a Commission: Finance Tab → 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

  • The DESCRIPTION is used to provide details about the commission
  • The default [t/TIME] will be the time at which the command is entered
  • Adding multiple of the same exact commission is allowed

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.

  • Note that even though filter-n within the Contacts tab is case-insensitive, it should make it easier to find the client that you're looking for.
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 Exist
c/CLIENT 'Betsy Crower' does not exist in your contacts

Back to Finance Management

Adding an Expense: Finance Tab → 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

  • The DESCRIPTION is used to provide details about the expense
  • The default [t/TIME] will be the time at which the command is entered
  • Adding multiple of the same exact expense is allowed

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.

  • Note that even though filter-n within the Contacts tab is case-insensitive, it should make it easier to find the client that you're looking for.
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

Back to Finance Management

Editing a finance : Finance Tab → edit

Edits an existing finance entry in the Finance tab.

Format: edit INDEX [d/DESCRIPTION] [a/AMOUNT] [c/CLIENT] [t/TIME]

  • The INDEX refers to the index number shown in the displayed finance list.
  • At least one of the [optional] fields must be provided.
  • You can remove [optional] fields by typing PREFIX/ without specifying anything after. e.g., d/
    • Refer to the add command for expense and commission to check which parameters are optional fields
    • Note that you can remove CLIENT from expense, but not from commissions

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.

  • Note that even though filter-n within the Contacts tab is case-insensitive, it should make it easier to find the client that you're looking for.
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

Back to Finance Management

Deleting a Finance entry: Finance Tab → 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 Index
INDEX is out of range, choose an INDEX that is within the finance list

Back to Finance Management

Filtering finances by 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!

aLeX → 1. Alex Yeoh

  • Contacts name matching at least one keyword will be returned (i.e. OR search)

Alex Roy → 1. Alex Yeoh 2. Roy Balakrishnan

  • The order of the keywords does not matter.

Roy Alex → 1. Alex Yeoh 2. Roy Balakrishnan

Example: finance filter-c demo

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

Back to Finance Management

Filtering finances by 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

Example: finance filter-t demo

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 Duration
e/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

Back to Finance Management

Generating a finance summary of a client: Finance Tab → 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 :

  • Total amount earned or lost
  • Total number of commission and the amount earned from commissions
  • Total number of expenses and the total cost from expenses

  • The CLIENT name must match the exact CLIENT name (case-sensitive) that is found in the Contacts tab.
    This is to prevent any ambiguity in the generated summary.
  • Summary only works if the 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

Example: finance summary demo

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 Exist
CLIENT 'John' does not exist in your contacts

Back to Finance Management

Events Management


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!

↑ Back to Table of Contents

Listing all upcoming events: Events Tab → list

Shows a list of all upcoming events in the Events tab.

Format: list

RESULT: Listed all upcoming events

Back to Events Management

Listing all events: Events Tab → list-all

Shows a list of all events, including past and future, in the Events tab.

Format: list-all

RESULT: Listed all events

Back to Events Management

Adding an event: Events Tab → 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

  • The NAME refers to the title of the event.
  • The TIMESTART and TIMEEND refer to starting and ending times of the event respectively.
  • Note that each event can have more than one client (e.g c/David c/Richard c/Anna)
  • There cannot be duplicate events!
    • Events will be treated as duplicates if they have the same 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.

  • Note that even though filter-n within the Contacts tab is case-insensitive, but it should make it easier to find the client that you're looking for.
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 Format
n/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 Duration
e/TIMEEND must be chronologically after s/TIMESTART

Back to Events Management

Editing an event: Events Tab → 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

  • The INDEX refers to the index number shown in the displayed event list.
  • At least one of the [optional] fields must be provided.
  • You can remove [optional] fields by typing PREFIX/ without specifying anything after. e.g., d/
  • Read this for more information about editing 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.

  • Note that even though filter-n within the Contacts tab is case-insensitive, but it should make it easier to find the client that you're looking for.
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

Back to Events Management

Deleting an Event entry: Events Tab → 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 Index
INDEX is out of range, choose an INDEX that is within the event list

Back to Events Management

Filtering events by 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!

aLeX → 1. Alex Yeoh

  • Contacts name matching at least one keyword will be returned (i.e. OR search)

Alex Roy → 1. Alex Yeoh 2. Roy Balakrishnan

  • The order of the keywords does not matter.

Roy Alex → 1. Alex Yeoh 2. Roy Balakrishnan

Example: events filter-c demo

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

Back to Events Management

Filtering events by 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!

  • The search is case-insensitive.
  • The search is by the event NAME
  • Only full keywords will be matched. e.g. Con will not match with Conference

cOnFerEnce → 1. Conference with Bernice

  • Event's name matching at least one keyword will be returned (i.e. OR search)

Conference Meeting → 1. Conference with Bernice 2. Meeting with Alex

  • The order of the keywords does not matter.

Meeting Conference → 1. Conference with Bernice 2. Meeting with Alex

Example: events filter-n demo

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

Back to Events Management

Filtering events by 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)

Example: events filter-t demo

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

Back to Events Management

Data Storage


Saving the Data

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.

↑ Back to Table of Contents

Editing the Data File

Advanced

The following data are saved automatically as a JSON file. Advanced users are welcome to update data directly by editing that data file.

  • AddressBook: [JAR file location]/data/addressbook.json
  • EventsBook: [JAR file location]/data/eventsbook.json
  • FinanceBook: [JAR file location]/data/financebook.json
  • If your changes to the data file makes its format invalid, AddressBook, EventsBook and FinanceBook will discard all data and start with an empty data file at the next run (i.e. one corrupted file can wipe out the other files as well). Hence, it is recommended to create a backup of the files before editing them.
  • 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.

↑ Back to Table of Contents

Configuration Files

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.

  • FinanceBuddy may fail to start if illegal values are given for the configuration.
  • Particularly, there should not be any null 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

↑ Back to Table of Contents

Accepted Date-time Formats


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.

Contents of this section

As this section is relatively long, we have provided a mini table of content for quick navigation.

↑ Back to Table of Contents

Accepted Numbered Date Formats

Beginner

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.

Back to Date-time Contents

Accepted Natural Language Date Formats

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

Back to Date-time Contents

Accepted Numbered Time Formats

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

Back to Date-time Contents

Accepted Natural Language Time Formats

Beginner

Below is a table of accepted natural language time formats, these represent <TIME> only.

Format Examples Remarks
noon - 12:00
midnight - 00:00

Back to Date-time Contents

Accepted Natural Language Date and Time Formats

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

Back to Date-time Contents

Using Date and Time Inputs to Together

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>

Back to Date-time Contents

Using Date-time Formats for Durations

Beginner

Relevant for:

  1. Creating Events s/TIMESTART and e/TIMEEND parameters.
  2. 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.

Accepted Date-time Combinations of 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/ and e/ 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:

  1. You cannot start from a <DATE> to <TIME> or vice versa.
  2. Following the assumptions, e/ cannnot be earlier than s/.
Assumptions when using Date-time Combinations

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.

Back to Date-time Contents

Using Date-time Formats for Time Instances

Beginner

Relevant for:

  1. Creating Finance entries with a specified time in the t/TIMEDUE parameter
  2. filter-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.

Assumptions when using Date-time Instance
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

Back to Date-time Contents

Editing TIMESTART TIMEEND in Events

Advanced

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):

editError

Even if the start time appears to be before the stored end time.

Problem

  1. Reason for such an error message is because the s/ input is assumed to be for the next day.

BEFORE EDITING

  1. 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

  1. Sample Event

    Start: 13-11-2023 15:00

    End: 12-11-2023 18:00

Note that now start date time is LATER than end date time, which is clearly not allowed.

  1. Potentially dangerous if event has an end time that is after the determined date-time input. The edit will be allowed and the event might have an invalid start time unintentionally.

The problem extends beyond this specific example and can happen when modifying TIMEEND only as well.

Solution

  1. Specify today's date explicitly (i.e. 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.

Back to Date-time Contents

Command summary


Advanced

A quick overview of all the commands and their formats.

Click on the action to jump to the desired section!

General

Commands that applies to ALL tabs

Action Format, Examples

Help

help

Tab

tab TAB_NAME
e.g., tab contacts

Exit

exit

Clear

clear

Contacts Tab

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

Finance Tab

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

Events Tab

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

↑ Back to Table of Contents

FAQ


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

↑ Back to Table of Contents