diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml
index e2da4b30c..d4af76e2c 100644
--- a/.github/linters/.markdown-lint.yml
+++ b/.github/linters/.markdown-lint.yml
@@ -7,7 +7,8 @@ MD004:
MD005: true # Inconsistent indentation for list items at the same level
MD022: true # Headers should be surrounded by blank lines
MD023: true # Headers must start at the beginning of the line
-MD024: true # Multiple headers with the same content
+MD024:
+ siblings_only: true # Multiple headers with the same content under different nesting levels are allowed
MD026:
punctuation: ".,;:!" # Trailing punctuation in header
MD027: true # Multiple spaces after blockquote symbol
diff --git a/.idea/misc.xml b/.idea/misc.xml
index de4b0333a..fdc35ea81 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -7,7 +7,6 @@
-
diff --git a/Website/app/docs/Contributing.md b/Website/app/docs/Contributing.md
new file mode 100644
index 000000000..a024fc304
--- /dev/null
+++ b/Website/app/docs/Contributing.md
@@ -0,0 +1,72 @@
+# Contributing to Drifty
+
+Drifty is an Open-Source project, and we encourage contributions from the community.
+Thank you for considering and taking the time to contribute!
+The following are the guidelines for contributing to this project.
+
+## Code of Conduct
+
+We have a [Code of Conduct](https://github.com/SaptarshiSarkar12/Drifty/blob/master/CODE_OF_CONDUCT.md) that all contributors must follow.
+This code of conduct outlines our expectations for participants within the project. It also includes steps to report unacceptable behavior.
+We are committed to providing a welcoming and inspiring community for all and expect our code of conduct to be honored. Anyone who violates or has concerns about the code of conduct should report it directly to the project maintainers.
+
+## How to Report Bugs and Issues
+
+To report any bugs or any difficulties you are facing, you can create an issue by following the below steps 👇
+
+1. Go to the [issues](https://github.com/SaptarshiSarkar12/Drifty/issues) tab of the drifty project on GitHub
+2. Click on the [new issue](https://github.com/SaptarshiSarkar12/Drifty/issues/new/choose) button
+3. Choose the relevant category of the issue which you would like to raise
+4. Provide as much information as possible, including screenshots, text output, and both your expected and actual results.
+
+## What does each Issue Category mean?
+
+1. **Bug Report for Application**:
+ You can create a **Bug Report for Application** to report any bug related to the application, including installation problems and crashes.
+2. **Bug report for Website**:
+ You can create an issue in this category if you encounter any bugs or issues in the [official website of Drifty](https://saptarshisarkar12.github.io/Drifty/).
+3. **Documentation Change Request**:
+ Raise an issue if you think any improvements can be made in the Documentation of Drifty.
+4. **Feature Request for Drifty Application**:
+ If you have any ideas to improve the application by adding new features, you can create an issue in this category.
+5. **Feature Request for Drifty Website**:
+ If you have any ideas to improve the Website of Drifty by adding new features, you can create an issue in this category.
+
+If none of the above categories applies to your case, feel free to create an issue in the **Others** category.
+
+## Pull Requests
+
+[Pull requests](https://github.com/SaptarshiSarkar12/Drifty/pulls) are a fantastic way to bring your ideas to life in this project! Start by opening an issue to describe your proposed changes and discuss them with the maintainers. Once the issue is assigned to you, you can go ahead and submit your pull request.
+
+## What does each Label mean in Issues and Pull Requests?
+
+1. **App 💻**
+ This label indicates that changes are made in the Application code
+2. **bug 🐛**
+ This label indicates that changes are made to fix a bug
+3. **dependencies 📦️**
+ This label indicates that dependencies are updated in a Pull Request
+4. **docker 🐋**
+ This label indicates that changes are made in the Dockerfiles
+5. **documentation 📝**
+ This label indicates that changes are made in the documentation
+6. **good first issue**
+ This label indicates that the issue is suitable for beginners to start contributing
+7. **help wanted**
+ This label indicates that the issue requires help from the community
+8. **invalid**
+ This label is used to mark an issue or Pull Request as invalid, meaning it does not meet the project's guidelines or is not relevant to the project's goals.
+9. **CI/CD 🔁**
+ This label indicates that changes are made in the CI/CD workflows (GitHub Actions)
+10. **duplicate**
+ This label indicates that the issue / Pull Request is duplicate
+11. **hacktoberfest**
+ This label indicates that the issue is a part of [Hacktoberfest](https://hacktoberfest.com/)
+12. **hacktoberfest-accepted**
+ This label indicates that the Pull Request is accepted for [Hacktoberfest](https://hacktoberfest.com/) and will count towards your participation
+
+## Project Insights: Status and Task Progress
+
+[Projects Tab](https://github.com/users/SaptarshiSarkar12/projects/3) lists the tasks completed, in progress and the ideas left to be incorporated in the project. You can work on the **to-do tasks** by creating the issue (if not already created) and getting yourself assigned.
+
+![Project Insights](https://github.com/user-attachments/assets/292c5c90-fbee-4eb0-8912-02faea96ad23)
diff --git a/Website/app/docs/Development/Architecture.md b/Website/app/docs/Development/Architecture.md
new file mode 100644
index 000000000..081727ae4
--- /dev/null
+++ b/Website/app/docs/Development/Architecture.md
@@ -0,0 +1,33 @@
+# Architecture
+
+## Project Structure
+
+The project is organized into the following directories:
+
+- `.github`: Contains the GitHub Actions workflows, issue and pull request templates, linter configuration files, and other GitHub-specific files.
+- `CLI`: Maven child module containing the source code for the Drifty CLI.
+- `GUI`: Maven child module containing the source code for the Drifty GUI.
+- `Core`: Maven child module containing the shared code between the CLI and GUI.
+- `Website`: Contains the source code for the Drifty website (A Next.js application).
+- `config`: Contains the configuration files for building the native installers and executables.
+- `Docker`: Contains the Dockerfile to build and run the Drifty application in a Docker container.
+ - `dev`: Contains the Dockerfiles to build and run the Drifty application in a Docker container for development purposes.
+ - `CLI`: Contains the Dockerfile to build and run the Drifty CLI executable in a Docker container for development purposes.
+ - `GUI`: Contains the Dockerfile to build and run the Drifty GUI executable in a Docker container for development purposes.
+ - `commons`: Contains the Dockerfiles for the base images used by the Drifty CLI and GUI Dockerfiles.
+ - `prod`: Contains the Dockerfile to build and run the Drifty application in a Docker container for production purposes.
+ - `CLI`: Contains the Dockerfile to build the Docker image for the Drifty CLI executable.
+ - `GUI`: Contains the Dockerfile to build the Docker image for the Drifty GUI executable.
+
+## Technologies Used
+
+The Drifty project uses the following technologies:
+
+- [**Java**](https://www.java.com/): The project is written in Java, which is a high-level, class-based, object-oriented programming language.
+- [**JavaFX**](https://openjfx.io/): The project uses JavaFX as the GUI toolkit for Drifty GUI.
+- [**Maven**](https://maven.apache.org/): The project uses Maven as the build automation and project management tool.
+- [**GraalVM**](https://www.graalvm.org/): The project uses GraalVM to build native executables for the Drifty CLI and GUI.
+- [**GluonFX Maven Plugin**](https://github.com/gluonhq/gluonfx-maven-plugin): The project uses the GluonFX Maven Plugin (which uses GraalVM under the hood) to build native executables for the Drifty GUI.
+- [**Next.js**](https://nextjs.org/): The project uses Next.js to build the Drifty website.
+- [**Docker**](https://www.docker.com/): The project uses Docker to containerize the Drifty application for development and production purposes.
+- [**GitHub Actions**](https://docs.github.com/en/actions): The project uses GitHub Actions for CI/CD workflows.
diff --git a/Website/app/docs/Development/Building-Executables.md b/Website/app/docs/Development/Building-Executables.md
new file mode 100644
index 000000000..af60a67df
--- /dev/null
+++ b/Website/app/docs/Development/Building-Executables.md
@@ -0,0 +1,163 @@
+# Building Installer or Executable Binaries for Drifty
+
+## Generating GraalVM Metadata
+
+> [!NOTE]
+> This step is required only if you want to see your changes reflected in Drifty CLI or GUI executables.
+> If you are only interested in building the installer or executable binaries, you can skip this step.
+
+### Prerequisites
+
+- [Java 21](https://www.oracle.com/java/technologies/downloads/#java21)
+- [Download](https://maven.apache.org/download.cgi#previous-stable-3-8-x-release) and [install](https://maven.apache.org/install.html) **Maven** (Maven v3.8.8 is required for generating GraalVM metadata for Drifty GUI)
+- [GraalVM 21](https://www.graalvm.org/downloads/)
+
+### Steps
+
+1. Open the terminal and navigate to the project directory
+2. Follow the below instructions to generate GraalVM metadata for Drifty CLI or GUI
+ - For Drifty GUI,
+ - Navigate to the `GUI` directory
+ ```shell
+ cd GUI
+ ```
+ - Run the below command to generate GraalVM metadata for Drifty GUI
+ ```shell
+ mvn gluonfx:runagent
+ ```
+ - For Drifty CLI,
+ - Navigate to the `CLI` directory
+ ```shell
+ cd CLI
+ ```
+ - Run the below command to generate GraalVM metadata for Drifty CLI
+ ```shell
+ mvn -P generate-graalvm-metadata exec:exec@java-agent
+ ```
+3. Upon completion of the command, the GraalVM metadata will be generated in `src/main/resources/META-INF/native-image` directory of the respective project (`GUI` or `CLI`) directory.
+
+## Local Build
+
+### Prerequisites
+
+- [Java 21](https://www.oracle.com/java/technologies/downloads/#java21)
+- [Download](https://maven.apache.org/download.cgi#previous-stable-3-8-x-release) and [install](https://maven.apache.org/install.html) **Maven** (Maven v3.8.8 is required for building installer or executable binaries for Drifty GUI, locally)
+- [GraalVM 21](https://www.graalvm.org/downloads/)
+- [GCC](https://gcc.gnu.org/install/)
+
+### Steps
+
+> [!NOTE]
+> Check if GraalVM is added to the system path by running `native-image --version` in the terminal.
+> If the command is not recognized, add the GraalVM `bin` directory to the system path.
+> ```shell
+> PATH=$GRAALVM_HOME/bin
+> ```
+> Set the following environment variable to point to your GraalVM installation directory.
+> ```shell
+> GRAALVM_HOME=
+> ```
+> Replace `` with the actual path to the GraalVM installation directory.
+
+1. Open the terminal and navigate to the project directory
+2. Assuming you have installed the necessary project dependencies, run the below command to generate the C object file required only for building executable binaries for Drifty GUI
+ - For Linux,
+ ```shell
+ gcc -c config/missing_symbols.c -o config/missing_symbols-ubuntu-latest.o
+ ```
+ - For Windows,
+ ```shell
+ gcc -c config/missing_symbols.c -o config/missing_symbols-windows-latest.o
+ ```
+ - For macOS,
+ ```shell
+ gcc -c config/missing_symbols.c -o config/missing_symbols-macos-latest.o
+ ```
+ Replace `gcc` with the path to the GCC compiler if it is not in the system path.
+3. Run the below command to build the installer or executable binaries
+ - For Drifty GUI,
+ - For Linux,
+ ```shell
+ mvn -P build-drifty-gui-for-ubuntu-latest gluonfx:build gluonfx:package -rf :GUI -U
+ ```
+ - For Windows,
+ ```shell
+ mvn -P build-drifty-gui-for-windows-latest gluonfx:build gluonfx:package -rf :GUI -U
+ ```
+ - For macOS,
+ ```shell
+ mvn -P build-drifty-gui-for-macos-latest gluonfx:build gluonfx:package -rf :GUI -U
+ ```
+ - For Drifty CLI,
+ - For Linux,
+ ```shell
+ mvn -P build-drifty-cli-for-ubuntu-latest package
+ ```
+ - For Windows,
+ ```shell
+ mvn -P build-drifty-cli-for-windows-latest package
+ ```
+ - For macOS,
+ ```shell
+ mvn -P build-drifty-cli-for-macos-latest package
+ ```
+4. Upon completion of the build, the installer or executable binaries will be neatly organized in the directories listed below. The placeholder `{arch}` should be replaced with either `x86_64` or `aarch64`, depending on your system's architecture.
+ - For Drifty GUI,
+ - For Linux,
+ ```shell
+ GUI/target/gluonfx/{arch}-linux
+ ```
+ - For Windows,
+ ```shell
+ GUI/target/gluonfx/{arch}-windows
+ ```
+ - For macOS,
+ ```shell
+ GUI/target/gluonfx/{arch}-mac
+ ```
+ - For Drifty CLI,
+ - For Linux,
+ ```shell
+ CLI/target/CLI/linux
+ ```
+ - For Windows,
+ ```shell
+ CLI/target/CLI/windows
+ ```
+ - For macOS,
+ ```shell
+ CLI/target/CLI/mac
+ ```
+5. You can now run the installer or executable binaries to use the application.
+6. To remove the generated files, run the below command
+ ```shell
+ mvn clean
+ ```
+
+## Docker Build
+
+### Prerequisites
+
+- [Docker](https://docs.docker.com/get-docker/)
+- [Docker Compose](https://docs.docker.com/compose/install/)
+
+### Steps
+
+1. Open the terminal and navigate to the project directory
+2. Follow the below instructions to build and start the Drifty application in a Docker container
+ - For Drifty GUI,
+ - For Linux and Windows users,
+ - Run the below command to add access to the X server (required for GUI applications running in Docker)
+ ```shell
+ xhost +local:docker
+ ```
+ - Run the below command to build and start the Drifty GUI native executable in a Docker container
+ ```shell
+ docker compose run gui
+ ```
+ - For macOS users, please follow [these instructions](macOS%20Docker%20Build%20Instructions.md)
+ - For Drifty CLI,
+ Run the below command to build and start the Drifty CLI native executable in a Docker container
+ ```shell
+ docker compose run cli
+ ```
diff --git a/Website/app/docs/Development/Quickstart.md b/Website/app/docs/Development/Quickstart.md
new file mode 100644
index 000000000..71a5c96b9
--- /dev/null
+++ b/Website/app/docs/Development/Quickstart.md
@@ -0,0 +1,79 @@
+# Quick Start
+
+This is a quick start guide to get developers up and running with the project for development purposes.
+
+## Clone the Project
+
+> [!NOTE]
+> You need to have Git installed on your machine to clone the project. If you don't have Git installed, you can download it from [here](https://git-scm.com/downloads).
+
+Clone the Drifty repository to your local machine using the following command:
+
+```bash
+git clone git@github.com:SaptarshiSarkar12/Drifty.git
+```
+After the project has been cloned successfully, the **`Drifty`** directory will be created. Navigate into that directory.
+
+## Drifty Application Development
+
+### Prerequisites
+
+- [Java 21](https://www.oracle.com/java/technologies/downloads/#java21)
+- [Maven](https://maven.apache.org/download.cgi)
+- [IntelliJ IDEA](https://www.jetbrains.com/idea/) (**Recommended**)
+
+### Install Dependencies
+
+Install the dependencies required for the project using the following command:
+
+```bash
+mvn clean install
+```
+This command will install all the dependencies required for the maven project.
+
+### Running the Project in IntelliJ IDEA
+
+1. Open the project in IntelliJ IDEA.
+2. Follow the below steps to run the project:
+ - Open the `Drifty_CLI` Java class in the `CLI/src/main/java/main` directory and click on the run button. This will start the Drifty CLI application.
+ - Open the `Drifty_GUI` Java class in the `GUI/src/main/java/main` directory and click on the run button. This will start the Drifty GUI application.
+3. Make changes to the code and see them reflected in the application. Re-run the project after each change to see the updated output.
+
+### Debugging Drifty Application
+
+To debug the project, you can set breakpoints in the code and run the project in debug mode (by clicking on the debug button in IntelliJ IDEA). This will allow you to step through the code and inspect variables to identify and resolve issues.
+
+## Drifty Website Development
+
+### Prerequisites
+
+- [Node.js](https://nodejs.org/en/download/)
+- [npm](https://www.npmjs.com/get-npm)
+- [WebStorm](https://www.jetbrains.com/webstorm/) (**Recommended**) (You can also use any other IDE of your choice)
+
+### Install Dependencies
+
+Navigate to the `Website` directory and install the dependencies required for the website using the following command:
+
+```bash
+npm ci
+```
+
+### Running the Website Locally (Development Mode)
+
+To run the website locally in development mode, use the following command:
+
+```bash
+npm run dev
+```
+
+This will start the development server, and you can access the website at `http://localhost:3000` in your browser.
+Make changes to the website code from your IDE and see them reflected in real-time in the browser.
+
+### Debugging Drifty Website
+
+To debug the website, you can use the browser's developer tools to inspect the elements, view console logs, and debug JavaScript code. You can also use the `console.log()` function to log messages to the console for debugging purposes.
+
+## Contributing
+
+If you would like to contribute to the project, please read the [Contributing Guidelines](../Contributing.md) for more information on how to get started.
\ No newline at end of file
diff --git a/Website/app/docs/Development/macOS-docker-build-instructions.md b/Website/app/docs/Development/macOS-docker-build-instructions.md
new file mode 100644
index 000000000..fd6e50adc
--- /dev/null
+++ b/Website/app/docs/Development/macOS-docker-build-instructions.md
@@ -0,0 +1,110 @@
+# Using the Drifty GUI Docker image on macOS
+
+There are some steps to follow if you're going to run the Drifty GUI Docker image in macOS. At the end of these instructions, we will have a single command that we can run to start the Docker image.
+
+## Prerequisites
+
+You will need these programs to follow these instructions:
+- [**Docker**](https://docs.docker.com/desktop/install/mac-install)
+- [**HomeBrew**](https://brew.sh/)
+- **Socat** (will be installed later in the instructions)
+- **XQuartz** (will be installed later in the instructions)
+
+## Installing the necessary programs and building/pulling the Docker image
+
+Once you have Docker installed **(and running)**, open the terminal and follow these steps:
+
+- Update the local Homebrew repository and upgrade any outdated installations. This ensures that any libraries that might be necessary will be up to date.
+ ```bash
+ brew update
+ brew upgrade
+ ```
+- Install `Socat` and `XQuartz`
+ ```bash
+ brew install socat
+ brew install xquartz
+ ```
+- To build the **Drifty GUI** Docker image using your changed source code, run this command in the directory where the project files are present:
+ ```bash
+ docker compose build gui
+ ```
+- If you are going to use the pre-built **Drifty GUI** Docker image from [**GitHub Container registry releases**](https://ghcr.io/saptarshisarkar12/drifty-gui), then run this command:
+ ```bash
+ docker pull ghcr.io/saptarshisarkar12/drifty-gui:master
+ ```
+ Remember to change the tag to the version/branch you want to use.
+
+## Running the Docker image of Drifty GUI
+
+After the Docker image of Drifty GUI has been built/pulled, we need to provide a pathway for the Docker instance to access the display. This can be done by providing it the IP address of your Mac. For simplicity and ease of use, manually (or statically) assigning an IP address to your Mac is suggested.
+
+> [!NOTE]
+>
+>
+> Why static IP address is preferred for running Drifty GUI in Docker on macOS?
+>
+> Now that the image is built/pulled, we need to talk about how the GUI itself is going to be shown on your desktop. The only real relevant issue here pertains to your local IP address assigned to your network interface card on your Mac. You see, in a Linux environment (which macOS is modeled after), programs that run in the Terminal do not have direct access to your graphical environment (Graphical User Interface), so we are going to have to provide the Docker instance with a pathway to access the GUI and that has to be done by telling it what your local IP address is.
+>
+> On most home networks, the typical setup is to have a router where your computer is connected to the LAN (Local Area network) side of the router either via Wi-Fi or an Ethernet cable. And most people just make that connection, find that they can access the Internet and don't look back.
+>
+> We, however, need to look back...
+>
+> Routers use a service called DHCP (Dynamic Host Control Protocol) which uses a reserved pool of IP addresses. If any device connects to your network and when it is set up to use DHCP (which is always the default), it will send out a broadcast packet onto your network asking for an IP address. Your router will see that request, then it will take out an IP address from its pool, and it will give it to your device so that your device can talk on your network, access the Internet, etc.
+>
+> DHCP services are also designed to make that assigned IP address expire after some time (usually three days). In case a device that was on the network is no longer on the network, it can pull that IP address back and put it into the pool so that it doesn't run out of IP addresses. This means that it is possible your local IP address might change in a short period of time. We cannot build a command to run Drifty when your IP address is changing because docker needs to send the graphics to a known IP address.
+>
+> There are usually two generic ways to refer to your local ip address in a linux or Windows environment. The first way is to simply use the word `localhost` and the second way is to use the default home IP address of `127.0.0.1`. Unfortunately, neither of those generics will work in this case, so we have to give the command the exact IP address of your Mac.
+>
+
+### Manually assigning an IP address to your Mac
+
+We first need to know the IP address that the router has assigned to your Mac. Most of the routers will use an IP address that starts with `192.168` so let's see if we have that kind of address assigned to our Mac, by running this command:
+```bash
+ifconfig | grep 192.168
+```
+You should see something like this:
+> inet 192.168.1.123 netmask 0xffffff00 broadcast 192.168.1.255
+
+The **IP address** that is after the word `inet` will be the address that your router assigned to your Mac. Since that address exists in the router's pool of IP addresses, so we cannot statically assign that address to your Mac. So I recommend assigning an address that is lower in value, which has a better chance of being outside the router's address pool. I would use an address like `192.168.1.10`, so we will go with that.
+
+If you are not running at **_least macOS version 13 (Ventura)_**, then refer to [**this article**](https://www.macinstruct.com/tutorials/how-to-set-a-static-ip-address-on-a-mac/) to get the instructions for **statically assigning your IP address**. Otherwise, follow these instructions:
+
+- Go to `System Settings` by clicking on the Apple logo in the top-left corner of your screen.
+- Click on `Network` then click on your network adapter.
+ ![Network Settings' screenshot](https://github.com/user-attachments/assets/f2f54273-1bf4-4286-bc56-88991eb4df84)
+- Click on `Details`
+ ![Details of Network Adapter](https://github.com/user-attachments/assets/d3a43e3f-616d-4286-a527-d1bc2ecbb207)
+- Now you need to change `Configure IPv4` to `Manually` and then type your **static IP address**, **subnet mask** and **gateway**. The subnet mask will look exactly like I have it here, regardless of your ip address and your router will always be `.1` (in most cases) as shown here.
+ ![Configuring IPv4 manually](https://github.com/user-attachments/assets/c7358318-fb90-4554-86c2-6629d7c9476a)
+- Click `OK` and then go back to your Terminal.
+
+### Change the XQuartz settings
+
+A small change in XQuartz is necessary for running **Drifty GUI** via _Docker_. Follow these steps:
+
+- Open **XQuartz** by running this command:
+ ```bash
+ open -a Xquartz
+ ```
+- When XQuartz loads, you will see a window that looks like this:
+ ![XQuartz initial window](https://github.com/user-attachments/assets/762bacba-7770-4590-8396-93c9bc31ace3)
+- Click on the XQuartz menu at the top-left of your screen just next to the Apple logo and select `Settings`. Click on the `Security` tab and then check `Allow connections from network clients` as shown below:
+ ![XQuartz Security window](https://github.com/user-attachments/assets/43fba116-030e-47bf-b5a1-17d09dd64e31)
+
+### Commands to run the Docker image
+
+We have finally set up everything required to run the Docker image of **Drifty GUI**. Now, we need to run the following commands in the Terminal:
+
+- If you want to run the **pre-built** docker image, then run these commands:
+ ```bash
+ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"&
+ open -a Xquartz
+ docker run -e DISPLAY=192.168.1.10:0 ghcr.io/saptarshisarkar12/drifty-gui:master
+ ```
+ Ensure to update the tag to the desired version/branch.
+- To run the **docker image built from your changed source code** (using `docker compose`), execute the following commands:
+ ```bash
+ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"&
+ open -a Xquartz
+ docker compose run -e DISPLAY=192.168.1.10:0 gui
+ ```
diff --git a/Website/app/docs/Faq.md b/Website/app/docs/Faq.md
new file mode 100644
index 000000000..2e1681155
--- /dev/null
+++ b/Website/app/docs/Faq.md
@@ -0,0 +1,36 @@
+# Frequently Asked Questions
+
+1. **Why does Drifty GUI not open on my Windows machine?**
+
+ ➡️ Your Windows machine must have Microsoft Visual C++ Redistributable installed on your machine. You can download and install it from its [official download page](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170)
+
+2. **Which IDE (Integrated Development Environment) should I use to open Drifty App Code in my Local environment?**
+
+ ➡️ You can use any IDE you like. It is recommended to use [IntelliJ IDEA](https://www.jetbrains.com/idea/). You can use the free Community version of IntelliJ IDEA if you do not have a JetBrains subscription.
+
+3. **How can I get updates related to this project?**
+
+ ➡️ You can join our [Discord server](https://discord.com/invite/DeT4jXPfkG) to get updates on this project. You can also watch this repository by clicking on the watch button [here](https://github.com/SaptarshiSarkar12/Drifty) and select notification types to **All Activity** to get all updates on this project.
+
+4. **What technologies does Drifty use?**
+
+ ➡️ The technologies that Drifty uses are as follows:
+ - **Java** - for the backend part of the application
+ - **JavaFX** - for the GUI part of the application
+ - **Docker** - for containerizing Drifty to add support for more platforms and help in faster local development
+ - **Next.js** - for building the official [Website of Drifty](https://saptarshisarkar12.github.io/Drifty/)
+
+5. **How can I contribute to Drifty?**
+
+ ➡️ You can check the [Contribution](Contributing.md) section of this documentation to learn how to contribute to this project.
+
+6. **How can I update Drifty to the latest version?**
+
+ ➡️ Automatic updates are not supported yet and are still a [work-in-progress](https://github.com/SaptarshiSarkar12/Drifty/issues/217). To update Drifty, download [the latest version](https://saptarshisarkar12.github.io/Drifty/download) from the official website and install it.
+
+7. **How can I access the Beta features in Drifty?**
+
+ ➡️ Currently, Beta features are available only through Docker images. You can check the official [GitHub Docs for Drifty](https://github.com/SaptarshiSarkar12/Drifty?tab=readme-ov-file#using-drifty-application-via-docker-).
+
+8. **Do you require any detailed explanations of Drifty?**
+ ➡️ For more queries related to the further improvement to this project, you can raise an [issue](https://github.com/SaptarshiSarkar12/Drifty/issues/new/choose) or reach out to the maintainers on the [discord server](https://discord.com/invite/DeT4jXPfkG). We will be happy to help you out.
diff --git a/Website/app/docs/Overview.md b/Website/app/docs/Overview.md
new file mode 100644
index 000000000..00016525b
--- /dev/null
+++ b/Website/app/docs/Overview.md
@@ -0,0 +1,25 @@
+# Overview
+
+## What is Drifty?
+
+Drifty is an Open-Source interactive File Downloader System. It allows users to download files from the internet with support for popular platforms like YouTube, Instagram and Spotify, etc.
+
+## Key Features
+
+- **Free and Open-Source**: Drifty is free to use and Open-Source forever.
+- **Cross-Platform**: Drifty is available for all major platforms like Windows, macOS, and Linux.
+- **Fast and Reliable**: Drifty is fast and reliable, ensuring that your downloads are completed quickly and without any issues.
+- **Support for Popular Platforms**: Drifty supports downloading files from popular platforms like YouTube, Instagram, and Spotify, etc.
+- **Secure**: Drifty is secure and ensures that your data is safe and protected.
+- **Easy to Use**: Drifty is designed to be user-friendly and convenient to use, even for beginners.
+
+## Why Drifty?
+
+Drifty is a powerful and versatile File Downloader System that offers a wide range of features and capabilities. Whether you need to download videos, music, or other files from the internet, Drifty has you covered. With its intuitive interface and robust functionality, Drifty makes downloading files a breeze.
+
+## Community and Support
+
+Drifty is an Open-Source project that welcomes contributions from the community. If you have any feedback, suggestions, or ideas for improvement, please feel free to reach out to us. We are committed to making Drifty the best File Downloader System available and appreciate your support.
+- **[Join our Discord Community](https://discord.gg/DeT4jXPfkG)**: It is the best place to get help, share your ideas, and connect with maintainers and other users/developers.
+- **[Join our GitHub Discussions](https://github.com/SaptarshiSarkar12/Drifty/discussions)**: Participate in discussions, ask questions, and share your thoughts on Drifty. We would love to hear from you!
+- **[Learn how to contribute](Contributing.md)**: If you are interested in contributing to Drifty, check out our guidelines and get started with your first contribution.
\ No newline at end of file
diff --git a/Website/app/docs/Quickstart.md b/Website/app/docs/Quickstart.md
new file mode 100644
index 000000000..2afe41a6b
--- /dev/null
+++ b/Website/app/docs/Quickstart.md
@@ -0,0 +1,62 @@
+# Quickstart
+
+## Download Drifty
+
+- Go to the official website of Drifty and click on the download button. It will redirect you to the download page.
+ ![Download Design](https://github.com/user-attachments/assets/b42c540b-eb99-4b9c-9c2f-6143d40166f0)
+
+- For Drifty GUI, select the GUI button.
+ ![Application Type](https://github.com/user-attachments/assets/d729f074-0f73-4d79-b562-7717b673d6c7)
+ - If you are using Windows, click on the download button with the **Windows** icon, and it will start downloading the executable file (**`.exe`**). You may also download the **msi** (Microsoft Installer) file by clicking on **Prefer the msi?**.
+ ![Windows Download button highlighted](https://github.com/user-attachments/assets/90865f7c-b0df-4957-9560-9e8a6a8c5bfb)
+
+ - If you are using Linux, click on the download button with the **Linux** icon, and it will start downloading the executable binary.
+ ![Linux Download button highlighted](https://github.com/user-attachments/assets/aad3ad93-3126-4d77-9305-61d68a69a313)
+
+ - If you are using macOS, click on the download button with the **Apple** icon, and it will start downloading the package file (**`.pkg`**).
+ ![MAC Download Exp](https://github.com/user-attachments/assets/35cdd3b7-6ea5-43ba-895b-acf7dc972321)
+
+- For Drifty CLI, select the CLI button.
+ ![Application Type](https://github.com/user-attachments/assets/d729f074-0f73-4d79-b562-7717b673d6c7)
+ - If you are using Windows, click on the download button with the **Windows** icon, and it will start downloading the executable file (**`.exe`**).
+ ![Windows Download button highlighted](https://github.com/user-attachments/assets/efca705d-3699-4fdc-9905-cd63ea36ce65)
+ - If you are using Linux, click on the download button with the **Linux** icon, and it will start downloading the executable binary.
+ ![Linux Download button highlighted](https://github.com/user-attachments/assets/c4677f08-de5f-4ade-9414-881abe82edc4)
+ - If you are using macOS, click on the download button with the **Apple** icon, and it will start downloading the executable binary.
+ ![MAC Download Exp](https://github.com/user-attachments/assets/8ce5fdb0-1cfa-4d88-a470-9068886482a5)
+
+## Installation
+
+- For Drifty GUI,
+ - For Windows MSI, double-click on the downloaded file and follow the installation instructions.
+ | | |
+ | ----------- | ----------- |
+ | ![Windows MSI installation - 1](https://github.com/user-attachments/assets/659ee383-2748-4695-9b34-06da8e22e629) | ![Windows MSI installation - 2](https://github.com/user-attachments/assets/541761d1-ed9b-41a9-a0a4-370353bcf1b1) |
+ | ![Windows MSI installation - 3](https://github.com/user-attachments/assets/22dec7c5-a553-4267-b2ca-b3c9b2bf8d8e) | ![Windows MSI installation - 4](https://github.com/user-attachments/assets/fe5972d5-3f75-4a58-a04b-a2fbe7b6e5ff) |
+
+ Once the installation is complete, you can start using Drifty GUI by searching for it in the Windows Start menu.
+ - For Windows exe, you can directly run Drifty GUI by double-clicking on the downloaded file.
+ - For Linux, open the terminal and navigate to the directory where the binary is downloaded and run the following command:
+ ```bash
+ chmod +x Drifty-GUI_linux
+ ./Drifty-GUI_linux
+ ```
+ - For macOS, double-click on the downloaded package file and follow the installation instructions.
+ | | |
+ | ----------- | ----------- |
+ | | |
+ | | |
+
+ Once the installation is complete, you can start using Drifty GUI by searching for it in the applications' menu.
+- For Drifty CLI,
+ - For Windows, you can directly run Drifty CLI by double-clicking on the downloaded file.
+ - For Linux, open the terminal and navigate to the directory where the binary is downloaded and run the following command:
+ ```bash
+ chmod +x Drifty-CLI_linux
+ ./Drifty-CLI_linux
+ ```
+ - For macOS, open the terminal and navigate to the directory where the binary is downloaded and run the following command:
+ ```bash
+ chmod +x Drifty-CLI_macos
+ ./Drifty-CLI_macos
+ ```
diff --git a/Website/app/docs/Usage/drifty-cli/Overview.md b/Website/app/docs/Usage/drifty-cli/Overview.md
new file mode 100644
index 000000000..ace51a2c4
--- /dev/null
+++ b/Website/app/docs/Usage/drifty-cli/Overview.md
@@ -0,0 +1,149 @@
+# Drifty CLI Overview
+
+Drifty CLI is the command-line interface for Drifty that allows you to download files from the internet with just a few commands. You can integrate Drifty CLI into your scripts and automate the download process. So, it is important to understand the different commands and options available in Drifty CLI.
+
+> [!NOTE]
+> We have assumed that the name of the executable for Drifty CLI is `drifty`. Replace `drifty` with the actual executable name if it is different in your case.
+
+![Drifty CLI Help](https://github.com/user-attachments/assets/b695f3b4-c695-4dfe-a431-9742671488f9)
+
+## Commands
+
+Drifty CLI supports the following commands:
+
+### Help
+
+**Command**: `--help` or `-h`
+
+**Description**: Display the help message with all the available commands and options.
+
+**Usage**:
+
+```bash
+drifty --help
+```
+
+### Version
+
+**Command**: `--version` or `-v`
+
+**Description**: Display the version of Drifty CLI along with its components.
+
+**Usage**:
+
+```bash
+drifty --version
+```
+
+### Batch Download
+
+**Command**: `--batch ` or `-b `
+
+**Description**: Download multiple files without the need to specify the URL each time. You need to create an YAML file with the list of URLs you want to download. You can also specify the directory and file name for each URL. The YAML file should have the following format:
+
+```yaml
+links: ["", "", "", ...]
+# Optional: Specify the directory and file name for each URL
+fileNames: ["", "", "", ...]
+directory: [""]
+directories: ["", "", "", ...]
+```
+
+- **links** (**Required**): List of URLs to download.
+- **fileNames** (**Optional**): List of file names to save the downloaded files. The order should match the order of URLs. If not specified, the file name will be automatically detected from the URL.
+- **directory** or **directories** (**Optional**): Specify the directory where the files will be saved. Use **directory** to save all files in the same directory. Use **directories** to save each file in the corresponding directory specified in the order of URLs. By default, files are saved in the last used directory or the default download directory (`{user_home}/Downloads`) if not specified.
+
+**Example Configuration**:
+
+```yaml
+# batch.yaml (You can name the file as you like)
+links: ["https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz", "https://www.youtube.com/watch?v=pBy1zgt0XPc"]
+fileNames: ["jdk-22.tar.gz", "What is GitHub?.mp4"]
+directories: ["/home/user/Downloads", "/home/user/Videos"]
+```
+
+**Usage**:
+
+```bash
+drifty --batch batch.yaml
+```
+
+### Add links to Queue
+
+**Command**: `--add ...`
+
+**Description**: Add one or more URLs to the download queue. The URLs will be downloaded sequentially.
+
+**Usage**:
+
+```bash
+drifty --add "https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz" "https://www.youtube.com/watch?v=pBy1zgt0XPc"
+```
+
+### List links in Queue
+
+**Command**: `--list`
+
+**Description**: List all the URLs in the download queue.
+
+**Usage**:
+
+```bash
+drifty --list
+```
+
+### Remove links from Queue
+
+**Command**: `--remove ...` or `--remove all`
+
+**Description**: Remove one or more URLs from the download queue. You can specify the index of the URLs to remove, or use `all` to clear the entire queue.
+
+**Usage**:
+
+```bash
+drifty --remove 1 3
+```
+
+### Download from Queue
+
+**Command**: `--get`
+
+**Description**: Start downloading the URLs in the download queue. The URLs will be downloaded sequentially.
+
+**Usage**:
+
+```bash
+drifty --get
+```
+
+### Destination Download Folder
+
+> [!NOTE]
+> This command is not a standalone command. It must be used with the URL of the file you want to download.
+> You can also use the `--name` command in conjunction with this command.
+
+**Command**: `--location ` or `-l `
+
+**Description**: Specify a custom download location for the files. If not specified, you will be prompted to choose the download location each time you download a file (Default download location, Last-used directory, or Custom directory).
+
+**Usage**:
+
+```bash
+drifty https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz --location /home/user/Downloads
+```
+
+### File Name
+
+> [!NOTE]
+> This command is not a standalone command. It must be used with the URL of the file you want to download.
+> You can also use the `--location` command in conjunction with this command.
+
+**Command**: `--name ` or `-n `
+
+**Description**: Specify a custom file name, including the extension if applicable. If not provided, the file name will be automatically detected from the URL.
+
+**Usage**:
+
+```bash
+drifty https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz --name jdk-22.tar.gz
+```
\ No newline at end of file
diff --git a/Website/app/docs/Usage/drifty-cli/downloading-files.md b/Website/app/docs/Usage/drifty-cli/downloading-files.md
new file mode 100644
index 000000000..45395a7d8
--- /dev/null
+++ b/Website/app/docs/Usage/drifty-cli/downloading-files.md
@@ -0,0 +1,73 @@
+# How to download files using Drifty CLI?
+
+Drifty CLI allows you to download files from the internet using a simple command-line interface. There are three ways to download files using Drifty CLI:
+
+1. **Single File Download**: Download individual files by providing their URLs one at a time.
+2. **Batch download**: You can download multiple files by providing a YAML file with the list of URLs.
+3. **Using Drifty CLI Queue**: Add multiple URLs to a download queue, allowing you to download them at your convenience.
+
+## Single file download
+
+1. Open Drifty CLI in your terminal.
+2. You will be prompted to choose the download option. Enter `1` for **Single File download**.
+ ![Download Options Prompt](https://github.com/user-attachments/assets/c1bb0da0-e36c-4229-9e8a-a473a973beaa)
+3. Enter the URL of the video you want to download.
+4. After validating the URL, Drifty will prompt you to choose a download destination folder. Enter
+ - `.` if you want to download the video in the default download directory (which is `{user_home}/Downloads` in most cases).
+ - `L` if you want to use the last used directory.
+ - the absolute path of the directory where you want to save the video, e.g., `/home/user/Videos`.
+
+ ![Download Destination Prompt](https://github.com/user-attachments/assets/1eb90bd7-1ae8-47f3-8a16-e4b8d5c214e6)
+5. The file name will be automatically detected from the URL. You will be prompted to confirm the file name. Enter `Y` to proceed or `N` to enter a custom file name (followed by the file extension, if any).
+ ![File Name Prompt](https://github.com/user-attachments/assets/5c6b0003-2498-457d-b4b3-cade262a19f9)
+6. The file will be downloaded to the specified directory.
+7. After the download is complete, you will be prompted to download another file or exit the application. Enter `Q` to exit or any other key to continue downloading files.
+ ![Exit Prompt](https://github.com/user-attachments/assets/001a1111-d4af-4517-8545-8a5ae831ac70)
+
+## Batch download
+
+1. Open Drifty CLI in your terminal.
+2. You will be prompted to choose the download option. Enter `2` for **Batch download**.
+ ![Download Options Prompt](https://github.com/user-attachments/assets/c1bb0da0-e36c-4229-9e8a-a473a973beaa)
+3. Enter the path to the YAML file containing the list of URLs you want to download.
+ For this example, we are going to use the following data:
+ ```yaml
+ # batch.yml
+ links: ["https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz", "https://www.youtube.com/watch?v=pBy1zgt0XPc"]
+ ```
+ ![Batch File Prompt](https://github.com/user-attachments/assets/d86c42f1-f8f2-44ba-8c96-69be1a76aede)
+4. The batch file will be processed, and if any of those files exist with the same name, or you have previously downloaded any, you will be prompted to skip or re-download them.
+ - Enter `Y` to continue downloading the file. A new file name will be generated, and you will be prompted to confirm the file name.
+ - Enter `N` to skip downloading the file.
+
+ ![File Exists Prompt](https://github.com/user-attachments/assets/6f475d3a-a316-443a-9b17-739a33155a7f)
+5. The files will be downloaded sequentially to the default download directory, as we have not specified a custom download location in our YAML file.
+ ![Batch Download Progress](https://github.com/user-attachments/assets/1ba81b88-ddb4-4721-aa5f-9579d4634e99)
+6. After the download is complete, you will be prompted to download another file or exit the application. Enter `Q` to exit or any other key to continue downloading files.
+ ![Exit Prompt](https://github.com/user-attachments/assets/3e8d7491-bb27-454a-b633-092bc45e0260)
+
+## Using Drifty CLI Queue
+
+1. Open your terminal in the directory containing the Drifty CLI executable.
+2. Check if any URLs are already in the download queue by using the `--list` command.
+ ```bash
+ drifty --list
+ ```
+ ![List Command](https://github.com/user-attachments/assets/bc109432-43ef-461a-bc2e-751ce78e87b4)
+3. Add URLs to the download queue using the `--add` command.
+ ```bash
+ drifty --add "https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz" "https://www.youtube.com/watch?v=pBy1zgt0XPc"
+ ```
+ ![Add Command](https://github.com/user-attachments/assets/5043cfe3-adcf-45a1-aead-33f3dec8a8cd)
+4. You can view the URLs just added to the queue by using the `--list` command.
+ ```bash
+ drifty --list
+ ```
+ ![List Command](https://github.com/user-attachments/assets/b675b9e2-2159-4125-8996-535ba03f6cfe)
+5. Start downloading the URLs in the download queue using the `--get` command.
+ ```bash
+ drifty --get
+ ```
+ ![Get Command](https://github.com/user-attachments/assets/0481a556-fea1-4d4f-9383-8e1d842ee388)
+6. The files will be downloaded sequentially to the default download directory. After the download is complete, Drifty CLI will automatically remove the URLs from the queue and exit.
+ ![Queue Download Done](https://github.com/user-attachments/assets/6ecea884-9587-4a7a-9a62-8b3052ac3a1d)
\ No newline at end of file
diff --git a/Website/app/docs/Usage/drifty-gui/Overview.md b/Website/app/docs/Usage/drifty-gui/Overview.md
new file mode 100644
index 000000000..bd41d770f
--- /dev/null
+++ b/Website/app/docs/Usage/drifty-gui/Overview.md
@@ -0,0 +1,46 @@
+# Drifty GUI Overview
+
+Drifty GUI is a graphical user interface for Drifty that allows you to download files from the internet with just a few clicks. It provides a simple and intuitive interface that makes downloading files easy and convenient.
+You will spend most of your time using the main interface of Drifty GUI, so it's important to understand its components and their functions.
+
+![Drifty GUI Main Interface](https://github.com/user-attachments/assets/4b0626cc-84d5-41d0-94b3-f3ceaa4670df)
+
+## The Menu Bar
+
+The menu bar is located at the top of the window and contains the following menus:
+
+- **Menu**: Contains options for opening the **Project Website** and the **Exit** option.
+ ![Menu](https://github.com/user-attachments/assets/b3cc2196-11d2-4bca-b621-599e4184258e)
+- **Edit**: Contains options to **Clear Download History** and open the **Settings** window.
+ ![Edit](https://github.com/user-attachments/assets/1c990f41-7c96-4b0b-bf7b-b577e171b487)
+- **Window**: Contains the option to **Toggle Full Screen**.
+ ![Window](https://github.com/user-attachments/assets/cda8166e-31db-4e74-8e18-661d4ae30803)
+- **Help**: Contains options to **Contact Support**, **Contribute**, **Report a Bug**, **Report a Security Issue**, **Suggest a feature**, and **About Drifty**.
+ ![Help](https://github.com/user-attachments/assets/d0e39364-56b2-441f-a308-e47f3feb6047)
+
+## The Link Input Field
+
+The link input field is located at the top-center portion of the window and is where you can paste the URL of the file you want to download. Once you have pasted the URL, Drifty will automatically detect the file name and check if it already exists in the download history or download directories to prevent duplicate downloads.
+![Auto-detecting file name](https://github.com/user-attachments/assets/bff2ddc0-2de9-4631-be21-02aee87da3ee)
+
+## The Directory Input Field
+
+The directory input field is located in the middle-center portion of the window and is where you can specify the directory where you want to save the downloaded file. By default, the directory is set to `{user_home}/Downloads`. You can manage directories by right-clicking on the directory input field to open a context menu that lists all previously used download directories. You can also **Add** a new directory by clicking on **Add Folder**.
+![Directory Context Menu](https://github.com/user-attachments/assets/303a593b-392f-46ea-891b-fe8e5a02fe49)
+
+## The File Name Input Field
+
+The file name input field is located at the bottom-center portion of the window and is where you can specify the name of the file you want to save. By default, the file name is automatically detected from the URL.
+
+## The Auto-Paste Checkbox
+
+The auto-paste checkbox is located at the top-right portion of the window and is used to enable or disable the auto-paste feature. When enabled, Drifty will automatically paste the URL from the clipboard into the link input field. When you return to the app after copying a URL, it will automatically paste into the link input field.
+
+## The Start Button
+
+The start button is located at the bottom-right portion of the window and is used to start the download process. When you click the start button, Drifty will start downloading all the files specified in the task list, one by one.
+
+## The Download Queue
+
+The download queue is located on the left side of the window and displays the list of files that are currently in the download queue. You can manage the download queue by right-clicking on a file to open the context menu, which allows you to **Delete** the selected file from the queue or **Clear** files from the queue. The menu also has the **Information** option to show the **Help** window.
+![Download Queue Context Menu](https://github.com/user-attachments/assets/f719d2f5-7ed9-4f4a-b29f-b3c1254a89c5)
diff --git a/Website/app/docs/Usage/drifty-gui/downloading-files.md b/Website/app/docs/Usage/drifty-gui/downloading-files.md
new file mode 100644
index 000000000..5a12426b1
--- /dev/null
+++ b/Website/app/docs/Usage/drifty-gui/downloading-files.md
@@ -0,0 +1,17 @@
+# How to download files using Drifty GUI?
+
+Drifty GUI allows you to download files from the internet with just a few clicks. Follow these steps to download files using Drifty GUI:
+
+1. Open the Drifty GUI app.
+2. Paste the URL of the file you want to download in the link input field.
+3. Wait for Drifty to automatically detect the file name and set it as the default file name.
+ https://github.com/user-attachments/assets/2cafaf6b-3598-451a-bcc1-b1159364c548
+4. If you have previously downloaded the file or a file with the same name exists in the download directory, Drifty will prompt you to skip or re-download the file.
+ - Click on **Yes** to continue downloading the file with a new name. You can rename the file by editing the textbox in the popup window.
+ ![File rename textbox](https://github.com/user-attachments/assets/8aa593bb-e683-4eb4-aac6-bac7f9f355e2)
+ - Click on **No** to skip downloading the file.
+
+ ![File Exists Prompt](https://github.com/user-attachments/assets/aa5fe423-63d6-4266-8eff-32b2c360dc18)
+5. The file will be added to the download queue shown on the left side of the window.
+6. Click on the **Start** button to begin downloading all the files in the queue.
+ https://github.com/user-attachments/assets/48349e1a-f741-4f17-977d-91a1d6876b2a
\ No newline at end of file