User Guide
Mycelium is a desktop application aimed at helping freelance web developers manage clients and projects from multiple online sources like Upstack, Fiverr, and Toptal. All interactions with Mycelium are done through text commands or HotKeys, enabling one to efficiently manipulate data while availing oneself to the convenience of viewing, offered by the Graphical User Interface (GUI). You can expect to navigate its interface seamlessly and access its functions with a mere keystroke or two.
Using this Guide
If it is your first time here, the easiest way to get started is to head over to Quick Start, which will guide you through the installation process and basic usage.
Alternatively, you may wish to use this guide as a reference for commands and HotKeys. The three main parts of this guide contain descriptions on how to use commands for managing clients and projects, as well as the available HotKeys.
Icons and Conventions
The following typographical conventions are used in this guide.
- (KEYCAP) - Indicates a literal set of keys, e.g. (CTRL+F) refers to the combination of the ‘Control’ and ‘F’ keys.
Table of Contents
- Using this Guide
- Table of Contents
- Quick Start
- Glossary
- UI Overview
- Command Layout
- Managing Clients
- Managing Projects
- HotKeys
- Fuzzy Search
- Command summary
- Getting Help
Quick Start
Mycelium runs on Java 11, so you should first head over to Oracle’s website to install Java 11 if your system does not already have it installed. Alternatively, you might be able to install Java 11 from your preferred package manager, such as Homebrew for Mac or Pacman for Arch Linux.
Once you have Java 11, we can get started with our first steps using Mycelium.
- Download the latest release from our releases page
- Place the
.jar
file in an empty directory of your choice - In a terminal, navigate to the directory, and run the following command
java -jar mycelium.jar
If you see a window like the one shown below, then you have successfully installed and launched Mycelium! Notice that the app has been populated with some mock data to help you get a feel for the application. Feel free to delete the entries later.
You may resize the window to your liking. At this point, we recommend that you jump over to the UI Overview or Command Summary sections to get an overview of the commands which are the bread and butter of Mycelium. Alternatively, you may continue reading the guide for a guided tour of how Mycelium is intended to be used.
mycelium.json
is created in data/
directory as the default.
Corruption or tampering with it may lead to the data file becoming unreadable
or containing invalid values. This will result in the file being ignored
and Mycelium will start as an empty application with no projects and clients.
Glossary
Term | Definition |
---|---|
Fuzzy search | A feature which allows for searching via partial matches |
Graphical User Interface (GUI) | A form of user interface that allows users to interact with electronic devices through graphical icons |
HotKey | A convenient combination of key presses meant to invoke some app functionality |
Integrated Development Environment (IDE) | A software application that helps programmers develop software code efficiently. It increases developer productivity by combining capabilities such as software editing, building, testing, and packaging in an easy-to-use application. |
User Interface (UI) | The point of human-computer interaction and communication in a device. This can include display screens, keyboards, a mouse, and the appearance of a desktop. It is also the way through which a user interacts with an application or a website. |
UI Overview
This screenshot below highlights the four main components in Mycelium’s window.
- Command box: Box for text input. Can be for either running commands or fuzzy searching (more on this later).
- Output box: After a command is entered, the result from that command will be displayed here. Note that the box is scrollable, and for large output messages, you may have to scroll both horizontally and vertically to see the full message.
- Entity panel: Lists projects and clients in two separate tabs.
- Statistics panel: Displays overview of projects.
You can find more details about the Entity and Statistics panels in the following sections.
Entity Panel
The Entity panel is where you will be able to view your projects and clients. It is split into two tabs, one that lists all existing projects and the other that lists all existing clients. By default, all projects and clients are listed in order of creation.
Projects Tab
The Projects tab lists all the projects you have created. Each project block contains the project’s
- Name
- Status
- Client email
- Source, e.g. Fiverr
- Description
- Accepted date
- Deadline
Clients Tab
The Clients tab lists all the clients you have created. Each client block contains the client’s
- Name or username
- Year of birth
- Source, e.g. Fiverr
- Mobile number
Statistics Panel
The Statistics panel is where you will be able to view statistics about your projects. It is vertically split into 2 portions.
The top portion is composed of two tabs. One lists the projects that are due within this week or the next (Week starts from Sunday). For example, if the current date is 11/04/2023 (a Tuesday), all projects with deadlines from 09/04/2023 to 22/04/2023 inclusive will appear on the Due soon project list.
The other tab lists projects that are overdue. For example, if the current date is 11/04/2023, projects with deadlines on 11/04/2023 will not appear in Overdue project list, but projects with deadlines on 10/04/2023 will appear in the Overdue project list.
The bottom portion shows a pie chart that displays the relative proportions of projects that are not started, in progress, and done (which corresponds to the statuses of projects in Mycelium).
Command Layout
Commands in Mycelium take the general form of command_name [arguments...]
.
Arguments may be compulsory or optional. If you do not provide the optional
arguments, Mycelium will use sensible defaults in their place.
All arguments take the structure of -arg_flag arg_data
; the argument flag is
always followed by a space. Some commands may also take multiple arguments, in
which case you may specify them in any order, delimited by whitespace.
Furthermore, if duplicate argument flags are provided, then only the last one
is used. Finally, note that arg_data
can consist of multiple whitespace
separated tokens, but any leading or trailing whitespace will be trimmed.
As an example, the command below creates a new project with the name Mycelium Desktop, for client Spiderman, and sourced from fiverr.com. (Don’t worry about what the arguments mean for now, this example is just meant to demonstrate the layout.)
p -pn Mycelium Desktop -e spiderman@gmail.com -src fiverr.com
The range of valid years is from -9999 to 9999.
p -pn Mycelium -pn Desktop -e
spiderman@gmail.com
, Desktop is interpreted as another argument and
overrides Mycelium, so we end up with a project named Desktop.
Managing Clients
This user guide section outlines how to create, delete, and update client contacts using command in Mycelium.
Creating a client contact: c
To create a new client contact, you can use the c
command followed by the client’s name and email.
The year of birth, platform source, and mobile number can also be added as optional arguments.
Once successfully created, the interface will display the new client’s name and email.
Compulsory Arguments
-
-cn client_name
- The client’s name.
-
-e email
- The client’s email. Must be unique in Mycelium. Case sensitive.
Optional Arguments
-
-y year_of_birth
- The client’s year of birth. Any combination of four digits is acceptable.
- Default: ‘No year of birth’
-
-src source
- The platform the client is sourced from, such as Fiverr. This can be any arbitrary non-empty string.
- Default: ‘No source’
-
-mn mobile_number
- The client’s mobile number.
- Default: ‘No mobile number’
Example
The following command creates a new client with name Alice Baker, whose email is alice_baker@bakers.com, born in the year 2000.
c -cn Alice Baker -e alice_baker@bakers.com -y 2000
You should see the following output if the client is created successfully.
New client added: Alice Baker (alice_baker@bakers.com)
Deleting a client contact: dc
To delete an existing client contact, you can use the dc
command followed
by the client’s email address. Once the contact is deleted, the interface will display the name and email of the deleted client.
Compulsory Arguments
-
-e email
- Email of the client to delete.
Example
The command dc -e alice_baker@bakers.com
deletes the contact with the corresponding email.
Once the client is deleted, you should see the following output.
Deleted Client: Alice Baker (alice_baker@bakers.com)
Updating a client: uc
To update an existing client contact, you can use the uc
command
followed by the client’s email address.
You can then add one or more optional arguments to specify the updated information such as the client’s new name, email, year of birth, platform source, or mobile number.
The interface will display the updated client’s name and email once the update is successful.
Compulsory Arguments
-
-e email
- Email of the client to update.
Optional Arguments
At least one of the following arguments must be provided:
-
-cn client_name
- The client’s new name.
- Default: Existing name
-
-e2 new email
- The client’s new email. Must be unique in Mycelium. Case sensitive.
- Default: Existing email
-
-y year_of_birth
- The client’s new year of birth.
- Default: Existing year of birth or ‘No year of birth’
-
-src source
- The client’s new digital service platform, e.g. Fiverr.
- Default: Existing source or ‘No source’
-
-mn mobile_number
- The client’s new mobile number.
- Default: Existing mobile number or ‘No mobile number’
Example
The command uc -e alice_baker@bakers.com -cn Bobby Baker
updates the client with email alice_baker@bakers.com to have the name Bobby Baker.
You should see the following output if the client is updated successfully.
Updated Client: Bobby Baker (alice_baker@bakers.com)
Managing Projects
This section of the user guide explains how to create, delete, and update a project through commands.
Creating a project: p
Creating a project requires specifying the project’s name, which must be unique, and the email of the client who submitted the project. There are several optional arguments available, such as the project’s status, source, description, accepted and deadline date. If the project is added successfully, a message confirming the addition will be displayed.
Compulsory Arguments
-
-pn project_name
- The project’s name, which must be unique. Case-sensitive.
-
-e client_email
- The email of the client who submitted this project. Note that this client does not need to exist in Mycelium.
Optional Arguments
-
-s status
- Here
status
should be set to one ofnot_started
,in_progress
, ordone
. -
Default:
not_started
- Here
-
-src source
- The platform the project is sourced from, such as Fiverr. This can be any arbitrary non-empty string.
- Default: ‘Unknown’
-
-d description
- A short description of the project.
- Default: ‘No description given’
-
-ad accepted_date
- The date that the project was accepted, in the format dd/MM/yyyy.
- Default: the current date
-
-dd deadline_date
- The deadline of the project, in the format dd/MM/yyyy.
- Default: ‘No Deadline’
Example
The following command creates a new project whose name is Mycelium Desktop, submitted from the client spiderman@gmail.com and sourced from fiverr.com, with a deadline on 14 March 2075.
p -pn Mycelium Desktop -e spiderman@gmail.com -src fiverr.com -dd 14/03/2075
If the project is added successfully, you should see the following message in the output box:
New project added: Mycelium Desktop from client spiderman@gmail.com
not_started
as NOT_STARTED
or nOT_sTArtED
.
-e
argument does not need to
exist in Mycelium. You can add them later if you wish.
Deleting a project: dp
Deleting a project requires specifying the project’s name, which is case-sensitive. If the project is deleted successfully, a message confirming the deletion will be displayed.
Compulsory Arguments
-
-pn project_name
- Name of the project to delete. Case-sensitive.
Example
The following command deletes a project with name Mycelium Desktop.
dp -pn Mycelium Desktop
If the command is successful, you should see the following message in the output box. (In this example, the project’s client is spiderman@gmail.com.)
Deleted Project: Mycelium Desktop from client spiderman@gmail.com
Updating a project: up
Updating a project allows you to partially update the target project using optional arguments. You must specify the project name, and each additional argument, if specified, will be used to partially update the project.
Compulsory Arguments
-
-pn project_name
- Name of the project to update. Case-sensitive.
Optional Arguments
-
-pn2 new_project_name
- A new project name.
- Default: Existing name
-
-e client_email
- A new client email.
- Default: Existing email
-
-s status
- A new project status. Should be set to one of
not_started
,in_progress
, ordone
. - Default: Existing status
- A new project status. Should be set to one of
-
-src source
- A new source for the project. Can be any arbitrary non-empty string.
- Default: Existing source or ‘Unknown’
-
-d description
- A new description for the project.
- Default: Existing description or ‘No description given’
-
-ad accepted_date
- A new accepted-on date for the project.
- Default: Existing accepted-on date
-
-dd deadline_date
- A new deadline for the project.
- Default: Existing deadline or ‘No Deadline’
Each of these arguments, if specified, will be used to update the target project.
Example
Suppose you have a project named Mycelium Desktop and wish to update
- its name to Mycelium Mobile; and
- its status to
in_progress
.
You may use the following command:
up -pn Mycelium Desktop -pn2 Mycelium Mobile -s in_progress
If the command is successful, you should see the following message in the output box. (Here we assume the project came from client foo@bar.com.)
Updated project: Mycelium Mobile from client foo@bar.com
Suppose that you have a project which currently has a deadline. Then it is not possible to use the
up
command to unset or remove the deadline.
HotKeys
HotKeys are keyboard shortcuts supported by Mycelium to enable faster navigation and editing of commands with the keyboard. This allows for Mycelium to be fully keyboard driven. The following are the supported HotKeys:
(F1) Help
This shortcut allows you to quickly access the help page.
(CTRL+Q) Quit
This shortcut allows you to quickly quit Mycelium.
(CTRL+W) Start of Line
This shortcut allows you to quickly navigate to the start of the line in the command box.
(CTRL+E) End of Line
This shortcut allows you to quickly navigate to the end of the line in the command box.
(CTRL+D) Clear line
This shortcut allows you to quickly clear the current line in the command box. The command also clears the command log found below the command box.
(CTRL+S) Switch Panels
This shortcut allows you to quickly switch the focus between the Entity panel and the Statistics panel. The panel in focus will be highlighted with a blue header.
(CTRL+L) Switch Tabs
This shortcut allows you to quickly switch between the tabs of the panel that is currently in focus. If the left Entity panel is in focus, then the tabs will be the Projects tab and Clients tab. If the right Statistics panel is in focus, then the tabs will be the Overdue and Due soon tabs.
(CTRL+J) Select next
This shortcut allows you to quickly select the next item on the list in the currently selected tab in the currently selected panel. This could be either the Projects tab or Clients tab in the Entity panel or the Overdue tab or Due soon tab in the Statistics panel.
If the last item is selected, then the next item will be the first item in the list. If there was no item originally selected, then the first item in the list will be selected.
(CTRL+K) Select previous
This shortcut allows you to quickly select the previous item on the list in the currently selected tab in the currently selected panel. This could be either the Projects tab or Clients tab in the Entity panel or the Overdue tab or Due soon tab in the Statistics panel.
If the first item is selected, then the previous item will be the last item in the list. If there was no item originally selected, then the last item in the list will be selected.
(CTRL+F) Search
This shortcut allows you toggle the command box between search mode and command mode (default). More information about the functionality of search mode can be found below.
In command mode, the input in the command box is used to execute the command.
In search mode, the command box is highlighted teal, and the input is used to interactively search for the closest matching project or client by name in the Entity panel only. Interactively would mean that the search results are updated in the projects and client list as you type. On entering search mode, the Entity panel will be put into focus automatically.
Your existing input while in command mode will be cached when you switch to search mode. It is then restored when you switch back to command mode. Similarly, your existing input while in search mode will be cached when switching to command mode and restored when switching back to search mode.
Fuzzy Search
Fuzzy search allows us to find projects or clients which match closely to some query, rather than exactly. This is useful if you are, for instance, trying to find a project whose name you only remember partial bits of, or how it sounds in your head.
Mycelium supports fuzzy finding for both projects and clients. For projects, the query is matched against the project’s name, and for clients, the query is matched against the client’s name. Furthermore, the search is interactive, so the UI automatically updates as you type your query into the command box.
Please take note of these details for fuzzy search:
- Closer matches will be placed at the top;
- Only projects or clients which do not match at all will not be shown;
- Fuzzy search is not case-sensitive.
The following two sections will walk through performing fuzzy search on projects and clients.
Fuzzy searching projects
We will now demonstrate fuzzy searching through an example. Let us assume we have the following projects in Mycelium:
First, press (CTRL+F) to toggle to search mode (if you are not already in search mode). You should see the command box turn teal; now we can begin searching. Suppose we wanted to search for Clash of Clans listed at the bottom in the screenshot above. With the power of fuzzy matching, just typing coc is enough, as shown below.
If we queried a term which matches nothing at all, then no results will be listed.
To exit search mode, press (CTRL+F) again. The command box should return to its original dark color.
Fuzzy searching clients
Fuzzy searching for clients works exactly the same as fuzzy searching projects. Just remember that the query is matched against the clients’ names only, and not their emails.
Extracting client and project info
While in search mode, you can use the (ENTER) key to extract a client’s email or a project’s name. This will automatically switch you back to command mode while appending the name or email to the command box. This is useful if you want to quickly reference a project or client in your command.
To demonstrate this, let’s assume you want to delete a project. You can first
type in dp -pn
as shown below
Instead of typing the full project name, you can press (CTRL+F) to enter search mode and search for the project you want to delete. Once you see the desired project, use (CTRL+J) or (CTRL+K) to navigate to it to select it. You will know it is selected when the project’s box is coloured blue instead of purple, as shown below.
You can then press (ENTER) to switch back to command mode and append the project’s name to the command box. The newly appended project’s name will be highlighted in the command box (this is not shown in the screenshot below due to limitations of the screenshot program).
We can now proceed to execute the command as per usual. Note that for clients, the (ENTER) key would extract the client’s email. This way you can quickly reference a project or client in your command, without having to type out the full name or email.
Fuzzy search Gotchas
In general, fuzzy search in Mycelium should feel familiar to most developers, since it is similar to, for example, finding files in IDEs, or the well-known fzf tool. However, here are a few things you might wish to note:
- Each fuzzy query will be applied to both clients and project. That is, when you query for something, say, “coc”, this query is applied to both the Clients tab and the Projects tab, regardless of which tab is currently being displayed.
- Mycelium’s implementation of fuzzy search differs from that in IDEs or fzf in how it matches queries which are “too long”. To illustrate, suppose you have two projects named foo and bar. If you attempt a fuzzy query for “ooooooooo”, Mycelium will still try to find and rank partial match(es) matching at least one character, which, in this case, is just the foo project. The behaviour of fzf and most IDEs is to list no results.
- You might experience some input lag while in search mode. This is expected to improve as we refine the implementation.
Command summary
The table below summarizes the layout of all the commands in Mycelium. You may
read the statement q -a foo [-b bar]
like so:
-
q
is the command, -
-a foo
indicates a compulsory argument, and -
[-b bar]
indicates an optional argument.
Action | Format | Example |
---|---|---|
Create new client | c -cn client_name -e email [-y year_of_birth] [-src source] [-mn mobile_number] |
c -cn Alice Baker -e alice_baker@bakers.com -y 2000 |
Delete an existing client | dc -e email |
dc -e alice_baker@bakers.com |
Update an existing client | uc -e email [-cn client_name] [-y year_of_birth] [-src source] [-mn mobile_number] [-e2 new_email] |
uc -e alice_baker@bakers.com -y 2002 -mn 85090234 |
Create a project | p -pn project_name -e client_email [-s status] [-src source] [-d description] [-ad accepted_date] [-dd deadline_date] |
p -pn Mycelium Desktop -e spiderman@gmail.com -src fiverr.com -dd 30/02/2075 |
Delete a project | dp -pn project_name |
dp -pn Mycelium Desktop |
Update an existing project | up -pn project_name [-e email] [-s status] [-src source] [-d description] [-ad accepted_date] [-dd deadline_date] [-pn2 new_project_name] |
up -pn Mycelium Desktop -e alice_baker@bakers.com -dd 30/03/2024 |
Getting Help
FAQs
Q: Does Mycelium require an internet connection to run?
A: No, Mycelium is intended to work fully offline.
Q: How can I sync my local data to the cloud?
A: Mycelium does not provide such a feature, but you may look into using
network-attached storage, Git, or other services to back up the mycelium.json
file.
Q: What operating systems can I run Mycelium on?
A: Mycelium has been developed and tested on Windows, Mac, and Linux (X11)
operating systems only.
Q: For the HotKeys keyboard shortcuts, should I use the ‘command’ key
instead of the ‘control’ key on Mac keyboards?
A: For all types of keyboards, the ‘control’ key should be used for
these shortcuts.
Q: Can I customise the HotKeys keyboard shortcuts?
A: Mycelium does not provide that functionality yet.
Troubleshooting
1. Double-clicking the JAR file does not launch app
Please double check that you have Java 11 installed. If you need help with installing Java, please refer to this guide by Oracle.
We also recommend that you launch Mycelium from a terminal instead of via double-clicking, as described in the Quick Start.