diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cf58340
--- /dev/null
+++ b/README.md
@@ -0,0 +1,181 @@
+# Droplet SyncSession
+
+Droplet SyncSession is a free and open-source model/tool that allows you to **grab sessions directly from a Trello board and import them into a Roblox UI**.
+It streamlines session management for Roblox developers, making it easy to sync Trello data with in-game interfaces.
+
+---
+
+## โจ Features
+- ๐ฅ **Trello Integration** โ Fetch sessions directly from your Trello board.
+- ๐ฎ **Roblox UI Import** โ Automatically display sessions inside Roblox.
+- โก **Free & Open Source** โ Available for everyone to use and contribute.
+- ๐ง **Easy Setup** โ Simple configuration with clear documentation.
+- ๐ **Silent Updates** โ Deploy script ensures automatic updates without restarting your setup.
+
+---
+
+## ๐ Documentation
+For full setup and configuration details, please refer to our official documentation:
+๐ [Droplet Systems SyncSession Docs](https://droplet-systems.gitbook.io/syncsession)
+
+---
+
+## โ๏ธ Configuration Example
+
+SyncSession requires a configuration module to connect your Trello board with Roblox.
+Below is a sample `Config.lua` you can adapt to your own project:
+
+```lua
+local Players = game:GetService("Players")
+
+return {
+ Key = "", -- Your Trello API Key
+ Token = "", -- Your Trello Token
+ BoardName = "Sessions", -- Trello board name
+
+ List = "Upcoming", -- Trello list to pull sessions from
+ Labels = false, -- Whether to use Trello labels
+
+ Fields = {
+ {
+ Argument = "Host",
+ Image = nil,
+ ImageColor = Color3.new(255, 255, 255),
+
+ GetImage = function(Value)
+ local Status, Identifier = pcall(function()
+ return Players:GetUserIdFromNameAsync(Value)
+ end)
+
+ if not Status then Identifier = nil end
+
+ if Identifier then
+ return string.format("rbxthumb://type=AvatarHeadShot&id=%s&w=420&h=420", Identifier)
+ else
+ return "rbxassetid://7072717759"
+ end
+ end,
+
+ Value = "%s is hosting.",
+ GetValue = function(Value)
+ local Status, Result = pcall(function()
+ return Players:GetUserIdFromNameAsync(Value)
+ end)
+
+ if not Status then Result = nil end
+
+ if Result then
+ return Value
+ else
+ return "Unknown user"
+ end
+ end,
+ },
+
+ {
+ Argument = "Co-Host",
+ Image = nil,
+ ImageColor = Color3.new(255, 255, 255),
+
+ GetImage = function(Value)
+ local Status, Identifier = pcall(function()
+ return Players:GetUserIdFromNameAsync(Value)
+ end)
+
+ if not Status then Identifier = nil end
+
+ if Identifier then
+ return string.format("rbxthumb://type=AvatarHeadShot&id=%s&w=420&h=420", Identifier)
+ else
+ return "rbxassetid://7072717759"
+ end
+ end,
+
+ Value = "%s is co-hosting.",
+ GetValue = function(Value)
+ local Status, Result = pcall(function()
+ return Players:GetUserIdFromNameAsync(Value)
+ end)
+
+ if not Status then Result = nil end
+
+ if Result then
+ return Value
+ else
+ return "Unknown user"
+ end
+ end,
+ },
+ },
+
+ Seperator = ": ",
+ Wait = 30, -- Refresh interval (seconds)
+}
+```
+
+---
+
+## ๐ Setup Information
+
+### ๐ฆ Deploy Script
+SyncSession uses a **Deploy Script** that requires our source code.
+Using the Deploy Script allows us to **silently update** the system without requiring you to restart the setup process.
+
+โ ๏ธ **Note:**
+We do not recommend directly using the source code unless you need to make changes that arenโt possible with the builtโin plugin system.
+If you use the raw source code, you will **not** receive automatic updates or bug fixes.
+
+---
+
+### ๐ Setup Steps
+1. **Get the Deploy Model** (link provided in documentation).
+2. Move the **Deploy Script** into `ServerScriptService`.
+3. Create a folder named **Boards** inside `Workspace`.
+ - This folder should contain **Parts** (your actual boards).
+ - The script automatically adds an interface to them on server startup.
+ - Parts donโt have to be basic blocks โ **Unions, MeshParts, etc.** will also work.
+4. Recommended part size: **9 ร 6 ร 0.1**.
+
+---
+
+### โ๏ธ HttpService Requirement
+Some features rely on **HttpService**.
+To check if itโs enabled:
+
+```lua
+local HttpService = game:GetService("HttpService")
+print(HttpService.HttpEnabled)
+```
+
+- If `true` is printed โ HttpService is enabled โ
+- If `false` is printed โ HttpService is disabled โ
+
+Make sure you have **Output** open to see the response.
+
+---
+
+## ๐ค Credits
+- **Creator**: [@Nicklaus-s](https://github.com/Nicklaus-s)
+- **Contributor**: [@metricrb](https://github.com/metricrb)
+
+---
+
+## ๐ License
+This project is free to use under the terms specified in the repository. Contributions are welcome!
+
+---
+
+## ๐ก Contributing
+We encourage community contributions!
+- Fork the repo
+- Create a new branch
+- Submit a pull request
+
+---
+
+## ๐ Community
+Join our **Discord** to:
+- Get support
+- Stay updated on new free, openโsourced products
+- Connect with other developers
+