From 708068a09e1817e493a1f186567c198aebbaa27b Mon Sep 17 00:00:00 2001
From: Timothy Carambat <rambat1010@gmail.com>
Date: Mon, 23 Oct 2023 13:10:34 -0700
Subject: [PATCH] AnythingLLM UI overhaul (#278)

* v2 Login screen (#254)

* adding gradients for modal and sidebar

* adding font setup

* redesigned login screen for MultiUserAuth

* completed multi user mode login screen

* linting

* login screen for single user auth redesign complete

* created reusable gradient for login screen

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* v2 sidebar (#262)

* adding gradients for modal and sidebar

* adding font setup

* redesigned login screen for MultiUserAuth

* completed multi user mode login screen

* linting

* login screen for single user auth redesign complete

* WIP sidebar redesign

* created reusable gradient for login screen

* remove dark mode items

* update new workspace button

* completed sidebar for desktop view

* add interactivity states

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* remove duplicated pkg

* v2 settings (#264)

* adding gradients for modal and sidebar

* adding font setup

* redesigned login screen for MultiUserAuth

* completed multi user mode login screen

* linting

* login screen for single user auth redesign complete

* WIP sidebar redesign

* created reusable gradient for login screen

* remove dark mode items

* update new workspace button

* completed sidebar for desktop view

* WIP added colors/gradients to admin settings

* WIP fix discord logo import

* WIP settings redesign - added routes for general settings and restyled components

* WIP settings for LLM Preference, VectorDB, ExportImport

* settings menu UI complete WIP functionality

* settings fully functional/removed dark mode logo

* linting

* removing unneeded dependency

* Fix admin sidebar visibility
Fix API Keys location and work with single/mum
Fix Appearance location - WIP on funcitonality

* update api key page

* fix permissions for appearance

* Single user mode fixes

* fix multi user mode enabled

* fix import export

* Rename AdminSidebar to SettingsSidebar

* Fix mobile sidebar links

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* V2 user logout (#265)

* Add user logout button

* hide other 3 dot button

* wrap admin routes

* V2 workspace modal (#267)

Update new workspace modal
remove duplicate tailwind colors

* v2 Settings modal styles (#266)

* EditUserModal styles complete

* workspaces modals styles complete

* create invite link modal styles complete

* create new api key modal styles complete

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* v2 Chats Redesign (#270)

* fix default message for new workspace

* prompt input box ui redesign complete

* ui tweak to prompt input

* WIP chat msg redesign

* chat container and historical chat messages redesign

* manage workspace modal appears when clicking upload a document on empty workspace

* fixed loading skeleton styles

* citations redesign complete

* restyle pending chat and prompt reply components

* default chat messages styles updated

* linting

* update how chats are returned

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* Onboarding modal flow for first time setup (#274)

* WIP onboarding modal flow

* onboarding flow complete and private route redirection for onboarding setep

* redirect to home on onboarding complete

* add onboarding redirect using paths.onboarding()

* Apply changes to auth flow, onboarding determination, and flows

* remove formref

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* v2 document picker (#275)

* remove unneeded comments

* WIP document picker UI

* WIP basic UI complete for document picker tab and settings tab

* linting

* settings menu complete, document row WIP

* WIP document picker loading from localFiles

* WIP file picker logic

* refactoring document picker to work with backend

* WIP refactoring document picker

* WIP refactor document picker to work with backend

* file uploading with dropzone working

* WIP deleting file when not embedded

* WIP embeddings

* WIP embedding with temp button and hardcoded paths

* WIP placeholder for WorkspaceDirectory component

* WIP WorkspaceDirectory

* WIP

* sort workspaceDocs and availibleDocs complete

* added directories util

* add and remove document from ws working

* v2 document picker complete

* reference modal ui bug fixes

* truncate function bug fix

* ManageWorkspace modal bug fixes

* blocking mobile users modal for workspace settings

* mobile ui fixes

* linting

* ui padding fixes

* citation bug fixes

* code review changes

* debounce handlers

* change tempFile object to array

* selection count fix

* Convert workspace modal to div
Memo workspace settings
update conditional rendering of workspace settings

* Show no documents

---------

Co-authored-by: timothycarambat <rambat1010@gmail.com>

* mobile sidebar styles

* padding on Mobile view
mobile sidebar items

* UI touchup

* suggestion implementations

* CSS fixes and animation perfomance change to GPU accelerated and 60fps

* change will-change

* remove transitions from onboarding modals, simplify on-change handlers

* Swap onboarding to memoized components and debounce onchange handlers

* remove console log

* remove Avenir font

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
---
 frontend/package.json                         |   2 +
 frontend/public/fonts/AvenirNext.ttf          | Bin 46240 -> 0 bytes
 frontend/public/fonts/PlusJakartaSans.ttf     | Bin 0 -> 176144 bytes
 frontend/src/App.jsx                          |  60 ++-
 .../src/components/AdminSidebar/index.jsx     | 323 --------------
 frontend/src/components/ChatBubble/index.jsx  |  37 +-
 frontend/src/components/DefaultChat/index.jsx | 348 ++++++++++------
 .../components/EditingChatBubble/index.jsx    |  41 +-
 frontend/src/components/Icons/Discord.jsx     |  15 -
 .../components/LLMProviderOption/index.jsx    |  37 ++
 .../ApiKey/index.jsx                          |   0
 .../Appearance/index.jsx                      |   9 +-
 .../ExportImport/index.jsx                    |   0
 .../LLMSelection/index.jsx                    |   5 +-
 .../MultiUserMode/index.jsx                   |   0
 .../PasswordProtection/index.jsx              |   0
 .../VectorDbs/index.jsx                       |   0
 .../{Settings => LegacySettings}/index.jsx    |   0
 .../Documents/ConfirmationModal/index.jsx     |  89 ----
 .../Documents/Directory/FileRow/index.jsx     | 106 +++++
 .../Documents/Directory/FolderRow/index.jsx   |  80 ++++
 .../Documents/Directory/index.jsx             | 273 ++++++------
 .../UploadFile}/FileUploadProgress/index.jsx  |  34 +-
 .../Documents/UploadFile/index.jsx            | 111 +++++
 .../WorkspaceFileRow/index.jsx                |  99 +++++
 .../Documents/WorkspaceDirectory/index.jsx    | 122 ++++++
 .../Modals/MangeWorkspace/Documents/index.jsx | 343 ++++++++-------
 .../Modals/MangeWorkspace/Settings/index.jsx  | 331 ++++++++-------
 .../Modals/MangeWorkspace/Upload/index.jsx    | 202 ---------
 .../Modals/MangeWorkspace/index.jsx           | 181 ++++----
 .../src/components/Modals/NewWorkspace.jsx    |  30 +-
 .../Modals/Password/MultiUserAuth.jsx         |  43 +-
 .../Modals/Password/SingleUserAuth.jsx        |  34 +-
 .../src/components/Modals/Password/index.jsx  |  23 +-
 frontend/src/components/Preloader.jsx         |   6 +-
 .../src/components/PrivateRoute/index.jsx     |  70 +++-
 .../src/components/SettingsSidebar/index.jsx  | 394 ++++++++++++++++++
 .../Sidebar/ActiveWorkspaces/index.jsx        |  67 ++-
 .../Sidebar/SettingsOverlay/index.jsx         | 188 ---------
 frontend/src/components/Sidebar/index.jsx     | 213 ++++------
 frontend/src/components/UserIcon/index.jsx    |   9 +-
 frontend/src/components/UserMenu/index.jsx    |  74 ++++
 .../src/components/VectorDBOption/index.jsx   |  39 ++
 .../ChatHistory/Citation/index.jsx            | 196 ++++++---
 .../ChatHistory/HistoricalMessage/index.jsx   |  77 ++--
 .../ChatHistory/PromptReply/index.jsx         |  65 ++-
 .../ChatContainer/ChatHistory/index.jsx       |  40 +-
 .../ChatContainer/PromptInput/index.jsx       | 226 +++-------
 .../WorkspaceChat/ChatContainer/index.jsx     |   4 +-
 .../WorkspaceChat/LoadingChat/index.jsx       |  24 +-
 frontend/src/hooks/useLogo.js                 |  15 +-
 frontend/src/index.css                        |  93 +++--
 ...hing-llm-dark.png => anything-llm-old.png} | Bin
 ...nything-llm-light.png => anything-llm.png} | Bin
 frontend/src/models/admin.js                  |  44 --
 frontend/src/models/system.js                 |  40 +-
 .../src/pages/Admin/Chats/ChatRow/index.jsx   |  35 +-
 frontend/src/pages/Admin/Chats/index.jsx      |  32 +-
 .../Admin/Invitations/InviteRow/index.jsx     |  27 +-
 .../Invitations/NewInviteModal/index.jsx      |  27 +-
 .../src/pages/Admin/Invitations/index.jsx     |  30 +-
 frontend/src/pages/Admin/System/index.jsx     |  32 +-
 .../pages/Admin/Users/NewUserModal/index.jsx  |  33 +-
 .../Users/UserRow/EditUserModal/index.jsx     |  35 +-
 .../src/pages/Admin/Users/UserRow/index.jsx   |  15 +-
 frontend/src/pages/Admin/Users/index.jsx      |  34 +-
 .../Workspaces/NewWorkspaceModal/index.jsx    |  28 +-
 .../EditWorkspaceUsersModal/index.jsx         |  33 +-
 .../Admin/Workspaces/WorkspaceRow/index.jsx   |  25 +-
 frontend/src/pages/Admin/Workspaces/index.jsx |  28 +-
 .../ApiKeys/ApiKeyRow/index.jsx               |  29 +-
 .../ApiKeys/NewApiKeyModal/index.jsx          |  36 +-
 .../ApiKeys/index.jsx                         |  43 +-
 .../Appearance/index.jsx                      | 147 ++++---
 .../GeneralSettings/ExportImport/index.jsx    | 190 +++++++++
 .../GeneralSettings/LLMPreference/index.jsx   | 256 ++++++++++++
 .../pages/GeneralSettings/Security/index.jsx  | 337 +++++++++++++++
 .../GeneralSettings/VectorDatabase/index.jsx  | 339 +++++++++++++++
 frontend/src/pages/Login/index.jsx            |  11 +
 frontend/src/pages/Main/index.jsx             |  11 +-
 .../Steps/AppearanceSetup/index.jsx           | 136 ++++++
 .../Steps/CreateFirstWorkspace/index.jsx      |  60 +++
 .../Steps/LLMSelection/index.jsx              | 231 ++++++++++
 .../Steps/MultiUserSetup/index.jsx            | 121 ++++++
 .../Steps/PasswordProtection/index.jsx        | 107 +++++
 .../Steps/UserModeSelection/index.jsx         |  47 +++
 .../Steps/VectorDatabaseConnection/index.jsx  | 310 ++++++++++++++
 .../OnboardingFlow/OnboardingModal/index.jsx  | 109 +++++
 frontend/src/pages/OnboardingFlow/index.jsx   |  31 ++
 frontend/src/pages/WorkspaceChat/index.jsx    |   2 +-
 frontend/src/utils/constants.js               |   3 +
 frontend/src/utils/directories.js             |  34 ++
 frontend/src/utils/paths.js                   |  32 +-
 frontend/tailwind.config.js                   |  43 +-
 frontend/yarn.lock                            |  10 +
 server/.gitignore                             |   3 +-
 server/endpoints/system.js                    |  93 +++--
 server/models/user.js                         |   2 +-
 server/models/workspaceChats.js               |   2 +
 server/storage/anythingllm.db.bak             | Bin 0 -> 106496 bytes
 server/storage/assets/anything-llm-dark.png   | Bin 8413 -> 0 bytes
 ...nything-llm-light.png => anything-llm.png} | Bin
 server/swagger/index.js                       |   4 +-
 server/utils/files/logo.js                    |  16 +-
 server/utils/helpers/updateENV.js             |   5 +-
 105 files changed, 5467 insertions(+), 2609 deletions(-)
 delete mode 100644 frontend/public/fonts/AvenirNext.ttf
 create mode 100644 frontend/public/fonts/PlusJakartaSans.ttf
 delete mode 100644 frontend/src/components/AdminSidebar/index.jsx
 delete mode 100644 frontend/src/components/Icons/Discord.jsx
 create mode 100644 frontend/src/components/LLMProviderOption/index.jsx
 rename frontend/src/components/Modals/{Settings => LegacySettings}/ApiKey/index.jsx (100%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/Appearance/index.jsx (96%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/ExportImport/index.jsx (100%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/LLMSelection/index.jsx (98%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/MultiUserMode/index.jsx (100%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/PasswordProtection/index.jsx (100%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/VectorDbs/index.jsx (100%)
 rename frontend/src/components/Modals/{Settings => LegacySettings}/index.jsx (100%)
 delete mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/ConfirmationModal/index.jsx
 create mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FileRow/index.jsx
 create mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FolderRow/index.jsx
 rename frontend/src/components/Modals/MangeWorkspace/{Upload => Documents/UploadFile}/FileUploadProgress/index.jsx (63%)
 create mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx
 create mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx
 create mode 100644 frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/index.jsx
 delete mode 100644 frontend/src/components/Modals/MangeWorkspace/Upload/index.jsx
 create mode 100644 frontend/src/components/SettingsSidebar/index.jsx
 delete mode 100644 frontend/src/components/Sidebar/SettingsOverlay/index.jsx
 create mode 100644 frontend/src/components/UserMenu/index.jsx
 create mode 100644 frontend/src/components/VectorDBOption/index.jsx
 rename frontend/src/media/logo/{anything-llm-dark.png => anything-llm-old.png} (100%)
 rename frontend/src/media/logo/{anything-llm-light.png => anything-llm.png} (100%)
 rename frontend/src/pages/{Admin => GeneralSettings}/ApiKeys/ApiKeyRow/index.jsx (64%)
 rename frontend/src/pages/{Admin => GeneralSettings}/ApiKeys/NewApiKeyModal/index.jsx (64%)
 rename frontend/src/pages/{Admin => GeneralSettings}/ApiKeys/index.jsx (62%)
 rename frontend/src/pages/{Admin => GeneralSettings}/Appearance/index.jsx (54%)
 create mode 100644 frontend/src/pages/GeneralSettings/ExportImport/index.jsx
 create mode 100644 frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
 create mode 100644 frontend/src/pages/GeneralSettings/Security/index.jsx
 create mode 100644 frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx
 create mode 100644 frontend/src/pages/Login/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/AppearanceSetup/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/CreateFirstWorkspace/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/LLMSelection/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/MultiUserSetup/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/PasswordProtection/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/UserModeSelection/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/VectorDatabaseConnection/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/OnboardingModal/index.jsx
 create mode 100644 frontend/src/pages/OnboardingFlow/index.jsx
 create mode 100644 frontend/src/utils/directories.js
 create mode 100644 server/storage/anythingllm.db.bak
 delete mode 100644 server/storage/assets/anything-llm-dark.png
 rename server/storage/assets/{anything-llm-light.png => anything-llm.png} (100%)

diff --git a/frontend/package.json b/frontend/package.json
index eb3af3cff..75bbf868e 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -12,8 +12,10 @@
   "dependencies": {
     "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
     "@metamask/jazzicon": "^2.0.0",
+    "@phosphor-icons/react": "^2.0.13",
     "buffer": "^6.0.3",
     "he": "^1.2.0",
+    "lodash.debounce": "^4.0.8",
     "markdown-it": "^13.0.1",
     "pluralize": "^8.0.0",
     "react": "^18.2.0",
diff --git a/frontend/public/fonts/AvenirNext.ttf b/frontend/public/fonts/AvenirNext.ttf
deleted file mode 100644
index 271ee1bc569832dd5c7d7d7f830a2ae1b5052283..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 46240
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
ZiZYzBT?9Tl==7!o-k_n*(?{oZ0{{gJN(BG_

diff --git a/frontend/public/fonts/PlusJakartaSans.ttf b/frontend/public/fonts/PlusJakartaSans.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..bdd498505bc2000b995f4978fa539968a0ed5fbe
GIT binary patch
literal 176144
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

literal 0
HcmV?d00001

diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index b6cfc7eb1..2b48a3636 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -4,6 +4,7 @@ import { ContextWrapper } from "./AuthContext";
 import PrivateRoute, { AdminRoute } from "./components/PrivateRoute";
 import { ToastContainer } from "react-toastify";
 import "react-toastify/dist/ReactToastify.css";
+import Login from "./pages/Login";
 
 const Main = lazy(() => import("./pages/Main"));
 const InvitePage = lazy(() => import("./pages/Invite"));
@@ -13,21 +14,63 @@ const AdminInvites = lazy(() => import("./pages/Admin/Invitations"));
 const AdminWorkspaces = lazy(() => import("./pages/Admin/Workspaces"));
 const AdminChats = lazy(() => import("./pages/Admin/Chats"));
 const AdminSystem = lazy(() => import("./pages/Admin/System"));
-const AdminAppearance = lazy(() => import("./pages/Admin/Appearance"));
-const AdminApiKeys = lazy(() => import("./pages/Admin/ApiKeys"));
+const GeneralAppearance = lazy(() =>
+  import("./pages/GeneralSettings/Appearance")
+);
+const GeneralApiKeys = lazy(() => import("./pages/GeneralSettings/ApiKeys"));
+
+const GeneralLLMPreference = lazy(() =>
+  import("./pages/GeneralSettings/LLMPreference")
+);
+const GeneralVectorDatabase = lazy(() =>
+  import("./pages/GeneralSettings/VectorDatabase")
+);
+const GeneralExportImport = lazy(() =>
+  import("./pages/GeneralSettings/ExportImport")
+);
+const GeneralSecurity = lazy(() => import("./pages/GeneralSettings/Security"));
+
+const OnboardingFlow = lazy(() => import("./pages/OnboardingFlow"));
 
 export default function App() {
   return (
     <Suspense fallback={<div />}>
       <ContextWrapper>
         <Routes>
-          <Route path="/" element={<Main />} />
+          <Route path="/" element={<PrivateRoute Component={Main} />} />
+          <Route path="/login" element={<Login />} />
           <Route
             path="/workspace/:slug"
             element={<PrivateRoute Component={WorkspaceChat} />}
           />
           <Route path="/accept-invite/:code" element={<InvitePage />} />
 
+          {/* General Routes */}
+          <Route
+            path="/general/llm-preference"
+            element={<PrivateRoute Component={GeneralLLMPreference} />}
+          />
+          <Route
+            path="/general/vector-database"
+            element={<PrivateRoute Component={GeneralVectorDatabase} />}
+          />
+          <Route
+            path="/general/export-import"
+            element={<PrivateRoute Component={GeneralExportImport} />}
+          />
+          <Route
+            path="/general/security"
+            element={<PrivateRoute Component={GeneralSecurity} />}
+          />
+          <Route
+            path="/general/appearance"
+            element={<PrivateRoute Component={GeneralAppearance} />}
+          />
+          <Route
+            path="/general/api-keys"
+            element={<PrivateRoute Component={GeneralApiKeys} />}
+          />
+
           {/* Admin Routes */}
           <Route
             path="/admin/system-preferences"
@@ -49,14 +92,9 @@ export default function App() {
             path="/admin/workspace-chats"
             element={<AdminRoute Component={AdminChats} />}
           />
-          <Route
-            path="/admin/appearance"
-            element={<AdminRoute Component={AdminAppearance} />}
-          />
-          <Route
-            path="/admin/api-keys"
-            element={<AdminRoute Component={AdminApiKeys} />}
-          />
+
+          {/* Onboarding Flow */}
+          <Route path="/onboarding" element={<OnboardingFlow />} />
         </Routes>
         <ToastContainer />
       </ContextWrapper>
diff --git a/frontend/src/components/AdminSidebar/index.jsx b/frontend/src/components/AdminSidebar/index.jsx
deleted file mode 100644
index a583cb326..000000000
--- a/frontend/src/components/AdminSidebar/index.jsx
+++ /dev/null
@@ -1,323 +0,0 @@
-import React, { useEffect, useRef, useState } from "react";
-import {
-  BookOpen,
-  Eye,
-  GitHub,
-  Key,
-  Mail,
-  Menu,
-  MessageSquare,
-  Settings,
-  Users,
-  X,
-} from "react-feather";
-import IndexCount from "../Sidebar/IndexCount";
-import LLMStatus from "../Sidebar/LLMStatus";
-import paths from "../../utils/paths";
-import Discord from "../Icons/Discord";
-import useLogo from "../../hooks/useLogo";
-
-export default function AdminSidebar() {
-  const { logo } = useLogo();
-  const sidebarRef = useRef(null);
-
-  return (
-    <>
-      <div
-        ref={sidebarRef}
-        style={{ height: "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative m-[16px] rounded-[26px] bg-white dark:bg-black-900 min-w-[15.5%] p-[18px] "
-      >
-        <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
-          {/* Header Information */}
-          <div className="flex w-full items-center justify-between">
-            <div className="flex shrink-0 max-w-[50%] items-center justify-start">
-              <img
-                src={logo}
-                alt="Logo"
-                className="rounded max-h-[40px]"
-                style={{ objectFit: "contain" }}
-              />
-            </div>
-            <div className="flex gap-x-2 items-center text-slate-500">
-              <a
-                href={paths.home()}
-                className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-stone-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-              >
-                <X className="h-4 w-4" />
-              </a>
-            </div>
-          </div>
-
-          {/* Primary Body */}
-          <div className="h-[100%] flex flex-col w-full justify-between pt-4 overflow-y-hidden">
-            <div className="h-auto sidebar-items dark:sidebar-items">
-              <div className="flex flex-col gap-y-4 h-[65vh] pb-8 overflow-y-scroll no-scroll">
-                <Option
-                  href={paths.admin.system()}
-                  btnText="System Preferences"
-                  icon={<Settings className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.invites()}
-                  btnText="Invitation Management"
-                  icon={<Mail className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.users()}
-                  btnText="User Management"
-                  icon={<Users className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.workspaces()}
-                  btnText="Workspace Management"
-                  icon={<BookOpen className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.chats()}
-                  btnText="Workspace Chat Management"
-                  icon={<MessageSquare className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.appearance()}
-                  btnText="Appearance"
-                  icon={<Eye className="h-4 w-4 flex-shrink-0" />}
-                />
-                <Option
-                  href={paths.admin.apiKeys()}
-                  btnText="API Keys"
-                  icon={<Key className="h-4 w-4 flex-shrink-0" />}
-                />
-              </div>
-            </div>
-            <div>
-              <div className="flex flex-col gap-y-2">
-                <div className="w-full flex items-center justify-between">
-                  <LLMStatus />
-                  <IndexCount />
-                </div>
-              </div>
-
-              {/* Footer */}
-              <div className="flex items-end justify-between mt-2">
-                <div className="flex gap-x-1 items-center">
-                  <a
-                    href={paths.github()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-                  >
-                    <GitHub className="h-4 w-4 " />
-                  </a>
-                  <a
-                    href={paths.docs()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-                  >
-                    <BookOpen className="h-4 w-4 " />
-                  </a>
-                  <a
-                    href={paths.discord()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 dark:bg-slate-800 hover:bg-slate-800 group"
-                  >
-                    <Discord className="h-4 w-4 stroke-slate-400 group-hover:stroke-slate-200 dark:group-hover:stroke-slate-200" />
-                  </a>
-                </div>
-                <a
-                  href={paths.mailToMintplex()}
-                  className="transition-all duration-300 text-xs text-slate-200 dark:text-slate-600 hover:text-blue-600 dark:hover:text-blue-400"
-                >
-                  @MintplexLabs
-                </a>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </>
-  );
-}
-
-export function SidebarMobileHeader() {
-  const { logo } = useLogo();
-  const sidebarRef = useRef(null);
-  const [showSidebar, setShowSidebar] = useState(false);
-  const [showBgOverlay, setShowBgOverlay] = useState(false);
-
-  useEffect(() => {
-    function handleBg() {
-      if (showSidebar) {
-        setTimeout(() => {
-          setShowBgOverlay(true);
-        }, 300);
-      } else {
-        setShowBgOverlay(false);
-      }
-    }
-    handleBg();
-  }, [showSidebar]);
-
-  return (
-    <>
-      <div className="flex justify-between relative top-0 left-0 w-full rounded-b-lg px-2 pb-4 bg-white dark:bg-black-900 text-slate-800 dark:text-slate-200">
-        <button
-          onClick={() => setShowSidebar(true)}
-          className="rounded-md bg-stone-200 p-2 flex items-center justify-center text-slate-800 hover:bg-stone-300 group dark:bg-stone-800 dark:text-slate-200 dark:hover:bg-stone-900 dark:border dark:border-stone-800"
-        >
-          <Menu className="h-6 w-6" />
-        </button>
-        <div className="flex shrink-0 w-fit items-center justify-start">
-          <img
-            src={logo}
-            alt="Logo"
-            className="rounded w-full max-h-[40px]"
-            style={{ objectFit: "contain" }}
-          />
-        </div>
-      </div>
-      <div
-        style={{
-          transform: showSidebar ? `translateX(0vw)` : `translateX(-100vw)`,
-        }}
-        className={`z-99 fixed top-0 left-0 transition-all duration-500 w-[100vw] h-[100vh]`}
-      >
-        <div
-          className={`${
-            showBgOverlay
-              ? "transition-all opacity-1"
-              : "transition-none opacity-0"
-          }  duration-500 fixed top-0 left-0 bg-black-900 bg-opacity-75 w-screen h-screen`}
-          onClick={() => setShowSidebar(false)}
-        />
-        <div
-          ref={sidebarRef}
-          className="h-[100vh] fixed top-0 left-0  rounded-r-[26px] bg-white dark:bg-black-900 w-[80%] p-[18px] "
-        >
-          <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
-            {/* Header Information */}
-            <div className="flex w-full items-center justify-between gap-x-4">
-              <div className="flex shrink-1 w-fit items-center justify-start">
-                <img
-                  src={logo}
-                  alt="Logo"
-                  className="rounded w-full max-h-[40px]"
-                  style={{ objectFit: "contain" }}
-                />
-              </div>
-              <div className="flex gap-x-2 items-center text-slate-500 shrink-0">
-                <a
-                  href={paths.home()}
-                  className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-stone-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-                >
-                  <X className="h-4 w-4" />
-                </a>
-              </div>
-            </div>
-
-            {/* Primary Body */}
-            <div className="h-full flex flex-col w-full justify-between pt-4 overflow-y-hidden ">
-              <div className="h-auto md:sidebar-items md:dark:sidebar-items">
-                <div
-                  style={{ height: "calc(100vw - -3rem)" }}
-                  className=" flex flex-col gap-y-4 pb-8 overflow-y-scroll no-scroll"
-                >
-                  <Option
-                    href={paths.admin.system()}
-                    btnText="System Preferences"
-                    icon={<Settings className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.invites()}
-                    btnText="Invitation Management"
-                    icon={<Mail className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.users()}
-                    btnText="User Management"
-                    icon={<Users className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.workspaces()}
-                    btnText="Workspace Management"
-                    icon={<BookOpen className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.chats()}
-                    btnText="Workspace Chat Management"
-                    icon={<MessageSquare className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.appearance()}
-                    btnText="Appearance"
-                    icon={<Eye className="h-4 w-4 flex-shrink-0" />}
-                  />
-                  <Option
-                    href={paths.admin.apiKeys()}
-                    btnText="API Keys"
-                    icon={<Key className="h-4 w-4 flex-shrink-0" />}
-                  />
-                </div>
-              </div>
-              <div>
-                <div className="flex flex-col gap-y-2">
-                  <div className="w-full flex items-center justify-between">
-                    <LLMStatus />
-                    <IndexCount />
-                  </div>
-                </div>
-
-                {/* Footer */}
-                <div className="flex items-end justify-between mt-2">
-                  <div className="flex gap-x-1 items-center">
-                    <a
-                      href={paths.github()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-                    >
-                      <GitHub className="h-4 w-4 " />
-                    </a>
-                    <a
-                      href={paths.docs()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-                    >
-                      <BookOpen className="h-4 w-4 " />
-                    </a>
-                    <a
-                      href={paths.discord()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 dark:bg-slate-800 hover:bg-slate-800 group"
-                    >
-                      <Discord className="h-4 w-4 stroke-slate-400 group-hover:stroke-slate-200 dark:group-hover:stroke-slate-200" />
-                    </a>
-                  </div>
-                  <a
-                    href={paths.mailToMintplex()}
-                    className="transition-all duration-300 text-xs text-slate-200 dark:text-slate-600 hover:text-blue-600 dark:hover:text-blue-400"
-                  >
-                    @MintplexLabs
-                  </a>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </>
-  );
-}
-
-const Option = ({ btnText, icon, href }) => {
-  const isActive = window.location.pathname === href;
-  return (
-    <div className="flex gap-x-2 items-center justify-between">
-      <a
-        href={href}
-        className={`flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center ${
-          isActive
-            ? "bg-gray-100 dark:bg-stone-600"
-            : "hover:bg-slate-100 dark:hover:bg-stone-900 "
-        }`}
-      >
-        {icon}
-        <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold whitespace-nowrap overflow-hidden ">
-          {btnText}
-        </p>
-      </a>
-    </div>
-  );
-};
diff --git a/frontend/src/components/ChatBubble/index.jsx b/frontend/src/components/ChatBubble/index.jsx
index 7ae52cb63..610f9037d 100644
--- a/frontend/src/components/ChatBubble/index.jsx
+++ b/frontend/src/components/ChatBubble/index.jsx
@@ -1,28 +1,33 @@
 import React from "react";
+import Jazzicon from "../UserIcon";
+import { userFromStorage } from "../../utils/request";
+import {
+  AI_BACKGROUND_COLOR,
+  USER_BACKGROUND_COLOR,
+} from "../../utils/constants";
 
 export default function ChatBubble({ message, type, popMsg }) {
   const isUser = type === "user";
+  const backgroundColor = isUser ? USER_BACKGROUND_COLOR : AI_BACKGROUND_COLOR;
 
   return (
-    <div
-      className={`flex w-full mt-2 items-center ${
-        popMsg ? "chat__message" : ""
-      } ${isUser ? "justify-end" : "justify-start"}`}
-    >
+    <div className={`flex justify-center items-end w-full ${backgroundColor}`}>
       <div
-        className={`p-4 max-w-full md:max-w-[75%] ${
-          isUser
-            ? "bg-slate-200 dark:bg-amber-800"
-            : "bg-orange-100 dark:bg-stone-700"
-        } rounded-b-2xl ${isUser ? "rounded-tl-2xl" : "rounded-tr-2xl"} ${
-          isUser ? "rounded-tr-sm" : "rounded-tl-sm"
-        }`}
+        className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
       >
-        {message && (
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
+        <div className="flex gap-x-5">
+          <Jazzicon
+            size={36}
+            user={{ uid: isUser ? userFromStorage()?.username : "system" }}
+            role={type}
+          />
+
+          <span
+            className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+          >
             {message}
-          </p>
-        )}
+          </span>
+        </div>
       </div>
     </div>
   );
diff --git a/frontend/src/components/DefaultChat/index.jsx b/frontend/src/components/DefaultChat/index.jsx
index 1e993a4d5..bfd0fbdc6 100644
--- a/frontend/src/components/DefaultChat/index.jsx
+++ b/frontend/src/components/DefaultChat/index.jsx
@@ -8,6 +8,12 @@ import { isMobile } from "react-device-detect";
 import { SidebarMobileHeader } from "../Sidebar";
 import ChatBubble from "../ChatBubble";
 import System from "../../models/system";
+import Jazzicon from "../UserIcon";
+import { userFromStorage } from "../../utils/request";
+import {
+  AI_BACKGROUND_COLOR,
+  USER_BACKGROUND_COLOR,
+} from "../../utils/constants";
 
 export default function DefaultChatContainer() {
   const [mockMsgs, setMockMessages] = useState([]);
@@ -30,201 +36,265 @@ export default function DefaultChatContainer() {
   const MESSAGES = [
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR} md:mt-0 mt-[40px]`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            Welcome to AnythingLLM, AnythingLLM is an open-source AI tool by
-            Mintplex Labs that turns <i>anything</i> into a trained chatbot you
-            can query and chat with. AnythingLLM is a BYOK (bring-your-own-keys)
-            software so there is no subscription, fee, or charges for this
-            software outside of the services you want to use with it.
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              Welcome to AnythingLLM, AnythingLLM is an open-source AI tool by
+              Mintplex Labs that turns anything into a trained chatbot you can
+              query and chat with. AnythingLLM is a BYOK (bring-your-own-keys)
+              software so there is no subscription, fee, or charges for this
+              software outside of the services you want to use with it.
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            AnythingLLM is the easiest way to put powerful AI products like
-            OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB, and other services
-            together in a neat package with no fuss to increase your
-            productivity by 100x.
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              AnythingLLM is the easiest way to put powerful AI products like
+              OpenAi, GPT-4, LangChain, PineconeDB, ChromaDB, and other services
+              together in a neat package with no fuss to increase your
+              productivity by 100x.
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            AnythingLLM can run totally locally on your machine with little
-            overhead you wont even notice it's there! No GPU needed. Cloud and
-            on-premises installation is available as well.
-            <br />
-            The AI tooling ecosystem gets more powerful everyday. AnythingLLM
-            makes it easy to use.
-          </p>
-          <a
-            href={paths.github()}
-            target="_blank"
-            className="mt-4 w-fit flex flex-grow gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900 dark:bg-stone-900"
-          >
-            <GitMerge className="h-4 w-4" />
-            <p className="text-slate-800 dark:text-slate-200 text-sm md:text-lg leading-loose">
-              Create an issue on Github
-            </p>
-          </a>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+            <div>
+              <span
+                className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+              >
+                AnythingLLM can run totally locally on your machine with little
+                overhead you wont even notice it's there! No GPU needed. Cloud
+                and on-premises installation is available as well.
+                <br />
+                The AI tooling ecosystem gets more powerful everyday.
+                AnythingLLM makes it easy to use.
+              </span>
+              <a
+                href={paths.github()}
+                target="_blank"
+                className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+              >
+                <GitMerge className="h-4 w-4" />
+                <p>Create an issue on Github</p>
+              </a>
+            </div>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-end ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-slate-200 dark:bg-amber-800 rounded-b-2xl rounded-tl-2xl rounded-tr-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            How do I get started?!
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon
+              size={36}
+              user={{ uid: userFromStorage()?.username }}
+              role={"user"}
+            />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              How do I get started?!
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            It's simple. All collections are organized into buckets we call{" "}
-            <b>"Workspaces"</b>. Workspaces are buckets of files, documents,
-            images, PDFs, and other files which will be transformed into
-            something LLM's can understand and use in conversation.
-            <br />
-            <br />
-            You can add and remove files at anytime.
-          </p>
-          <button
-            onClick={showNewWsModal}
-            className="mt-4 w-fit flex flex-grow gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900 dark:bg-stone-900"
-          >
-            <Plus className="h-4 w-4" />
-            <p className="text-slate-800 dark:text-slate-200 text-sm md:text-lg leading-loose">
-              Create your first workspace
-            </p>
-          </button>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+            <div>
+              <span
+                className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+              >
+                It's simple. All collections are organized into buckets we call{" "}
+                "Workspaces". Workspaces are buckets of files, documents,
+                images, PDFs, and other files which will be transformed into
+                something LLM's can understand and use in conversation.
+                <br />
+                <br />
+                You can add and remove files at anytime.
+              </span>
+
+              <button
+                onClick={showNewWsModal}
+                className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+              >
+                <Plus className="h-4 w-4" />
+                <p>Create your first workspace</p>
+              </button>
+            </div>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-end ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-slate-200 dark:bg-amber-800 rounded-b-2xl rounded-tl-2xl rounded-tr-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            Is this like an AI dropbox or something? What about chatting? It is
-            a chatbot isn't it?
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon
+              size={36}
+              user={{ uid: userFromStorage()?.username }}
+              role={"user"}
+            />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              Is this like an AI dropbox or something? What about chatting? It
+              is a chatbot isn't it?
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            AnythingLLM is more than a smarter Dropbox.
-            <br />
-            <br />
-            AnythingLLM offers two ways of talking with your data:
-            <br />
-            <br />
-            <i>Query:</i> Your chats will return data or inferences found with
-            the documents in your workspace it has access to. Adding more
-            documents to the Workspace make it smarter!
-            <br />
-            <br />
-            <i>Conversational:</i> Your documents + your on-going chat history
-            both contribute to the LLM knowledge at the same time. Great for
-            appending real-time text-based info or corrections and
-            misunderstandings the LLM might have.
-            <br />
-            <br />
-            You can toggle between either mode <i>in the middle of chatting!</i>
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              AnythingLLM is more than a smarter Dropbox.
+              <br />
+              <br />
+              AnythingLLM offers two ways of talking with your data:
+              <br />
+              <br />
+              <i>Query:</i> Your chats will return data or inferences found with
+              the documents in your workspace it has access to. Adding more
+              documents to the Workspace make it smarter!
+              <br />
+              <br />
+              <i>Conversational:</i> Your documents + your on-going chat history
+              both contribute to the LLM knowledge at the same time. Great for
+              appending real-time text-based info or corrections and
+              misunderstandings the LLM might have.
+              <br />
+              <br />
+              You can toggle between either mode{" "}
+              <i>in the middle of chatting!</i>
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-end ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${USER_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-slate-200 dark:bg-amber-800 rounded-b-2xl rounded-tl-2xl rounded-tr-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            Wow, this sounds amazing, let me try it out already!
-          </p>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon
+              size={36}
+              user={{ uid: userFromStorage()?.username }}
+              role={"user"}
+            />
+
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+            >
+              Wow, this sounds amazing, let me try it out already!
+            </span>
+          </div>
         </div>
       </div>
     </React.Fragment>,
 
     <React.Fragment>
       <div
-        className={`flex w-full mt-2 justify-start ${
-          popMsg ? "chat__message" : ""
-        }`}
+        className={`flex justify-center items-end w-full ${AI_BACKGROUND_COLOR}`}
       >
-        <div className="p-4 max-w-full md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-b-2xl rounded-tr-2xl rounded-tl-sm">
-          <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
-            Have Fun!
-          </p>
-          <div className="flex flex-col md:flex-row items-start md:items-center gap-1 md:gap-4">
-            <a
-              href={paths.github()}
-              target="_blank"
-              className="mt-4 w-fit flex flex-grow gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900 dark:bg-stone-900"
-            >
-              <GitHub className="h-4 w-4" />
-              <p className="text-slate-800 dark:text-slate-200 text-sm md:text-lg leading-loose">
-                Star on GitHub
-              </p>
-            </a>
-            <a
-              href={paths.mailToMintplex()}
-              className="mt-4 w-fit flex flex-grow gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900 dark:bg-stone-900"
-            >
-              <Mail className="h-4 w-4" />
-              <p className="text-slate-800 dark:text-slate-200 text-sm md:text-lg leading-loose">
-                Contact Mintplex Labs
-              </p>
-            </a>
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon size={36} user={{ uid: "system" }} role={"assistant"} />
+            <div>
+              <span
+                className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+              >
+                Have Fun!
+              </span>
+
+              <div className="flex flex-col md:flex-row items-start md:items-center gap-1 md:gap-4">
+                <a
+                  href={paths.github()}
+                  target="_blank"
+                  className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+                >
+                  <GitHub className="h-4 w-4" />
+                  <p>Star on GitHub</p>
+                </a>
+                <a
+                  href={paths.mailToMintplex()}
+                  className="mt-5 w-fit transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+                >
+                  <Mail className="h-4 w-4" />
+                  <p>Contact Mintplex Labs</p>
+                </a>
+              </div>
+            </div>
           </div>
         </div>
       </div>
@@ -259,7 +329,7 @@ export default function DefaultChatContainer() {
   return (
     <div
       style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] h-full overflow-y-scroll"
     >
       {isMobile && <SidebarMobileHeader />}
       {fetchedMessages.length === 0
diff --git a/frontend/src/components/EditingChatBubble/index.jsx b/frontend/src/components/EditingChatBubble/index.jsx
index 7d738ee01..1cbe44305 100644
--- a/frontend/src/components/EditingChatBubble/index.jsx
+++ b/frontend/src/components/EditingChatBubble/index.jsx
@@ -14,25 +14,27 @@ export default function EditingChatBubble({
 
   return (
     <div
-      className={`flex w-full mt-2 items-center ${
+      className={`relative flex w-full mt-2 items-start ${
         isUser ? "justify-end" : "justify-start"
       }`}
     >
-      {isUser && (
-        <button
-          className="flex items-center text-red-500 hover:text-red-700 transition mr-2"
-          onClick={() => removeMessage(index)}
-        >
-          <X className="mr-2" size={20} />
-        </button>
-      )}
+      <button
+        className={`transition-all duration-300 absolute z-10 text-white bg-neutral-700 rounded-full hover:bg-selected-preference-gradient hover:border-white border-transparent border shadow-lg ${
+          isUser ? "right-0 mr-2" : "ml-2"
+        }`}
+        style={{ top: "-8px", [isUser ? "right" : "left"]: "255px" }}
+        onClick={() => removeMessage(index)}
+      >
+        <X className="m-0.5" size={20} />
+      </button>
       <div
-        className={`p-4 max-w-full md:max-w-[75%] ${
+        className={`p-4 max-w-full md:w-[290px] ${
+          isUser ? "bg-sky-400 text-black" : "bg-white text-black"
+        } ${
           isUser
-            ? "bg-slate-200 dark:bg-amber-800"
-            : "bg-orange-100 dark:bg-stone-700"
-        } rounded-b-2xl ${isUser ? "rounded-tl-2xl" : "rounded-tr-2xl"} ${
-          isUser ? "rounded-tr-sm" : "rounded-tl-sm"
+            ? "rounded-tr-[40px] rounded-tl-[40px] rounded-bl-[40px]"
+            : "rounded-br-[40px] rounded-tl-[40px] rounded-tr-[40px]"
+        }
         }`}
         onDoubleClick={() => setIsEditing(true)}
       >
@@ -45,23 +47,16 @@ export default function EditingChatBubble({
               setIsEditing(false);
             }}
             autoFocus
+            className="w-full"
           />
         ) : (
           tempMessage && (
-            <p className="text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base">
+            <p className="text-black font-[500] md:font-semibold text-sm md:text-base break-words">
               {tempMessage}
             </p>
           )
         )}
       </div>
-      {!isUser && (
-        <button
-          className="flex items-center text-red-500 hover:text-red-700 transition ml-2"
-          onClick={() => removeMessage(index)}
-        >
-          <X className="mr-2" size={20} />
-        </button>
-      )}
     </div>
   );
 }
diff --git a/frontend/src/components/Icons/Discord.jsx b/frontend/src/components/Icons/Discord.jsx
deleted file mode 100644
index ebc55ed1e..000000000
--- a/frontend/src/components/Icons/Discord.jsx
+++ /dev/null
@@ -1,15 +0,0 @@
-export default function Discord({ className = "" }) {
-  return (
-    <svg
-      className={className}
-      style={{ strokeWidth: 4, transform: "scale(1.15)" }}
-      viewBox="0 0 128 128"
-      xmlns="http://www.w3.org/2000/svg"
-    >
-      <title />
-      <path d="M45.23,57.2c-6.16,0-11.17,5.6-11.17,12.48s5,12.47,11.17,12.47,11.16-5.59,11.16-12.47S51.38,57.2,45.23,57.2Zm0,21c-4,0-7.17-3.8-7.17-8.47s3.21-8.48,7.17-8.48,7.16,3.8,7.16,8.48S49.18,78.15,45.23,78.15Z" />
-      <path d="M121.83,59.58a156.78,156.78,0,0,0-11.52-31,2.1,2.1,0,0,0-.71-.77,87.08,87.08,0,0,0-15.23-7.17C84.55,17.07,79.91,17,79.72,17a2,2,0,0,0-2,1.72l-.6,4.17a133.14,133.14,0,0,0-26.28,0l-.6-4.17a2,2,0,0,0-2-1.72c-.19,0-4.83,0-14.65,3.61A87.08,87.08,0,0,0,18.4,27.81a2.1,2.1,0,0,0-.71.77,156.72,156.72,0,0,0-11.52,31C1,80.46,0,90.91,0,91.34a2,2,0,0,0,.49,1.5,55.2,55.2,0,0,0,18.2,12.74A76.32,76.32,0,0,0,38.48,111a2,2,0,0,0,1.92-1l5.4-9.25A105.08,105.08,0,0,0,64,102.24a105.08,105.08,0,0,0,18.2-1.51L87.6,110a2,2,0,0,0,1.72,1h.2a76.32,76.32,0,0,0,19.78-5.38,55.2,55.2,0,0,0,18.2-12.74,2,2,0,0,0,.49-1.5C128,90.91,127.05,80.46,121.83,59.58Zm-14.06,42.31a76.76,76.76,0,0,1-17.39,4.92l-4.08-7c4.68-1.24,14.42-4.46,21.83-11.2a2,2,0,1,0-2.69-3c-9,8.23-22.46,10.84-22.6,10.87h-.06A96.59,96.59,0,0,1,64,98.24a96.59,96.59,0,0,1-18.78-1.7h-.06c-.14,0-13.55-2.64-22.6-10.87a2,2,0,1,0-2.69,3c7.41,6.74,17.15,10,21.83,11.2l-4.08,7a76.08,76.08,0,0,1-17.39-4.92A52.24,52.24,0,0,1,4.08,90.8c.33-2.91,1.68-13.07,6-30.24A156.25,156.25,0,0,1,21,30.92,88.17,88.17,0,0,1,35,24.4a61.35,61.35,0,0,1,11.58-3.19l.35,2.39c-4,1-13.85,3.86-21.65,9.53a2,2,0,1,0,2.36,3.23c8.82-6.41,21-9.06,21.86-9.25A118.4,118.4,0,0,1,64,26.27a117.64,117.64,0,0,1,14.51.84c.91.19,13,2.83,21.86,9.25a2,2,0,1,0,2.36-3.23c-7.8-5.67-17.61-8.52-21.65-9.53l.35-2.39A61.75,61.75,0,0,1,93,24.4a88.17,88.17,0,0,1,14,6.52A156.25,156.25,0,0,1,118,60.56c4.29,17.17,5.64,27.33,6,30.24A52.24,52.24,0,0,1,107.77,101.89Z" />
-      <path d="M82.77,57.2c-6.15,0-11.16,5.6-11.16,12.48s5,12.47,11.16,12.47,11.17-5.59,11.17-12.47S88.93,57.2,82.77,57.2Zm0,21c-4,0-7.16-3.8-7.16-8.47s3.21-8.48,7.16-8.48,7.17,3.8,7.17,8.48S86.73,78.15,82.77,78.15Z" />
-    </svg>
-  );
-}
diff --git a/frontend/src/components/LLMProviderOption/index.jsx b/frontend/src/components/LLMProviderOption/index.jsx
new file mode 100644
index 000000000..3c3ed446a
--- /dev/null
+++ b/frontend/src/components/LLMProviderOption/index.jsx
@@ -0,0 +1,37 @@
+export default function LLMProviderOption({
+  name,
+  link,
+  description,
+  value,
+  image,
+  checked = false,
+  onClick,
+}) {
+  return (
+    <div onClick={() => onClick(value)}>
+      <input
+        type="checkbox"
+        value={value}
+        className="peer hidden"
+        checked={checked}
+        readOnly={true}
+        formNoValidate={true}
+      />
+      <label className="transition-all duration-300 inline-flex flex-col h-full w-60 cursor-pointer items-start justify-between rounded-2xl bg-preference-gradient border-2 border-transparent shadow-md px-5 py-4 text-white hover:bg-selected-preference-gradient hover:border-white/60 peer-checked:border-white peer-checked:border-opacity-90 peer-checked:bg-selected-preference-gradient">
+        <div className="flex items-center">
+          <img src={image} alt={name} className="h-10 w-10 rounded" />
+          <div className="ml-4 text-sm font-semibold">{name}</div>
+        </div>
+        <div className="mt-2 text-xs font-base text-white tracking-wide">
+          {description}
+        </div>
+        <a
+          href={`https://${link}`}
+          className="mt-2 text-xs text-white font-medium underline"
+        >
+          {link}
+        </a>
+      </label>
+    </div>
+  );
+}
diff --git a/frontend/src/components/Modals/Settings/ApiKey/index.jsx b/frontend/src/components/Modals/LegacySettings/ApiKey/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/ApiKey/index.jsx
rename to frontend/src/components/Modals/LegacySettings/ApiKey/index.jsx
diff --git a/frontend/src/components/Modals/Settings/Appearance/index.jsx b/frontend/src/components/Modals/LegacySettings/Appearance/index.jsx
similarity index 96%
rename from frontend/src/components/Modals/Settings/Appearance/index.jsx
rename to frontend/src/components/Modals/LegacySettings/Appearance/index.jsx
index 92f210d59..4ce1078bf 100644
--- a/frontend/src/components/Modals/Settings/Appearance/index.jsx
+++ b/frontend/src/components/Modals/LegacySettings/Appearance/index.jsx
@@ -3,8 +3,7 @@ import useLogo from "../../../../hooks/useLogo";
 import usePrefersDarkMode from "../../../../hooks/usePrefersDarkMode";
 import System from "../../../../models/system";
 import EditingChatBubble from "../../../EditingChatBubble";
-import AnythingLLMLight from "../../../../media/logo/anything-llm-light.png";
-import AnythingLLMDark from "../../../../media/logo/anything-llm-dark.png";
+import AnythingLLM from "../../../../media/logo/anything-llm.png";
 import showToast from "../../../../utils/toast";
 
 export default function Appearance() {
@@ -120,11 +119,7 @@ export default function Appearance() {
                 src={logo}
                 alt="Uploaded Logo"
                 className="w-48 h-48 object-contain mr-6"
-                onError={(e) =>
-                  (e.target.src = prefersDarkMode
-                    ? AnythingLLMLight
-                    : AnythingLLMDark)
-                }
+                onError={(e) => (e.target.src = AnythingLLM)}
               />
               <div className="flex flex-col">
                 <div className="mb-4">
diff --git a/frontend/src/components/Modals/Settings/ExportImport/index.jsx b/frontend/src/components/Modals/LegacySettings/ExportImport/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/ExportImport/index.jsx
rename to frontend/src/components/Modals/LegacySettings/ExportImport/index.jsx
diff --git a/frontend/src/components/Modals/Settings/LLMSelection/index.jsx b/frontend/src/components/Modals/LegacySettings/LLMSelection/index.jsx
similarity index 98%
rename from frontend/src/components/Modals/Settings/LLMSelection/index.jsx
rename to frontend/src/components/Modals/LegacySettings/LLMSelection/index.jsx
index 9d930a7b4..7fd07516d 100644
--- a/frontend/src/components/Modals/Settings/LLMSelection/index.jsx
+++ b/frontend/src/components/Modals/LegacySettings/LLMSelection/index.jsx
@@ -115,10 +115,7 @@ export default function LLMSelection({
                       required={true}
                       className="bg-gray-50 border border-gray-500 text-gray-900 text-sm rounded-lg block w-full p-2.5 dark:bg-stone-700 dark:border-slate-200 dark:placeholder-stone-500 dark:text-slate-200"
                     >
-                      {[
-                        "gpt-3.5-turbo",
-                        "gpt-4",
-                      ].map((model) => {
+                      {["gpt-3.5-turbo", "gpt-4"].map((model) => {
                         return (
                           <option key={model} value={model}>
                             {model}
diff --git a/frontend/src/components/Modals/Settings/MultiUserMode/index.jsx b/frontend/src/components/Modals/LegacySettings/MultiUserMode/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/MultiUserMode/index.jsx
rename to frontend/src/components/Modals/LegacySettings/MultiUserMode/index.jsx
diff --git a/frontend/src/components/Modals/Settings/PasswordProtection/index.jsx b/frontend/src/components/Modals/LegacySettings/PasswordProtection/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/PasswordProtection/index.jsx
rename to frontend/src/components/Modals/LegacySettings/PasswordProtection/index.jsx
diff --git a/frontend/src/components/Modals/Settings/VectorDbs/index.jsx b/frontend/src/components/Modals/LegacySettings/VectorDbs/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/VectorDbs/index.jsx
rename to frontend/src/components/Modals/LegacySettings/VectorDbs/index.jsx
diff --git a/frontend/src/components/Modals/Settings/index.jsx b/frontend/src/components/Modals/LegacySettings/index.jsx
similarity index 100%
rename from frontend/src/components/Modals/Settings/index.jsx
rename to frontend/src/components/Modals/LegacySettings/index.jsx
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/ConfirmationModal/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/ConfirmationModal/index.jsx
deleted file mode 100644
index b5d00a219..000000000
--- a/frontend/src/components/Modals/MangeWorkspace/Documents/ConfirmationModal/index.jsx
+++ /dev/null
@@ -1,89 +0,0 @@
-import React from "react";
-import { dollarFormat } from "../../../../../utils/numbers";
-
-export default function ConfirmationModal({
-  directories,
-  hideConfirm,
-  additions,
-  updateWorkspace,
-}) {
-  function estimateCosts() {
-    const cachedTokens = additions.map((filepath) => {
-      const [parent, filename] = filepath.split("/");
-      const details = directories.items
-        .find((folder) => folder.name === parent)
-        .items.find((file) => file.name === filename);
-
-      const { token_count_estimate = 0, cached = false } = details;
-      return cached ? token_count_estimate : 0;
-    });
-    const tokenEstimates = additions.map((filepath) => {
-      const [parent, filename] = filepath.split("/");
-      const details = directories.items
-        .find((folder) => folder.name === parent)
-        .items.find((file) => file.name === filename);
-
-      const { token_count_estimate = 0 } = details;
-      return token_count_estimate;
-    });
-
-    const totalTokens = tokenEstimates.reduce((a, b) => a + b, 0);
-    const cachedTotal = cachedTokens.reduce((a, b) => a + b, 0);
-    const dollarValue = 0.0004 * ((totalTokens - cachedTotal) / 1_000);
-
-    return {
-      dollarValue,
-      dollarText:
-        dollarValue < 0.01 ? "< $0.01" : `about ${dollarFormat(dollarValue)}`,
-    };
-  }
-
-  const { dollarValue, dollarText } = estimateCosts();
-  return (
-    <dialog
-      open={true}
-      style={{ zIndex: 100 }}
-      className="fixed top-0 flex bg-black bg-opacity-50 w-[100vw] h-full items-center justify-center "
-    >
-      <div className="w-fit px-10 p-4 min-w-1/2 rounded-lg bg-white shadow dark:bg-stone-700 text-black dark:text-slate-200">
-        <div className="flex flex-col w-full">
-          <p className="font-semibold">
-            Are you sure you want to embed these documents?
-          </p>
-
-          <div className="flex flex-col gap-y-1">
-            {dollarValue <= 0 ? (
-              <p className="text-base mt-4">
-                You will be embedding {additions.length} new documents into this
-                workspace.
-                <br />
-                This will not incur any costs for OpenAI credits.
-              </p>
-            ) : (
-              <p className="text-base mt-4">
-                You will be embedding {additions.length} new documents into this
-                workspace. <br />
-                This will cost {dollarText} in OpenAI credits.
-              </p>
-            )}
-          </div>
-
-          <div className="flex w-full justify-between items-center mt-4">
-            <button
-              onClick={hideConfirm}
-              className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
-            >
-              Cancel
-            </button>
-            <button
-              onClick={updateWorkspace}
-              className="border border-gray-800 text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:border-slate-200 dark:hover:bg-stone-900"
-            >
-              Continue
-            </button>
-          </div>
-        </div>
-      </div>
-    </dialog>
-  );
-}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FileRow/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FileRow/index.jsx
new file mode 100644
index 000000000..ef8bed17d
--- /dev/null
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FileRow/index.jsx
@@ -0,0 +1,106 @@
+import { useState } from "react";
+import {
+  formatDate,
+  getFileExtension,
+  truncate,
+} from "../../../../../../utils/directories";
+import { File, Trash } from "@phosphor-icons/react";
+import System from "../../../../../../models/system";
+import debounce from "lodash.debounce";
+
+export default function FileRow({
+  item,
+  folderName,
+  selected,
+  toggleSelection,
+  expanded,
+  fetchKeys,
+  setLoading,
+  setLoadingMessage,
+}) {
+  const [showTooltip, setShowTooltip] = useState(false);
+
+  const onTrashClick = async (event) => {
+    event.stopPropagation();
+    if (
+      !window.confirm(
+        "Are you sure you want to delete this document?\nThis will require you to re-upload and re-embed it.\nThis document will be removed from any workspace that is currently referencing it.\nThis action is not reversible."
+      )
+    ) {
+      return false;
+    }
+
+    try {
+      setLoading(true);
+      setLoadingMessage("This may take a while for large documents");
+      await System.deleteDocument(`${folderName}/${item.name}`, item);
+      await fetchKeys(true);
+    } catch (error) {
+      console.error("Failed to delete the document:", error);
+    }
+
+    if (selected) toggleSelection(item);
+    setLoading(false);
+  };
+
+  const handleShowTooltip = () => {
+    setShowTooltip(true);
+  };
+
+  const handleHideTooltip = () => {
+    setShowTooltip(false);
+  };
+
+  const handleMouseEnter = debounce(handleShowTooltip, 500);
+  const handleMouseLeave = debounce(handleHideTooltip, 500);
+  return (
+    <div
+      onClick={() => toggleSelection(item)}
+      className={`transition-all duration-200 text-white/80 text-xs grid grid-cols-12 py-2 pl-3.5 pr-8 border-b border-white/20 hover:bg-sky-500/20 cursor-pointer ${`${
+        selected ? "bg-sky-500/20" : ""
+      } ${expanded ? "bg-sky-500/10" : ""}`}`}
+    >
+      <div className="col-span-4 flex gap-x-[4px] items-center">
+        <div
+          className="w-3 h-3 rounded border-[1px] border-white flex justify-center items-center cursor-pointer"
+          role="checkbox"
+          aria-checked={selected}
+          tabIndex={0}
+        >
+          {selected && <div className="w-2 h-2 bg-white rounded-[2px]" />}
+        </div>
+        <File className="text-base font-bold w-4 h-4 mr-[3px]" weight="fill" />
+        <div
+          className="relative"
+          onMouseEnter={handleMouseEnter}
+          onMouseLeave={handleMouseLeave}
+        >
+          <p className="whitespace-nowrap overflow-hidden">
+            {truncate(item.title, 17)}
+          </p>
+          {showTooltip && (
+            <div className="absolute left-0 bg-white text-black p-1.5 rounded shadow-lg whitespace-nowrap">
+              {item.title}
+            </div>
+          )}
+        </div>
+      </div>
+      <p className="col-span-2 pl-3.5 whitespace-nowrap">
+        {formatDate(item?.published)}
+      </p>
+      <p className="col-span-2 pl-3">{item?.size || "---"}</p>
+      <p className="col-span-2 pl-2 uppercase">{getFileExtension(item.url)}</p>
+      <div className="col-span-2 flex justify-end items-center">
+        {item?.cached && (
+          <div className="bg-white/10 rounded-3xl">
+            <p className="text-xs px-2 py-0.5">Cached</p>
+          </div>
+        )}
+        <Trash
+          onClick={onTrashClick}
+          className="text-base font-bold w-4 h-4 ml-2 flex-shrink-0 cursor-pointer"
+        />
+      </div>
+    </div>
+  );
+}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FolderRow/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FolderRow/index.jsx
new file mode 100644
index 000000000..abf4cef9c
--- /dev/null
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/FolderRow/index.jsx
@@ -0,0 +1,80 @@
+import { useState } from "react";
+import FileRow from "../FileRow";
+import { CaretDown, FolderNotch } from "@phosphor-icons/react";
+import { truncate } from "../../../../../../utils/directories";
+
+export default function FolderRow({
+  item,
+  selected,
+  onRowClick,
+  toggleSelection,
+  isSelected,
+  fetchKeys,
+  setLoading,
+  setLoadingMessage,
+}) {
+  const [expanded, setExpanded] = useState(true);
+
+  const handleExpandClick = (event) => {
+    event.stopPropagation();
+    setExpanded(!expanded);
+  };
+
+  return (
+    <>
+      <div
+        onClick={onRowClick}
+        className={`transition-all duration-200 text-white/80 text-xs grid grid-cols-12 py-2 pl-3.5 pr-8 border-b border-white/20 hover:bg-sky-500/20 cursor-pointer w-full ${
+          selected ? "bg-sky-500/20" : ""
+        }`}
+      >
+        <div className="col-span-4 flex gap-x-[4px] items-center">
+          <div
+            className="w-3 h-3 rounded border-[1px] border-white flex justify-center items-center cursor-pointer"
+            role="checkbox"
+            aria-checked={selected}
+            tabIndex={0}
+          >
+            {selected && <div className="w-2 h-2 bg-white rounded-[2px]" />}
+          </div>
+          <div
+            onClick={handleExpandClick}
+            className={`transform transition-transform duration-200 ${
+              expanded ? "rotate-360" : " rotate-270"
+            }`}
+          >
+            <CaretDown className="text-base font-bold w-4 h-4" />
+          </div>
+          <FolderNotch
+            className="text-base font-bold w-4 h-4 mr-[3px]"
+            weight="fill"
+          />
+          <p className="whitespace-nowrap overflow-show">
+            {truncate(item.name, 40)}
+          </p>
+        </div>
+        <p className="col-span-2 pl-3.5" />
+        <p className="col-span-2 pl-3" />
+        <p className="col-span-2 pl-2" />
+        <div className="col-span-2 flex justify-end items-center" />
+      </div>
+      {expanded && (
+        <div className="col-span-full">
+          {item.items.map((fileItem) => (
+            <FileRow
+              key={fileItem.id}
+              item={fileItem}
+              folderName={item.name}
+              selected={isSelected(fileItem.id)}
+              expanded={expanded}
+              toggleSelection={toggleSelection}
+              fetchKeys={fetchKeys}
+              setLoading={setLoading}
+              setLoadingMessage={setLoadingMessage}
+            />
+          ))}
+        </div>
+      )}
+    </>
+  );
+}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/index.jsx
index b838d0b10..099dba87f 100644
--- a/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/index.jsx
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/Directory/index.jsx
@@ -1,171 +1,146 @@
-import React, { useState } from "react";
-import {
-  FileMinus,
-  FilePlus,
-  Folder,
-  FolderMinus,
-  FolderPlus,
-  Zap,
-} from "react-feather";
-import { nFormatter } from "../../../../../utils/numbers";
-import System from "../../../../../models/system";
+import UploadFile from "../UploadFile";
+import PreLoader from "../../../../Preloader";
+import { useEffect, useState } from "react";
+import FolderRow from "./FolderRow";
+import pluralize from "pluralize";
 
 export default function Directory({
   files,
-  parent = null,
-  nested = 0,
-  toggleSelection,
-  isSelected,
+  loading,
+  setLoading,
+  fileTypes,
+  workspace,
+  fetchKeys,
+  selectedItems,
+  setSelectedItems,
+  setHighlightWorkspace,
+  moveToWorkspace,
+  setLoadingMessage,
+  loadingMessage,
 }) {
-  const [isExpanded, toggleExpanded] = useState(false);
-  const [showDetails, toggleDetails] = useState(false);
-  const [showZap, setShowZap] = useState(false);
-  const handleDelete = async (name, meta) => {
-    if (
-      !window.confirm(
-        "Are you sure you want to delete this document?\nThis will require you to re-upload and re-embed it.\nThis document will be removed from any workspace that is currently referencing it.\nThis action is not reversible."
-      )
-    )
+  const [amountSelected, setAmountSelected] = useState(0);
+
+  const toggleSelection = (item) => {
+    setSelectedItems((prevSelectedItems) => {
+      const newSelectedItems = { ...prevSelectedItems };
+
+      if (item.type === "folder") {
+        const isCurrentlySelected = isFolderCompletelySelected(item);
+        if (isCurrentlySelected) {
+          item.items.forEach((file) => delete newSelectedItems[file.id]);
+        } else {
+          item.items.forEach((file) => (newSelectedItems[file.id] = true));
+        }
+      } else {
+        if (newSelectedItems[item.id]) {
+          delete newSelectedItems[item.id];
+        } else {
+          newSelectedItems[item.id] = true;
+        }
+      }
+
+      return newSelectedItems;
+    });
+  };
+
+  const isFolderCompletelySelected = (folder) => {
+    if (folder.items.length === 0) {
       return false;
-    document?.getElementById(meta?.id)?.remove();
-    await System.deleteDocument(name, meta);
+    }
+    return folder.items.every((file) => selectedItems[file.id]);
   };
 
-  if (files.type === "folder") {
-    return (
-      <div style={{ marginLeft: nested }} className="mb-2">
-        <div
-          className={`flex items-center hover:bg-gray-100 gap-x-2 text-gray-800 dark:text-stone-200 dark:hover:bg-stone-800 px-2 rounded-lg`}
-        >
-          {files.items.some((files) => files.type === "folder") ? (
-            <Folder className="w-6 h-6" />
-          ) : (
-            <button onClick={() => toggleSelection(files.name)}>
-              {isSelected(files.name) ? (
-                <FolderMinus className="w-6 h-6 stroke-red-800 hover:fill-red-500" />
-              ) : (
-                <FolderPlus className="w-6 h-6 hover:stroke-green-800 hover:fill-green-500" />
-              )}
-            </button>
-          )}
+  const isSelected = (id, item) => {
+    if (item && item.type === "folder") {
+      return isFolderCompletelySelected(item);
+    }
+
+    return !!selectedItems[id];
+  };
+
+  useEffect(() => {
+    setAmountSelected(Object.keys(selectedItems).length);
+  }, [selectedItems]);
+
+  return (
+    <div className="px-8 pb-8">
+      <div className="flex flex-col gap-y-6">
+        <div className="flex items-center justify-between w-[560px] px-5">
+          <h3 className="text-white text-base font-bold">My Documents</h3>
+        </div>
+
+        <div className="relative w-[560px] h-[310px] bg-zinc-900 rounded-2xl">
+          <div className="rounded-t-2xl text-white/80 text-xs grid grid-cols-12 py-2 px-8 border-b border-white/20 shadow-lg bg-zinc-900 sticky top-0 z-10">
+            <p className="col-span-4">Name</p>
+            <p className="col-span-2">Date</p>
+            <p className="col-span-2">Size</p>
+            <p className="col-span-2">Kind</p>
+            <p className="col-span-2">Cached</p>
+          </div>
 
           <div
-            className="flex gap-x-2 items-center  cursor-pointer w-full"
-            onClick={() => toggleExpanded(!isExpanded)}
+            className="overflow-y-auto pb-9"
+            style={{ height: "calc(100% - 40px)" }}
           >
-            <h2 className="text-base md:text-2xl">{files.name}</h2>
-            {files.items.some((files) => files.type === "folder") ? (
-              <p className="text-xs italic">{files.items.length} folders</p>
+            {loading ? (
+              <div className="w-full h-full flex items-center justify-center flex-col gap-y-5">
+                <PreLoader />
+                <p className="text-white/80 text-sm font-semibold animate-pulse text-center w-1/3">
+                  {loadingMessage}
+                </p>
+              </div>
+            ) : !!files.items ? (
+              files.items.map(
+                (item, index) =>
+                  item.type === "folder" && (
+                    <FolderRow
+                      key={index}
+                      item={item}
+                      selected={isSelected(
+                        item.id,
+                        item.type === "folder" ? item : null
+                      )}
+                      fetchKeys={fetchKeys}
+                      onRowClick={() => toggleSelection(item)}
+                      toggleSelection={toggleSelection}
+                      isSelected={isSelected}
+                      setLoading={setLoading}
+                      setLoadingMessage={setLoadingMessage}
+                    />
+                  )
+              )
             ) : (
-              <p className="text-xs italic">
-                {files.items.length} documents |{" "}
-                {nFormatter(
-                  files.items.reduce((a, b) => a + b.token_count_estimate, 0)
-                )}{" "}
-                tokens
-              </p>
+              <div className="w-full h-full flex items-center justify-center">
+                <p className="text-white text-opacity-40 text-sm font-medium">
+                  No Documents
+                </p>
+              </div>
             )}
           </div>
-        </div>
-        {isExpanded &&
-          files.items.map((item) => (
-            <Directory
-              key={item.name}
-              parent={files.name}
-              files={item}
-              nested={nested + 20}
-              toggleSelection={toggleSelection}
-              isSelected={isSelected}
-            />
-          ))}
-      </div>
-    );
-  }
 
-  const { name, type: _type, ...meta } = files;
-  return (
-    <div className="ml-[20px] my-2" id={meta.id}>
-      <div className="flex items-center">
-        {meta?.cached && (
-          <button
-            type="button"
-            onClick={() => setShowZap(true)}
-            className="rounded-full p-1 hover:bg-stone-500 hover:bg-opacity-75"
-          >
-            <Zap className="h-4 w-4 stroke-yellow-500 fill-yellow-400" />
-          </button>
-        )}
-        {showZap && (
-          <dialog
-            open={true}
-            style={{ zIndex: 100 }}
-            className="fixed top-0 flex bg-black bg-opacity-50 w-[100vw] h-full items-center justify-center "
-          >
-            <div className="w-fit px-10 py-4 w-[25%] rounded-lg bg-white shadow dark:bg-stone-700 text-black dark:text-slate-200">
-              <div className="flex flex-col w-full">
-                <p className="font-semibold text-xl flex items-center gap-x-1 justify-left">
-                  What does{" "}
-                  <Zap className="h-4 w-4 stroke-yellow-500 fill-yellow-400" />{" "}
-                  mean?
-                </p>
-                <p className="text-base mt-4">
-                  This symbol indicates that you have embed this document before
-                  and will not have to pay to re-embed this document.
-                </p>
-                <div className="flex w-full justify-center items-center mt-4">
-                  <button
-                    onClick={() => setShowZap(false)}
-                    className="border border-gray-800 text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:border-slate-200 dark:hover:bg-stone-900"
-                  >
-                    Close
-                  </button>
+          {amountSelected !== 0 && (
+            <div className="absolute bottom-0 left-0 w-full flex justify-center items-center h-9 bg-white rounded-b-2xl">
+              <div className="flex gap-x-5">
+                <div
+                  onMouseEnter={() => setHighlightWorkspace(true)}
+                  onMouseLeave={() => setHighlightWorkspace(false)}
+                  onClick={moveToWorkspace}
+                  className="text-sm font-semibold h-7 px-2.5 rounded-lg transition-all duration-300 hover:text-white hover:bg-neutral-800/80 cursor-pointer flex items-center"
+                >
+                  Move {amountSelected} {pluralize("file", amountSelected)} to
+                  workspace
                 </div>
               </div>
             </div>
-          </dialog>
-        )}
-
-        <div
-          className={`flex items-center gap-x-2 text-gray-800 dark:text-stone-200 hover:bg-gray-100 dark:hover:bg-stone-800 px-2 rounded-lg`}
-        >
-          <button onClick={() => toggleSelection(`${parent}/${name}`)}>
-            {isSelected(`${parent}/${name}`) ? (
-              <FileMinus className="w-6 h-6 stroke-red-800 hover:fill-red-500" />
-            ) : (
-              <FilePlus className="w-6 h-6 hover:stroke-green-800 hover:fill-green-500" />
-            )}
-          </button>
-          <div
-            className="w-full items-center flex cursor-pointer"
-            onClick={() => toggleDetails(!showDetails)}
-          >
-            <h3 className="text-sm">{name}</h3>
-            <br />
-          </div>
+          )}
         </div>
+
+        <UploadFile
+          fileTypes={fileTypes}
+          workspace={workspace}
+          fetchKeys={fetchKeys}
+        />
       </div>
-      {showDetails && (
-        <div className="w-full flex flex-col">
-          <div className="ml-[20px] flex flex-col gap-y-1 my-1 p-2 rounded-md bg-slate-200 font-mono text-sm overflow-x-scroll">
-            {Object.entries(meta).map(([key, value], i) => {
-              if (key === "cached") return null;
-              return (
-                <p key={i} className="whitespace-pre">
-                  {key}: {value}
-                </p>
-              );
-            })}
-          </div>
-          <div
-            onClick={() => handleDelete(`${parent}/${name}`, meta)}
-            className="flex items-center justify-end w-full"
-          >
-            <button className="text-sm text-slate-400 dark:text-stone-500 hover:text-red-500">
-              Purge Document
-            </button>
-          </div>
-        </div>
-      )}
     </div>
   );
 }
diff --git a/frontend/src/components/Modals/MangeWorkspace/Upload/FileUploadProgress/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx
similarity index 63%
rename from frontend/src/components/Modals/MangeWorkspace/Upload/FileUploadProgress/index.jsx
rename to frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx
index 8c47581c4..7a1d83a31 100644
--- a/frontend/src/components/Modals/MangeWorkspace/Upload/FileUploadProgress/index.jsx
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/FileUploadProgress/index.jsx
@@ -1,9 +1,9 @@
 import React, { useState, useEffect, memo } from "react";
-import Workspace from "../../../../../models/workspace";
 import truncate from "truncate";
-import { humanFileSize, milliToHms } from "../../../../../utils/numbers";
 import { CheckCircle, XCircle } from "react-feather";
-import { Grid } from "react-loading-icons";
+import Workspace from "../../../../../../models/workspace";
+import { humanFileSize, milliToHms } from "../../../../../../utils/numbers";
+import PreLoader from "../../../../../Preloader";
 
 function FileUploadProgressComponent({
   slug,
@@ -44,17 +44,15 @@ function FileUploadProgressComponent({
 
   if (rejected) {
     return (
-      <div className="w-fit px-2 py-2 flex items-center gap-x-4 rounded-lg bg-blue-100 border-blue-600 dark:bg-stone-800 bg-opacity-50 border dark:border-stone-600">
+      <div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40">
         <div className="w-6 h-6">
           <XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" />
         </div>
         <div className="flex flex-col">
-          <p className="text-black dark:text-stone-200 text-sm font-mono overflow-x-scroll">
+          <p className="text-white text-xs font-medium">
             {truncate(file.name, 30)}
           </p>
-          <p className="text-red-700 dark:text-red-400 text-xs font-mono">
-            {reason}
-          </p>
+          <p className="text-red-400 text-xs font-medium">{reason}</p>
         </div>
       </div>
     );
@@ -62,43 +60,41 @@ function FileUploadProgressComponent({
 
   if (status === "failed") {
     return (
-      <div className="w-fit px-2 py-2 flex items-center gap-x-4 rounded-lg bg-blue-100 border-blue-600 dark:bg-stone-800 bg-opacity-50 border dark:border-stone-600">
+      <div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40 overflow-y-auto">
         <div className="w-6 h-6">
           <XCircle className="w-6 h-6 stroke-white bg-red-500 rounded-full p-1 w-full h-full" />
         </div>
         <div className="flex flex-col">
-          <p className="text-black dark:text-stone-200 text-sm font-mono overflow-x-scroll">
+          <p className="text-white text-xs font-medium">
             {truncate(file.name, 30)}
           </p>
-          <p className="text-red-700 dark:text-red-400 text-xs font-mono">
-            {error}
-          </p>
+          <p className="text-red-400 text-xs font-medium">{error}</p>
         </div>
       </div>
     );
   }
 
   return (
-    <div className="w-fit px-2 py-2 flex items-center gap-x-4 rounded-lg bg-blue-100 border-blue-600 dark:bg-stone-800 bg-opacity-50 border dark:border-stone-600">
+    <div className="h-14 px-2 py-2 flex items-center gap-x-4 rounded-lg bg-white/5 border border-white/40">
       <div className="w-6 h-6">
         {status !== "complete" ? (
-          <Grid className="w-6 h-6 grid-loader" />
+          <div className="flex items-center justify-center">
+            <PreLoader size="6" />
+          </div>
         ) : (
           <CheckCircle className="w-6 h-6 stroke-white bg-green-500 rounded-full p-1 w-full h-full" />
         )}
       </div>
       <div className="flex flex-col">
-        <p className="text-black dark:text-stone-200 text-sm font-mono overflow-x-scroll">
+        <p className="text-white text-xs font-medium">
           {truncate(file.name, 30)}
         </p>
-        <p className="text-gray-700 dark:text-stone-400 text-xs font-mono">
+        <p className="text-white/60 text-xs font-medium">
           {humanFileSize(file.size)} | {milliToHms(timerMs)}
         </p>
       </div>
     </div>
   );
-
-  return null;
 }
 
 export default memo(FileUploadProgressComponent);
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx
new file mode 100644
index 000000000..eac081b7f
--- /dev/null
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/UploadFile/index.jsx
@@ -0,0 +1,111 @@
+import { CloudArrowUp } from "@phosphor-icons/react";
+import { useCallback, useEffect, useState } from "react";
+import showToast from "../../../../../utils/toast";
+import System from "../../../../../models/system";
+import { useDropzone } from "react-dropzone";
+import { v4 } from "uuid";
+import FileUploadProgress from "./FileUploadProgress";
+
+export default function UploadFile({ workspace, fileTypes, fetchKeys }) {
+  const [ready, setReady] = useState(false);
+  const [files, setFiles] = useState([]);
+
+  const handleUploadSuccess = () => {
+    fetchKeys(true);
+    showToast("File uploaded successfully", "success");
+  };
+
+  const handleUploadError = (message) => {
+    showToast(`Error uploading file: ${message}`, "error");
+  };
+
+  const onDrop = async (acceptedFiles, rejections) => {
+    const newAccepted = acceptedFiles.map((file) => {
+      return {
+        uid: v4(),
+        file,
+      };
+    });
+    const newRejected = rejections.map((file) => {
+      return {
+        uid: v4(),
+        file: file.file,
+        rejected: true,
+        reason: file.errors[0].code,
+      };
+    });
+
+    setFiles([...files, ...newAccepted, ...newRejected]);
+  };
+
+  useEffect(() => {
+    async function checkProcessorOnline() {
+      const online = await System.checkDocumentProcessorOnline();
+      setReady(online);
+    }
+    checkProcessorOnline();
+  }, []);
+
+  const { getRootProps, getInputProps } = useDropzone({
+    onDrop,
+    accept: {
+      ...fileTypes,
+    },
+    disabled: !ready,
+  });
+
+  return (
+    <div>
+      <div
+        className={`transition-all duration-300 w-[560px] border-2 border-dashed rounded-2xl bg-zinc-900/50 p-3 ${
+          ready ? "cursor-pointer" : "cursor-not-allowed"
+        } hover:bg-zinc-900/90`}
+        {...getRootProps()}
+      >
+        <input {...getInputProps()} />
+        {ready === false ? (
+          <div className="flex flex-col items-center justify-center h-full">
+            <CloudArrowUp className="w-8 h-8 text-white/80" />
+            <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+              Document Processor Unavailable
+            </div>
+            <div className="text-white text-opacity-60 text-xs font-medium py-1 px-20 text-center">
+              We can't upload your files right now because the document
+              processor is offline. Please try again later.
+            </div>
+          </div>
+        ) : files.length === 0 ? (
+          <div className="flex flex-col items-center justify-center">
+            <CloudArrowUp className="w-8 h-8 text-white/80" />
+            <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+              Click to upload or drag and drop
+            </div>
+            <div className="text-white text-opacity-60 text-xs font-medium py-1">
+              Supported file extensions are{" "}
+              {Object.values(fileTypes).flat().join(" ")}
+            </div>
+          </div>
+        ) : (
+          <div className="grid grid-cols-2 gap-2 overflow-auto max-h-[400px] p-1 overflow-y-auto">
+            {files.map((file) => (
+              <FileUploadProgress
+                key={file.uid}
+                file={file.file}
+                slug={workspace.slug}
+                rejected={file?.rejected}
+                reason={file?.reason}
+                onUploadSuccess={handleUploadSuccess}
+                onUploadError={handleUploadError}
+              />
+            ))}
+          </div>
+        )}
+      </div>
+      <div className="mt-6 text-center text-white text-opacity-80 text-xs font-medium w-[560px]">
+        These files will be uploaded to the document processor running on this
+        AnythingLLM instance. These files are not sent or shared with a third
+        party.
+      </div>
+    </div>
+  );
+}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx
new file mode 100644
index 000000000..4468ee27b
--- /dev/null
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/WorkspaceFileRow/index.jsx
@@ -0,0 +1,99 @@
+import { useState } from "react";
+import {
+  formatDate,
+  getFileExtension,
+  truncate,
+} from "../../../../../../utils/directories";
+import { ArrowUUpLeft, File } from "@phosphor-icons/react";
+import Workspace from "../../../../../../models/workspace";
+import debounce from "lodash.debounce";
+
+export default function WorkspaceFileRow({
+  item,
+  folderName,
+  workspace,
+  setLoading,
+  setLoadingMessage,
+  fetchKeys,
+  hasChanges,
+  movedItems,
+}) {
+  const [showTooltip, setShowTooltip] = useState(false);
+
+  const onRemoveClick = async () => {
+    setLoading(true);
+
+    try {
+      setLoadingMessage(`Removing file from workspace`);
+      await Workspace.modifyEmbeddings(workspace.slug, {
+        adds: [],
+        deletes: [`${folderName}/${item.name}`],
+      });
+      await fetchKeys(true);
+    } catch (error) {
+      console.error("Failed to remove document:", error);
+    }
+
+    setLoadingMessage("");
+    setLoading(false);
+  };
+
+  const handleShowTooltip = () => {
+    setShowTooltip(true);
+  };
+
+  const handleHideTooltip = () => {
+    setShowTooltip(false);
+  };
+
+  const isMovedItem = movedItems?.some((movedItem) => movedItem.id === item.id);
+  const handleMouseEnter = debounce(handleShowTooltip, 500);
+  const handleMouseLeave = debounce(handleHideTooltip, 500);
+  return (
+    <div
+      className={`items-center transition-all duration-200 text-white/80 text-xs grid grid-cols-12 py-2 pl-3.5 pr-8 border-b border-white/20 hover:bg-sky-500/20 cursor-pointer
+          ${isMovedItem ? "bg-green-800/40" : ""}`}
+    >
+      <div className="col-span-4 flex gap-x-[4px] items-center">
+        <File
+          className="text-base font-bold w-4 h-4 ml-3 mr-[3px]"
+          weight="fill"
+        />
+        <div
+          className="relative"
+          onMouseEnter={handleMouseEnter}
+          onMouseLeave={handleMouseLeave}
+        >
+          <p className="whitespace-nowrap overflow-hidden">
+            {truncate(item.title, 17)}
+          </p>
+          {showTooltip && (
+            <div className="absolute left-0 bg-white text-black p-1.5 rounded shadow-lg whitespace-nowrap">
+              {item.title}
+            </div>
+          )}
+        </div>
+      </div>
+      <p className="col-span-2 pl-3.5 whitespace-nowrap">
+        {formatDate(item?.published)}
+      </p>
+      <p className="col-span-2 pl-3">{item?.size || "---"}</p>
+      <p className="col-span-2 pl-2 uppercase">{getFileExtension(item.url)}</p>
+      <div className="col-span-2 flex justify-end items-center">
+        {item?.cached && (
+          <div className="bg-white/10 rounded-3xl">
+            <p className="text-xs px-2 py-0.5">Cached</p>
+          </div>
+        )}
+        {hasChanges ? (
+          <div className="w-4 h-4 ml-2 flex-shrink-0" />
+        ) : (
+          <ArrowUUpLeft
+            onClick={onRemoveClick}
+            className="text-base font-bold w-4 h-4 ml-2 flex-shrink-0 cursor-pointer"
+          />
+        )}
+      </div>
+    </div>
+  );
+}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/index.jsx
new file mode 100644
index 000000000..8b1381a14
--- /dev/null
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/WorkspaceDirectory/index.jsx
@@ -0,0 +1,122 @@
+import PreLoader from "../../../../Preloader";
+import { dollarFormat } from "../../../../../utils/numbers";
+import WorkspaceFileRow from "./WorkspaceFileRow";
+
+export default function WorkspaceDirectory({
+  workspace,
+  files,
+  highlightWorkspace,
+  loading,
+  loadingMessage,
+  setLoadingMessage,
+  setLoading,
+  fetchKeys,
+  hasChanges,
+  saveChanges,
+  embeddingCosts,
+  movedItems,
+}) {
+  if (loading) {
+    return (
+      <div className="px-8">
+        <div className="flex items-center justify-start w-[560px]">
+          <h3 className="text-white text-base font-bold ml-5">
+            {workspace.name}
+          </h3>
+        </div>
+        <div className="relative w-[560px] h-[445px] bg-zinc-900 rounded-2xl mt-5">
+          <div className="text-white/80 text-xs grid grid-cols-12 py-2 px-8 border-b border-white/20">
+            <p className="col-span-4">Name</p>
+            <p className="col-span-2">Date</p>
+            <p className="col-span-2">Size</p>
+            <p className="col-span-2">Kind</p>
+            <p className="col-span-2">Cached</p>
+          </div>
+          <div className="w-full h-full flex items-center justify-center flex-col gap-y-5">
+            <PreLoader />
+            <p className="text-white/80 text-sm font-semibold animate-pulse text-center w-1/3">
+              {loadingMessage}
+            </p>
+          </div>
+        </div>
+      </div>
+    );
+  }
+
+  return (
+    <div className="px-8">
+      <div className="flex items-center justify-start w-[560px]">
+        <h3 className="text-white text-base font-bold ml-5">
+          {workspace.name}
+        </h3>
+      </div>
+      <div
+        className={`relative w-[560px] h-[445px] bg-zinc-900 rounded-2xl mt-5 overflow-y-auto border-4 transition-all duration-300 ${
+          highlightWorkspace ? "border-cyan-300/80" : "border-transparent"
+        }`}
+      >
+        <div className="text-white/80 text-xs grid grid-cols-12 py-2 px-8 border-b border-white/20 bg-zinc-900 sticky top-0 z-10">
+          <p className="col-span-4">Name</p>
+          <p className="col-span-2">Date</p>
+          <p className="col-span-2">Size</p>
+          <p className="col-span-2">Kind</p>
+          <p className="col-span-2">Cached</p>
+        </div>
+        <div className="w-full h-full flex flex-col z-0">
+          {Object.values(files.items).some(
+            (folder) => folder.items.length > 0
+          ) || movedItems.length > 0 ? (
+            <>
+              {files.items.map((folder) =>
+                folder.items.map((item, index) => (
+                  <WorkspaceFileRow
+                    key={index}
+                    item={item}
+                    folderName={folder.name}
+                    workspace={workspace}
+                    setLoading={setLoading}
+                    setLoadingMessage={setLoadingMessage}
+                    fetchKeys={fetchKeys}
+                    hasChanges={hasChanges}
+                    movedItems={movedItems}
+                  />
+                ))
+              )}
+            </>
+          ) : (
+            <div className="w-full h-full flex items-center justify-center">
+              <p className="text-white text-opacity-40 text-sm font-medium">
+                No Documents
+              </p>
+            </div>
+          )}
+        </div>
+      </div>
+      {hasChanges && (
+        <div className="flex items-center justify-between py-6 transition-all duration-300">
+          <div className="text-white/80">
+            <p className="text-sm font-semibold">
+              {embeddingCosts === 0
+                ? ""
+                : `Estimated Cost: ${
+                    embeddingCosts < 0.01
+                      ? `< $0.01`
+                      : dollarFormat(embeddingCosts)
+                  }`}
+            </p>
+            <p className="mt-2 text-xs italic" hidden={embeddingCosts === 0}>
+              *One time cost for embeddings
+            </p>
+          </div>
+
+          <button
+            onClick={saveChanges}
+            className="transition-all duration-300 border border-slate-200 px-5 py-2.5 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+          >
+            Save and Embed
+          </button>
+        </div>
+      )}
+    </div>
+  );
+}
diff --git a/frontend/src/components/Modals/MangeWorkspace/Documents/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Documents/index.jsx
index 1034f3e2e..5e9942060 100644
--- a/frontend/src/components/Modals/MangeWorkspace/Documents/index.jsx
+++ b/frontend/src/components/Modals/MangeWorkspace/Documents/index.jsx
@@ -1,41 +1,74 @@
-import React, { useState, useEffect } from "react";
-import System from "../../../../models/system";
+import { ArrowsDownUp } from "@phosphor-icons/react";
+import { useEffect, useState } from "react";
 import Workspace from "../../../../models/workspace";
-import paths from "../../../../utils/paths";
-import { useParams } from "react-router-dom";
+import System from "../../../../models/system";
 import Directory from "./Directory";
-import ConfirmationModal from "./ConfirmationModal";
-import { AlertTriangle } from "react-feather";
 import showToast from "../../../../utils/toast";
+import WorkspaceDirectory from "./WorkspaceDirectory";
+
+const COST_PER_TOKEN = 0.0004;
 
-export default function DocumentSettings({ workspace }) {
-  const { slug } = useParams();
+export default function DocumentSettings({ workspace, fileTypes }) {
+  const [highlightWorkspace, setHighlightWorkspace] = useState(false);
+  const [availableDocs, setAvailableDocs] = useState([]);
   const [loading, setLoading] = useState(true);
-  const [saving, setSaving] = useState(false);
-  const [showConfirmation, setShowConfirmation] = useState(false);
-  const [directories, setDirectories] = useState(null);
-  const [originalDocuments, setOriginalDocuments] = useState([]);
-  const [selectedFiles, setSelectFiles] = useState([]);
-  const [hasFiles, setHasFiles] = useState(true);
-  const [canDelete, setCanDelete] = useState(false);
+  const [workspaceDocs, setWorkspaceDocs] = useState([]);
+  const [selectedItems, setSelectedItems] = useState({});
+  const [hasChanges, setHasChanges] = useState(false);
+  const [movedItems, setMovedItems] = useState([]);
+  const [embeddingsCost, setEmbeddingsCost] = useState(0);
+  const [loadingMessage, setLoadingMessage] = useState("");
 
   async function fetchKeys(refetchWorkspace = false) {
+    setLoading(true);
     const localFiles = await System.localFiles();
     const currentWorkspace = refetchWorkspace
-      ? await Workspace.bySlug(slug ?? workspace.slug)
+      ? await Workspace.bySlug(workspace.slug)
       : workspace;
-    const originalDocs =
+
+    const documentsInWorkspace =
       currentWorkspace.documents.map((doc) => doc.docpath) || [];
-    const hasAnyFiles = localFiles.items.some(
-      (folder) => folder?.items?.length > 0
-    );
-
-    const canDelete = await System.getCanDeleteWorkspaces();
-    setCanDelete(canDelete);
-    setDirectories(localFiles);
-    setOriginalDocuments([...originalDocs]);
-    setSelectFiles([...originalDocs]);
-    setHasFiles(hasAnyFiles);
+
+    // Documents that are not in the workspace
+    const availableDocs = {
+      ...localFiles,
+      items: localFiles.items.map((folder) => {
+        if (folder.items && folder.type === "folder") {
+          return {
+            ...folder,
+            items: folder.items.filter(
+              (file) =>
+                file.type === "file" &&
+                !documentsInWorkspace.includes(`${folder.name}/${file.name}`)
+            ),
+          };
+        } else {
+          return folder;
+        }
+      }),
+    };
+
+    // Documents that are already in the workspace
+    const workspaceDocs = {
+      ...localFiles,
+      items: localFiles.items.map((folder) => {
+        if (folder.items && folder.type === "folder") {
+          return {
+            ...folder,
+            items: folder.items.filter(
+              (file) =>
+                file.type === "file" &&
+                documentsInWorkspace.includes(`${folder.name}/${file.name}`)
+            ),
+          };
+        } else {
+          return folder;
+        }
+      }),
+    };
+
+    setAvailableDocs(availableDocs);
+    setWorkspaceDocs(workspaceDocs);
     setLoading(false);
   }
 
@@ -43,56 +76,20 @@ export default function DocumentSettings({ workspace }) {
     fetchKeys();
   }, []);
 
-  const deleteWorkspace = async () => {
-    if (
-      !window.confirm(
-        `You are about to delete your entire ${workspace.name} workspace. This will remove all vector embeddings on your vector database.\n\nThe original source files will remain untouched. This action is irreversible.`
-      )
-    )
-      return false;
-    await Workspace.delete(workspace.slug);
-    workspace.slug === slug
-      ? (window.location = paths.home())
-      : window.location.reload();
-  };
-
-  const docChanges = () => {
-    const changes = {
-      adds: [],
-      deletes: [],
-    };
-
-    selectedFiles.map((doc) => {
-      const inOriginal = !!originalDocuments.find((oDoc) => oDoc === doc);
-      if (!inOriginal) {
-        changes.adds.push(doc);
-      }
-    });
-
-    originalDocuments.map((doc) => {
-      const selected = !!selectedFiles.find((oDoc) => oDoc === doc);
-      if (!selected) {
-        changes.deletes.push(doc);
-      }
-    });
-
-    return changes;
-  };
-
-  const confirmChanges = (e) => {
-    e.preventDefault();
-    const changes = docChanges();
-    changes.adds.length > 0 ? setShowConfirmation(true) : updateWorkspace(e);
-  };
-
   const updateWorkspace = async (e) => {
     e.preventDefault();
-    setSaving(true);
+    setLoading(true);
     showToast("Updating workspace...", "info", { autoClose: false });
-    setShowConfirmation(false);
+    setLoadingMessage("This may take a while for large documents");
+
+    const changesToSend = {
+      adds: movedItems.map((item) => `${item.folderName}/${item.name}`),
+    };
 
-    const changes = docChanges();
-    await Workspace.modifyEmbeddings(workspace.slug, changes)
+    setSelectedItems({});
+    setHasChanges(false);
+    setHighlightWorkspace(false);
+    await Workspace.modifyEmbeddings(workspace.slug, changesToSend)
       .then((res) => {
         if (res && res.workspace) {
           showToast("Workspace updated successfully.", "success", {
@@ -108,122 +105,110 @@ export default function DocumentSettings({ workspace }) {
         });
       });
 
-    setSaving(false);
+    setMovedItems([]);
     await fetchKeys(true);
+    setLoading(false);
+    setLoadingMessage("");
   };
 
-  const isSelected = (filepath) => {
-    const isFolder = !filepath.includes("/");
-    return isFolder
-      ? selectedFiles.some((doc) => doc.includes(filepath.split("/")[0]))
-      : selectedFiles.some((doc) => doc.includes(filepath));
-  };
+  const moveSelectedItemsToWorkspace = () => {
+    setHighlightWorkspace(false);
+    setHasChanges(true);
+
+    const newMovedItems = [];
 
-  const toggleSelection = (filepath) => {
-    const isFolder = !filepath.includes("/");
-    const parent = isFolder ? filepath : filepath.split("/")[0];
-
-    if (isSelected(filepath)) {
-      const updatedDocs = isFolder
-        ? selectedFiles.filter((doc) => !doc.includes(parent))
-        : selectedFiles.filter((doc) => !doc.includes(filepath));
-      setSelectFiles([...new Set(updatedDocs)]);
-    } else {
-      var newDocs = [];
-      var parentDirs = directories.items.find((item) => item.name === parent);
-      if (isFolder && parentDirs) {
-        const folderItems = parentDirs.items;
-        newDocs = folderItems.map((item) => parent + "/" + item.name);
-      } else {
-        newDocs = [filepath];
+    for (const itemId of Object.keys(selectedItems)) {
+      for (const folder of availableDocs.items) {
+        const foundItem = folder.items.find((file) => file.id === itemId);
+        if (foundItem) {
+          newMovedItems.push({ ...foundItem, folderName: folder.name });
+          break;
+        }
       }
+    }
 
-      const combined = [...selectedFiles, ...newDocs];
-      setSelectFiles([...new Set(combined)]);
+    let totalTokenCount = 0;
+    newMovedItems.forEach((item) => {
+      const { cached, token_count_estimate } = item;
+      if (!cached) {
+        totalTokenCount += token_count_estimate;
+      }
+    });
+
+    const dollarAmount = (totalTokenCount / 1000) * COST_PER_TOKEN;
+    setEmbeddingsCost(dollarAmount);
+    setMovedItems([...movedItems, ...newMovedItems]);
+
+    let newAvailableDocs = JSON.parse(JSON.stringify(availableDocs));
+    let newWorkspaceDocs = JSON.parse(JSON.stringify(workspaceDocs));
+
+    for (const itemId of Object.keys(selectedItems)) {
+      let foundItem = null;
+      let foundFolderIndex = null;
+
+      newAvailableDocs.items = newAvailableDocs.items.map(
+        (folder, folderIndex) => {
+          const remainingItems = folder.items.filter((file) => {
+            const match = file.id === itemId;
+            if (match) {
+              foundItem = { ...file };
+              foundFolderIndex = folderIndex;
+            }
+            return !match;
+          });
+
+          return {
+            ...folder,
+            items: remainingItems,
+          };
+        }
+      );
+
+      if (foundItem) {
+        newWorkspaceDocs.items[foundFolderIndex].items.push(foundItem);
+      }
     }
-  };
 
-  if (loading) {
-    return (
-      <>
-        <div className="p-6 flex h-full w-full max-h-[80vh] overflow-y-scroll">
-          <div className="flex flex-col gap-y-1 w-full">
-            <p className="text-slate-200 dark:text-stone-300 text-center">
-              loading workspace files
-            </p>
-          </div>
-        </div>
-        <div className="flex items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600"></div>
-      </>
-    );
-  }
+    setAvailableDocs(newAvailableDocs);
+    setWorkspaceDocs(newWorkspaceDocs);
+    setSelectedItems({});
+  };
 
   return (
-    <>
-      {showConfirmation && (
-        <ConfirmationModal
-          directories={directories}
-          hideConfirm={() => setShowConfirmation(false)}
-          additions={docChanges().adds}
-          updateWorkspace={updateWorkspace}
-        />
-      )}
-      <div className="p-6 flex h-full w-full max-h-[80vh] overflow-y-scroll">
-        <div className="flex flex-col gap-y-1 w-full">
-          {!hasFiles && (
-            <div className="mb-4 w-full gap-x-2 rounded-lg h-10 border bg-orange-200 border-orange-800 dark:bg-orange-300 text-orange-800 flex  items-center justify-center">
-              <AlertTriangle className="h-6 w-6" />
-              <p className="text-sm">
-                You don't have any files uploaded. Upload a file via the "Upload
-                Docs" tab.
-              </p>
-            </div>
-          )}
-
-          <div className="flex flex-col mb-2">
-            <p className="text-gray-800 dark:text-stone-200 text-base ">
-              Select folders to add or remove from workspace.
-            </p>
-            <p className="text-gray-800 dark:text-stone-400 text-xs italic">
-              {selectedFiles.length} documents in workspace selected.
-            </p>
-          </div>
-          <div className="w-full h-auto border border-slate-200 dark:border-stone-600 rounded-lg px-4 py-2">
-            {!!directories && (
-              <Directory
-                files={directories}
-                toggleSelection={toggleSelection}
-                isSelected={isSelected}
-              />
-            )}
-          </div>
-        </div>
-      </div>
-      <div
-        className={`flex items-center ${
-          canDelete ? "justify-between" : "justify-end"
-        } p-4 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600`}
-      >
-        <button
-          hidden={!canDelete}
-          onClick={deleteWorkspace}
-          type="button"
-          className="border border-transparent text-gray-500 bg-white hover:bg-red-100 rounded-lg whitespace-nowrap text-sm font-medium px-5 py-2.5 hover:text-red-900 focus:z-10 dark:bg-transparent dark:text-gray-300 dark:hover:text-white dark:hover:bg-red-600"
-        >
-          Delete Workspace
-        </button>
-
-        <div className="flex items-center">
-          <button
-            disabled={saving}
-            onClick={confirmChanges}
-            type="submit"
-            className="text-slate-200 bg-black-900 px-4 py-2 rounded-lg hover:bg-gray-900 whitespace-nowrap text-sm"
-          >
-            {saving ? "Saving..." : "Confirm Changes"}
-          </button>
-        </div>
+    <div className="flex gap-x-6 justify-center">
+      <Directory
+        files={availableDocs}
+        loading={loading}
+        loadingMessage={loadingMessage}
+        setLoading={setLoading}
+        fileTypes={fileTypes}
+        workspace={workspace}
+        fetchKeys={fetchKeys}
+        selectedItems={selectedItems}
+        setSelectedItems={setSelectedItems}
+        updateWorkspace={updateWorkspace}
+        highlightWorkspace={highlightWorkspace}
+        setHighlightWorkspace={setHighlightWorkspace}
+        moveToWorkspace={moveSelectedItemsToWorkspace}
+        setLoadingMessage={setLoadingMessage}
+      />
+      <div className="flex items-center">
+        <ArrowsDownUp className="text-white text-base font-bold rotate-90 w-11 h-11" />
       </div>
-    </>
+      <WorkspaceDirectory
+        workspace={workspace}
+        files={workspaceDocs}
+        highlightWorkspace={highlightWorkspace}
+        loading={loading}
+        loadingMessage={loadingMessage}
+        setLoadingMessage={setLoadingMessage}
+        setLoading={setLoading}
+        fetchKeys={fetchKeys}
+        hasChanges={hasChanges}
+        saveChanges={updateWorkspace}
+        embeddingCosts={embeddingsCost}
+        movedItems={movedItems}
+      />
+    </div>
   );
 }
diff --git a/frontend/src/components/Modals/MangeWorkspace/Settings/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Settings/index.jsx
index 95c66fff8..286349e08 100644
--- a/frontend/src/components/Modals/MangeWorkspace/Settings/index.jsx
+++ b/frontend/src/components/Modals/MangeWorkspace/Settings/index.jsx
@@ -2,6 +2,9 @@ import React, { useState, useRef, useEffect } from "react";
 import Workspace from "../../../../models/workspace";
 import paths from "../../../../utils/paths";
 import { chatPrompt } from "../../../../utils/chat";
+import System from "../../../../models/system";
+import PreLoader from "../../../Preloader";
+import { useParams } from "react-router-dom";
 
 // Ensure that a type is correct before sending the body
 // to the backend.
@@ -20,11 +23,14 @@ function castToType(key, value) {
 }
 
 export default function WorkspaceSettings({ workspace }) {
+  const { slug } = useParams();
   const formEl = useRef(null);
   const [saving, setSaving] = useState(false);
   const [hasChanges, setHasChanges] = useState(false);
   const [error, setError] = useState(null);
   const [success, setSuccess] = useState(null);
+  const [totalVectors, setTotalVectors] = useState(null);
+  const [canDelete, setCanDelete] = useState(false);
 
   useEffect(() => {
     function setTimer() {
@@ -43,6 +49,17 @@ export default function WorkspaceSettings({ workspace }) {
     setTimer();
   }, [success, error]);
 
+  useEffect(() => {
+    async function fetchKeys() {
+      const canDelete = await System.getCanDeleteWorkspaces();
+      setCanDelete(canDelete);
+
+      const totalVectors = await System.totalIndexes();
+      setTotalVectors(totalVectors);
+    }
+    fetchKeys();
+  }, []);
+
   const handleUpdate = async (e) => {
     setError(null);
     setSuccess(null);
@@ -61,6 +78,7 @@ export default function WorkspaceSettings({ workspace }) {
       setError(message);
     }
     setSaving(false);
+    setHasChanges(false);
   };
 
   const deleteWorkspace = async () => {
@@ -78,172 +96,189 @@ export default function WorkspaceSettings({ workspace }) {
 
   return (
     <form ref={formEl} onSubmit={handleUpdate}>
-      <div className="p-6 flex h-full w-full max-h-[80vh] overflow-y-scroll">
-        <div className="flex flex-col gap-y-1 w-full">
-          <div className="flex flex-col mb-2">
-            <p className="text-gray-800 dark:text-stone-200 text-base ">
-              Edit your workspace's settings
-            </p>
+      <div className="-mt-12 px-12 pb-6 flex flex-col h-full w-full max-h-[80vh] overflow-y-scroll">
+        <div className="flex flex-col gap-y-1 min-w-[900px]">
+          <div className="text-white text-opacity-60 text-sm font-bold uppercase py-6 border-b-2 border-white/10">
+            Workspace Settings
           </div>
-
-          <div className="w-full flex flex-col gap-y-4">
-            <div>
-              <input
-                type="text"
-                disabled={true}
-                defaultValue={workspace?.slug}
-                className="bg-gray-50 border disabled:bg-gray-400 disabled:text-gray-700 disabled:border-gray-400 disabled:dark:bg-stone-800 disabled:dark:border-stone-900 disabled:dark:text-stone-600 disabled:cursor-not-allowed border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
-                required={true}
-                autoComplete="off"
-              />
+          <div className="flex flex-row w-full py-6 border-b-2 border-white/10">
+            <div className="w-1/2">
+              <h3 className="text-white text-sm font-semibold">
+                Vector database identifier
+              </h3>
+              <p className="text-white text-opacity-60 text-sm font-medium">
+                {workspace?.slug}
+              </p>
             </div>
 
-            <div>
-              <div className="flex flex-col gap-y-1 mb-4">
-                <label
-                  htmlFor="name"
-                  className="block text-sm font-medium text-gray-900 dark:text-white"
-                >
-                  Workspace Name
-                </label>
-                <p className="text-xs text-gray-600 dark:text-stone-400">
-                  This will only change the display name of your workspace.
+            <div className="w-1/2">
+              <h3 className="text-white text-sm font-semibold">
+                Number of vectors
+              </h3>
+              <p className="text-white text-opacity-60 text-xs font-medium my-[2px]">
+                Total number of vectors in your vector database.
+              </p>
+              {totalVectors !== null ? (
+                <p className="text-white text-opacity-60 text-sm font-medium">
+                  {totalVectors}
                 </p>
-              </div>
-              <input
-                name="name"
-                type="text"
-                minLength={2}
-                maxLength={80}
-                defaultValue={workspace?.name}
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
-                placeholder="My Workspace"
-                required={true}
-                autoComplete="off"
-                onChange={() => setHasChanges(true)}
-              />
+              ) : (
+                <PreLoader size="4" />
+              )}
             </div>
+          </div>
+        </div>
+        <div className="flex flex-col gap-y-1 w-full mt-7">
+          <div className="flex">
+            <div className="flex flex-col gap-y-4 w-1/2">
+              <div className="w-3/4 flex flex-col gap-y-4">
+                <div>
+                  <div className="flex flex-col">
+                    <label
+                      htmlFor="name"
+                      className="block text-sm font-medium text-white"
+                    >
+                      Workspace Name
+                    </label>
+                    <p className="text-white text-opacity-60 text-xs font-medium py-1.5">
+                      This will only change the display name of your workspace.
+                    </p>
+                  </div>
+                  <input
+                    name="name"
+                    type="text"
+                    minLength={2}
+                    maxLength={80}
+                    defaultValue={workspace?.name}
+                    className="bg-zinc-900 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                    placeholder="My Workspace"
+                    required={true}
+                    autoComplete="off"
+                    onChange={() => setHasChanges(true)}
+                  />
+                </div>
 
-            <div>
-              <div className="flex flex-col gap-y-1 mb-4">
-                <label
-                  htmlFor="name"
-                  className="block text-sm font-medium text-gray-900 dark:text-white"
-                >
-                  LLM Temperature
-                </label>
-                <p className="text-xs text-gray-600 dark:text-stone-400">
-                  This setting controls how "random" or dynamic your chat
-                  responses will be.
-                  <br />
-                  The higher the number (2.0 maximum) the more random and
-                  incoherent.
-                  <br />
-                  Recommended: 0.7
-                </p>
-              </div>
-              <input
-                name="openAiTemp"
-                type="number"
-                min={0.0}
-                max={2.0}
-                step={0.1}
-                onWheel={(e) => e.target.blur()}
-                defaultValue={workspace?.openAiTemp ?? 0.7}
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
-                placeholder="0.7"
-                required={true}
-                autoComplete="off"
-                onChange={() => setHasChanges(true)}
-              />
-            </div>
+                <div>
+                  <div className="flex flex-col">
+                    <label
+                      htmlFor="name"
+                      className="block text-sm font-medium text-white"
+                    >
+                      LLM Temperature
+                    </label>
+                    <p className="text-white text-opacity-60 text-xs font-medium py-1.5">
+                      This setting controls how "random" or dynamic your chat
+                      responses will be.
+                      <br />
+                      The higher the number (2.0 maximum) the more random and
+                      incoherent.
+                      <br />
+                      <i>Recommended: 0.7</i>
+                    </p>
+                  </div>
+                  <input
+                    name="openAiTemp"
+                    type="number"
+                    min={0.0}
+                    max={2.0}
+                    step={0.1}
+                    onWheel={(e) => e.target.blur()}
+                    defaultValue={workspace?.openAiTemp ?? 0.7}
+                    className="bg-zinc-900 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                    placeholder="0.7"
+                    required={true}
+                    autoComplete="off"
+                    onChange={() => setHasChanges(true)}
+                  />
+                </div>
 
-            <div>
-              <div className="flex flex-col gap-y-1 mb-4">
-                <label
-                  htmlFor="name"
-                  className="block text-sm font-medium text-gray-900 dark:text-white"
-                >
-                  Prompt
-                </label>
-                <p className="text-xs text-gray-600 dark:text-stone-400">
-                  The prompt that will be used on this workspace. Define the
-                  context and instructions for the AI to generate a response.
-                  You should to provide a carefully crafted prompt so the AI can
-                  generate a relevant and accurate response.
-                </p>
+                <div>
+                  <div className="flex flex-col gap-y-1 mb-4">
+                    <label
+                      htmlFor="name"
+                      className="block mb-2 text-sm font-medium text-white"
+                    >
+                      Chat History
+                    </label>
+                    <p className="text-white text-opacity-60 text-xs font-medium">
+                      The number of previous chats that will be included in the
+                      response's short-term memory.
+                      <i>Recommend 20. </i>
+                      Anything more than 45 is likely to lead to continuous chat
+                      failures depending on message size.
+                    </p>
+                  </div>
+                  <input
+                    name="openAiHistory"
+                    type="number"
+                    min={1}
+                    max={45}
+                    step={1}
+                    onWheel={(e) => e.target.blur()}
+                    defaultValue={workspace?.openAiHistory ?? 20}
+                    className="bg-zinc-900 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                    placeholder="20"
+                    required={true}
+                    autoComplete="off"
+                    onChange={() => setHasChanges(true)}
+                  />
+                </div>
               </div>
-              <textarea
-                name="openAiPrompt"
-                maxLength={500}
-                rows={5}
-                defaultValue={chatPrompt(workspace)}
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
-                placeholder="Given the following conversation, relevant context, and a follow up question, reply with an answer to the current question the user is asking. Return only your response to the question given the above information following the users instructions as needed."
-                required={true}
-                wrap="soft"
-                autoComplete="off"
-                onChange={() => setHasChanges(true)}
-              />
             </div>
 
-            <div>
-              <div className="flex flex-col gap-y-1 mb-4">
-                <label
-                  htmlFor="name"
-                  className="block text-sm font-medium text-gray-900 dark:text-white"
-                >
-                  Chat History
-                </label>
-                <p className="text-xs text-gray-600 dark:text-stone-400">
-                  The number of previous chats that will be included in the
-                  response's short-term memory.
-                  <br />
-                  Recommend 20. Anything more than 45 is likely to lead to
-                  continuous chat failures depending on message size.
-                </p>
+            <div className="w-1/2">
+              <div className="w-3/4">
+                <div className="flex flex-col">
+                  <label
+                    htmlFor="name"
+                    className="block text-sm font-medium text-white"
+                  >
+                    Prompt
+                  </label>
+                  <p className="text-white text-opacity-60 text-xs font-medium py-1.5">
+                    The prompt that will be used on this workspace. Define the
+                    context and instructions for the AI to generate a response.
+                    You should to provide a carefully crafted prompt so the AI
+                    can generate a relevant and accurate response.
+                  </p>
+                </div>
+                <textarea
+                  name="openAiPrompt"
+                  maxLength={500}
+                  rows={5}
+                  defaultValue={chatPrompt(workspace)}
+                  className="bg-zinc-900 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                  placeholder="Given the following conversation, relevant context, and a follow up question, reply with an answer to the current question the user is asking. Return only your response to the question given the above information following the users instructions as needed."
+                  required={true}
+                  wrap="soft"
+                  autoComplete="off"
+                  onChange={() => setHasChanges(true)}
+                />
               </div>
-              <input
-                name="openAiHistory"
-                type="number"
-                min={1}
-                max={45}
-                step={1}
-                onWheel={(e) => e.target.blur()}
-                defaultValue={workspace?.openAiHistory ?? 20}
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
-                placeholder="20"
-                required={true}
-                autoComplete="off"
-                onChange={() => setHasChanges(true)}
-              />
             </div>
           </div>
-
-          {error && (
-            <p className="text-red-600 dark:text-red-400 text-sm">
-              Error: {error}
-            </p>
-          )}
-          {success && (
-            <p className="text-green-600 dark:text-green-400 text-sm">
-              Success: {success}
-            </p>
-          )}
+          <div className="text-center">
+            {error && <p className="text-red-400 text-sm">Error: {error}</p>}
+            {success && (
+              <p className="text-green-400 text-sm">Success: {success}</p>
+            )}
+          </div>
         </div>
       </div>
-      <div className="flex items-center justify-between p-2 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
-        <button
-          onClick={deleteWorkspace}
-          type="button"
-          className="border border-transparent text-gray-500 bg-white hover:bg-red-100 rounded-lg whitespace-nowrap text-sm font-medium px-5 py-2.5 hover:text-red-900 focus:z-10 dark:bg-transparent dark:text-gray-300 dark:hover:text-white dark:hover:bg-red-600"
-        >
-          Delete Workspace
-        </button>
+      <div className="flex items-center justify-between p-2 md:p-6 space-x-2 border-t rounded-b border-gray-600">
+        {canDelete && (
+          <button
+            onClick={deleteWorkspace}
+            type="button"
+            className="transition-all duration-300 border border-transparent rounded-lg whitespace-nowrap text-sm px-5 py-2.5 focus:z-10 bg-transparent text-white hover:text-white hover:bg-red-600"
+          >
+            Delete Workspace
+          </button>
+        )}
         {hasChanges && (
           <button
             type="submit"
-            className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 whitespace-nowrap text-sm font-medium px-2 md:px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+            className="transition-all duration-300 border border-slate-200 px-5 py-2.5 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
           >
             {saving ? "Updating..." : "Update workspace"}
           </button>
diff --git a/frontend/src/components/Modals/MangeWorkspace/Upload/index.jsx b/frontend/src/components/Modals/MangeWorkspace/Upload/index.jsx
deleted file mode 100644
index a4d042066..000000000
--- a/frontend/src/components/Modals/MangeWorkspace/Upload/index.jsx
+++ /dev/null
@@ -1,202 +0,0 @@
-import React, { useState, useCallback, useEffect } from "react";
-import Workspace from "../../../../models/workspace";
-import paths from "../../../../utils/paths";
-import FileUploadProgress from "./FileUploadProgress";
-import { useDropzone } from "react-dropzone";
-import { v4 } from "uuid";
-import System from "../../../../models/system";
-import { Frown } from "react-feather";
-import showToast from "../../../../utils/toast";
-
-export default function UploadToWorkspace({ workspace, fileTypes }) {
-  const [ready, setReady] = useState(null);
-  const [files, setFiles] = useState([]);
-
-  const handleUploadSuccess = () => {
-    showToast("File uploaded successfully", "success");
-  };
-
-  const handleUploadError = (message) => {
-    showToast(`Error uploading file: ${message}`, "error");
-  };
-
-  const onDrop = useCallback(async (acceptedFiles, rejections) => {
-    const newAccepted = acceptedFiles.map((file) => {
-      return {
-        uid: v4(),
-        file,
-      };
-    });
-    const newRejected = rejections.map((file) => {
-      return {
-        uid: v4(),
-        file: file.file,
-        rejected: true,
-        reason: file.errors[0].code,
-      };
-    });
-
-    setFiles([...files, ...newAccepted, ...newRejected]);
-  }, []);
-
-  useEffect(() => {
-    async function checkProcessorOnline() {
-      const online = await System.checkDocumentProcessorOnline();
-      setReady(online);
-    }
-    checkProcessorOnline();
-  }, []);
-
-  const { getRootProps, getInputProps } = useDropzone({
-    onDrop,
-    accept: {
-      ...fileTypes,
-    },
-  });
-
-  const deleteWorkspace = async () => {
-    if (
-      !window.confirm(
-        `You are about to delete your entire ${workspace.name} workspace. This will remove all vector embeddings on your vector database.\n\nThe original source files will remain untouched. This action is irreversible.`
-      )
-    )
-      return false;
-    await Workspace.delete(workspace.slug);
-    workspace.slug === slug
-      ? (window.location = paths.home())
-      : window.location.reload();
-  };
-
-  if (ready === null) {
-    return (
-      <ModalWrapper deleteWorkspace={deleteWorkspace}>
-        <div className="outline-none transition-all cursor-wait duration-300 bg-stone-400 bg-opacity-20 flex h-[20rem] overflow-y-scroll overflow-x-hidden rounded-lg">
-          <div className="flex flex-col gap-y-1 w-full h-full items-center justify-center">
-            <p className="text-slate-400 text-xs">
-              Checking document processor is online - please wait.
-            </p>
-            <p className="text-slate-400 text-xs">
-              this should only take a few moments.
-            </p>
-          </div>
-        </div>
-      </ModalWrapper>
-    );
-  }
-
-  if (ready === false) {
-    return (
-      <ModalWrapper deleteWorkspace={deleteWorkspace}>
-        <div className="outline-none transition-all duration-300 bg-red-200 flex h-[20rem] overflow-y-scroll overflow-x-hidden rounded-lg">
-          <div className="flex flex-col gap-y-1 w-full h-full items-center justify-center md:px-0 px-2">
-            <Frown className="w-8 h-8 text-red-800" />
-            <p className="text-red-800 text-xs text-center">
-              Document processor is offline.
-            </p>
-            <p className="text-red-800 text-[10px] md:text-xs text-center">
-              you cannot upload documents from the UI right now
-            </p>
-          </div>
-        </div>
-      </ModalWrapper>
-    );
-  }
-
-  return (
-    <ModalWrapper deleteWorkspace={deleteWorkspace}>
-      <div
-        {...getRootProps()}
-        className="outline-none transition-all cursor-pointer duration-300 hover:bg-opacity-40 bg-stone-400 bg-opacity-20 flex h-[20rem] overflow-y-scroll overflow-x-hidden rounded-lg"
-      >
-        <input {...getInputProps()} />
-        {files.length === 0 ? (
-          <div className="flex flex-col items-center justify-center w-full h-full">
-            <div className="flex flex-col items-center justify-center pt-5 pb-6">
-              <svg
-                aria-hidden="true"
-                className="w-10 h-10 mb-3 text-gray-600 dark:text-slate-300"
-                fill="none"
-                stroke="currentColor"
-                viewBox="0 0 24 24"
-                xmlns="http://www.w3.org/2000/svg"
-              >
-                <path
-                  strokeLinecap="round"
-                  strokeLinejoin="round"
-                  strokeWidth="2"
-                  d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"
-                ></path>
-              </svg>
-              <p className="mb-2 text-sm text-gray-600 dark:text-slate-300">
-                <span className="font-semibold">Click to upload</span> or drag
-                and drop
-              </p>
-              <p className="text-xs text-gray-600 dark:text-slate-300"></p>
-            </div>
-          </div>
-        ) : (
-          <div className="flex flex-col w-full p-4 gap-y-2">
-            {files.map((file) => (
-              <FileUploadProgress
-                key={file.uid}
-                file={file.file}
-                slug={workspace.slug}
-                rejected={file?.rejected}
-                reason={file?.reason}
-                onUploadSuccess={handleUploadSuccess}
-                onUploadError={handleUploadError}
-              />
-            ))}
-          </div>
-        )}
-      </div>
-      <p className="text-gray-600 dark:text-stone-400 text-xs ">
-        supported file extensions are{" "}
-        <code className="text-xs bg-gray-200 text-gray-800 dark:bg-stone-800 dark:text-slate-400 font-mono rounded-sm px-1">
-          {Object.values(fileTypes).flat().join(" ")}
-        </code>
-      </p>
-    </ModalWrapper>
-  );
-}
-
-function ModalWrapper({ deleteWorkspace, children }) {
-  return (
-    <>
-      <div className="p-6 flex h-full w-full max-h-[80vh] overflow-y-scroll">
-        <div className="flex flex-col gap-y-1 w-full">
-          <div className="flex flex-col mb-2">
-            <p className="text-gray-800 dark:text-stone-200 text-base ">
-              Add documents to your workspace.
-            </p>
-            <p className="text-gray-600 dark:text-stone-400 text-xs ">
-              These files will be uploaded to the document processor running on
-              this AnythingLLM instance. These files are not sent or shared with
-              a third party.
-            </p>
-            {process.env.NODE_ENV !== "production" && (
-              <div className="mt-2 text-gray-600 dark:text-stone-400 text-xs">
-                <div className="w-[1px] bg-stone-400 w-full" />
-                Local Environment Notice: You must have the{" "}
-                <code className="text-xs bg-gray-200 text-gray-800 dark:bg-stone-800 dark:text-slate-400 font-mono rounded-sm px-1">
-                  python document processor app
-                </code>{" "}
-                running for these documents to process.
-              </div>
-            )}
-          </div>
-          {children}
-        </div>
-      </div>
-      <div className="flex items-center justify-between p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
-        <button
-          onClick={deleteWorkspace}
-          type="button"
-          className="border border-transparent text-gray-500 bg-white hover:bg-red-100 rounded-lg text-sm font-medium px-5 py-2.5 hover:text-red-900 focus:z-10 dark:bg-transparent dark:text-gray-300 dark:hover:text-white dark:hover:bg-red-600"
-        >
-          Delete Workspace
-        </button>
-      </div>
-    </>
-  );
-}
diff --git a/frontend/src/components/Modals/MangeWorkspace/index.jsx b/frontend/src/components/Modals/MangeWorkspace/index.jsx
index c35675ad1..5ca08915b 100644
--- a/frontend/src/components/Modals/MangeWorkspace/index.jsx
+++ b/frontend/src/components/Modals/MangeWorkspace/index.jsx
@@ -1,23 +1,15 @@
-import React, { useState, useEffect } from "react";
-import { Archive, Sliders, UploadCloud, X } from "react-feather";
-import DocumentSettings from "./Documents";
-import WorkspaceSettings from "./Settings";
+import React, { useState, useEffect, lazy, Suspense, memo } from "react";
+import { X } from "react-feather";
 import { useParams } from "react-router-dom";
 import Workspace from "../../../models/workspace";
 import System from "../../../models/system";
-import UploadToWorkspace from "./Upload";
+import { isMobile } from "react-device-detect";
 
-const TABS = {
-  documents: DocumentSettings,
-  settings: WorkspaceSettings,
-  upload: UploadToWorkspace,
-};
+const DocumentSettings = lazy(() => import("./Documents"));
+const WorkspaceSettings = lazy(() => import("./Settings"));
 
-const noop = () => false;
-export default function ManageWorkspace({
-  hideModal = noop,
-  providedSlug = null,
-}) {
+const noop = () => {};
+const ManageWorkspace = ({ hideModal = noop, providedSlug = null }) => {
   const { slug } = useParams();
   const [selectedTab, setSelectedTab] = useState("documents");
   const [workspace, setWorkspace] = useState(null);
@@ -37,110 +29,99 @@ export default function ManageWorkspace({
       setWorkspace(workspace);
     }
     fetchWorkspace();
-  }, [selectedTab, slug]);
+  }, [providedSlug, slug]);
 
   if (!workspace) return null;
 
-  const Component = TABS[selectedTab || "documents"];
+  if (isMobile) {
+    return (
+      <div className="w-screen h-screen fixed top-0 left-0 flex justify-center items-center z-99">
+        <div className="backdrop h-full w-full absolute top-0 z-10" />
+        <div className={`absolute max-h-full transition duration-300 z-20`}>
+          <div className="relative max-w-lg mx-auto bg-main-gradient rounded-[12px] shadow border-2 border-slate-300/10">
+            <div className="p-6">
+              <h1 className="text-white text-lg font-semibold">
+                Editing "{workspace.name}"
+              </h1>
+              <p className="text-white mt-4">
+                Editing these settings are only available on a desktop device.
+                Please access this page on your desktop to continue.
+              </p>
+              <div className="mt-6 flex justify-end">
+                <button
+                  onClick={hideModal}
+                  type="button"
+                  className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
+                >
+                  Dismiss
+                </button>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    );
+  }
+
   return (
-    <div className="fixed top-0 left-0 right-0 z-50 w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] h-full bg-black bg-opacity-50 flex items-center justify-center">
-      <div
-        className="flex fixed top-0 left-0 right-0 w-full h-full"
-        onClick={hideModal}
-      />
-      <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex flex-col gap-y-1 border-b dark:border-gray-600 px-4 pt-4 ">
-            <div className="flex items-start justify-between rounded-t ">
-              <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
-                Update "{workspace.name}"
-              </h3>
+    <div className="w-screen h-screen fixed top-0 left-0 flex justify-center items-center z-99">
+      <div className="backdrop h-full w-full absolute top-0 z-10" />
+      <div className={`absolute max-h-full w-3/4 transition duration-300 z-20`}>
+        <div className="relative bg-main-gradient rounded-[12px] shadow border-2 border-slate-300/10">
+          <div className="absolute top-[-18px] left-1/2 transform -translate-x-1/2 bg-sidebar-button p-1 rounded-xl shadow border-2 border-slate-300/10">
+            <div className="flex gap-x-1">
               <button
-                onClick={hideModal}
-                type="button"
-                className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
-                data-modal-hide="staticModal"
+                onClick={() => setSelectedTab("documents")}
+                className={`px-4 py-2 rounded-[8px] font-semibold text-white hover:bg-switch-selected hover:bg-opacity-60 ${
+                  selectedTab === "documents"
+                    ? "bg-switch-selected shadow-md"
+                    : "bg-sidebar-button"
+                }`}
               >
-                <X className="text-gray-300 text-lg" />
+                Documents
+              </button>
+              <button
+                onClick={() => setSelectedTab("settings")}
+                className={`px-4 py-2 rounded-[8px] font-semibold text-white hover:bg-switch-selected hover:bg-opacity-60 ${
+                  selectedTab === "settings"
+                    ? "bg-switch-selected shadow-md"
+                    : "bg-sidebar-button"
+                }`}
+              >
+                Settings
               </button>
             </div>
-            <WorkspaceSettingTabs
-              selectedTab={selectedTab}
-              changeTab={setSelectedTab}
-            />
           </div>
-          <Component
-            hideModal={hideModal}
-            workspace={workspace}
-            fileTypes={fileTypes}
-          />
+          <div className="flex items-start justify-between p-2 rounded-t border-gray-500/50">
+            <button
+              onClick={hideModal}
+              type="button"
+              className="transition-all duration-300 text-gray-400 bg-transparent rounded-lg text-sm p-1.5 ml-auto inline-flex items-center hover:border-white/60 bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+            >
+              <X className="text-gray-300 text-lg" />
+            </button>
+          </div>
+          <Suspense fallback={<div>Loading...</div>}>
+            <div className={selectedTab === "documents" ? "" : "hidden"}>
+              <DocumentSettings workspace={workspace} fileTypes={fileTypes} />
+            </div>
+            <div className={selectedTab === "settings" ? "" : "hidden"}>
+              <WorkspaceSettings workspace={workspace} fileTypes={fileTypes} />
+            </div>
+          </Suspense>
         </div>
       </div>
     </div>
   );
-}
-
-function WorkspaceSettingTabs({ selectedTab, changeTab }) {
-  return (
-    <div>
-      <ul className="flex md:flex-wrap overflow-x-scroll no-scroll -mb-px text-sm gap-x-2 font-medium text-center text-gray-500 dark:text-gray-400">
-        <WorkspaceTab
-          active={selectedTab === "documents"}
-          displayName="Documents"
-          tabName="documents"
-          icon={<Archive className="h-4 w-4 flex-shrink-0" />}
-          onClick={changeTab}
-        />
-        <WorkspaceTab
-          active={selectedTab === "upload"}
-          displayName="Upload Docs"
-          tabName="upload"
-          icon={<UploadCloud className="h-4 w-4 flex-shrink-0" />}
-          onClick={changeTab}
-        />
-        <WorkspaceTab
-          active={selectedTab === "settings"}
-          displayName="Settings"
-          tabName="settings"
-          icon={<Sliders className="h-4 w-4 flex-shrink-0" />}
-          onClick={changeTab}
-        />
-      </ul>
-    </div>
-  );
-}
-
-function WorkspaceTab({
-  active = false,
-  displayName,
-  tabName,
-  icon = "",
-  onClick,
-}) {
-  const classes = active
-    ? "text-blue-600 border-blue-600 active dark:text-blue-400 dark:border-blue-400 bg-blue-500 bg-opacity-5"
-    : "border-transparent hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300";
-  return (
-    <li className="mr-2">
-      <button
-        disabled={active}
-        onClick={() => onClick(tabName)}
-        className={
-          "flex items-center gap-x-1 p-4 border-b-2 rounded-t-lg group whitespace-nowrap " +
-          classes
-        }
-      >
-        {icon} {displayName}
-      </button>
-    </li>
-  );
-}
+};
 
+export default memo(ManageWorkspace);
 export function useManageWorkspaceModal() {
   const [showing, setShowing] = useState(false);
   const showModal = () => {
     setShowing(true);
   };
+
   const hideModal = () => {
     setShowing(false);
   };
diff --git a/frontend/src/components/Modals/NewWorkspace.jsx b/frontend/src/components/Modals/NewWorkspace.jsx
index 07cb45860..bb97c1a83 100644
--- a/frontend/src/components/Modals/NewWorkspace.jsx
+++ b/frontend/src/components/Modals/NewWorkspace.jsx
@@ -23,17 +23,16 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
         className="flex fixed top-0 left-0 right-0 w-full h-full"
         onClick={hideModal}
       />
-      <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
+      <div className="relative w-[500px] max-h-full">
+        <div className="relative bg-modal-gradient rounded-lg shadow-md border-2 border-accent">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-white/10">
             <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
-              Create a New Workspace
+              New Workspace
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
-              data-modal-hide="staticModal"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
             >
               <X className="text-gray-300 text-lg" />
             </button>
@@ -52,7 +51,7 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
                     name="name"
                     type="text"
                     id="name"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 w-full text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
                     placeholder="My Workspace"
                     required={true}
                     autoComplete="off"
@@ -63,25 +62,14 @@ export default function NewWorkspaceModal({ hideModal = noop }) {
                     Error: {error}
                   </p>
                 )}
-                <p className="text-gray-800 dark:text-slate-200 text-xs md:text-sm">
-                  After creating a workspace you will be able to add and remove
-                  documents from it.
-                </p>
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
-              <button
-                onClick={hideModal}
-                type="button"
-                className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
-              >
-                Cancel
-              </button>
+            <div className="flex w-full justify-end items-center p-6 space-x-2 border-t border-white/10 rounded-b">
               <button
                 type="submit"
-                className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
               >
-                Create Workspace
+                Save
               </button>
             </div>
           </form>
diff --git a/frontend/src/components/Modals/Password/MultiUserAuth.jsx b/frontend/src/components/Modals/Password/MultiUserAuth.jsx
index f088266d3..de086fc08 100644
--- a/frontend/src/components/Modals/Password/MultiUserAuth.jsx
+++ b/frontend/src/components/Modals/Password/MultiUserAuth.jsx
@@ -2,6 +2,7 @@ import React, { useState } from "react";
 import System from "../../../models/system";
 import { AUTH_TOKEN, AUTH_USER } from "../../../utils/constants";
 import useLogo from "../../../hooks/useLogo";
+import paths from "../../../utils/paths";
 
 export default function MultiUserAuth() {
   const [loading, setLoading] = useState(false);
@@ -19,7 +20,7 @@ export default function MultiUserAuth() {
     if (valid && !!token && !!user) {
       window.localStorage.setItem(AUTH_USER, JSON.stringify(user));
       window.localStorage.setItem(AUTH_TOKEN, token);
-      window.location.reload();
+      window.location = paths.home();
     } else {
       setError(message);
       setLoading(false);
@@ -29,66 +30,52 @@ export default function MultiUserAuth() {
 
   return (
     <form onSubmit={handleLogin}>
-      <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-        <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
+      <div className="flex flex-col justify-center items-center relative rounded-2xl shadow border-2 border-slate-300 border-opacity-20 w-[400px] login-input-gradient">
+        <div className="flex items-start justify-between pt-11 pb-9 rounded-t">
           <div className="flex items-center flex-col">
-            <img src={_initLogo} alt="Logo" className="w-1/2" />
-            <h3 className="text-md md:text-xl font-semibold text-gray-900 dark:text-white">
-              This instance is password protected.
+            <h3 className="text-md md:text-2xl font-bold text-gray-900 dark:text-white text-center">
+              Sign In
             </h3>
           </div>
         </div>
-        <div className="p-6 space-y-6 flex h-full w-full">
+        <div className="px-12 space-y-6 flex h-full w-full">
           <div className="w-full flex flex-col gap-y-4">
             <div>
-              <label
-                htmlFor="username"
-                className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
-              >
-                Instance Username
-              </label>
               <input
                 name="username"
                 type="text"
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                placeholder="Username"
+                className="bg-opacity-40 border-gray-300 text-sm rounded-lg block w-full p-2.5 bg-[#222628] placeholder-[#FFFFFF99] text-white focus:ring-blue-500 focus:border-blue-500"
                 required={true}
                 autoComplete="off"
               />
             </div>
 
             <div>
-              <label
-                htmlFor="password"
-                className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
-              >
-                Instance Password
-              </label>
               <input
                 name="password"
                 type="password"
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                placeholder="Password"
+                className="bg-opacity-40 border-gray-300 text-sm rounded-lg block w-full p-2.5 bg-[#222628] placeholder-[#FFFFFF99] text-white focus:ring-blue-500 focus:border-blue-500"
                 required={true}
                 autoComplete="off"
               />
             </div>
+
             {error && (
               <p className="text-red-600 dark:text-red-400 text-sm">
                 Error: {error}
               </p>
             )}
-            <p className="text-gray-800 dark:text-slate-200 md:text-sm text-xs">
-              You will only have to enter this password once. After successful
-              login it will be stored in your browser.
-            </p>
           </div>
         </div>
-        <div className="flex items-center justify-end p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+        <div className="flex items-center p-12 space-x-2 border-gray-200 rounded-b dark:border-gray-600 w-full">
           <button
             disabled={loading}
             type="submit"
-            className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600"
+            className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-white text-sm font-bold px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-white dark:text-neutral-700 dark:border-white dark:hover:text-white dark:hover:bg-slate-600 dark:focus:ring-gray-600 w-full"
           >
-            {loading ? "Validating..." : "Submit"}
+            {loading ? "Validating..." : "Login"}
           </button>
         </div>
       </div>
diff --git a/frontend/src/components/Modals/Password/SingleUserAuth.jsx b/frontend/src/components/Modals/Password/SingleUserAuth.jsx
index 1327a2787..8135f8f94 100644
--- a/frontend/src/components/Modals/Password/SingleUserAuth.jsx
+++ b/frontend/src/components/Modals/Password/SingleUserAuth.jsx
@@ -2,6 +2,7 @@ import React, { useState } from "react";
 import System from "../../../models/system";
 import { AUTH_TOKEN } from "../../../utils/constants";
 import useLogo from "../../../hooks/useLogo";
+import paths from "../../../utils/paths";
 
 export default function SingleUserAuth() {
   const [loading, setLoading] = useState(false);
@@ -18,7 +19,7 @@ export default function SingleUserAuth() {
     const { valid, token, message } = await System.requestToken(data);
     if (valid && !!token) {
       window.localStorage.setItem(AUTH_TOKEN, token);
-      window.location.reload();
+      window.location = paths.home();
     } else {
       setError(message);
       setLoading(false);
@@ -28,29 +29,22 @@ export default function SingleUserAuth() {
 
   return (
     <form onSubmit={handleLogin}>
-      <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-        <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
+      <div className="flex flex-col justify-center items-center relative bg-white rounded-2xl shadow dark:bg-stone-700 border-2 border-slate-300 border-opacity-20 w-[400px] login-input-gradient">
+        <div className="flex items-start justify-between pt-11 pb-9 rounded-t dark:border-gray-600">
           <div className="flex items-center flex-col">
-            <img src={_initLogo} alt="Logo" className="w-1/2" />
-            <h3 className="text-md md:text-xl font-semibold text-gray-900 dark:text-white">
-              This instance is password protected.
+            <h3 className="text-md md:text-2xl font-bold text-gray-900 dark:text-white text-center">
+              Sign In
             </h3>
           </div>
         </div>
-        <div className="p-6 space-y-6 flex h-full w-full">
+        <div className="px-12 space-y-6 flex h-full w-full">
           <div className="w-full flex flex-col gap-y-4">
             <div>
-              <label
-                htmlFor="password"
-                className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
-              >
-                Workspace Password
-              </label>
               <input
                 name="password"
                 type="password"
-                id="password"
-                className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                placeholder="Password"
+                className="bg-neutral-800 bg-opacity-40 border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-[#222628] dark:bg-opacity-40 dark:placeholder-[#FFFFFF99] dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
                 required={true}
                 autoComplete="off"
               />
@@ -60,19 +54,15 @@ export default function SingleUserAuth() {
                 Error: {error}
               </p>
             )}
-            <p className="text-gray-800 dark:text-slate-200 md:text-sm text-xs">
-              You will only have to enter this password once. After successful
-              login it will be stored in your browser.
-            </p>
           </div>
         </div>
-        <div className="flex items-center justify-end p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+        <div className="flex items-center p-12 space-x-2 border-gray-200 rounded-b dark:border-gray-600 w-full">
           <button
             disabled={loading}
             type="submit"
-            className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600"
+            className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-white text-sm font-bold px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-white dark:text-neutral-700 dark:border-white dark:hover:text-white dark:hover:bg-slate-600 dark:focus:ring-gray-600 w-full"
           >
-            {loading ? "Validating..." : "Submit"}
+            {loading ? "Validating..." : "Login"}
           </button>
         </div>
       </div>
diff --git a/frontend/src/components/Modals/Password/index.jsx b/frontend/src/components/Modals/Password/index.jsx
index 096906e8d..e98986851 100644
--- a/frontend/src/components/Modals/Password/index.jsx
+++ b/frontend/src/components/Modals/Password/index.jsx
@@ -3,16 +3,31 @@ import System from "../../../models/system";
 import SingleUserAuth from "./SingleUserAuth";
 import MultiUserAuth from "./MultiUserAuth";
 import {
-  AUTH_TIMESTAMP,
   AUTH_TOKEN,
   AUTH_USER,
+  AUTH_TIMESTAMP,
 } from "../../../utils/constants";
+import useLogo from "../../../hooks/useLogo";
 
 export default function PasswordModal({ mode = "single" }) {
+  const { logo: _initLogo } = useLogo();
   return (
-    <div className="fixed top-0 left-0 right-0 z-50 w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] h-full bg-gray-600 dark:bg-stone-800 flex items-center justify-center">
-      <div className="flex fixed top-0 left-0 right-0 w-full h-full" />
-      <div className="relative w-full max-w-2xl max-h-full">
+    <div className="fixed top-0 left-0 right-0 z-50 w-full p-4 overflow-x-hidden overflow-y-auto md:inset-0 h-[calc(100%-1rem)] h-full bg-zinc-800 flex items-center justify-center">
+      <div
+        className="fixed top-0 left-0 right-0 bottom-0 z-40 animate-slow-pulse"
+        style={{
+          background: `
+            radial-gradient(circle at center, transparent 40%, black 100%),
+            linear-gradient(180deg, #FF8585 0%, #D4A447 100%)
+          `,
+          width: "575px",
+          filter: "blur(200px)",
+          margin: "auto",
+        }}
+      />
+
+      <div className="flex flex-col items-center justify-center h-full w-full z-50">
+        <img src={_initLogo} className="mb-20 w-80 opacity-80" alt="logo" />
         {mode === "single" ? <SingleUserAuth /> : <MultiUserAuth />}
       </div>
     </div>
diff --git a/frontend/src/components/Preloader.jsx b/frontend/src/components/Preloader.jsx
index 728f41bfc..066d5552b 100644
--- a/frontend/src/components/Preloader.jsx
+++ b/frontend/src/components/Preloader.jsx
@@ -1,6 +1,8 @@
-export default function PreLoader() {
+export default function PreLoader({ size = "16" }) {
   return (
-    <div className="h-16 w-16 animate-spin rounded-full border-4 border-solid border-primary border-t-transparent"></div>
+    <div
+      className={`h-${size} w-${size} animate-spin rounded-full border-4 border-solid border-primary border-t-transparent`}
+    ></div>
   );
 }
 
diff --git a/frontend/src/components/PrivateRoute/index.jsx b/frontend/src/components/PrivateRoute/index.jsx
index 0829dfd5e..1c403f818 100644
--- a/frontend/src/components/PrivateRoute/index.jsx
+++ b/frontend/src/components/PrivateRoute/index.jsx
@@ -6,20 +6,54 @@ import paths from "../../utils/paths";
 import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "../../utils/constants";
 import { userFromStorage } from "../../utils/request";
 import System from "../../models/system";
+import UserMenu from "../UserMenu";
 
 // Used only for Multi-user mode only as we permission specific pages based on auth role.
 // When in single user mode we just bypass any authchecks.
 function useIsAuthenticated() {
   const [isAuthd, setIsAuthed] = useState(null);
+  const [shouldRedirectToOnboarding, setShouldRedirectToOnboarding] =
+    useState(false);
 
   useEffect(() => {
     const validateSession = async () => {
-      const multiUserMode = (await System.keys()).MultiUserMode;
-      if (!multiUserMode) {
+      const {
+        MultiUserMode,
+        RequiresAuth,
+        OpenAiKey = false,
+        AzureOpenAiKey = false,
+      } = await System.keys();
+
+      // Check for the onboarding redirect condition
+      if (
+        !MultiUserMode &&
+        !RequiresAuth && // Not in Multi-user AND no password set.
+        !OpenAiKey &&
+        !AzureOpenAiKey // AND no LLM API Key set at all.
+      ) {
+        setShouldRedirectToOnboarding(true);
         setIsAuthed(true);
         return;
       }
 
+      if (!MultiUserMode && !RequiresAuth) {
+        setIsAuthed(true);
+        return;
+      }
+
+      // Single User password mode check
+      if (!MultiUserMode && RequiresAuth) {
+        const localAuthToken = localStorage.getItem(AUTH_TOKEN);
+        if (!localAuthToken) {
+          setIsAuthed(false);
+          return;
+        }
+
+        const isValid = await validateSessionTokenForUser();
+        setIsAuthed(isValid);
+        return;
+      }
+
       const localUser = localStorage.getItem(AUTH_USER);
       const localAuthToken = localStorage.getItem(AUTH_TOKEN);
       if (!localUser || !localAuthToken) {
@@ -41,24 +75,40 @@ function useIsAuthenticated() {
     validateSession();
   }, []);
 
-  return isAuthd;
+  return { isAuthd, shouldRedirectToOnboarding };
 }
 
 export function AdminRoute({ Component }) {
-  const authed = useIsAuthenticated();
-  if (authed === null) return <FullScreenLoader />;
+  const { isAuthd, shouldRedirectToOnboarding } = useIsAuthenticated();
+  if (isAuthd === null) return <FullScreenLoader />;
+
+  if (shouldRedirectToOnboarding) {
+    return <Navigate to={paths.onboarding()} />;
+  }
 
   const user = userFromStorage();
-  return authed && user?.role === "admin" ? (
-    <Component />
+  return isAuthd && user?.role === "admin" ? (
+    <UserMenu>
+      <Component />
+    </UserMenu>
   ) : (
     <Navigate to={paths.home()} />
   );
 }
 
 export default function PrivateRoute({ Component }) {
-  const authed = useIsAuthenticated();
-  if (authed === null) return <FullScreenLoader />;
+  const { isAuthd, shouldRedirectToOnboarding } = useIsAuthenticated();
+  if (isAuthd === null) return <FullScreenLoader />;
 
-  return authed ? <Component /> : <Navigate to={paths.home()} />;
+  if (shouldRedirectToOnboarding) {
+    return <Navigate to="/onboarding" />;
+  }
+
+  return isAuthd ? (
+    <UserMenu>
+      <Component />
+    </UserMenu>
+  ) : (
+    <Navigate to={paths.login()} />
+  );
 }
diff --git a/frontend/src/components/SettingsSidebar/index.jsx b/frontend/src/components/SettingsSidebar/index.jsx
new file mode 100644
index 000000000..08bb84614
--- /dev/null
+++ b/frontend/src/components/SettingsSidebar/index.jsx
@@ -0,0 +1,394 @@
+import React, { useEffect, useRef, useState } from "react";
+// import IndexCount from "../Sidebar/IndexCount";
+// import LLMStatus from "../Sidebar/LLMStatus";
+import paths from "../../utils/paths";
+import useLogo from "../../hooks/useLogo";
+import {
+  DiscordLogo,
+  EnvelopeSimple,
+  SquaresFour,
+  Users,
+  BookOpen,
+  ChatCenteredText,
+  Eye,
+  Key,
+  ChatText,
+  Database,
+  DownloadSimple,
+  Lock,
+  GithubLogo,
+  DotsThree,
+  House,
+  X,
+  List,
+} from "@phosphor-icons/react";
+import useUser from "../../hooks/useUser";
+import { USER_BACKGROUND_COLOR } from "../../utils/constants";
+
+export default function SettingsSidebar() {
+  const { logo } = useLogo();
+  const sidebarRef = useRef(null);
+  const { user } = useUser();
+
+  return (
+    <>
+      <div
+        ref={sidebarRef}
+        style={{ height: "calc(100% - 32px)" }}
+        className="transition-all duration-500 relative m-[16px] rounded-[26px] bg-sidebar border-4 border-accent min-w-[250px] p-[18px]"
+      >
+        <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
+          {/* Header Information */}
+          <div className="flex w-full items-center justify-between">
+            <div className="flex shrink-0 max-w-[65%] items-center justify-start ml-2">
+              <img
+                src={logo}
+                alt="Logo"
+                className="rounded max-h-[40px]"
+                style={{ objectFit: "contain" }}
+              />
+            </div>
+            <div className="flex gap-x-2 items-center text-slate-500">
+              <a
+                href={paths.home()}
+                className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+              >
+                <X className="h-4 w-4" />
+              </a>
+            </div>
+          </div>
+          <div className="text-white text-opacity-60 text-sm font-medium uppercase mt-4 mb-0 ml-2">
+            Settings
+          </div>
+          {/* Primary Body */}
+          <div className="h-[100%] flex flex-col w-full justify-between pt-4 overflow-y-hidden">
+            <div className="h-auto sidebar-items">
+              <div className="flex flex-col gap-y-2 h-[65vh] pb-8 overflow-y-scroll no-scroll">
+                {/* Admin Settings */}
+                {user?.role === "admin" && (
+                  <>
+                    <Option
+                      href={paths.admin.system()}
+                      btnText="System Preferences"
+                      icon={<SquaresFour className="h-5 w-5 flex-shrink-0" />}
+                    />
+                    <Option
+                      href={paths.admin.invites()}
+                      btnText="Invitation"
+                      icon={
+                        <EnvelopeSimple className="h-5 w-5 flex-shrink-0" />
+                      }
+                    />
+                    <Option
+                      href={paths.admin.users()}
+                      btnText="Users"
+                      icon={<Users className="h-5 w-5 flex-shrink-0" />}
+                    />
+                    <Option
+                      href={paths.admin.workspaces()}
+                      btnText="Workspaces"
+                      icon={<BookOpen className="h-5 w-5 flex-shrink-0" />}
+                    />
+                    <Option
+                      href={paths.admin.chats()}
+                      btnText="Workspace Chat"
+                      icon={
+                        <ChatCenteredText className="h-5 w-5 flex-shrink-0" />
+                      }
+                    />
+                  </>
+                )}
+
+                {/* General Settings */}
+                <Option
+                  href={paths.general.appearance()}
+                  btnText="Appearance"
+                  icon={<Eye className="h-5 w-5 flex-shrink-0" />}
+                />
+                <Option
+                  href={paths.general.apiKeys()}
+                  btnText="API Keys"
+                  icon={<Key className="h-5 w-5 flex-shrink-0" />}
+                />
+                <Option
+                  href={paths.general.llmPreference()}
+                  btnText="LLM Preference"
+                  icon={<ChatText className="h-5 w-5 flex-shrink-0" />}
+                />
+                <Option
+                  href={paths.general.vectorDatabase()}
+                  btnText="Vector Database"
+                  icon={<Database className="h-5 w-5 flex-shrink-0" />}
+                />
+                <Option
+                  href={paths.general.exportImport()}
+                  btnText="Export or Import"
+                  icon={<DownloadSimple className="h-5 w-5 flex-shrink-0" />}
+                />
+                <Option
+                  href={paths.general.security()}
+                  btnText="Security"
+                  icon={<Lock className="h-5 w-5 flex-shrink-0" />}
+                />
+              </div>
+            </div>
+            <div>
+              {/* <div className="flex flex-col gap-y-2">
+                <div className="w-full flex items-center justify-between">
+                  <LLMStatus />
+                  <IndexCount />
+                </div>
+              </div> */}
+
+              {/* Footer */}
+              <div className="flex justify-center mt-2">
+                <div className="flex space-x-4">
+                  <a
+                    href={paths.github()}
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                  >
+                    <GithubLogo weight="fill" className="h-5 w-5 " />
+                  </a>
+                  <a
+                    href={paths.docs()}
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                  >
+                    <BookOpen weight="fill" className="h-5 w-5 " />
+                  </a>
+                  <a
+                    href={paths.discord()}
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                  >
+                    <DiscordLogo
+                      weight="fill"
+                      className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
+                    />
+                  </a>
+                  <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
+                    <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
+                  </button>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </>
+  );
+}
+
+export function SidebarMobileHeader() {
+  const { logo } = useLogo();
+  const { user } = useUser();
+  const sidebarRef = useRef(null);
+  const [showSidebar, setShowSidebar] = useState(false);
+  const [showBgOverlay, setShowBgOverlay] = useState(false);
+
+  useEffect(() => {
+    function handleBg() {
+      if (showSidebar) {
+        setTimeout(() => {
+          setShowBgOverlay(true);
+        }, 300);
+      } else {
+        setShowBgOverlay(false);
+      }
+    }
+    handleBg();
+  }, [showSidebar]);
+
+  return (
+    <>
+      <div className="fixed top-0 left-0 right-0 z-10 flex justify-between items-center px-4 py-2 bg-sidebar text-slate-200 shadow-lg h-16">
+        <button
+          onClick={() => setShowSidebar(true)}
+          className="rounded-md p-2 flex items-center justify-center text-slate-200"
+        >
+          <List className="h-6 w-6" />
+        </button>
+        <div className="flex items-center justify-center flex-grow">
+          <img
+            src={logo}
+            alt="Logo"
+            className="block mx-auto h-6 w-auto"
+            style={{ maxHeight: "40px", objectFit: "contain" }}
+          />
+        </div>
+        <div className="w-12"></div>
+      </div>
+      <div
+        style={{
+          transform: showSidebar ? `translateX(0vw)` : `translateX(-100vw)`,
+        }}
+        className={`z-99 fixed top-0 left-0 transition-all duration-500 w-[100vw] h-[100vh]`}
+      >
+        <div
+          className={`${
+            showBgOverlay
+              ? "transition-all opacity-1"
+              : "transition-none opacity-0"
+          }  duration-500 fixed top-0 left-0 ${USER_BACKGROUND_COLOR} bg-opacity-75 w-screen h-screen`}
+          onClick={() => setShowSidebar(false)}
+        />
+        <div
+          ref={sidebarRef}
+          className="h-[100vh] fixed top-0 left-0  rounded-r-[26px] bg-sidebar w-[80%] p-[18px] "
+        >
+          <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
+            {/* Header Information */}
+            <div className="flex w-full items-center justify-between gap-x-4">
+              <div className="flex shrink-1 w-fit items-center justify-start">
+                <img
+                  src={logo}
+                  alt="Logo"
+                  className="rounded w-full max-h-[40px]"
+                  style={{ objectFit: "contain" }}
+                />
+              </div>
+              <div className="flex gap-x-2 items-center text-slate-500 shrink-0">
+                <a
+                  href={paths.home()}
+                  className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                >
+                  <House className="h-4 w-4" />
+                </a>
+              </div>
+            </div>
+
+            {/* Primary Body */}
+            <div className="h-full flex flex-col w-full justify-between pt-4 overflow-y-hidden ">
+              <div className="h-auto md:sidebar-items md:dark:sidebar-items">
+                <div
+                  style={{ height: "calc(100vw - -3rem)" }}
+                  className=" flex flex-col gap-y-4 pb-8 overflow-y-scroll no-scroll"
+                >
+                  {user?.role === "admin" && (
+                    <>
+                      <Option
+                        href={paths.admin.system()}
+                        btnText="System Preferences"
+                        icon={<SquaresFour className="h-5 w-5 flex-shrink-0" />}
+                      />
+                      <Option
+                        href={paths.admin.invites()}
+                        btnText="Invitation"
+                        icon={
+                          <EnvelopeSimple className="h-5 w-5 flex-shrink-0" />
+                        }
+                      />
+                      <Option
+                        href={paths.admin.users()}
+                        btnText="Users"
+                        icon={<Users className="h-5 w-5 flex-shrink-0" />}
+                      />
+                      <Option
+                        href={paths.admin.workspaces()}
+                        btnText="Workspaces"
+                        icon={<BookOpen className="h-5 w-5 flex-shrink-0" />}
+                      />
+                      <Option
+                        href={paths.admin.chats()}
+                        btnText="Workspace Chat"
+                        icon={
+                          <ChatCenteredText className="h-5 w-5 flex-shrink-0" />
+                        }
+                      />
+                    </>
+                  )}
+
+                  {/* General Settings */}
+                  <Option
+                    href={paths.general.appearance()}
+                    btnText="Appearance"
+                    icon={<Eye className="h-5 w-5 flex-shrink-0" />}
+                  />
+                  <Option
+                    href={paths.general.apiKeys()}
+                    btnText="API Keys"
+                    icon={<Key className="h-5 w-5 flex-shrink-0" />}
+                  />
+                  <Option
+                    href={paths.general.llmPreference()}
+                    btnText="LLM Preference"
+                    icon={<ChatText className="h-5 w-5 flex-shrink-0" />}
+                  />
+                  <Option
+                    href={paths.general.vectorDatabase()}
+                    btnText="Vector Database"
+                    icon={<Database className="h-5 w-5 flex-shrink-0" />}
+                  />
+                  <Option
+                    href={paths.general.exportImport()}
+                    btnText="Export or Import"
+                    icon={<DownloadSimple className="h-5 w-5 flex-shrink-0" />}
+                  />
+                  <Option
+                    href={paths.general.security()}
+                    btnText="Security"
+                    icon={<Lock className="h-5 w-5 flex-shrink-0" />}
+                  />
+                </div>
+              </div>
+              <div>
+                {/* Footer */}
+                <div className="flex justify-center mt-2">
+                  <div className="flex space-x-4">
+                    <a
+                      href={paths.github()}
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                    >
+                      <GithubLogo weight="fill" className="h-5 w-5 " />
+                    </a>
+                    <a
+                      href={paths.docs()}
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                    >
+                      <BookOpen weight="fill" className="h-5 w-5 " />
+                    </a>
+                    <a
+                      href={paths.discord()}
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+                    >
+                      <DiscordLogo
+                        weight="fill"
+                        className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
+                      />
+                    </a>
+                    {/* <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
+                    <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
+                  </button> */}
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </>
+  );
+}
+
+const Option = ({ btnText, icon, href }) => {
+  const isActive = window.location.pathname === href;
+  return (
+    <div className="flex gap-x-2 items-center justify-between text-white">
+      <a
+        href={href}
+        className={`
+          transition-all duration-[200ms]
+          flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 rounded justify-start items-center border
+          ${
+            isActive
+              ? "bg-menu-item-selected-gradient border-slate-100 border-opacity-50 font-medium"
+              : "hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent"
+          }
+        `}
+      >
+        {React.cloneElement(icon, { weight: isActive ? "fill" : "regular" })}
+        <p className="text-sm leading-loose text-opacity-60 whitespace-nowrap overflow-hidden ">
+          {btnText}
+        </p>
+      </a>
+    </div>
+  );
+};
diff --git a/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx b/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx
index ce7adccfe..fd8d04513 100644
--- a/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx
+++ b/frontend/src/components/Sidebar/ActiveWorkspaces/index.jsx
@@ -1,5 +1,4 @@
 import React, { useState, useEffect } from "react";
-import { Book, Settings } from "react-feather";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
 import Workspace from "../../../models/workspace";
@@ -8,10 +7,12 @@ import ManageWorkspace, {
 } from "../../Modals/MangeWorkspace";
 import paths from "../../../utils/paths";
 import { useParams } from "react-router-dom";
+import { GearSix, SquaresFour } from "@phosphor-icons/react";
 
 export default function ActiveWorkspaces() {
   const { slug } = useParams();
   const [loading, setLoading] = useState(true);
+  const [settingHover, setSettingHover] = useState(false);
   const [workspaces, setWorkspaces] = useState([]);
   const [selectedWs, setSelectedWs] = useState(null);
   const { showing, showModal, hideModal } = useManageWorkspaceModal();
@@ -51,31 +52,55 @@ export default function ActiveWorkspaces() {
           >
             <a
               href={isActive ? null : paths.workspace.chat(workspace.slug)}
-              className={`flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center ${
-                isActive
-                  ? "bg-gray-100 dark:bg-stone-600"
-                  : "hover:bg-slate-100 dark:hover:bg-stone-900 "
-              }`}
+              className={`
+              transition-all duration-[200ms]
+                flex flex-grow w-[75%] gap-x-2 py-[9px] px-[12px] rounded-lg text-slate-200 justify-start items-center border
+                hover:bg-workspace-item-selected-gradient hover:border-slate-100 hover:border-opacity-50
+                ${
+                  isActive
+                    ? "bg-workspace-item-selected-gradient border-slate-100 border-opacity-50"
+                    : "bg-workspace-item-gradient bg-opacity-60 border-transparent"
+                }`}
             >
-              <Book className="h-4 w-4 flex-shrink-0" />
-              <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold whitespace-nowrap overflow-hidden ">
-                {workspace.name}
-              </p>
+              <div className="flex flex-row justify-between w-full">
+                <div className="flex items-center space-x-2">
+                  <SquaresFour
+                    weight={isActive ? "fill" : "regular"}
+                    className="h-5 w-5 flex-shrink-0"
+                  />
+                  <p
+                    className={`text-white text-sm leading-loose font-medium whitespace-nowrap overflow-hidden ${
+                      isActive ? "" : "text-opacity-80"
+                    }`}
+                  >
+                    {workspace.name}
+                  </p>
+                </div>
+                <button
+                  onMouseEnter={() => setSettingHover(true)}
+                  onMouseLeave={() => setSettingHover(false)}
+                  onClick={() => {
+                    setSelectedWs(workspace);
+                    showModal();
+                  }}
+                  className="rounded-md flex items-center justify-center text-white ml-auto"
+                >
+                  <GearSix
+                    weight={settingHover ? "fill" : "regular"}
+                    hidden={!isActive}
+                    className="h-[20px] w-[20px] transition-all duration-300"
+                  />
+                </button>
+              </div>
             </a>
-            <button
-              onClick={() => {
-                setSelectedWs(workspace);
-                showModal();
-              }}
-              className="rounded-md bg-stone-200 p-2 h-[36px] w-[15%] flex items-center justify-center text-slate-800 hover:bg-stone-300 group dark:bg-stone-800 dark:text-slate-200 dark:hover:bg-stone-900 dark:border dark:border-stone-800"
-            >
-              <Settings className="h-3.5 w-3.5 transition-all duration-300 group-hover:rotate-90" />
-            </button>
           </div>
         );
       })}
-      {showing && !!selectedWs && (
-        <ManageWorkspace hideModal={hideModal} providedSlug={selectedWs.slug} />
+      {showing && (
+        <ManageWorkspace
+          hideModal={hideModal}
+          providedSlug={selectedWs ? selectedWs.slug : null}
+        />
       )}
     </>
   );
diff --git a/frontend/src/components/Sidebar/SettingsOverlay/index.jsx b/frontend/src/components/Sidebar/SettingsOverlay/index.jsx
deleted file mode 100644
index f71f8921d..000000000
--- a/frontend/src/components/Sidebar/SettingsOverlay/index.jsx
+++ /dev/null
@@ -1,188 +0,0 @@
-import React, { useEffect, useState } from "react";
-import {
-  X,
-  Archive,
-  Lock,
-  Users,
-  Database,
-  MessageSquare,
-  Eye,
-  Key,
-} from "react-feather";
-import SystemSettingsModal, {
-  useSystemSettingsModal,
-} from "../../Modals/Settings";
-import useLogo from "../../../hooks/useLogo";
-import System from "../../../models/system";
-
-const OVERLAY_ID = "anything-llm-system-overlay";
-const OVERLAY_CLASSES = {
-  enabled: ["z-10", "opacity-1"],
-  disabled: ["-z-10", "opacity-0"],
-};
-
-export default function SettingsOverlay() {
-  const { logo } = useLogo();
-  const [tab, setTab] = useState(null);
-  const [settings, setSettings] = useState(null);
-  const [loading, setLoading] = useState(true);
-  const { showing, hideModal, showModal } = useSystemSettingsModal();
-  const selectTab = (tab = null) => {
-    setTab(tab);
-    showModal(true);
-  };
-  const handleModalClose = () => {
-    hideModal();
-    setTab(null);
-  };
-
-  useEffect(() => {
-    async function fetchKeys() {
-      const _settings = await System.keys();
-      setSettings(_settings);
-      setLoading(false);
-    }
-    fetchKeys();
-  }, []);
-
-  return (
-    <div
-      id={OVERLAY_ID}
-      className="absolute left-0 rounded-[26px] top-0 w-full h-full opacity-0 -z-10 p-[18px] transition-all duration-300 bg-white dark:bg-black-900 flex flex-col overflow-x-hidden items-between"
-    >
-      <div className="flex w-full items-center justify-between">
-        <div className="flex shrink-0 max-w-[50%] items-center justify-start">
-          <img
-            src={logo}
-            alt="Logo"
-            className="rounded max-h-[40px]"
-            style={{ objectFit: "contain" }}
-          />
-        </div>
-        <div className="flex gap-x-2 items-center text-slate-500">
-          <button
-            onClick={() => {
-              setTab(null);
-              hideOverlay();
-            }}
-            className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-stone-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
-          >
-            <X className="h-4 w-4 " />
-          </button>
-        </div>
-      </div>
-
-      <div className="h-[100%] flex flex-col w-full justify-between pt-4 overflow-y-hidden">
-        <div className="h-auto sidebar-items dark:sidebar-items">
-          <p className="text-sm leading-loose my-2 text-slate-800 dark:text-slate-200 ">
-            Select a setting to configure
-          </p>
-          {loading ? (
-            <div className="flex flex-col gap-y-4 h-[65vh] pb-8 overflow-y-scroll no-scroll">
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-              <div className="rounded-lg w-[90%] h-[36px] bg-stone-600 animate-pulse" />
-            </div>
-          ) : (
-            <div className="flex flex-col gap-y-4 h-[65vh] pb-8 overflow-y-scroll no-scroll">
-              {!settings?.MultiUserMode && (
-                <Option
-                  btnText="Appearance"
-                  icon={<Eye className="h-4 w-4 flex-shrink-0" />}
-                  isActive={tab === "appearance"}
-                  onClick={() => selectTab("appearance")}
-                />
-              )}
-              <Option
-                btnText="LLM Preference"
-                icon={<MessageSquare className="h-4 w-4 flex-shrink-0" />}
-                isActive={tab === "llm"}
-                onClick={() => selectTab("llm")}
-              />
-              <Option
-                btnText="Vector Database"
-                icon={<Database className="h-4 w-4 flex-shrink-0" />}
-                isActive={tab === "vectordb"}
-                onClick={() => selectTab("vectordb")}
-              />
-              <Option
-                btnText="Export or Import"
-                icon={<Archive className="h-4 w-4 flex-shrink-0" />}
-                isActive={tab === "exportimport"}
-                onClick={() => selectTab("exportimport")}
-              />
-              {!settings?.MultiUserMode && (
-                <>
-                  <Option
-                    btnText="Password Protection"
-                    icon={<Lock className="h-4 w-4 flex-shrink-0" />}
-                    isActive={tab === "password"}
-                    onClick={() => selectTab("password")}
-                  />
-                  <Option
-                    btnText="Multi User Mode"
-                    icon={<Users className="h-4 w-4 flex-shrink-0" />}
-                    isActive={tab === "multiuser"}
-                    onClick={() => selectTab("multiuser")}
-                  />
-                  <Option
-                    btnText="API Key"
-                    icon={<Key className="h-4 w-4 flex-shrink-0" />}
-                    isActive={tab === "apikey"}
-                    onClick={() => selectTab("apikey")}
-                  />
-                </>
-              )}
-            </div>
-          )}
-        </div>
-      </div>
-      {showing && !!tab && (
-        <SystemSettingsModal tab={tab} hideModal={handleModalClose} />
-      )}
-    </div>
-  );
-}
-
-const Option = ({ btnText, icon, isActive, onClick }) => {
-  return (
-    <div className="flex gap-x-2 items-center justify-between">
-      <button
-        onClick={onClick}
-        className={`flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center ${
-          isActive
-            ? "bg-gray-100 dark:bg-stone-600"
-            : "hover:bg-slate-100 dark:hover:bg-stone-900 "
-        }`}
-      >
-        {icon}
-        <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold whitespace-nowrap overflow-hidden ">
-          {btnText}
-        </p>
-      </button>
-    </div>
-  );
-};
-
-function showOverlay() {
-  document
-    .getElementById(OVERLAY_ID)
-    .classList.remove(...OVERLAY_CLASSES.disabled);
-  document.getElementById(OVERLAY_ID).classList.add(...OVERLAY_CLASSES.enabled);
-}
-
-function hideOverlay() {
-  document
-    .getElementById(OVERLAY_ID)
-    .classList.remove(...OVERLAY_CLASSES.enabled);
-  document
-    .getElementById(OVERLAY_ID)
-    .classList.add(...OVERLAY_CLASSES.disabled);
-}
-
-export function useSystemSettingsOverlay() {
-  return { showOverlay, hideOverlay };
-}
diff --git a/frontend/src/components/Sidebar/index.jsx b/frontend/src/components/Sidebar/index.jsx
index 438df1ad3..dc4fe2c35 100644
--- a/frontend/src/components/Sidebar/index.jsx
+++ b/frontend/src/components/Sidebar/index.jsx
@@ -1,34 +1,32 @@
 import React, { useEffect, useRef, useState } from "react";
+import { LogOut, Menu, Package, Plus, Shield } from "react-feather";
 import {
-  AtSign,
+  Wrench,
+  GithubLogo,
   BookOpen,
-  GitHub,
-  LogOut,
-  Menu,
-  Package,
-  Plus,
-  Shield,
-  Tool,
-  X,
-} from "react-feather";
-import IndexCount from "./IndexCount";
-import LLMStatus from "./LLMStatus";
+  DiscordLogo,
+  DotsThree,
+} from "@phosphor-icons/react";
+// import IndexCount from "./IndexCount";
+// import LLMStatus from "./LLMStatus";
 import NewWorkspaceModal, {
   useNewWorkspaceModal,
 } from "../Modals/NewWorkspace";
 import ActiveWorkspaces from "./ActiveWorkspaces";
 import paths from "../../utils/paths";
-import Discord from "../Icons/Discord";
 import useUser from "../../hooks/useUser";
 import { userFromStorage } from "../../utils/request";
-import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "../../utils/constants";
+import {
+  AUTH_TIMESTAMP,
+  AUTH_TOKEN,
+  AUTH_USER,
+  USER_BACKGROUND_COLOR,
+} from "../../utils/constants";
 import useLogo from "../../hooks/useLogo";
-import SettingsOverlay, { useSystemSettingsOverlay } from "./SettingsOverlay";
 
 export default function Sidebar() {
   const { logo } = useLogo();
   const sidebarRef = useRef(null);
-  const { showOverlay } = useSystemSettingsOverlay();
   const {
     showing: showingNewWsModal,
     showModal: showNewWsModal,
@@ -40,13 +38,12 @@ export default function Sidebar() {
       <div
         ref={sidebarRef}
         style={{ height: "calc(100% - 32px)" }}
-        className="relative transition-all duration-500 relative m-[16px] rounded-[26px] bg-white dark:bg-black-900 min-w-[15.5%] p-[18px] "
+        className="transition-all duration-500 relative m-[16px] rounded-[26px] bg-sidebar border-4 border-accent min-w-[250px] p-[18px]"
       >
-        <SettingsOverlay />
-        <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
+        <div className="flex flex-col h-full overflow-x-hidden">
           {/* Header Information */}
-          <div className="flex w-full items-center justify-between">
-            <div className="flex shrink-0 max-w-[50%] items-center justify-start">
+          <div className="flex items-center justify-between mb-4">
+            <div className="flex shrink-0 max-w-[65%] items-center justify-start">
               <img
                 src={logo}
                 alt="Logo"
@@ -54,32 +51,30 @@ export default function Sidebar() {
                 style={{ objectFit: "contain" }}
               />
             </div>
-            <div className="flex gap-x-2 items-center text-slate-500">
-              <AdminHome />
-              <SettingsButton onClick={showOverlay} />
+            <div className="flex gap-x-2 items-center text-slate-200">
+              {/* <AdminHome /> */}
+              <SettingsButton />
             </div>
           </div>
 
           {/* Primary Body */}
-          <div className="h-[100%] flex flex-col w-full justify-between pt-4 overflow-y-hidden">
-            <div className="h-auto sidebar-items dark:sidebar-items">
-              <div className="flex flex-col gap-y-4 h-[65vh] pb-8 overflow-y-scroll no-scroll">
-                <div className="flex gap-x-2 items-center justify-between">
-                  <button
-                    onClick={showNewWsModal}
-                    className="flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900"
-                  >
-                    <Plus className="h-4 w-4" />
-                    <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
-                      New workspace
-                    </p>
-                  </button>
-                </div>
-                <ActiveWorkspaces />
+          <div className="flex-grow flex flex-col">
+            <div className="flex flex-col gap-y-4 pb-8 overflow-y-scroll no-scroll">
+              <div className="flex gap-x-2 items-center justify-between">
+                <button
+                  onClick={showNewWsModal}
+                  className="flex flex-grow w-[75%] h-[44px] gap-x-2 py-[5px] px-4 bg-white rounded-lg text-sidebar justify-center items-center hover:bg-opacity-80 transition-all duration-300"
+                >
+                  <Plus className="h-5 w-5" />
+                  <p className="text-sidebar text-sm font-semibold">
+                    New Workspace
+                  </p>
+                </button>
               </div>
+              <ActiveWorkspaces />
             </div>
-            <div>
-              <div className="flex flex-col gap-y-2">
+            <div className="flex flex-col flex-grow justify-end mb-2">
+              {/* <div className="flex flex-col gap-y-2">
                 <div className="w-full flex items-center justify-between">
                   <LLMStatus />
                   <IndexCount />
@@ -87,45 +82,45 @@ export default function Sidebar() {
                 <a
                   href={paths.feedback()}
                   target="_blank"
-                  className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 dark:border-transparent rounded-lg text-slate-800 dark:text-slate-200 justify-center items-center hover:bg-slate-100 dark:bg-stone-800 dark:hover:bg-stone-900"
+                  className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-transparent rounded-lg text-slate-200 justify-center items-center bg-stone-800 hover:bg-stone-900"
                 >
                   <AtSign className="h-4 w-4" />
-                  <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
+                  <p className="text-slate-200 text-xs leading-loose font-semibold">
                     Feedback form
                   </p>
                 </a>
                 <ManagedHosting />
                 <LogoutButton />
-              </div>
+              </div> */}
 
               {/* Footer */}
-              <div className="flex items-end justify-between mt-2">
-                <div className="flex gap-x-1 items-center">
+              <div className="flex justify-center mt-2">
+                <div className="flex space-x-4">
                   <a
                     href={paths.github()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                   >
-                    <GitHub className="h-4 w-4 " />
+                    <GithubLogo weight="fill" className="h-5 w-5 " />
                   </a>
                   <a
                     href={paths.docs()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                   >
-                    <BookOpen className="h-4 w-4 " />
+                    <BookOpen weight="fill" className="h-5 w-5 " />
                   </a>
                   <a
                     href={paths.discord()}
-                    className="transition-all duration-300 p-2 rounded-full bg-slate-200 dark:bg-slate-800 hover:bg-slate-800 group"
+                    className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                   >
-                    <Discord className="h-4 w-4 stroke-slate-400 group-hover:stroke-slate-200 dark:group-hover:stroke-slate-200" />
+                    <DiscordLogo
+                      weight="fill"
+                      className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
+                    />
                   </a>
+                  <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
+                    <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
+                  </button>
                 </div>
-                <a
-                  href={paths.mailToMintplex()}
-                  className="transition-all duration-300 text-xs text-slate-500 dark:text-slate-600 hover:text-blue-600 dark:hover:text-blue-400"
-                >
-                  @MintplexLabs
-                </a>
               </div>
             </div>
           </div>
@@ -141,7 +136,6 @@ export function SidebarMobileHeader() {
   const sidebarRef = useRef(null);
   const [showSidebar, setShowSidebar] = useState(false);
   const [showBgOverlay, setShowBgOverlay] = useState(false);
-  const { showOverlay } = useSystemSettingsOverlay();
   const {
     showing: showingNewWsModal,
     showModal: showNewWsModal,
@@ -165,21 +159,22 @@ export function SidebarMobileHeader() {
 
   return (
     <>
-      <div className="flex justify-between relative top-0 left-0 w-full rounded-b-lg px-2 pb-4 bg-white dark:bg-black-900 text-slate-800 dark:text-slate-200">
+      <div className="fixed top-0 left-0 right-0 z-10 flex justify-between items-center px-4 py-2 bg-sidebar text-slate-200 shadow-lg h-16">
         <button
           onClick={() => setShowSidebar(true)}
-          className="rounded-md bg-stone-200 p-2 flex items-center justify-center text-slate-800 hover:bg-stone-300 group dark:bg-stone-800 dark:text-slate-200 dark:hover:bg-stone-900 dark:border dark:border-stone-800"
+          className="rounded-md p-2 flex items-center justify-center text-slate-200"
         >
           <Menu className="h-6 w-6" />
         </button>
-        <div className="flex shrink-0 w-fit items-center justify-start">
+        <div className="flex items-center justify-center flex-grow">
           <img
             src={logo}
             alt="Logo"
-            className="rounded w-full max-h-[40px]"
-            style={{ objectFit: "contain" }}
+            className="block mx-auto h-6 w-auto"
+            style={{ maxHeight: "40px", objectFit: "contain" }}
           />
         </div>
+        <div className="w-12"></div>
       </div>
       <div
         style={{
@@ -192,14 +187,13 @@ export function SidebarMobileHeader() {
             showBgOverlay
               ? "transition-all opacity-1"
               : "transition-none opacity-0"
-          }  duration-500 fixed top-0 left-0 bg-black-900 bg-opacity-75 w-screen h-screen`}
+          }  duration-500 fixed top-0 left-0 ${USER_BACKGROUND_COLOR} bg-opacity-75 w-screen h-screen`}
           onClick={() => setShowSidebar(false)}
         />
         <div
           ref={sidebarRef}
-          className="relative h-[100vh] fixed top-0 left-0  rounded-r-[26px] bg-white dark:bg-black-900 w-[80%] p-[18px] "
+          className="relative h-[100vh] fixed top-0 left-0  rounded-r-[26px] bg-sidebar w-[80%] p-[18px] "
         >
-          <SettingsOverlay />
           <div className="w-full h-full flex flex-col overflow-x-hidden items-between">
             {/* Header Information */}
             <div className="flex w-full items-center justify-between gap-x-4">
@@ -212,14 +206,13 @@ export function SidebarMobileHeader() {
                 />
               </div>
               <div className="flex gap-x-2 items-center text-slate-500 shink-0">
-                <AdminHome />
-                <SettingsButton onClick={showOverlay} />
+                <SettingsButton />
               </div>
             </div>
 
             {/* Primary Body */}
             <div className="h-full flex flex-col w-full justify-between pt-4 overflow-y-hidden ">
-              <div className="h-auto md:sidebar-items md:dark:sidebar-items">
+              <div className="h-auto md:sidebar-items">
                 <div
                   style={{ height: "calc(100vw - -3rem)" }}
                   className=" flex flex-col gap-y-4 pb-8 overflow-y-scroll no-scroll"
@@ -227,11 +220,11 @@ export function SidebarMobileHeader() {
                   <div className="flex gap-x-2 items-center justify-between">
                     <button
                       onClick={showNewWsModal}
-                      className="flex flex-grow w-[75%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 rounded-lg text-slate-800 dark:text-slate-200 justify-start items-center hover:bg-slate-100 dark:hover:bg-stone-900"
+                      className="flex flex-grow w-[75%] h-[44px] gap-x-2 py-[5px] px-4 bg-white rounded-lg text-sidebar justify-center items-center hover:bg-opacity-80 transition-all duration-300"
                     >
-                      <Plus className="h-4 w-4" />
-                      <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
-                        New workspace
+                      <Plus className="h-5 w-5" />
+                      <p className="text-sidebar text-sm font-semibold">
+                        New Workspace
                       </p>
                     </button>
                   </div>
@@ -239,53 +232,34 @@ export function SidebarMobileHeader() {
                 </div>
               </div>
               <div>
-                <div className="flex flex-col gap-y-2">
-                  <div className="w-full flex items-center justify-between">
-                    <LLMStatus />
-                    <IndexCount />
-                  </div>
-                  <a
-                    href={paths.feedback()}
-                    target="_blank"
-                    className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 dark:border-transparent rounded-lg text-slate-800 dark:text-slate-200 justify-center items-center hover:bg-slate-100 dark:bg-stone-800 dark:hover:bg-stone-900"
-                  >
-                    <AtSign className="h-4 w-4" />
-                    <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
-                      Feedback form
-                    </p>
-                  </a>
-                  <ManagedHosting />
-                  <LogoutButton />
-                </div>
-
                 {/* Footer */}
-                <div className="flex items-end justify-between mt-2">
-                  <div className="flex gap-x-1 items-center">
+                <div className="flex justify-center mt-2">
+                  <div className="flex space-x-4">
                     <a
                       href={paths.github()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                     >
-                      <GitHub className="h-4 w-4 " />
+                      <GithubLogo weight="fill" className="h-5 w-5 " />
                     </a>
                     <a
                       href={paths.docs()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-slate-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                     >
-                      <BookOpen className="h-4 w-4 " />
+                      <BookOpen weight="fill" className="h-5 w-5 " />
                     </a>
                     <a
                       href={paths.discord()}
-                      className="transition-all duration-300 p-2 rounded-full bg-slate-200 dark:bg-slate-800 hover:bg-slate-800 group"
+                      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
                     >
-                      <Discord className="h-4 w-4 stroke-slate-400 group-hover:stroke-slate-200 dark:group-hover:stroke-slate-200" />
+                      <DiscordLogo
+                        weight="fill"
+                        className="h-5 w-5 stroke-slate-200 group-hover:stroke-slate-200"
+                      />
                     </a>
+                    {/* <button className="invisible transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border">
+                    <DotsThree className="h-5 w-5 group-hover:stroke-slate-200" />
+                  </button> */}
                   </div>
-                  <a
-                    href={paths.mailToMintplex()}
-                    className="transition-all duration-300 text-xs text-slate-500 dark:text-slate-600 hover:text-blue-600 dark:hover:text-blue-400"
-                  >
-                    @MintplexLabs
-                  </a>
                 </div>
               </div>
             </div>
@@ -303,7 +277,7 @@ function AdminHome() {
   return (
     <a
       href={paths.admin.system()}
-      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-stone-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+      className="transition-all duration-300 p-2 rounded-full text-slate-400 bg-stone-800 hover:bg-slate-800 hover:text-slate-200"
     >
       <Shield className="h-4 w-4" />
     </a>
@@ -323,27 +297,24 @@ function LogoutButton() {
         window.localStorage.removeItem(AUTH_TIMESTAMP);
         window.location.replace(paths.home());
       }}
-      className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 dark:border-transparent rounded-lg text-slate-800 dark:text-slate-200 justify-center items-center hover:bg-slate-100 dark:bg-stone-800 dark:hover:bg-stone-900"
+      className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-transparent rounded-lg text-slate-200 justify-center items-center bg-stone-800 hover:bg-stone-900"
     >
       <LogOut className="h-4 w-4" />
-      <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
+      <p className="text-slate-200 text-xs leading-loose font-semibold">
         Log out of {user.username}
       </p>
     </button>
   );
 }
 
-function SettingsButton({ onClick }) {
-  const { user } = useUser();
-
-  if (!!user && user?.role !== "admin") return null;
+function SettingsButton() {
   return (
-    <button
-      onClick={onClick}
-      className="transition-all duration-300 p-2 rounded-full bg-slate-200 text-slate-400 dark:bg-stone-800 hover:bg-slate-800 hover:text-slate-200 dark:hover:text-slate-200"
+    <a
+      href={paths.general.llmPreference()}
+      className="transition-all duration-300 p-2 rounded-full text-white bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
     >
-      <Tool className="h-4 w-4 " />
-    </button>
+      <Wrench className="h-4 w-4" weight="fill" />
+    </a>
   );
 }
 
@@ -353,10 +324,10 @@ function ManagedHosting() {
     <a
       href={paths.hosting()}
       target="_blank"
-      className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-slate-400 dark:border-transparent rounded-lg text-slate-800 dark:text-slate-200 justify-center items-center hover:bg-slate-100 dark:bg-stone-800 dark:hover:bg-stone-900"
+      className="flex flex-grow w-[100%] h-[36px] gap-x-2 py-[5px] px-4 border border-transparent rounded-lg text-slate-200 justify-center items-center bg-stone-800 hover:bg-stone-900"
     >
       <Package className="h-4 w-4" />
-      <p className="text-slate-800 dark:text-slate-200 text-xs leading-loose font-semibold">
+      <p className="text-slate-200 text-xs leading-loose font-semibold">
         Managed cloud hosting
       </p>
     </a>
diff --git a/frontend/src/components/UserIcon/index.jsx b/frontend/src/components/UserIcon/index.jsx
index a98b11925..7ea0b26fc 100644
--- a/frontend/src/components/UserIcon/index.jsx
+++ b/frontend/src/components/UserIcon/index.jsx
@@ -1,7 +1,7 @@
 import React, { useRef, useEffect } from "react";
 import JAZZ from "@metamask/jazzicon";
 
-export default function Jazzicon({ size = 10, user }) {
+export default function Jazzicon({ size = 10, user, role }) {
   const divRef = useRef(null);
   const seed = user?.uid
     ? toPseudoRandomInteger(user.uid)
@@ -14,7 +14,12 @@ export default function Jazzicon({ size = 10, user }) {
     divRef.current.appendChild(result);
   }, []); // eslint-disable-line react-hooks/exhaustive-deps
 
-  return <div className="flex" ref={divRef} />;
+  return (
+    <div
+      className={`flex ${role === "user" ? "border-2 rounded-full" : ""}`}
+      ref={divRef}
+    />
+  );
 }
 
 function toPseudoRandomInteger(uidString = "") {
diff --git a/frontend/src/components/UserMenu/index.jsx b/frontend/src/components/UserMenu/index.jsx
new file mode 100644
index 000000000..95537bbbb
--- /dev/null
+++ b/frontend/src/components/UserMenu/index.jsx
@@ -0,0 +1,74 @@
+import { useState } from "react";
+import { isMobile } from "react-device-detect";
+import paths from "../../utils/paths";
+import { AUTH_TIMESTAMP, AUTH_TOKEN, AUTH_USER } from "../../utils/constants";
+import { Person, SignOut } from "@phosphor-icons/react";
+import { userFromStorage } from "../../utils/request";
+
+export default function UserMenu({ children }) {
+  if (isMobile) return <>{children}</>;
+  return (
+    <div className="w-auto h-auto">
+      <UserButton />
+
+      {children}
+    </div>
+  );
+}
+
+function useLoginMode() {
+  const user = !!window.localStorage.getItem(AUTH_USER);
+  const token = !!window.localStorage.getItem(AUTH_TOKEN);
+
+  if (user && token) return "multi";
+  if (!user && token) return "single";
+  return null;
+}
+
+function userDisplay() {
+  const user = userFromStorage();
+  return user?.username?.slice(0, 2) || "AA";
+}
+
+function UserButton() {
+  const [showMenu, setShowMenu] = useState(false);
+  const mode = useLoginMode();
+
+  if (mode === null) return null;
+  return (
+    <div className="absolute top-9 right-10 w-fit h-fit z-99">
+      <button
+        onClick={() => setShowMenu(!showMenu)}
+        type="button"
+        className="uppercase transition-all duration-300 w-[35px] h-[35px] text-base font-semibold rounded-full flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient justify-center text-white p-2 hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+      >
+        {mode === "multi" ? userDisplay() : <Person size={14} />}
+      </button>
+
+      {showMenu && (
+        <div className="w-fit rounded-lg absolute top-12 right-0 bg-sidebar p-4 flex items-center-justify-center">
+          <div className="flex flex-col gap-y-2">
+            <a
+              href={paths.mailToMintplex()}
+              className="text-white hover:bg-slate-200/20 w-full text-left px-4 py-1.5 rounded-md"
+            >
+              Support
+            </a>
+            <button
+              onClick={() => {
+                window.localStorage.removeItem(AUTH_USER);
+                window.localStorage.removeItem(AUTH_TOKEN);
+                window.localStorage.removeItem(AUTH_TIMESTAMP);
+                window.location.replace(paths.home());
+              }}
+              type="button"
+              className="text-white hover:bg-slate-200/20 w-full text-left px-4 py-1.5 rounded-md"
+            >
+              Sign out
+            </button>
+          </div>
+        </div>
+      )}
+    </div>
+  );
+}
diff --git a/frontend/src/components/VectorDBOption/index.jsx b/frontend/src/components/VectorDBOption/index.jsx
new file mode 100644
index 000000000..0dbe97c19
--- /dev/null
+++ b/frontend/src/components/VectorDBOption/index.jsx
@@ -0,0 +1,39 @@
+import React from "react";
+
+export default function VectorDBOption({
+  name,
+  link,
+  description,
+  value,
+  image,
+  checked = false,
+  onClick,
+}) {
+  return (
+    <div onClick={() => onClick(value)}>
+      <input
+        type="checkbox"
+        value={value}
+        className="peer hidden"
+        checked={checked}
+        readOnly={true}
+        formNoValidate={true}
+      />
+      <label className="transition-all duration-300 inline-flex flex-col h-full w-60 cursor-pointer items-start justify-between rounded-2xl bg-preference-gradient border-2 border-transparent shadow-md px-5 py-4 text-white hover:bg-selected-preference-gradient hover:text-underline hover:border-white/60 peer-checked:border-white peer-checked:border-opacity-90 peer-checked:bg-selected-preference-gradient">
+        <div className="flex items-center">
+          <img src={image} alt={name} className="h-10 w-10 rounded" />
+          <div className="ml-4 text-sm font-semibold">{name}</div>
+        </div>
+        <div className="mt-2 text-xs font-base text-white tracking-wide">
+          {description}
+        </div>
+        <a
+          href={`https://${link}`}
+          className="mt-2 text-xs text-white font-medium underline"
+        >
+          {link}
+        </a>
+      </label>
+    </div>
+  );
+}
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/Citation/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/Citation/index.jsx
index 91aab2edf..ddcb6414c 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/Citation/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/Citation/index.jsx
@@ -1,7 +1,9 @@
-import { memo, useState } from "react";
-import { Maximize2, Minimize2 } from "react-feather";
+import { memo, useState, useEffect, useRef } from "react";
+import { X } from "react-feather";
 import { v4 } from "uuid";
 import { decode as HTMLDecode } from "he";
+import { CaretRight, FileText } from "@phosphor-icons/react";
+import truncate from "truncate";
 
 function combineLikeSources(sources) {
   const combined = {};
@@ -19,81 +21,149 @@ function combineLikeSources(sources) {
 
 export default function Citations({ sources = [] }) {
   if (sources.length === 0) return null;
+  const [open, setOpen] = useState(false);
+  const [selectedSource, setSelectedSource] = useState(null);
 
   return (
     <div className="flex flex-col mt-4 justify-left">
-      <div className="flex flex-col justify-left overflow-x-scroll ">
-        <div className="w-full flex overflow-x-scroll items-center gap-4 mt-1 doc__source">
+      <button
+        onClick={() => setOpen(!open)}
+        className={`text-white/50 font-medium italic text-sm text-left ml-14 pt-2 ${
+          open ? "pb-2" : ""
+        } hover:text-white/75 transition-all duration-300`}
+      >
+        {open ? "Hide Citations" : "Show Citations"}
+        <CaretRight
+          className={`w-3.5 h-3.5 inline-block ml-1 transform transition-transform duration-300 ${
+            open ? "rotate-90" : ""
+          }`}
+        />
+      </button>
+      {open && (
+        <div className="flex flex-wrap md:justify-between md:flex-row flex-col items-center justify-start overflow-x-scroll mt-1 doc__source">
           {combineLikeSources(sources).map((source) => (
-            <Citation id={source?.id || v4()} source={source} />
+            <Citation
+              key={source?.id || v4()}
+              source={source}
+              onClick={() => setSelectedSource(source)}
+            />
           ))}
         </div>
-      </div>
-      <p className="w-fit text-gray-700 dark:text-stone-400 text-xs mt-1">
-        *citations may not be relevant to end result.
-      </p>
+      )}
+      {selectedSource && (
+        <CitationDetailModal
+          source={selectedSource}
+          onClose={() => setSelectedSource(null)}
+        />
+      )}
     </div>
   );
 }
 
-const Citation = memo(({ source, id }) => {
-  const [maximized, setMaximized] = useState(false);
-  const { references = 0, title, text } = source;
-  if (title?.length === 0 || text?.length === 0) return null;
-  const handleMinMax = () => {
-    setMaximized(!maximized);
-    Array.from(
-      document?.querySelectorAll(
-        `div[data-citation]:not([data-citation="${id}"])`
-      )
-    ).forEach((el) => {
-      const func = maximized ? "remove" : "add";
-      el.classList[func]("hidden");
-    });
-  };
+const Citation = memo(({ source, onClick }) => {
+  const { title } = source;
+  if (!title) return null;
+
+  const truncatedTitle = truncateMiddle(title);
 
   return (
     <div
-      key={id || v4()}
-      data-citation={id || v4()}
-      className={`transition-all duration-300 relative flex flex-col w-full md:w-80 h-40 bg-gray-100 dark:bg-stone-800 border border-gray-700 dark:border-stone-800 rounded-lg shrink-0 ${
-        maximized ? "md:w-full h-fit pb-4" : ""
-      }`}
+      className="flex flex-row justify-center items-center cursor-pointer text-sky-400"
+      style={{ width: "24%" }}
+      onClick={onClick}
     >
-      <div className="rounded-t-lg bg-gray-300 dark:bg-stone-900 px-4 py-2 w-full h-fit flex items-center justify-between">
-        <p className="text-base text-gray-800 dark:text-slate-400 italic truncate w-3/4">
-          {title}
-        </p>
-        <button
-          onClick={handleMinMax}
-          className="hover:dark:bg-stone-800 hover:bg-gray-200 dark:text-slate-400 text-gray-800 rounded-full p-1"
-        >
-          {maximized ? (
-            <Minimize2 className="h-4 w-4" />
-          ) : (
-            <Maximize2 className="h-4 w-4" />
-          )}
-        </button>
-      </div>
-      <div
-        className={`overflow-hidden relative w-full ${
-          maximized ? "overflow-y-scroll" : ""
-        }`}
-      >
-        <p className="px-2 py-1 text-xs whitespace-pre-line text-gray-800 dark:text-slate-300 italic">
-          {references > 1 && (
-            <p className="text-xs text-gray-500 dark:text-slate-500 mb-2">
-              referenced {references} times.
-            </p>
-          )}
-          {HTMLDecode(text)}
-        </p>
-        <div
-          className={`absolute bottom-0 flex w-full h-[20px] fade-up-border rounded-b-lg ${
-            maximized ? "hidden" : ""
-          }`}
-        />
-      </div>
+      <FileText className="w-6 h-6" weight="bold" />
+      <p className="text-sm font-medium whitespace-nowrap">{truncatedTitle}</p>
     </div>
   );
 });
+
+function SkeletonLine() {
+  const numOfBoxes = Math.floor(Math.random() * 5) + 2;
+  return (
+    <div className="flex space-x-2 mb-2">
+      {Array.from({ length: numOfBoxes }).map((_, index) => (
+        <div
+          key={index}
+          className="bg-white/20 rounded"
+          style={{
+            width: `${Math.random() * 150 + 50}px`,
+            height: "20px",
+          }}
+        ></div>
+      ))}
+    </div>
+  );
+}
+
+function CitationDetailModal({ source, onClose }) {
+  const { references, title, text } = source;
+  const dialogRef = useRef(null);
+
+  useEffect(() => {
+    if (source && dialogRef.current) {
+      dialogRef.current.showModal();
+    }
+  }, [source]);
+
+  const handleModalClose = () => {
+    if (dialogRef.current) {
+      dialogRef.current.close();
+    }
+    onClose();
+  };
+
+  return (
+    <dialog
+      ref={dialogRef}
+      className="bg-transparent outline-none fixed top-0 left-0 w-full h-full flex items-center justify-center z-10"
+    >
+      <div className="relative w-full max-w-2xl bg-main-gradient rounded-lg shadow border border-white/10 overflow-hidden">
+        <div className="flex items-start justify-between p-6 border-b rounded-t border-gray-500/50">
+          <div className="flex flex-col flex-grow mr-4">
+            <h3 className="text-xl font-semibold text-white overflow-hidden overflow-ellipsis whitespace-nowrap">
+              {truncate(title, 52)}
+            </h3>
+            {references > 1 && (
+              <p className="text-xs text-gray-400 mt-2">
+                Referenced {references} times.
+              </p>
+            )}
+          </div>
+          <button
+            onClick={handleModalClose}
+            type="button"
+            className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+          >
+            <X className="text-gray-300 text-lg" />
+          </button>
+        </div>
+        <div
+          className="h-full w-full overflow-y-auto"
+          style={{ maxHeight: "calc(100vh - 200px)" }}
+        >
+          <div className="p-6 space-y-2 flex-col">
+            {[...Array(3)].map((_, idx) => (
+              <SkeletonLine key={idx} />
+            ))}
+            <p className="text-white whitespace-pre-line">{HTMLDecode(text)}</p>
+            <div className="mb-6">
+              {[...Array(3)].map((_, idx) => (
+                <SkeletonLine key={idx} />
+              ))}
+            </div>
+          </div>
+        </div>
+      </div>
+    </dialog>
+  );
+}
+
+function truncateMiddle(title) {
+  if (title.length <= 18) return title;
+
+  const startStr = title.substr(0, 9);
+  const endStr = title.substr(-9);
+
+  return `${startStr}...${endStr}`;
+}
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx
index 5869a81f7..8759a2ce7 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx
@@ -4,49 +4,50 @@ import Jazzicon from "../../../../UserIcon";
 import renderMarkdown from "../../../../../utils/chat/markdown";
 import { userFromStorage } from "../../../../../utils/request";
 import Citations from "../Citation";
+import {
+  AI_BACKGROUND_COLOR,
+  USER_BACKGROUND_COLOR,
+} from "../../../../../utils/constants";
 
 const HistoricalMessage = forwardRef(
   ({ message, role, workspace, sources = [], error = false }, ref) => {
-    if (role === "user") {
-      return (
-        <div className="flex justify-end mb-4 items-start">
-          <div className="mr-2 py-1 px-4 w-fit md:max-w-[75%] bg-slate-200 dark:bg-amber-800 rounded-b-2xl rounded-tl-2xl rounded-tr-sm">
-            <span
-              className={`inline-block p-2 rounded-lg whitespace-pre-line text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base`}
-            >
-              {message}
-            </span>
-          </div>
-          <Jazzicon size={30} user={{ uid: userFromStorage()?.username }} />
-        </div>
-      );
-    }
+    return (
+      <div
+        ref={ref}
+        className={`flex justify-center items-end w-full ${
+          role === "user" ? USER_BACKGROUND_COLOR : AI_BACKGROUND_COLOR
+        }`}
+      >
+        <div
+          className={`py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col`}
+        >
+          <div className="flex gap-x-5">
+            <Jazzicon
+              size={36}
+              user={{
+                uid:
+                  role === "user"
+                    ? userFromStorage()?.username
+                    : workspace.slug,
+              }}
+              role={role}
+            />
 
-    if (error) {
-      return (
-        <div className="flex justify-start mb-4 items-end">
-          <Jazzicon size={30} user={{ uid: workspace.slug }} />
-          <div className="ml-2 max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-t-2xl rounded-br-2xl rounded-bl-sm">
-            <span
-              className={`inline-block p-2 rounded-lg bg-red-50 text-red-500`}
-            >
-              <AlertTriangle className="h-4 w-4 mb-1 inline-block" /> Could not
-              respond to message.
-            </span>
+            {error ? (
+              <span
+                className={`inline-block p-2 rounded-lg bg-red-50 text-red-500`}
+              >
+                <AlertTriangle className="h-4 w-4 mb-1 inline-block" /> Could
+                not respond to message.
+              </span>
+            ) : (
+              <span
+                className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+                dangerouslySetInnerHTML={{ __html: renderMarkdown(message) }}
+              />
+            )}
           </div>
-        </div>
-      );
-    }
-
-    return (
-      <div ref={ref} className="flex justify-start items-end mb-4">
-        <Jazzicon size={30} user={{ uid: workspace.slug }} />
-        <div className="ml-2 py-3 px-4 overflow-x-scroll w-fit md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-t-2xl rounded-br-2xl rounded-bl-sm">
-          <span
-            className="no-scroll whitespace-pre-line text-slate-800 dark:text-slate-200 font-[500] md:font-semibold text-sm md:text-base flex flex-col gap-y-1"
-            dangerouslySetInnerHTML={{ __html: renderMarkdown(message) }}
-          />
-          <Citations sources={sources} />
+          {role === "assistant" && <Citations sources={sources} />}
         </div>
       </div>
     );
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/PromptReply/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/PromptReply/index.jsx
index 3ef308e2f..c69c94e7c 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/PromptReply/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/PromptReply/index.jsx
@@ -9,18 +9,25 @@ const PromptReply = forwardRef(
     { uuid, reply, pending, error, workspace, sources = [], closed = true },
     ref
   ) => {
-    if (!reply && !sources.length === 0 && !pending && !error) return null;
+    const assistantBackgroundColor = "bg-historical-msg-system";
+
+    if (!reply && sources.length === 0 && !pending && !error) return null;
+
     if (pending) {
       return (
         <div
           ref={ref}
-          className="chat__message flex justify-start mb-4 items-end"
+          className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
         >
-          <Jazzicon size={30} user={{ uid: workspace.slug }} />
-          <div className="ml-2 pt-2 px-6 w-fit md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-t-2xl rounded-br-2xl rounded-bl-sm">
-            <span className={`inline-block p-2`}>
-              <div className="dot-falling"></div>
-            </span>
+          <div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
+            <div className="flex gap-x-5">
+              <Jazzicon
+                size={36}
+                user={{ uid: workspace.slug }}
+                role="assistant"
+              />
+              <div className="mt-3 ml-5 dot-falling"></div>
+            </div>
           </div>
         </div>
       );
@@ -28,15 +35,23 @@ const PromptReply = forwardRef(
 
     if (error) {
       return (
-        <div className="chat__message flex justify-start mb-4 items-center">
-          <Jazzicon size={30} user={{ uid: workspace.slug }} />
-          <div className="ml-2 py-3 px-4 rounded-br-3xl rounded-tr-3xl rounded-tl-xl text-slate-100 ">
-            <div className="bg-red-50 text-red-500 rounded-lg w-fit flex flex-col p-2">
-              <span className={`inline-block`}>
+        <div
+          className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
+        >
+          <div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
+            <div className="flex gap-x-5">
+              <Jazzicon
+                size={36}
+                user={{ uid: workspace.slug }}
+                role="assistant"
+              />
+              <span
+                className={`inline-block p-2 rounded-lg bg-red-50 text-red-500`}
+              >
                 <AlertTriangle className="h-4 w-4 mb-1 inline-block" /> Could
                 not respond to message.
+                <span className="text-xs">Reason: {error || "unknown"}</span>
               </span>
-              <span className="text-xs">Reason: {error || "unknown"}</span>
             </div>
           </div>
         </div>
@@ -44,13 +59,23 @@ const PromptReply = forwardRef(
     }
 
     return (
-      <div key={uuid} ref={ref} className="mb-4 flex justify-start items-end">
-        <Jazzicon size={30} user={{ uid: workspace.slug }} />
-        <div className="ml-2 py-3 px-4 overflow-x-scroll w-fit md:max-w-[75%] bg-orange-100 dark:bg-stone-700 rounded-t-2xl rounded-br-2xl rounded-bl-sm">
-          <span
-            className="whitespace-pre-line text-slate-800 dark:text-slate-200 flex flex-col gap-y-1 font-[500] md:font-semibold text-sm md:text-base"
-            dangerouslySetInnerHTML={{ __html: renderMarkdown(reply) }}
-          />
+      <div
+        key={uuid}
+        ref={ref}
+        className={`flex justify-center items-end w-full ${assistantBackgroundColor}`}
+      >
+        <div className="py-10 px-4 w-full flex gap-x-5 md:max-w-[800px] flex-col">
+          <div className="flex gap-x-5">
+            <Jazzicon
+              size={36}
+              user={{ uid: workspace.slug }}
+              role="assistant"
+            />
+            <span
+              className={`whitespace-pre-line text-white font-normal text-sm md:text-sm flex flex-col gap-y-1 mt-2`}
+              dangerouslySetInnerHTML={{ __html: renderMarkdown(reply) }}
+            />
+          </div>
           <Citations sources={sources} />
         </div>
       </div>
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx
index 201cbc7dd..e420fb313 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx
@@ -1,10 +1,12 @@
-import { Frown } from "react-feather";
 import HistoricalMessage from "./HistoricalMessage";
 import PromptReply from "./PromptReply";
 import { useEffect, useRef } from "react";
+import { useManageWorkspaceModal } from "../../../Modals/MangeWorkspace";
+import ManageWorkspace from "../../../Modals/MangeWorkspace";
 
 export default function ChatHistory({ history = [], workspace }) {
   const replyRef = useRef(null);
+  const { showing, showModal, hideModal } = useManageWorkspaceModal();
 
   useEffect(() => {
     if (replyRef.current) {
@@ -16,21 +18,37 @@ export default function ChatHistory({ history = [], workspace }) {
 
   if (history.length === 0) {
     return (
-      <div className="flex flex-col h-[89%] md:mt-0 pb-5 w-full justify-center items-center">
-        <div className="w-fit flex items-center gap-x-2">
-          <Frown className="h-4 w-4 text-slate-400" />
-          <p className="text-slate-400">No chat history found.</p>
+      <div className="flex flex-col h-full md:mt-0 pb-48 w-full justify-end items-center">
+        <div className="flex flex-col items-start">
+          <p className="text-white/60 text-lg font-base -ml-6 py-4">
+            Welcome to your new workspace.
+          </p>
+          <div className="w-full text-center">
+            <p className="text-white/60 text-lg font-base inline-flex items-center gap-x-2">
+              To get started either{" "}
+              <span
+                className="underline font-medium cursor-pointer"
+                onClick={showModal}
+              >
+                upload a document
+              </span>
+              or <b className="font-medium italic">send a chat.</b>
+            </p>
+          </div>
         </div>
-        <p className="text-slate-400 text-xs">
-          Send your first message to get started.
-        </p>
+        {showing && (
+          <ManageWorkspace
+            hideModal={hideModal}
+            providedSlug={workspace.slug}
+          />
+        )}
       </div>
     );
   }
 
   return (
     <div
-      className="h-[89%] pb-[100px] md:pt-[50px] md:pt-0 md:pb-5 mx-2 md:mx-0 overflow-y-scroll flex flex-col justify-start no-scroll"
+      className="h-[89%] pb-[100px] pt-6 md:pt-0 md:pb-20 md:mx-0 overflow-y-scroll flex flex-col justify-start no-scroll"
       id="chat-history"
     >
       {history.map((props, index) => {
@@ -64,6 +82,10 @@ export default function ChatHistory({ history = [], workspace }) {
           />
         );
       })}
+
+      {showing && (
+        <ManageWorkspace hideModal={hideModal} providedSlug={workspace.slug} />
+      )}
     </div>
   );
 }
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx
index 3c3f6e0f5..556cc6712 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/PromptInput/index.jsx
@@ -1,6 +1,10 @@
-import React, { useState, useRef, memo, useEffect } from "react";
+import { Gear, PaperPlaneRight } from "@phosphor-icons/react";
+import React, { useState, useRef } from "react";
 import { isMobile } from "react-device-detect";
-import { Loader, Menu, X } from "react-feather";
+import { Loader } from "react-feather";
+import ManageWorkspace, {
+  useManageWorkspaceModal,
+} from "../../../Modals/MangeWorkspace";
 
 export default function PromptInput({
   workspace,
@@ -10,13 +14,15 @@ export default function PromptInput({
   inputDisabled,
   buttonDisabled,
 }) {
-  const [showMenu, setShowMenu] = useState(false);
+  const { showing, showModal, hideModal } = useManageWorkspaceModal();
   const formRef = useRef(null);
   const [_, setFocused] = useState(false);
+
   const handleSubmit = (e) => {
     setFocused(false);
     submit(e);
   };
+
   const captureEnter = (event) => {
     if (event.keyCode == 13) {
       if (!event.shiftKey) {
@@ -24,6 +30,7 @@ export default function PromptInput({
       }
     }
   };
+
   const adjustTextArea = (event) => {
     if (isMobile) return false;
     const element = event.target;
@@ -34,173 +41,68 @@ export default function PromptInput({
         : "1px";
   };
 
-  const setTextCommand = (command = "") => {
-    const storageKey = `workspace_chat_mode_${workspace.slug}`;
-    if (command === "/query") {
-      window.localStorage.setItem(storageKey, "query");
-      window.dispatchEvent(new Event("workspace_chat_mode_update"));
-      return;
-    } else if (command === "/conversation") {
-      window.localStorage.setItem(storageKey, "chat");
-      window.dispatchEvent(new Event("workspace_chat_mode_update"));
-      return;
-    }
-
-    onChange({ target: { value: `${command} ${message}` } });
-  };
-
   return (
-    <div className="w-full fixed md:absolute bottom-0 left-0 z-10 md:z-0">
+    <div className="w-full fixed md:absolute bottom-0 left-0 z-10 md:z-0 flex justify-center items-center overflow-hidden">
       <form
         onSubmit={handleSubmit}
-        className="flex flex-col gap-y-1 bg-white dark:bg-black-900 md:bg-transparent rounded-t-lg md:w-3/4 w-full mx-auto"
+        className="flex flex-col gap-y-1 rounded-t-lg md:w-3/4 w-full mx-auto max-w-xl"
       >
-        <div className="flex items-center py-2 px-4 rounded-lg">
-          <CommandMenu
-            workspace={workspace}
-            show={showMenu}
-            handleClick={setTextCommand}
-            hide={() => setShowMenu(false)}
-          />
-          <button
-            onClick={() => setShowMenu(!showMenu)}
-            type="button"
-            className="p-2 text-slate-500 bg-transparent rounded-md hover:bg-gray-200 dark:hover:bg-stone-500 dark:hover:text-slate-200"
-          >
-            <Menu className="w-4 h-4 md:h-6 md:w-6" />
-          </button>
-          <textarea
-            onKeyUp={adjustTextArea}
-            onKeyDown={captureEnter}
-            onChange={onChange}
-            required={true}
-            maxLength={240}
-            disabled={inputDisabled}
-            onFocus={() => setFocused(true)}
-            onBlur={(e) => {
-              setFocused(false);
-              adjustTextArea(e);
-            }}
-            value={message}
-            className="cursor-text max-h-[100px] md:min-h-[40px] block mx-2 md:mx-4 p-2.5 w-full text-[16px] md:text-sm rounded-lg border bg-gray-50 border-gray-300 placeholder-gray-400 text-gray-900 dark:text-white dark:bg-stone-600 dark:border-stone-700 dark:placeholder-stone-400"
-            placeholder={
-              isMobile
-                ? "Enter your message here."
-                : "Shift + Enter for newline. Enter to submit."
-            }
-          />
-          <button
-            ref={formRef}
-            type="submit"
-            disabled={buttonDisabled}
-            className="inline-flex justify-center p-0 md:p-2 rounded-full cursor-pointer text-black-900 dark:text-slate-200 hover:bg-gray-200 dark:hover:bg-stone-500 group"
-          >
-            {buttonDisabled ? (
-              <Loader className="w-6 h-6 animate-spin" />
-            ) : (
-              <svg
-                aria-hidden="true"
-                className="w-6 h-6 rotate-45 fill-gray-500 dark:fill-slate-500 group-hover:dark:fill-slate-200"
-                fill="currentColor"
-                viewBox="0 0 20 20"
-                xmlns="http://www.w3.org/2000/svg"
-              >
-                <path d="M10.894 2.553a1 1 0 00-1.788 0l-7 14a1 1 0 001.169 1.409l5-1.429A1 1 0 009 15.571V11a1 1 0 112 0v4.571a1 1 0 00.725.962l5 1.428a1 1 0 001.17-1.408l-7-14z"></path>
-              </svg>
-            )}
-            <span className="sr-only">Send message</span>
-          </button>
-        </div>
-        <Tracking workspaceSlug={workspace.slug} />
-      </form>
-    </div>
-  );
-}
-
-const Tracking = memo(({ workspaceSlug }) => {
-  const storageKey = `workspace_chat_mode_${workspaceSlug}`;
-  const [chatMode, setChatMode] = useState(
-    window.localStorage.getItem(storageKey) ?? "chat"
-  );
-
-  useEffect(() => {
-    function watchForChatModeChange() {
-      if (!workspaceSlug) return;
-      window.addEventListener(`workspace_chat_mode_update`, () => {
-        try {
-          const chatMode = window.localStorage.getItem(storageKey);
-          setChatMode(chatMode);
-        } catch {}
-      });
-    }
-    watchForChatModeChange();
-  }, [workspaceSlug]);
-
-  return (
-    <div className="flex flex-col md:flex-row w-full justify-center items-center gap-2 mb-2 px-4 mx:px-0">
-      <p className="bg-gray-200 dark:bg-stone-600 text-gray-800 dark:text-slate-400 text-xs px-2 rounded-lg font-mono text-center">
-        Chat mode: {chatMode}
-      </p>
-      <p className="text-slate-400 text-xs text-center">
-        Responses from system may produce inaccurate or invalid responses - use
-        with caution.
-      </p>
-    </div>
-  );
-});
-
-function CommandMenu({ workspace, show, handleClick, hide }) {
-  if (!show) return null;
-  const COMMANDS = [
-    {
-      cmd: "/conversation",
-      description: "- switch to chat mode (remembers recent chat history) .",
-    },
-    {
-      cmd: "/query",
-      description: "- switch to query mode (does not remember previous chats).",
-    },
-    { cmd: "/reset", description: "- clear current chat history." },
-  ];
-
-  return (
-    <div className="absolute top-[-25vh] md:top-[-23vh] min-h-[200px] flex flex-col rounded-lg border border-slate-400 p-2 pt-4 bg-gray-50 dark:bg-stone-600">
-      <div className="flex justify-between items-center border-b border-slate-400 px-2 py-1 ">
-        <p className="text-gray-800 dark:text-slate-200">Available Commands</p>
-        <button
-          type="button"
-          onClick={hide}
-          className="p-2 rounded-lg hover:bg-gray-200 hover:dark:bg-slate-500 rounded-full text-gray-800 dark:text-slate-400"
-        >
-          <X className="h-4 w-4" />
-        </button>
-      </div>
-
-      <div className="flex flex-col">
-        {COMMANDS.map((item, i) => {
-          const { cmd, description } = item;
-          return (
-            <div className="border-b border-slate-400 p-1">
-              <button
-                key={i}
-                type="button"
-                onClick={() => {
-                  handleClick(cmd);
-                  hide();
+        <div className="flex items-center rounded-lg md:mb-4">
+          <div className="w-[600px] bg-main-gradient shadow-2xl border border-white/50 rounded-2xl flex flex-col px-4 overflow-hidden">
+            <div className="flex items-center w-full border-b-2 border-gray-500/50">
+              <textarea
+                onKeyUp={adjustTextArea}
+                onKeyDown={captureEnter}
+                onChange={onChange}
+                required={true}
+                maxLength={240}
+                disabled={inputDisabled}
+                onFocus={() => setFocused(true)}
+                onBlur={(e) => {
+                  setFocused(false);
+                  adjustTextArea(e);
                 }}
-                className="w-full px-4 py-2 flex items-center rounded-lg hover:bg-gray-300 hover:dark:bg-slate-500 gap-x-1 disabled:cursor-not-allowed"
+                value={message}
+                className="cursor-text max-h-[100px] md:min-h-[40px] mx-2 md:mx-0 py-2 w-full text-[16px] md:text-md text-white bg-transparent placeholder:text-white/60 resize-none active:outline-none focus:outline-none flex-grow"
+                placeholder={"Send a message"}
+              />
+              <button
+                ref={formRef}
+                type="submit"
+                disabled={buttonDisabled}
+                className="inline-flex justify-center rounded-2xl cursor-pointer text-white/60 hover:text-white group ml-4"
               >
-                <p className="text-gray-800 dark:text-slate-200 font-semibold">
-                  {cmd}
-                </p>
-                <p className="text-gray-800 dark:text-slate-300 text-sm">
-                  {description}
-                </p>
+                {buttonDisabled ? (
+                  <Loader className="w-6 h-6 animate-spin" />
+                ) : (
+                  <PaperPlaneRight className="w-7 h-7 my-3" weight="fill" />
+                )}
+                <span className="sr-only">Send message</span>
               </button>
             </div>
-          );
-        })}
-      </div>
+            <div className="flex justify-between py-3.5">
+              <div className="flex gap-2">
+                <Gear
+                  onClick={showModal}
+                  className="w-7 h-7 text-white/60 hover:text-white cursor-pointer"
+                  weight="fill"
+                />
+                {/* <TextT
+                  className="w-7 h-7 text-white/30 cursor-not-allowed"
+                  weight="fill"
+                /> */}
+              </div>
+              {/* <Microphone
+                className="w-7 h-7 text-white/30 cursor-not-allowed"
+                weight="fill"
+              /> */}
+            </div>
+          </div>
+        </div>
+      </form>
+      {showing && (
+        <ManageWorkspace hideModal={hideModal} providedSlug={workspace.slug} />
+      )}
     </div>
   );
 }
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/index.jsx
index 627afe6e2..14f133e84 100644
--- a/frontend/src/components/WorkspaceChat/ChatContainer/index.jsx
+++ b/frontend/src/components/WorkspaceChat/ChatContainer/index.jsx
@@ -68,10 +68,10 @@ export default function ChatContainer({ workspace, knownHistory = [] }) {
   return (
     <div
       style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 w-full md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] h-full overflow-y-scroll"
     >
       {isMobile && <SidebarMobileHeader />}
-      <div className="flex flex-col h-full w-full flex">
+      <div className="flex flex-col h-full w-full md:mt-0 mt-[40px]">
         <ChatHistory history={chatHistory} workspace={workspace} />
         <PromptInput
           workspace={workspace}
diff --git a/frontend/src/components/WorkspaceChat/LoadingChat/index.jsx b/frontend/src/components/WorkspaceChat/LoadingChat/index.jsx
index f2844de7a..c93aed1d5 100644
--- a/frontend/src/components/WorkspaceChat/LoadingChat/index.jsx
+++ b/frontend/src/components/WorkspaceChat/LoadingChat/index.jsx
@@ -3,16 +3,18 @@ import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
 
 export default function LoadingChat() {
+  const highlightColor = "#3D4147";
+  const baseColor = "#2C2F35";
   return (
     <div
       style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 w-full md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+      className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient w-full md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
     >
       <Skeleton.default
         height="100px"
         width="100%"
-        baseColor={"#2a3a53"}
-        highlightColor={"#395073"}
+        highlightColor={highlightColor}
+        baseColor={baseColor}
         count={1}
         className="max-w-full md:max-w-[75%] p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex justify-start"
@@ -20,8 +22,8 @@ export default function LoadingChat() {
       <Skeleton.default
         height="100px"
         width={isMobile ? "70%" : "45%"}
-        baseColor={"#2a3a53"}
-        highlightColor={"#395073"}
+        baseColor={baseColor}
+        highlightColor={highlightColor}
         count={1}
         className="max-w-full md:max-w-[75%] p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex justify-end"
@@ -29,8 +31,8 @@ export default function LoadingChat() {
       <Skeleton.default
         height="100px"
         width={isMobile ? "55%" : "30%"}
-        baseColor={"#2a3a53"}
-        highlightColor={"#395073"}
+        baseColor={baseColor}
+        highlightColor={highlightColor}
         count={1}
         className="max-w-full md:max-w-[75%] p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex justify-start"
@@ -38,8 +40,8 @@ export default function LoadingChat() {
       <Skeleton.default
         height="100px"
         width={isMobile ? "88%" : "25%"}
-        baseColor={"#2a3a53"}
-        highlightColor={"#395073"}
+        baseColor={baseColor}
+        highlightColor={highlightColor}
         count={1}
         className="max-w-full md:max-w-[75%] p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex justify-end"
@@ -47,8 +49,8 @@ export default function LoadingChat() {
       <Skeleton.default
         height="160px"
         width="100%"
-        baseColor={"#2a3a53"}
-        highlightColor={"#395073"}
+        baseColor={baseColor}
+        highlightColor={highlightColor}
         count={1}
         className="max-w-full md:max-w-[75%] p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex justify-start"
diff --git a/frontend/src/hooks/useLogo.js b/frontend/src/hooks/useLogo.js
index 622e19b59..e4ecd5e87 100644
--- a/frontend/src/hooks/useLogo.js
+++ b/frontend/src/hooks/useLogo.js
@@ -1,27 +1,22 @@
 import { useEffect, useState } from "react";
-import usePrefersDarkMode from "./usePrefersDarkMode";
 import System from "../models/system";
-import AnythingLLMDark from "../media/logo/anything-llm-dark.png";
-import AnythingLLMLight from "../media/logo/anything-llm-light.png";
+import AnythingLLM from "../media/logo/anything-llm.png";
 
 export default function useLogo() {
   const [logo, setLogo] = useState("");
-  const prefersDarkMode = usePrefersDarkMode();
 
   useEffect(() => {
     async function fetchInstanceLogo() {
       try {
-        const logoURL = await System.fetchLogo(!prefersDarkMode);
-        logoURL
-          ? setLogo(logoURL)
-          : setLogo(prefersDarkMode ? AnythingLLMLight : AnythingLLMDark);
+        const logoURL = await System.fetchLogo();
+        logoURL ? setLogo(logoURL) : setLogo(AnythingLLM);
       } catch (err) {
-        setLogo(prefersDarkMode ? AnythingLLMLight : AnythingLLMDark);
+        setLogo(AnythingLLM);
         console.error("Failed to fetch logo:", err);
       }
     }
     fetchInstanceLogo();
-  }, [prefersDarkMode]);
+  }, []);
 
   return { logo };
 }
diff --git a/frontend/src/index.css b/frontend/src/index.css
index a0294126f..a6cb2aec2 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -6,8 +6,9 @@ html,
 body {
   padding: 0;
   margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
-    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+  font-family: "plus-jakarta-sans", -apple-system, BlinkMacSystemFont, Segoe UI,
+    Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue,
+    sans-serif;
   background-color: white;
 }
 
@@ -25,12 +26,8 @@ a {
 }
 
 @font-face {
-  font-family: "AvenirNextW10-Bold";
-  src: url("../public/fonts/AvenirNext.ttf");
-}
-
-.Avenir {
-  font-family: AvenirNextW10-Bold;
+  font-family: "plus-jakarta-sans";
+  src: url("../public/fonts/PlusJakartaSans.ttf");
   font-display: swap;
 }
 
@@ -105,11 +102,6 @@ a {
     right: 0px;
     height: 4em;
     top: 69vh;
-    background: linear-gradient(
-      to bottom,
-      rgba(173, 3, 3, 0),
-      rgb(255 255 255) 50%
-    );
     z-index: 1;
     pointer-events: none;
   }
@@ -123,11 +115,6 @@ a {
     right: 0px;
     height: 4em;
     top: 69vh;
-    background: linear-gradient(
-      to bottom,
-      rgba(173, 3, 3, 0),
-      rgb(20 20 20) 50%
-    );
     z-index: 1;
     pointer-events: none;
   }
@@ -164,9 +151,9 @@ a {
   width: 10px;
   height: 10px;
   border-radius: 5px;
-  background-color: #5fa4fa;
+  background-color: #eeeeee;
   color: #5fa4fa;
-  box-shadow: 9999px 0 0 0 #5fa4fa;
+  box-shadow: 9999px 0 0 0 #eeeeee;
   animation: dot-falling 1.5s infinite linear;
   animation-delay: 0.1s;
 }
@@ -183,8 +170,8 @@ a {
   width: 10px;
   height: 10px;
   border-radius: 5px;
-  background-color: #5fa4fa;
-  color: #5fa4fa;
+  background-color: #eeeeee;
+  color: #eeeeee;
   animation: dot-falling-before 1.5s infinite linear;
   animation-delay: 0s;
 }
@@ -193,8 +180,8 @@ a {
   width: 10px;
   height: 10px;
   border-radius: 5px;
-  background-color: #5fa4fa;
-  color: #5fa4fa;
+  background-color: #eeeeee;
+  color: #eeeeee;
   animation: dot-falling-after 1.5s infinite linear;
   animation-delay: 0.2s;
 }
@@ -207,7 +194,7 @@ a {
   25%,
   50%,
   75% {
-    box-shadow: 9999px 0 0 0 #5fa4fa;
+    box-shadow: 9999px 0 0 0 #eeeeee;
   }
 
   100% {
@@ -223,7 +210,7 @@ a {
   25%,
   50%,
   75% {
-    box-shadow: 9984px 0 0 0 #5fa4fa;
+    box-shadow: 9984px 0 0 0 #eeeeee;
   }
 
   100% {
@@ -239,7 +226,7 @@ a {
   25%,
   50%,
   75% {
-    box-shadow: 10014px 0 0 0 #5fa4fa;
+    box-shadow: 10014px 0 0 0 #eeeeee;
   }
 
   100% {
@@ -298,3 +285,55 @@ dialog::backdrop {
   background: rgba(0, 0, 0, 0.5);
   backdrop-filter: blur(2px);
 }
+
+.backdrop {
+  background: rgba(0, 0, 0, 0.5);
+  backdrop-filter: blur(2px);
+}
+
+.animate-slow-pulse {
+  transform: scale(1);
+  animation: subtlePulse 20s infinite;
+  will-change: transform;
+}
+
+@keyframes subtlePulse {
+  0% {
+    transform: scale(1);
+  }
+
+  50% {
+    transform: scale(1.1);
+  }
+
+  100% {
+    transform: scale(1);
+  }
+}
+
+@keyframes subtleShift {
+  0% {
+    background-position: 0% 50%;
+  }
+
+  50% {
+    background-position: 100% 50%;
+  }
+
+  100% {
+    background-position: 0% 50%;
+  }
+}
+
+.login-input-gradient {
+  background: linear-gradient(
+    180deg,
+    rgba(61, 65, 71, 0.3) 0%,
+    rgba(44, 47, 53, 0.3) 100%
+  ) !important;
+  box-shadow: 0px 4px 30px rgba(0, 0, 0, 0.25);
+}
+
+.white-fill {
+  fill: white;
+}
diff --git a/frontend/src/media/logo/anything-llm-dark.png b/frontend/src/media/logo/anything-llm-old.png
similarity index 100%
rename from frontend/src/media/logo/anything-llm-dark.png
rename to frontend/src/media/logo/anything-llm-old.png
diff --git a/frontend/src/media/logo/anything-llm-light.png b/frontend/src/media/logo/anything-llm.png
similarity index 100%
rename from frontend/src/media/logo/anything-llm-light.png
rename to frontend/src/media/logo/anything-llm.png
diff --git a/frontend/src/models/admin.js b/frontend/src/models/admin.js
index 1c78f07a6..a2a8746fb 100644
--- a/frontend/src/models/admin.js
+++ b/frontend/src/models/admin.js
@@ -188,50 +188,6 @@ const Admin = {
         return { success: false, error: e.message };
       });
   },
-  uploadLogo: async function (formData) {
-    return await fetch(`${API_BASE}/system/upload-logo`, {
-      method: "POST",
-      body: formData,
-      headers: baseHeaders(),
-    })
-      .then((res) => {
-        if (!res.ok) throw new Error("Error uploading logo.");
-        return { success: true, error: null };
-      })
-      .catch((e) => {
-        console.log(e);
-        return { success: false, error: e.message };
-      });
-  },
-  removeCustomLogo: async function () {
-    return await fetch(`${API_BASE}/system/remove-logo`, {
-      headers: baseHeaders(),
-    })
-      .then((res) => {
-        if (res.ok) return { success: true, error: null };
-        throw new Error("Error removing logo!");
-      })
-      .catch((e) => {
-        console.log(e);
-        return { success: false, error: e.message };
-      });
-  },
-  setWelcomeMessages: async function (messages) {
-    return fetch(`${API_BASE}/system/set-welcome-messages`, {
-      method: "POST",
-      headers: baseHeaders(),
-      body: JSON.stringify({ messages }),
-    })
-      .then((res) => {
-        if (!res.ok)
-          throw new Error(res.statusText || "Error setting welcome messages.");
-        return res.json();
-      })
-      .catch((e) => {
-        console.error(e);
-        return { success: false, error: e.message };
-      });
-  },
 
   // API Keys
   getApiKeys: async function () {
diff --git a/frontend/src/models/system.js b/frontend/src/models/system.js
index 6e74eb2a5..1b2e34e31 100644
--- a/frontend/src/models/system.js
+++ b/frontend/src/models/system.js
@@ -121,6 +121,18 @@ const System = {
         return { success: false, error: e.message };
       });
   },
+  isMultiUserMode: async () => {
+    return await fetch(`${API_BASE}/system/multi-user-mode`, {
+      method: "GET",
+      headers: baseHeaders(),
+    })
+      .then((res) => res.json())
+      .then((res) => res?.multiUserMode)
+      .catch((e) => {
+        console.error(e);
+        return false;
+      });
+  },
   deleteDocument: async (name, meta) => {
     return await fetch(`${API_BASE}/system/remove-document`, {
       method: "DELETE",
@@ -162,6 +174,7 @@ const System = {
     return await fetch(`${API_BASE}/system/upload-logo`, {
       method: "POST",
       body: formData,
+      headers: baseHeaders(),
     })
       .then((res) => {
         if (!res.ok) throw new Error("Error uploading logo.");
@@ -172,8 +185,8 @@ const System = {
         return { success: false, error: e.message };
       });
   },
-  fetchLogo: async function (light = false) {
-    return await fetch(`${API_BASE}/system/logo${light ? "/light" : ""}`, {
+  fetchLogo: async function () {
+    return await fetch(`${API_BASE}/system/logo`, {
       method: "GET",
       cache: "no-cache",
     })
@@ -187,8 +200,25 @@ const System = {
         return null;
       });
   },
+  isDefaultLogo: async function () {
+    return await fetch(`${API_BASE}/system/is-default-logo`, {
+      method: "GET",
+      cache: "no-cache",
+    })
+      .then((res) => {
+        if (!res.ok) throw new Error("Failed to get is default logo!");
+        return res.json();
+      })
+      .then((res) => res?.isDefaultLogo)
+      .catch((e) => {
+        console.log(e);
+        return null;
+      });
+  },
   removeCustomLogo: async function () {
-    return await fetch(`${API_BASE}/system/remove-logo`)
+    return await fetch(`${API_BASE}/system/remove-logo`, {
+      headers: baseHeaders(),
+    })
       .then((res) => {
         if (res.ok) return { success: true, error: null };
         throw new Error("Error removing logo!");
@@ -246,8 +276,8 @@ const System = {
         return { success: false, error: e.message };
       });
   },
-  getApiKey: async function () {
-    return fetch(`${API_BASE}/system/api-key`, {
+  getApiKeys: async function () {
+    return fetch(`${API_BASE}/system/api-keys`, {
       method: "GET",
       headers: baseHeaders(),
     })
diff --git a/frontend/src/pages/Admin/Chats/ChatRow/index.jsx b/frontend/src/pages/Admin/Chats/ChatRow/index.jsx
index ca0d5c781..9132b6cd2 100644
--- a/frontend/src/pages/Admin/Chats/ChatRow/index.jsx
+++ b/frontend/src/pages/Admin/Chats/ChatRow/index.jsx
@@ -1,7 +1,7 @@
 import { useRef } from "react";
 import Admin from "../../../../models/admin";
 import truncate from "truncate";
-import { X } from "react-feather";
+import { X, Trash } from "@phosphor-icons/react";
 
 export default function ChatRow({ chat }) {
   const rowRef = useRef(null);
@@ -18,19 +18,22 @@ export default function ChatRow({ chat }) {
 
   return (
     <>
-      <tr ref={rowRef} className="bg-transparent">
-        <td className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white">
+      <tr
+        ref={rowRef}
+        className="bg-transparent text-white text-opacity-80 text-sm font-medium"
+      >
+        <td className="px-6 py-4 font-medium whitespace-nowrap text-white">
           {chat.id}
         </td>
-        <td className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white">
+        <td className="px-6 py-4 font-medium whitespace-nowrap text-white">
           {chat.user?.username}
         </td>
-        <td className="px-6 py-4 font-mono">{chat.workspace?.name}</td>
+        <td className="px-6 py-4">{chat.workspace?.name}</td>
         <td
           onClick={() => {
             document.getElementById(`chat-${chat.id}-prompt`)?.showModal();
           }}
-          className="px-6 py-4 hover:dark:bg-stone-700 hover:bg-gray-100 cursor-pointer"
+          className="px-6 py-4 border-transparent cursor-pointer transform transition-transform duration-200 hover:scale-105 hover:shadow-lg"
         >
           {truncate(chat.prompt, 40)}
         </td>
@@ -38,7 +41,7 @@ export default function ChatRow({ chat }) {
           onClick={() => {
             document.getElementById(`chat-${chat.id}-response`)?.showModal();
           }}
-          className="px-6 py-4 hover:dark:bg-stone-600 hover:bg-gray-100 cursor-pointer"
+          className="px-6 py-4 cursor-pointer transform transition-transform duration-200 hover:scale-105 hover:shadow-lg"
         >
           {truncate(JSON.parse(chat.response)?.text, 40)}
         </td>
@@ -46,9 +49,9 @@ export default function ChatRow({ chat }) {
         <td className="px-6 py-4 flex items-center gap-x-6">
           <button
             onClick={handleDelete}
-            className="font-medium text-red-600 dark:text-red-300 px-2 py-1 rounded-lg hover:bg-red-50 hover:dark:bg-red-800 hover:dark:bg-opacity-20"
+            className="font-medium text-red-300 px-2 py-1 rounded-lg hover:bg-red-800 hover:bg-opacity-20"
           >
-            Delete
+            <Trash className="h-5 w-5" />
           </button>
         </td>
       </tr>
@@ -69,22 +72,20 @@ const TextPreview = ({ text, modalName }) => {
   return (
     <dialog id={modalName} className="bg-transparent outline-none w-full">
       <div className="relative w-full max-w-2xl max-h-full min-w-1/2">
-        <div className="min-w-1/2 relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
-              Viewing Text
-            </h3>
+        <div className="min-w-1/2 relative rounded-lg shadow bg-stone-700">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-600">
+            <h3 className="text-xl font-semibold text-white">Viewing Text</h3>
             <button
               onClick={() => hideModal(modalName)}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="text-gray-400 bg-transparent rounded-lg text-sm p-1.5 ml-auto inline-flex items-center hover:bg-gray-600 hover:text-white"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
             </button>
           </div>
-          <div className="w-full p-4 w-full flex">
-            <pre className="w-full flex h-[200px] py-2 px-4 overflow-scroll rounded-lg bg-stone-400 bg-gray-200 text-gray-800 dark:text-slate-800 font-mono">
+          <div className="w-full p-4 flex">
+            <pre className="w-full flex h-[200px] py-2 px-4 overflow-scroll rounded-lg bg-gray-200 text-slate-800">
               {text}
             </pre>
           </div>
diff --git a/frontend/src/pages/Admin/Chats/index.jsx b/frontend/src/pages/Admin/Chats/index.jsx
index 8c439bb70..ffd2ed1b3 100644
--- a/frontend/src/pages/Admin/Chats/index.jsx
+++ b/frontend/src/pages/Admin/Chats/index.jsx
@@ -1,30 +1,31 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
-import usePrefersDarkMode from "../../../hooks/usePrefersDarkMode";
 import Admin from "../../../models/admin";
 import useQuery from "../../../hooks/useQuery";
 import ChatRow from "./ChatRow";
 
 export default function AdminChats() {
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="flex flex-col w-full px-1 md:px-8">
-          <div className="w-full flex flex-col gap-y-1">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
             <div className="items-center flex gap-x-4">
-              <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
+              <p className="text-2xl font-semibold text-white">
                 Workspace Chats
               </p>
             </div>
-            <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+            <p className="text-sm font-base text-white text-opacity-60">
               These are all the recorded chats and messages that have been sent
               by users ordered by their creation date.
             </p>
@@ -38,7 +39,6 @@ export default function AdminChats() {
 
 function ChatsContainer() {
   const query = useQuery();
-  const darkMode = usePrefersDarkMode();
   const [loading, setLoading] = useState(true);
   const [chats, setChats] = useState([]);
   const [offset, setOffset] = useState(Number(query.get("offset") || 0));
@@ -77,8 +77,8 @@ function ChatsContainer() {
       <Skeleton.default
         height="80vh"
         width="100%"
-        baseColor={darkMode ? "#2a3a53" : null}
-        highlightColor={darkMode ? "#395073" : null}
+        highlightColor="#3D4147"
+        baseColor="#2C2F35"
         count={1}
         className="w-full p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex w-full"
@@ -88,8 +88,8 @@ function ChatsContainer() {
 
   return (
     <>
-      <table className="md:w-full w-full text-sm text-left text-gray-500 dark:text-gray-400 rounded-lg mt-5">
-        <thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-stone-800 dark:text-gray-400">
+      <table className="md:w-3/4 w-full text-sm text-left rounded-lg mt-5">
+        <thead className="text-white text-opacity-80 text-sm font-bold uppercase border-white border-b border-opacity-60">
           <tr>
             <th scope="col" className="px-6 py-3 rounded-tl-lg">
               Id
@@ -110,7 +110,7 @@ function ChatsContainer() {
               Sent At
             </th>
             <th scope="col" className="px-6 py-3 rounded-tr-lg">
-              Actions
+              {" "}
             </th>
           </tr>
         </thead>
@@ -123,7 +123,7 @@ function ChatsContainer() {
       <div className="flex w-full justify-between items-center">
         <button
           onClick={handlePrevious}
-          className="px-4 py-2 rounded-lg border border-gray-800 dark:border-slate-200 text-gray-800 text-slate-200 disabled:invisible"
+          className="px-4 py-2 rounded-lg border border-slate-200 text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 disabled:invisible"
           disabled={offset === 0}
         >
           {" "}
@@ -131,7 +131,7 @@ function ChatsContainer() {
         </button>
         <button
           onClick={handleNext}
-          className="px-4 py-2 rounded-lg border border-gray-800 dark:border-slate-200 text-gray-800 text-slate-200 disabled:invisible"
+          className="px-4 py-2 rounded-lg border border-slate-200 text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 disabled:invisible"
           disabled={!canNext}
         >
           Next Page
diff --git a/frontend/src/pages/Admin/Invitations/InviteRow/index.jsx b/frontend/src/pages/Admin/Invitations/InviteRow/index.jsx
index 4c6a643e9..68408d7e7 100644
--- a/frontend/src/pages/Admin/Invitations/InviteRow/index.jsx
+++ b/frontend/src/pages/Admin/Invitations/InviteRow/index.jsx
@@ -1,6 +1,7 @@
 import { useEffect, useRef, useState } from "react";
 import { titleCase } from "text-case";
 import Admin from "../../../../models/admin";
+import { Trash } from "@phosphor-icons/react";
 
 export default function InviteRow({ invite }) {
   const rowRef = useRef(null);
@@ -39,11 +40,11 @@ export default function InviteRow({ invite }) {
 
   return (
     <>
-      <tr ref={rowRef} className="bg-transparent">
-        <td
-          scope="row"
-          className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white font-mono"
-        >
+      <tr
+        ref={rowRef}
+        className="bg-transparent text-white text-opacity-80 text-sm font-medium"
+      >
+        <td scope="row" className="px-6 py-4 whitespace-nowrap">
           {titleCase(status)}
         </td>
         <td className="px-6 py-4">
@@ -61,16 +62,18 @@ export default function InviteRow({ invite }) {
               <button
                 onClick={copyInviteLink}
                 disabled={copied}
-                className="font-medium text-blue-600 dark:text-blue-300 px-2 py-1 rounded-lg hover:bg-blue-50 hover:dark:bg-blue-800 hover:dark:bg-opacity-20"
+                className="font-medium text-blue-300 rounded-lg hover:text-white hover:text-opacity-60 hover:underline"
               >
                 {copied ? "Copied" : "Copy Invite Link"}
               </button>
-              <button
-                onClick={handleDelete}
-                className="font-medium text-red-600 dark:text-red-300 px-2 py-1 rounded-lg hover:bg-red-50 hover:dark:bg-red-800 hover:dark:bg-opacity-20"
-              >
-                Deactivate
-              </button>
+              <td className="px-6 py-4 flex items-center gap-x-6">
+                <button
+                  onClick={handleDelete}
+                  className="font-medium text-red-300 px-2 py-1 rounded-lg hover:bg-red-800 hover:bg-opacity-20"
+                >
+                  <Trash className="h-5 w-5" />
+                </button>
+              </td>
             </>
           )}
         </td>
diff --git a/frontend/src/pages/Admin/Invitations/NewInviteModal/index.jsx b/frontend/src/pages/Admin/Invitations/NewInviteModal/index.jsx
index 6da534e21..6ce4b7b35 100644
--- a/frontend/src/pages/Admin/Invitations/NewInviteModal/index.jsx
+++ b/frontend/src/pages/Admin/Invitations/NewInviteModal/index.jsx
@@ -1,6 +1,7 @@
 import React, { useEffect, useState } from "react";
 import { X } from "react-feather";
 import Admin from "../../../../models/admin";
+
 const DIALOG_ID = `new-invite-modal`;
 
 function hideModal() {
@@ -39,16 +40,16 @@ export default function NewInviteModal() {
 
   return (
     <dialog id={DIALOG_ID} className="bg-transparent outline-none">
-      <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
+      <div className="relative w-[500px] max-w-2xl max-h-full">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
               Create new invite
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -58,38 +59,36 @@ export default function NewInviteModal() {
             <div className="p-6 space-y-6 flex h-full w-full">
               <div className="w-full flex flex-col gap-y-4">
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
                 {invite && (
                   <input
                     type="url"
                     defaultValue={`${window.location.origin}/accept-invite/${invite.code}`}
                     disabled={true}
-                    className="rounded-lg px-4 py-2 text-gray-800 bg-gray-100 dark:text-slate-200 dark:bg-stone-800"
+                    className="rounded-lg px-4 py-2 text-white bg-zinc-900 border border-gray-500/50"
                   />
                 )}
-                <p className="text-gray-800 dark:text-slate-200 text-xs md:text-sm">
+                <p className="text-white text-xs md:text-sm">
                   After creation you will be able to copy the invite and send it
                   to a new user where they can create an account as a default
                   user.
                 </p>
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
               {!invite ? (
                 <>
                   <button
                     onClick={hideModal}
                     type="button"
-                    className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                    className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
                   >
                     Cancel
                   </button>
                   <button
                     type="submit"
-                    className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                    className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
                   >
                     Create Invite
                   </button>
@@ -99,7 +98,7 @@ export default function NewInviteModal() {
                   onClick={copyInviteLink}
                   type="button"
                   disabled={copied}
-                  className="w-full disabled:bg-green-200 disabled:text-green-600 text-gray-800 bg-gray-100 px-4 py-2 rounded-lg dark:text-slate-200 dark:bg-stone-900"
+                  className="w-full transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800 text-center justify-center"
                 >
                   {copied ? "Copied Link" : "Copy Invite Link"}
                 </button>
diff --git a/frontend/src/pages/Admin/Invitations/index.jsx b/frontend/src/pages/Admin/Invitations/index.jsx
index 651275905..d709bd8c2 100644
--- a/frontend/src/pages/Admin/Invitations/index.jsx
+++ b/frontend/src/pages/Admin/Invitations/index.jsx
@@ -1,5 +1,7 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
@@ -11,29 +13,27 @@ import NewInviteModal, { NewInviteModalId } from "./NewInviteModal";
 
 export default function AdminInvites() {
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="flex flex-col w-full px-1 md:px-8">
-          <div className="w-full flex flex-col gap-y-1">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
             <div className="items-center flex gap-x-4">
-              <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
-                Invitations
-              </p>
+              <p className="text-2xl font-semibold text-white">Invitations</p>
               <button
                 onClick={() =>
                   document?.getElementById(NewInviteModalId)?.showModal()
                 }
-                className="border border-slate-800 dark:border-slate-200 px-4 py-1 rounded-lg text-slate-800 dark:text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-800 hover:text-slate-100 dark:hover:bg-slate-200 dark:hover:text-slate-800"
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
               >
                 <Mail className="h-4 w-4" /> Create Invite Link
               </button>
             </div>
-            <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+            <p className="text-sm font-base text-white text-opacity-60">
               Create invitation links for people in your organization to accept
               and sign up with. Invitations can only be used by a single user.
             </p>
@@ -64,8 +64,8 @@ function InvitationsContainer() {
       <Skeleton.default
         height="80vh"
         width="100%"
-        baseColor={darkMode ? "#2a3a53" : null}
-        highlightColor={darkMode ? "#395073" : null}
+        highlightColor="#3D4147"
+        baseColor="#2C2F35"
         count={1}
         className="w-full p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex w-full"
@@ -74,8 +74,8 @@ function InvitationsContainer() {
   }
 
   return (
-    <table className="md:w-3/4 w-full text-sm text-left text-gray-500 dark:text-gray-400 rounded-lg mt-5">
-      <thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-stone-800 dark:text-gray-400">
+    <table className="md:w-3/4 w-full text-sm text-left rounded-lg mt-5">
+      <thead className="text-white text-opacity-80 text-sm font-bold uppercase border-white border-b border-opacity-60">
         <tr>
           <th scope="col" className="px-6 py-3">
             Status
@@ -90,7 +90,7 @@ function InvitationsContainer() {
             Created
           </th>
           <th scope="col" className="px-6 py-3 rounded-tr-lg">
-            Actions
+            {" "}
           </th>
         </tr>
       </thead>
diff --git a/frontend/src/pages/Admin/System/index.jsx b/frontend/src/pages/Admin/System/index.jsx
index b16a17c26..d9ea370e7 100644
--- a/frontend/src/pages/Admin/System/index.jsx
+++ b/frontend/src/pages/Admin/System/index.jsx
@@ -1,5 +1,7 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import Admin from "../../../models/admin";
 import showToast from "../../../utils/toast";
@@ -39,11 +41,11 @@ export default function AdminSystem() {
   }, []);
 
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
         <form
@@ -51,35 +53,35 @@ export default function AdminSystem() {
           onChange={() => setHasChanges(true)}
           className="flex w-full"
         >
-          <div className="flex flex-col w-full px-1 md:px-8">
-            <div className="w-full flex flex-col gap-y-1">
+          <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+            <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
               <div className="items-center flex gap-x-4">
-                <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
+                <p className="text-2xl font-semibold text-white">
                   System Preferences
                 </p>
                 {hasChanges && (
                   <button
                     type="submit"
                     disabled={saving}
-                    className="border border-slate-800 dark:border-slate-200 px-4 py-1 rounded-lg text-slate-800 dark:text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-800 hover:text-slate-100 dark:hover:bg-slate-200 dark:hover:text-slate-800"
+                    className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
                   >
                     {saving ? "Saving..." : "Save changes"}
                   </button>
                 )}
               </div>
-              <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+              <p className="text-sm font-base text-white text-opacity-60">
                 These are the overall settings and configurations of your
                 instance.
               </p>
             </div>
 
-            <div className="my-4">
+            <div className="my-5">
               <div className="flex flex-col gap-y-2 mb-2.5">
-                <label className="leading-tight font-medium text-black dark:text-white">
+                <label className="leading-tight font-semibold text-white">
                   Users can delete workspaces
                 </label>
-                <p className="leading-tight text-sm text-gray-500 dark:text-slate-400">
-                  allow non-admin users to delete workspaces that they are a
+                <p className="leading-tight text-sm text-white text-opacity-60 w-96">
+                  Allow non-admin users to delete workspaces that they are a
                   part of. This would delete the workspace for everyone.
                 </p>
               </div>
@@ -91,7 +93,7 @@ export default function AdminSystem() {
                   onChange={(e) => setCanDelete(e.target.checked)}
                   className="peer sr-only"
                 />
-                <div className="peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"></div>
+                <div className="pointer-events-none peer h-6 w-11 rounded-full bg-stone-400 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border after:border-gray-600 after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-lime-300 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-800"></div>
                 <span className="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"></span>
               </label>
             </div>
@@ -101,7 +103,7 @@ export default function AdminSystem() {
                 <label className="leading-tight font-medium text-black dark:text-white">
                   Limit messages per user per day
                 </label>
-                <p className="leading-tight text-sm text-gray-500 dark:text-slate-400">
+                <p className="leading-tight text-sm text-white text-opacity-60 w-96">
                   Restrict non-admin users to a number of successful queries or
                   chats within a 24 hour window. Enable this to prevent users
                   from running up OpenAI costs.
@@ -121,7 +123,7 @@ export default function AdminSystem() {
                   }}
                   className="peer sr-only"
                 />
-                <div className="peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"></div>
+                <div className="pointer-events-none peer h-6 w-11 rounded-full bg-stone-400 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border after:border-gray-600 after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-lime-300 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-800"></div>
                 <span className="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"></span>
               </label>
             </div>
diff --git a/frontend/src/pages/Admin/Users/NewUserModal/index.jsx b/frontend/src/pages/Admin/Users/NewUserModal/index.jsx
index 1c0195b7b..0628fda99 100644
--- a/frontend/src/pages/Admin/Users/NewUserModal/index.jsx
+++ b/frontend/src/pages/Admin/Users/NewUserModal/index.jsx
@@ -1,6 +1,7 @@
 import React, { useState } from "react";
 import { X } from "react-feather";
 import Admin from "../../../../models/admin";
+
 const DIALOG_ID = `new-user-modal`;
 
 function hideModal() {
@@ -24,15 +25,15 @@ export default function NewUserModal() {
   return (
     <dialog id={DIALOG_ID} className="bg-transparent outline-none">
       <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
               Add user to instance
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -44,14 +45,14 @@ export default function NewUserModal() {
                 <div>
                   <label
                     htmlFor="username"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Username
                   </label>
                   <input
                     name="username"
                     type="text"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
                     placeholder="User's username"
                     minLength={2}
                     required={true}
@@ -61,14 +62,14 @@ export default function NewUserModal() {
                 <div>
                   <label
                     htmlFor="password"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Password
                   </label>
                   <input
                     name="password"
                     type="text"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
                     placeholder="User's initial password"
                     required={true}
                     minLength={8}
@@ -78,7 +79,7 @@ export default function NewUserModal() {
                 <div>
                   <label
                     htmlFor="role"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Role
                   </label>
@@ -86,34 +87,32 @@ export default function NewUserModal() {
                     name="role"
                     required={true}
                     defaultValue={"default"}
-                    className="rounded-lg bg-gray-50 px-4 py-2 text-sm text-gray-800 outline-none dark:text-slate-200 dark:bg-stone-600"
+                    className="rounded-lg bg-zinc-900 px-4 py-2 text-sm text-white border border-gray-500 focus:ring-blue-500 focus:border-blue-500"
                   >
                     <option value="default">Default</option>
                     <option value="admin">Administrator</option>
                   </select>
                 </div>
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
-                <p className="text-gray-800 dark:text-slate-200 text-xs md:text-sm">
+                <p className="text-white text-xs md:text-sm">
                   After creating a user they will need to login with their
                   initial login to get access.
                 </p>
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
               <button
                 onClick={hideModal}
                 type="button"
-                className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
               >
                 Cancel
               </button>
               <button
                 type="submit"
-                className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
               >
                 Add user
               </button>
diff --git a/frontend/src/pages/Admin/Users/UserRow/EditUserModal/index.jsx b/frontend/src/pages/Admin/Users/UserRow/EditUserModal/index.jsx
index 0654a6421..6ae54dcbc 100644
--- a/frontend/src/pages/Admin/Users/UserRow/EditUserModal/index.jsx
+++ b/frontend/src/pages/Admin/Users/UserRow/EditUserModal/index.jsx
@@ -3,11 +3,14 @@ import { X } from "react-feather";
 import Admin from "../../../../../models/admin";
 
 export const EditUserModalId = (user) => `edit-user-${user.id}-modal`;
+
 export default function EditUserModal({ user }) {
   const [error, setError] = useState(null);
+
   const hideModal = () => {
     document.getElementById(EditUserModalId(user)).close();
   };
+
   const handleUpdate = async (e) => {
     setError(null);
     e.preventDefault();
@@ -24,16 +27,16 @@ export default function EditUserModal({ user }) {
 
   return (
     <dialog id={EditUserModalId(user)} className="bg-transparent outline-none">
-      <div className="relative w-[75vw] max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
+      <div className="relative w-[500px] max-w-2xl max-h-full">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
               Edit {user.username}
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -45,14 +48,14 @@ export default function EditUserModal({ user }) {
                 <div>
                   <label
                     htmlFor="username"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Username
                   </label>
                   <input
                     name="username"
                     type="text"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
                     placeholder="User's username"
                     minLength={2}
                     defaultValue={user.username}
@@ -63,14 +66,14 @@ export default function EditUserModal({ user }) {
                 <div>
                   <label
                     htmlFor="password"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     New Password
                   </label>
                   <input
                     name="password"
                     type="text"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
                     placeholder={`${user.username}'s new password`}
                     minLength={8}
                     autoComplete="off"
@@ -79,7 +82,7 @@ export default function EditUserModal({ user }) {
                 <div>
                   <label
                     htmlFor="role"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Role
                   </label>
@@ -87,30 +90,28 @@ export default function EditUserModal({ user }) {
                     name="role"
                     required={true}
                     defaultValue={user.role}
-                    className="rounded-lg bg-gray-50 px-4 py-2 text-sm text-gray-800 outline-none dark:text-slate-200 dark:bg-stone-600"
+                    className="rounded-lg bg-zinc-900 px-4 py-2 text-sm text-white border border-gray-500 focus:ring-blue-500 focus:border-blue-500"
                   >
                     <option value="default">Default</option>
                     <option value="admin">Administrator</option>
                   </select>
                 </div>
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
               <button
                 onClick={hideModal}
                 type="button"
-                className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
               >
                 Cancel
               </button>
               <button
                 type="submit"
-                className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
               >
                 Update user
               </button>
diff --git a/frontend/src/pages/Admin/Users/UserRow/index.jsx b/frontend/src/pages/Admin/Users/UserRow/index.jsx
index df7fbc4ec..c4dac62cf 100644
--- a/frontend/src/pages/Admin/Users/UserRow/index.jsx
+++ b/frontend/src/pages/Admin/Users/UserRow/index.jsx
@@ -2,6 +2,7 @@ import { useRef, useState } from "react";
 import { titleCase } from "text-case";
 import Admin from "../../../../models/admin";
 import EditUserModal, { EditUserModalId } from "./EditUserModal";
+import { DotsThreeOutline } from "@phosphor-icons/react";
 
 export default function UserRow({ currUser, user }) {
   const rowRef = useRef(null);
@@ -29,11 +30,11 @@ export default function UserRow({ currUser, user }) {
 
   return (
     <>
-      <tr ref={rowRef} className="bg-transparent">
-        <th
-          scope="row"
-          className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white"
-        >
+      <tr
+        ref={rowRef}
+        className="bg-transparent text-white text-opacity-80 text-sm font-medium"
+      >
+        <th scope="row" className="px-6 py-4 whitespace-nowrap">
           {user.username}
         </th>
         <td className="px-6 py-4">{titleCase(user.role)}</td>
@@ -43,9 +44,9 @@ export default function UserRow({ currUser, user }) {
             onClick={() =>
               document?.getElementById(EditUserModalId(user))?.showModal()
             }
-            className="font-medium text-blue-600 dark:text-blue-300 px-2 py-1 rounded-lg hover:bg-blue-50 hover:dark:bg-blue-800 hover:dark:bg-opacity-20"
+            className="font-medium text-white text-opacity-80 rounded-lg hover:text-white px-2 py-1 hover:text-opacity-60 hover:bg-white hover:bg-opacity-10"
           >
-            Edit
+            <DotsThreeOutline weight="fill" className="h-5 w-5" />
           </button>
           {currUser.id !== user.id && (
             <>
diff --git a/frontend/src/pages/Admin/Users/index.jsx b/frontend/src/pages/Admin/Users/index.jsx
index b7873bcbb..29eb03409 100644
--- a/frontend/src/pages/Admin/Users/index.jsx
+++ b/frontend/src/pages/Admin/Users/index.jsx
@@ -1,10 +1,11 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
 import { UserPlus } from "react-feather";
-import usePrefersDarkMode from "../../../hooks/usePrefersDarkMode";
 import Admin from "../../../models/admin";
 import UserRow from "./UserRow";
 import useUser from "../../../hooks/useUser";
@@ -12,29 +13,27 @@ import NewUserModal, { NewUserModalId } from "./NewUserModal";
 
 export default function AdminUsers() {
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="flex flex-col w-full px-1 md:px-8">
-          <div className="w-full flex flex-col gap-y-1">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
             <div className="items-center flex gap-x-4">
-              <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
-                Instance users
-              </p>
+              <p className="text-2xl font-semibold text-white">Users</p>
               <button
                 onClick={() =>
                   document?.getElementById(NewUserModalId)?.showModal()
                 }
-                className="border border-slate-800 dark:border-slate-200 px-4 py-1 rounded-lg text-slate-800 dark:text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-800 hover:text-slate-100 dark:hover:bg-slate-200 dark:hover:text-slate-800"
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
               >
                 <UserPlus className="h-4 w-4" /> Add user
               </button>
             </div>
-            <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+            <p className="text-sm font-base text-white text-opacity-60">
               These are all the accounts which have an account on this instance.
               Removing an account will instantly remove their access to this
               instance.
@@ -50,7 +49,6 @@ export default function AdminUsers() {
 
 function UsersContainer() {
   const { user: currUser } = useUser();
-  const darkMode = usePrefersDarkMode();
   const [loading, setLoading] = useState(true);
   const [users, setUsers] = useState([]);
   useEffect(() => {
@@ -67,8 +65,8 @@ function UsersContainer() {
       <Skeleton.default
         height="80vh"
         width="100%"
-        baseColor={darkMode ? "#2a3a53" : null}
-        highlightColor={darkMode ? "#395073" : null}
+        highlightColor="#3D4147"
+        baseColor="#2C2F35"
         count={1}
         className="w-full p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex w-full"
@@ -77,8 +75,8 @@ function UsersContainer() {
   }
 
   return (
-    <table className="md:w-3/4 w-full text-sm text-left text-gray-500 dark:text-gray-400 rounded-lg mt-5">
-      <thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-stone-800 dark:text-gray-400">
+    <table className="md:w-3/4 w-full text-sm text-left rounded-lg mt-5">
+      <thead className="text-white text-opacity-80 text-sm font-bold uppercase border-white border-b border-opacity-60">
         <tr>
           <th scope="col" className="px-6 py-3 rounded-tl-lg">
             Username
@@ -87,10 +85,10 @@ function UsersContainer() {
             Role
           </th>
           <th scope="col" className="px-6 py-3">
-            Created On
+            Date Added
           </th>
           <th scope="col" className="px-6 py-3 rounded-tr-lg">
-            Actions
+            {" "}
           </th>
         </tr>
       </thead>
diff --git a/frontend/src/pages/Admin/Workspaces/NewWorkspaceModal/index.jsx b/frontend/src/pages/Admin/Workspaces/NewWorkspaceModal/index.jsx
index bc38c1910..83b2b0359 100644
--- a/frontend/src/pages/Admin/Workspaces/NewWorkspaceModal/index.jsx
+++ b/frontend/src/pages/Admin/Workspaces/NewWorkspaceModal/index.jsx
@@ -21,16 +21,16 @@ export default function NewWorkspaceModal() {
 
   return (
     <dialog id={DIALOG_ID} className="bg-transparent outline-none">
-      <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
-              Add workspace to Instance
+      <div className="relative w-[500px] max-w-2xl max-h-full">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-600">
+            <h3 className="text-xl font-semibold text-white">
+              Create new workspace
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -42,14 +42,14 @@ export default function NewWorkspaceModal() {
                 <div>
                   <label
                     htmlFor="name"
-                    className="block mb-2 text-sm font-medium text-gray-900 dark:text-white"
+                    className="block mb-2 text-sm font-medium text-white"
                   >
                     Workspace name
                   </label>
                   <input
                     name="name"
                     type="text"
-                    className="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-stone-600 dark:border-stone-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
                     placeholder="My workspace"
                     minLength={4}
                     required={true}
@@ -57,27 +57,25 @@ export default function NewWorkspaceModal() {
                   />
                 </div>
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
-                <p className="text-gray-800 dark:text-slate-200 text-xs md:text-sm">
+                <p className="text-white text-opacity-60 text-xs md:text-sm">
                   After creating this workspace only admins will be able to see
                   it. You can add users after it has been created.
                 </p>
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-600">
               <button
                 onClick={hideModal}
                 type="button"
-                className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
               >
                 Cancel
               </button>
               <button
                 type="submit"
-                className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
               >
                 Create workspace
               </button>
diff --git a/frontend/src/pages/Admin/Workspaces/WorkspaceRow/EditWorkspaceUsersModal/index.jsx b/frontend/src/pages/Admin/Workspaces/WorkspaceRow/EditWorkspaceUsersModal/index.jsx
index c363dbed3..092ac5854 100644
--- a/frontend/src/pages/Admin/Workspaces/WorkspaceRow/EditWorkspaceUsersModal/index.jsx
+++ b/frontend/src/pages/Admin/Workspaces/WorkspaceRow/EditWorkspaceUsersModal/index.jsx
@@ -5,11 +5,14 @@ import { titleCase } from "text-case";
 
 export const EditWorkspaceUsersModalId = (workspace) =>
   `edit-workspace-${workspace.id}-modal`;
+
 export default function EditWorkspaceUsersModal({ workspace, users }) {
   const [error, setError] = useState(null);
+
   const hideModal = () => {
     document.getElementById(EditWorkspaceUsersModalId(workspace)).close();
   };
+
   const handleUpdate = async (e) => {
     setError(null);
     e.preventDefault();
@@ -36,16 +39,16 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
       id={EditWorkspaceUsersModalId(workspace)}
       className="bg-transparent outline-none"
     >
-      <div className="relative w-[75vw] max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
+      <div className="relative w-[500px] max-w-2xl max-h-full">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
               Edit {workspace.name}
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -61,7 +64,7 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
                       <div
                         key={`workspace-${workspace.id}-user-${user.id}`}
                         data-workspace={workspace.id}
-                        className="flex items-center pl-4 border border-gray-200 rounded dark:border-gray-400 group hover:bg-stone-600 cursor-pointer"
+                        className="flex items-center pl-4 border border-gray-500/50 rounded group hover:bg-stone-900 transition-all duration-300 cursor-pointer"
                         onClick={() => {
                           document
                             .getElementById(
@@ -76,11 +79,11 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
                           type="checkbox"
                           value="yes"
                           name={`user-${user.id}`}
-                          className="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600 pointer-events-none"
+                          className="w-4 h-4 text-blue-600 bg-zinc-900 border border-gray-500/50 rounded focus:ring-blue-500 focus:border-blue-500 pointer-events-none"
                         />
                         <label
                           htmlFor={`user-${user.id}`}
-                          className="pointer-events-none w-full py-4 ml-2 text-sm font-medium text-gray-900 dark:text-gray-300"
+                          className="pointer-events-none w-full py-4 ml-2 text-sm font-medium text-white"
                         >
                           {titleCase(user.username)}
                         </label>
@@ -90,7 +93,7 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
                 <div className="flex items-center gap-x-4">
                   <button
                     type="button"
-                    className="w-full p-4 flex dark:text-slate-200 text-gray-800 items-center pl-4 border border-gray-200 rounded dark:border-gray-400 group hover:bg-stone-600 cursor-pointer"
+                    className="w-full p-4 flex text-white items-center pl-4 border border-gray-500/50 rounded group hover:bg-stone-900 transition-all duration-300 cursor-pointer"
                     onClick={() => {
                       document
                         .getElementById(`workspace-${workspace.id}-select-all`)
@@ -108,7 +111,7 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
                   </button>
                   <button
                     type="button"
-                    className="w-full p-4 flex dark:text-slate-200 text-gray-800 items-center pl-4 border border-gray-200 rounded dark:border-gray-400 group hover:bg-stone-600 cursor-pointer"
+                    className="w-full p-4 flex text-white items-center pl-4 border border-gray-500/50 rounded group hover:bg-stone-900 transition-all duration-300 cursor-pointer"
                     onClick={() => {
                       document
                         .getElementById(`workspace-${workspace.id}-select-all`)
@@ -126,23 +129,21 @@ export default function EditWorkspaceUsersModal({ workspace, users }) {
                   </button>
                 </div>
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
               <button
                 onClick={hideModal}
                 type="button"
-                className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
               >
                 Cancel
               </button>
               <button
                 type="submit"
-                className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
               >
                 Update workspace
               </button>
diff --git a/frontend/src/pages/Admin/Workspaces/WorkspaceRow/index.jsx b/frontend/src/pages/Admin/Workspaces/WorkspaceRow/index.jsx
index 762e2089b..6b181d4cd 100644
--- a/frontend/src/pages/Admin/Workspaces/WorkspaceRow/index.jsx
+++ b/frontend/src/pages/Admin/Workspaces/WorkspaceRow/index.jsx
@@ -4,6 +4,7 @@ import paths from "../../../../utils/paths";
 import EditWorkspaceUsersModal, {
   EditWorkspaceUsersModalId,
 } from "./EditWorkspaceUsersModal";
+import { DotsThreeOutline, LinkSimple, Trash } from "@phosphor-icons/react";
 
 export default function WorkspaceRow({ workspace, users }) {
   const rowRef = useRef(null);
@@ -20,20 +21,20 @@ export default function WorkspaceRow({ workspace, users }) {
 
   return (
     <>
-      <tr ref={rowRef} className="bg-transparent">
-        <th
-          scope="row"
-          className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white"
-        >
+      <tr
+        ref={rowRef}
+        className="bg-transparent text-white text-opacity-80 text-sm font-medium"
+      >
+        <th scope="row" className="px-6 py-4 whitespace-nowrap">
           {workspace.name}
         </th>
-        <td className="px-6 py-4">
+        <td className="px-6 py-4 flex items-center">
           <a
             href={paths.workspace.chat(workspace.slug)}
             target="_blank"
-            className="text-blue-500"
+            className="text-white flex items-center hover:underline"
           >
-            {workspace.slug}
+            <LinkSimple className="mr-2 w-5 h-5" /> {workspace.slug}
           </a>
         </td>
         <td className="px-6 py-4">{workspace.userIds?.length}</td>
@@ -45,15 +46,15 @@ export default function WorkspaceRow({ workspace, users }) {
                 ?.getElementById(EditWorkspaceUsersModalId(workspace))
                 ?.showModal()
             }
-            className="font-medium text-blue-600 dark:text-blue-300 px-2 py-1 rounded-lg hover:bg-blue-50 hover:dark:bg-blue-800 hover:dark:bg-opacity-20"
+            className="font-medium rounded-lg hover:text-white hover:text-opacity-60 px-2 py-1 hover:bg-white hover:bg-opacity-10"
           >
-            Edit Users
+            <DotsThreeOutline weight="fill" className="h-5 w-5" />
           </button>
           <button
             onClick={handleDelete}
-            className="font-medium text-red-600 dark:text-red-300 px-2 py-1 rounded-lg hover:bg-red-50 hover:dark:bg-red-800 hover:dark:bg-opacity-20"
+            className="font-medium text-red-300 px-2 py-1 rounded-lg hover:bg-red-800 hover:bg-opacity-20"
           >
-            Delete
+            <Trash className="h-5 w-5" />
           </button>
         </td>
       </tr>
diff --git a/frontend/src/pages/Admin/Workspaces/index.jsx b/frontend/src/pages/Admin/Workspaces/index.jsx
index ff3cb45a2..e7cbb2d09 100644
--- a/frontend/src/pages/Admin/Workspaces/index.jsx
+++ b/frontend/src/pages/Admin/Workspaces/index.jsx
@@ -1,5 +1,7 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
@@ -11,29 +13,29 @@ import NewWorkspaceModal, { NewWorkspaceModalId } from "./NewWorkspaceModal";
 
 export default function AdminWorkspaces() {
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="flex flex-col w-full px-1 md:px-8">
-          <div className="w-full flex flex-col gap-y-1">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
             <div className="items-center flex gap-x-4">
-              <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
+              <p className="text-2xl font-semibold text-white">
                 Instance workspaces
               </p>
               <button
                 onClick={() =>
                   document?.getElementById(NewWorkspaceModalId)?.showModal()
                 }
-                className="border border-slate-800 dark:border-slate-200 px-4 py-1 rounded-lg text-slate-800 dark:text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-800 hover:text-slate-100 dark:hover:bg-slate-200 dark:hover:text-slate-800"
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
               >
                 <BookOpen className="h-4 w-4" /> New Workspace
               </button>
             </div>
-            <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+            <p className="text-sm font-base text-white text-opacity-60">
               These are all the workspaces that exist on this instance. Removing
               a workspace will delete all of it's associated chats and settings.
             </p>
@@ -68,8 +70,8 @@ function WorkspacesContainer() {
       <Skeleton.default
         height="80vh"
         width="100%"
-        baseColor={darkMode ? "#2a3a53" : null}
-        highlightColor={darkMode ? "#395073" : null}
+        highlightColor="#3D4147"
+        baseColor="#2C2F35"
         count={1}
         className="w-full p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex w-full"
@@ -78,8 +80,8 @@ function WorkspacesContainer() {
   }
 
   return (
-    <table className="md:w-3/4 w-full text-sm text-left text-gray-500 dark:text-gray-400 rounded-lg mt-5">
-      <thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-stone-800 dark:text-gray-400">
+    <table className="md:w-3/4 w-full text-sm text-left rounded-lg mt-5">
+      <thead className="text-white text-opacity-80 text-sm font-bold uppercase border-white border-b border-opacity-60">
         <tr>
           <th scope="col" className="px-6 py-3 rounded-tl-lg">
             Name
@@ -94,7 +96,7 @@ function WorkspacesContainer() {
             Created On
           </th>
           <th scope="col" className="px-6 py-3 rounded-tr-lg">
-            Actions
+            {" "}
           </th>
         </tr>
       </thead>
diff --git a/frontend/src/pages/Admin/ApiKeys/ApiKeyRow/index.jsx b/frontend/src/pages/GeneralSettings/ApiKeys/ApiKeyRow/index.jsx
similarity index 64%
rename from frontend/src/pages/Admin/ApiKeys/ApiKeyRow/index.jsx
rename to frontend/src/pages/GeneralSettings/ApiKeys/ApiKeyRow/index.jsx
index b6645f3bd..29657f3f3 100644
--- a/frontend/src/pages/Admin/ApiKeys/ApiKeyRow/index.jsx
+++ b/frontend/src/pages/GeneralSettings/ApiKeys/ApiKeyRow/index.jsx
@@ -1,6 +1,9 @@
 import { useEffect, useRef, useState } from "react";
 import Admin from "../../../../models/admin";
 import showToast from "../../../../utils/toast";
+import { Trash } from "@phosphor-icons/react";
+import { userFromStorage } from "../../../../utils/request";
+import System from "../../../../models/system";
 
 export default function ApiKeyRow({ apiKey }) {
   const rowRef = useRef(null);
@@ -15,9 +18,13 @@ export default function ApiKeyRow({ apiKey }) {
     if (rowRef?.current) {
       rowRef.current.remove();
     }
-    await Admin.deleteApiKey(apiKey.id);
+
+    const user = userFromStorage();
+    const Model = !!user ? Admin : System;
+    await Model.deleteApiKey(apiKey.id);
     showToast("API Key permanently deleted", "info");
   };
+
   const copyApiKey = () => {
     if (!apiKey) return false;
     window.navigator.clipboard.writeText(apiKey.secret);
@@ -37,30 +44,30 @@ export default function ApiKeyRow({ apiKey }) {
 
   return (
     <>
-      <tr ref={rowRef} className="bg-transparent">
-        <td
-          scope="row"
-          className="px-6 py-4 font-medium text-gray-900 whitespace-nowrap dark:text-white font-mono"
-        >
+      <tr
+        ref={rowRef}
+        className="bg-transparent text-white text-opacity-80 text-sm font-medium"
+      >
+        <td scope="row" className="px-6 py-4 whitespace-nowrap">
           {apiKey.secret}
         </td>
-        <td className="px-6 py-4">
-          {apiKey.createdBy?.username || "unknown user"}
+        <td className="px-6 py-4 text-center">
+          {apiKey.createdBy?.username || "--"}
         </td>
         <td className="px-6 py-4">{apiKey.createdAt}</td>
         <td className="px-6 py-4 flex items-center gap-x-6">
           <button
             onClick={copyApiKey}
             disabled={copied}
-            className="font-medium text-blue-600 dark:text-blue-300 px-2 py-1 rounded-lg hover:bg-blue-50 hover:dark:bg-blue-800 hover:dark:bg-opacity-20"
+            className="font-medium text-blue-300 rounded-lg hover:text-white hover:text-opacity-60 hover:underline"
           >
             {copied ? "Copied" : "Copy API Key"}
           </button>
           <button
             onClick={handleDelete}
-            className="font-medium text-red-600 dark:text-red-300 px-2 py-1 rounded-lg hover:bg-red-50 hover:dark:bg-red-800 hover:dark:bg-opacity-20"
+            className="font-medium text-red-300 px-2 py-1 rounded-lg hover:bg-red-800 hover:bg-opacity-20"
           >
-            Deactivate API Key
+            <Trash className="h-5 w-5" />
           </button>
         </td>
       </tr>
diff --git a/frontend/src/pages/Admin/ApiKeys/NewApiKeyModal/index.jsx b/frontend/src/pages/GeneralSettings/ApiKeys/NewApiKeyModal/index.jsx
similarity index 64%
rename from frontend/src/pages/Admin/ApiKeys/NewApiKeyModal/index.jsx
rename to frontend/src/pages/GeneralSettings/ApiKeys/NewApiKeyModal/index.jsx
index ae59eff71..7e131f683 100644
--- a/frontend/src/pages/Admin/ApiKeys/NewApiKeyModal/index.jsx
+++ b/frontend/src/pages/GeneralSettings/ApiKeys/NewApiKeyModal/index.jsx
@@ -2,6 +2,9 @@ import React, { useEffect, useState } from "react";
 import { X } from "react-feather";
 import Admin from "../../../../models/admin";
 import paths from "../../../../utils/paths";
+import { userFromStorage } from "../../../../utils/request";
+import System from "../../../../models/system";
+
 const DIALOG_ID = `new-api-key-modal`;
 
 function hideModal() {
@@ -17,7 +20,10 @@ export default function NewApiKeyModal() {
   const handleCreate = async (e) => {
     setError(null);
     e.preventDefault();
-    const { apiKey: newApiKey, error } = await Admin.generateApiKey();
+    const user = userFromStorage();
+    const Model = !!user ? Admin : System;
+
+    const { apiKey: newApiKey, error } = await Model.generateApiKey();
     if (!!newApiKey) setApiKey(newApiKey);
     setError(error);
   };
@@ -38,16 +44,16 @@ export default function NewApiKeyModal() {
 
   return (
     <dialog id={DIALOG_ID} className="bg-transparent outline-none">
-      <div className="relative w-full max-w-2xl max-h-full">
-        <div className="relative bg-white rounded-lg shadow dark:bg-stone-700">
-          <div className="flex items-start justify-between p-4 border-b rounded-t dark:border-gray-600">
-            <h3 className="text-xl font-semibold text-gray-900 dark:text-white">
+      <div className="relative w-[500px] max-w-2xl max-h-full">
+        <div className="relative bg-main-gradient rounded-lg shadow">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
               Create new API key
             </h3>
             <button
               onClick={hideModal}
               type="button"
-              className="text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white"
+              className="transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
               data-modal-hide="staticModal"
             >
               <X className="text-gray-300 text-lg" />
@@ -57,44 +63,42 @@ export default function NewApiKeyModal() {
             <div className="p-6 space-y-6 flex h-full w-full">
               <div className="w-full flex flex-col gap-y-4">
                 {error && (
-                  <p className="text-red-600 dark:text-red-400 text-sm">
-                    Error: {error}
-                  </p>
+                  <p className="text-red-400 text-sm">Error: {error}</p>
                 )}
                 {apiKey && (
                   <input
                     type="text"
                     defaultValue={`${apiKey.secret}`}
                     disabled={true}
-                    className="rounded-lg px-4 py-2 text-gray-800 bg-gray-100 dark:text-slate-200 dark:bg-stone-800"
+                    className="rounded-lg px-4 py-2 text-white bg-zinc-900 border border-gray-500/50"
                   />
                 )}
-                <p className="text-gray-800 dark:text-slate-200 text-xs md:text-sm">
+                <p className="text-white text-xs md:text-sm">
                   Once created the API key can be used to programmatically
                   access and configure this AnythingLLM instance.
                 </p>
                 <a
                   href={paths.apiDocs()}
                   target="_blank"
-                  className="text-blue-600 dark:text-blue-300 hover:underline"
+                  className="text-blue-400 hover:underline"
                 >
                   Read the API documentation &rarr;
                 </a>
               </div>
             </div>
-            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
+            <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
               {!apiKey ? (
                 <>
                   <button
                     onClick={hideModal}
                     type="button"
-                    className="text-gray-800 hover:bg-gray-100 px-4 py-1 rounded-lg dark:text-slate-200 dark:hover:bg-stone-900"
+                    className="px-4 py-2 rounded-lg text-white hover:bg-stone-900 transition-all duration-300"
                   >
                     Cancel
                   </button>
                   <button
                     type="submit"
-                    className="text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-black dark:text-slate-200 dark:border-transparent dark:hover:text-slate-200 dark:hover:bg-gray-900 dark:focus:ring-gray-800"
+                    className="transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800"
                   >
                     Create API key
                   </button>
@@ -104,7 +108,7 @@ export default function NewApiKeyModal() {
                   onClick={copyApiKey}
                   type="button"
                   disabled={copied}
-                  className="w-full disabled:bg-green-200 disabled:text-green-600 text-gray-800 bg-gray-100 px-4 py-2 rounded-lg dark:text-slate-200 dark:bg-stone-900"
+                  className="w-full transition-all duration-300 border border-slate-200 px-4 py-2 rounded-lg text-white text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800 focus:ring-gray-800 text-center justify-center"
                 >
                   {copied ? "Copied API key" : "Copy API key"}
                 </button>
diff --git a/frontend/src/pages/Admin/ApiKeys/index.jsx b/frontend/src/pages/GeneralSettings/ApiKeys/index.jsx
similarity index 62%
rename from frontend/src/pages/Admin/ApiKeys/index.jsx
rename to frontend/src/pages/GeneralSettings/ApiKeys/index.jsx
index f685b6c68..769d0730f 100644
--- a/frontend/src/pages/Admin/ApiKeys/index.jsx
+++ b/frontend/src/pages/GeneralSettings/ApiKeys/index.jsx
@@ -1,47 +1,48 @@
 import { useEffect, useState } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import * as Skeleton from "react-loading-skeleton";
 import "react-loading-skeleton/dist/skeleton.css";
 import { PlusCircle } from "react-feather";
-import usePrefersDarkMode from "../../../hooks/usePrefersDarkMode";
 import Admin from "../../../models/admin";
 import ApiKeyRow from "./ApiKeyRow";
 import NewApiKeyModal, { NewApiKeyModalId } from "./NewApiKeyModal";
 import paths from "../../../utils/paths";
+import { userFromStorage } from "../../../utils/request";
+import System from "../../../models/system";
 
 export default function AdminApiKeys() {
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="flex flex-col w-full px-1 md:px-8">
-          <div className="w-full flex flex-col gap-y-1">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
             <div className="items-center flex gap-x-4">
-              <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
-                API Keys
-              </p>
+              <p className="text-2xl font-semibold text-white">API Keys</p>
               <button
                 onClick={() =>
                   document?.getElementById(NewApiKeyModalId)?.showModal()
                 }
-                className="border border-slate-800 dark:border-slate-200 px-4 py-1 rounded-lg text-slate-800 dark:text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-800 hover:text-slate-100 dark:hover:bg-slate-200 dark:hover:text-slate-800"
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
               >
                 <PlusCircle className="h-4 w-4" /> Generate New API Key
               </button>
             </div>
-            <p className="text-sm font-base text-slate-600 dark:text-slate-200">
+            <p className="text-sm font-base text-white text-opacity-60">
               API keys allow the holder to programmatically access and manage
               this AnythingLLM instance.
             </p>
             <a
               href={paths.apiDocs()}
               target="_blank"
-              className="text-blue-600 dark:text-blue-300 hover:underline"
+              className="text-sm font-base text-blue-300 hover:underline"
             >
               Read the API documentation &rarr;
             </a>
@@ -55,12 +56,14 @@ export default function AdminApiKeys() {
 }
 
 function ApiKeysContainer() {
-  const darkMode = usePrefersDarkMode();
   const [loading, setLoading] = useState(true);
   const [apiKeys, setApiKeys] = useState([]);
   useEffect(() => {
     async function fetchExistingKeys() {
-      const { apiKeys: foundKeys } = await Admin.getApiKeys();
+      const user = userFromStorage();
+      const Model = !!user ? Admin : System;
+
+      const { apiKeys: foundKeys } = await Model.getApiKeys();
       setApiKeys(foundKeys);
       setLoading(false);
     }
@@ -72,8 +75,8 @@ function ApiKeysContainer() {
       <Skeleton.default
         height="80vh"
         width="100%"
-        baseColor={darkMode ? "#2a3a53" : null}
-        highlightColor={darkMode ? "#395073" : null}
+        highlightColor="#3D4147"
+        baseColor="#2C2F35"
         count={1}
         className="w-full p-4 rounded-b-2xl rounded-tr-2xl rounded-tl-sm mt-6"
         containerClassName="flex w-full"
@@ -82,10 +85,10 @@ function ApiKeysContainer() {
   }
 
   return (
-    <table className="md:w-3/4 w-full text-sm text-left text-gray-500 dark:text-gray-400 rounded-lg mt-5">
-      <thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-stone-800 dark:text-gray-400">
+    <table className="md:w-3/4 w-full text-sm text-left rounded-lg mt-5">
+      <thead className="text-white text-opacity-80 text-sm font-bold uppercase border-white border-b border-opacity-60">
         <tr>
-          <th scope="col" className="px-6 py-3">
+          <th scope="col" className="px-6 py-3 rounded-tl-lg">
             API Key
           </th>
           <th scope="col" className="px-6 py-3">
@@ -95,7 +98,7 @@ function ApiKeysContainer() {
             Created
           </th>
           <th scope="col" className="px-6 py-3 rounded-tr-lg">
-            Actions
+            {" "}
           </th>
         </tr>
       </thead>
diff --git a/frontend/src/pages/Admin/Appearance/index.jsx b/frontend/src/pages/GeneralSettings/Appearance/index.jsx
similarity index 54%
rename from frontend/src/pages/Admin/Appearance/index.jsx
rename to frontend/src/pages/GeneralSettings/Appearance/index.jsx
index 08e61f67c..6964c128c 100644
--- a/frontend/src/pages/Admin/Appearance/index.jsx
+++ b/frontend/src/pages/GeneralSettings/Appearance/index.jsx
@@ -1,27 +1,30 @@
 import React, { useState, useEffect } from "react";
-import Sidebar, { SidebarMobileHeader } from "../../../components/AdminSidebar";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
 import { isMobile } from "react-device-detect";
 import Admin from "../../../models/admin";
-import AnythingLLMLight from "../../../media/logo/anything-llm-light.png";
-import AnythingLLMDark from "../../../media/logo/anything-llm-dark.png";
-import usePrefersDarkMode from "../../../hooks/usePrefersDarkMode";
+import AnythingLLM from "../../../media/logo/anything-llm.png";
 import useLogo from "../../../hooks/useLogo";
 import System from "../../../models/system";
 import EditingChatBubble from "../../../components/EditingChatBubble";
 import showToast from "../../../utils/toast";
+import { Plus } from "@phosphor-icons/react";
 
 export default function Appearance() {
   const { logo: _initLogo } = useLogo();
   const [logo, setLogo] = useState("");
-  const prefersDarkMode = usePrefersDarkMode();
   const [hasChanges, setHasChanges] = useState(false);
   const [messages, setMessages] = useState([]);
+  const [isDefaultLogo, setIsDefaultLogo] = useState(true);
 
   useEffect(() => {
-    async function setInitLogo() {
+    async function logoInit() {
       setLogo(_initLogo || "");
+      const _isDefaultLogo = await System.isDefaultLogo();
+      setIsDefaultLogo(_isDefaultLogo);
     }
-    setInitLogo();
+    logoInit();
   }, [_initLogo]);
 
   useEffect(() => {
@@ -36,29 +39,36 @@ export default function Appearance() {
     const file = event.target.files[0];
     if (!file) return false;
 
+    const objectURL = URL.createObjectURL(file);
+    setLogo(objectURL);
+
     const formData = new FormData();
     formData.append("logo", file);
-    const { success, error } = await Admin.uploadLogo(formData);
+    const { success, error } = await System.uploadLogo(formData);
     if (!success) {
       showToast(`Failed to upload logo: ${error}`, "error");
+      setLogo(_initLogo);
       return;
     }
 
-    const logoURL = await System.fetchLogo();
-    setLogo(logoURL);
     showToast("Image uploaded successfully.", "success");
+    setIsDefaultLogo(false);
   };
 
   const handleRemoveLogo = async () => {
-    const { success, error } = await Admin.removeCustomLogo();
+    setLogo("");
+    setIsDefaultLogo(true);
+
+    const { success, error } = await System.removeCustomLogo();
     if (!success) {
       console.error("Failed to remove logo:", error);
       showToast(`Failed to remove logo: ${error}`, "error");
+      const logoURL = await System.fetchLogo();
+      setLogo(logoURL);
+      setIsDefaultLogo(false);
       return;
     }
 
-    const logoURL = await System.fetchLogo();
-    setLogo(logoURL);
     showToast("Image successfully removed.", "success");
   };
 
@@ -89,7 +99,7 @@ export default function Appearance() {
   };
 
   const handleMessageSave = async () => {
-    const { success, error } = await Admin.setWelcomeMessages(messages);
+    const { success, error } = await System.setWelcomeMessages(messages);
     if (!success) {
       showToast(`Failed to update welcome messages: ${error}`, "error");
       return;
@@ -99,29 +109,31 @@ export default function Appearance() {
   };
 
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <div
         style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
-        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-white dark:bg-black-900 md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
       >
         {isMobile && <SidebarMobileHeader />}
-        <div className="px-1 md:px-8">
-          <div className="mb-6">
-            <p className="text-3xl font-semibold text-slate-600 dark:text-slate-200">
-              Appearance Settings
-            </p>
-            <p className="mt-2 text-sm font-base text-slate-600 dark:text-slate-200">
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+            <div className="items-center flex gap-x-4">
+              <p className="text-2xl font-semibold text-white">
+                Appearance Settings
+              </p>
+            </div>
+            <p className="text-sm font-base text-white text-opacity-60">
               Customize the appearance settings of your platform.
             </p>
           </div>
-          <div className="mb-6">
+          <div className="my-6">
             <div className="flex flex-col gap-y-2">
-              <h2 className="leading-tight font-medium text-black dark:text-white">
+              <h2 className="leading-tight font-medium text-white">
                 Custom Logo
               </h2>
-              <p className="leading-tight text-sm text-gray-500 dark:text-slate-400">
-                Change the logo that appears in the sidebar.
+              <p className="text-sm font-base text-white/60">
+                Upload your custom logo to make your chatbot yours.
               </p>
             </div>
             <div className="flex md:flex-row flex-col items-center">
@@ -129,33 +141,44 @@ export default function Appearance() {
                 src={logo}
                 alt="Uploaded Logo"
                 className="w-48 h-48 object-contain mr-6"
-                onError={(e) =>
-                  (e.target.src = prefersDarkMode
-                    ? AnythingLLMLight
-                    : AnythingLLMDark)
-                }
+                hidden={isDefaultLogo}
+                onError={(e) => (e.target.src = AnythingLLM)}
               />
-              <div className="flex flex-col">
-                <div className="mb-4">
-                  <label className="cursor-pointer text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600">
-                    Upload Image
-                    <input
-                      type="file"
-                      accept="image/*"
-                      className="hidden"
-                      onChange={handleFileUpload}
-                    />
-                  </label>
-                  <button
-                    onClick={handleRemoveLogo}
-                    className="ml-4 cursor-pointer text-gray-500 bg-white hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-blue-300 rounded-lg border border-gray-200 text-sm font-medium px-5 py-2.5 hover:text-gray-900 focus:z-10 dark:bg-gray-700 dark:text-gray-300 dark:border-gray-500 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-600"
+              <div className="flex flex-row gap-x-8">
+                <label
+                  className="mt-5 transition-all duration-300 hover:opacity-60"
+                  hidden={!isDefaultLogo}
+                >
+                  <input
+                    id="logo-upload"
+                    type="file"
+                    accept="image/*"
+                    className="hidden"
+                    onChange={handleFileUpload}
+                  />
+                  <div
+                    className="w-80 py-4 bg-zinc-900/50 rounded-2xl border-2 border-dashed border-white border-opacity-60 justify-center items-center inline-flex cursor-pointer"
+                    htmlFor="logo-upload"
                   >
-                    Remove Custom Logo
-                  </button>
-                </div>
-                <div className="text-sm text-gray-600 dark:text-gray-300">
-                  Upload your logo. Recommended size: 800x200.
-                </div>
+                    <div className="flex flex-col items-center justify-center">
+                      <div className="rounded-full bg-white/40">
+                        <Plus className="w-6 h-6 text-black/80 m-2" />
+                      </div>
+                      <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+                        Add a custom logo
+                      </div>
+                      <div className="text-white text-opacity-60 text-xs font-medium py-1">
+                        Recommended size: 800 x 200
+                      </div>
+                    </div>
+                  </div>
+                </label>
+                <button
+                  onClick={handleRemoveLogo}
+                  className="text-white text-base font-medium hover:text-opacity-60"
+                >
+                  Delete
+                </button>
               </div>
             </div>
           </div>
@@ -164,11 +187,11 @@ export default function Appearance() {
               <h2 className="leading-tight font-medium text-black dark:text-white">
                 Custom Messages
               </h2>
-              <p className="leading-tight text-sm text-gray-500 dark:text-slate-400">
-                Change the default messages that are displayed to the users.
+              <p className="text-sm font-base text-white/60">
+                Customize the automatic messages displayed to your users.
               </p>
             </div>
-            <div className="mt-6 flex flex-col gap-y-6">
+            <div className="mt-6 flex flex-col gap-y-6 bg-zinc-900 rounded-lg px-6 pt-4 max-w-[700px]">
               {messages.map((message, index) => (
                 <div key={index} className="flex flex-col gap-y-2">
                   {message.user && (
@@ -191,18 +214,24 @@ export default function Appearance() {
                   )}
                 </div>
               ))}
-              <div className="flex gap-4 mt-4 justify-between">
+              <div className="flex gap-4 mt-12 justify-between pb-7">
                 <button
-                  className="self-end text-orange-500 hover:text-orange-700 transition"
+                  className="self-end text-white hover:text-white/60 transition"
                   onClick={() => addMessage("response")}
                 >
-                  + System Message
+                  <div className="flex items-center justify-start">
+                    <Plus className="w-5 h-5 m-2" weight="fill" /> New System
+                    Message
+                  </div>
                 </button>
                 <button
-                  className="self-end text-orange-500 hover:text-orange-700 transition"
+                  className="self-end text-sky-400 hover:text-sky-400/60 transition"
                   onClick={() => addMessage("user")}
                 >
-                  + User Message
+                  <div className="flex items-center">
+                    <Plus className="w-5 h-5 m-2" weight="fill" /> New User
+                    Message
+                  </div>
                 </button>
               </div>
             </div>
diff --git a/frontend/src/pages/GeneralSettings/ExportImport/index.jsx b/frontend/src/pages/GeneralSettings/ExportImport/index.jsx
new file mode 100644
index 000000000..74c83ff61
--- /dev/null
+++ b/frontend/src/pages/GeneralSettings/ExportImport/index.jsx
@@ -0,0 +1,190 @@
+import { useEffect, useRef, useState } from "react";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
+import { isMobile } from "react-device-detect";
+import Admin from "../../../models/admin";
+import showToast from "../../../utils/toast";
+import { CloudArrowUp, DownloadSimple } from "@phosphor-icons/react";
+import System from "../../../models/system";
+import { API_BASE } from "../../../utils/constants";
+
+export default function GeneralExportImport() {
+  return (
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
+      {!isMobile && <Sidebar />}
+      <div
+        style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+      >
+        {isMobile && <SidebarMobileHeader />}
+        <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+          <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+            <div className="items-center flex gap-x-4">
+              <p className="text-2xl font-semibold text-white">
+                Export or Import
+              </p>
+            </div>
+            <p className="text-sm font-base text-white text-opacity-60">
+              Have multiple AnythingLLM instances or simply want to backup or
+              re-import data from another instance? You can do so here.
+            </p>
+          </div>
+          <div className="text-white text-sm font-medium py-4">
+            This will not automatically sync your vector database embeddings.
+          </div>
+          <ImportData />
+          <ExportData />
+        </div>
+      </div>
+    </div>
+  );
+}
+
+function ImportData() {
+  const inputRef = useRef(null);
+  const [loading, setLoading] = useState(false);
+  const [file, setFile] = useState(null);
+  const [result, setResult] = useState(null);
+
+  const startInput = () => inputRef?.current?.click();
+
+  const handleUpload = async (e) => {
+    setLoading(true);
+    e.preventDefault();
+    setFile(null);
+    setResult(null);
+
+    const file = e.target.files?.[0];
+    if (!file) {
+      showToast("Invalid file upload", "error");
+      return false;
+    }
+
+    setFile(file);
+    setLoading(true);
+    const formData = new FormData();
+    formData.append("file", file, file.name);
+    const { success, error } = await System.importData(formData);
+    if (!success) {
+      showToast(`Failed to import data: ${error}`, "error");
+    } else {
+      setResult(true);
+      showToast(`Successfully imported ${file.name}`, "success");
+    }
+
+    setLoading(false);
+    setFile(null);
+  };
+
+  return (
+    <div
+      onClick={startInput}
+      className="max-w-[600px] py-4 bg-zinc-900/50 rounded-2xl border-2 border-dashed border-white border-opacity-60 justify-center items-center inline-flex transition-all duration-300 hover:opacity-60 cursor-pointer"
+    >
+      <div className="flex flex-col items-center justify-center">
+        {loading ? (
+          <div className="flex items-center justify-center gap-2 animate-pulse">
+            <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+              Importing
+            </div>
+            <div className="h-4 w-4 animate-spin rounded-full border-2 border-solid border-white border-t-transparent " />
+          </div>
+        ) : !!result ? (
+          <div className="flex items-center justify-center gap-2">
+            <CloudArrowUp className="w-8 h-8 text-green-400" />
+            <div className="text-green-400 text-opacity-80 text-sm font-semibold py-1">
+              Import Successful
+            </div>
+          </div>
+        ) : (
+          <>
+            <input
+              ref={inputRef}
+              onChange={handleUpload}
+              name="import"
+              type="file"
+              multiple="false"
+              accept=".zip"
+              hidden={true}
+            />
+            <div className="flex flex-col items-center justify-center">
+              <CloudArrowUp className="w-8 h-8 text-white/80" />
+              <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+                Import AnythingLLM Data
+              </div>
+              <div className="text-white text-opacity-60 text-xs font-medium py-1">
+                This must be an export from an AnythingLLM instance.
+              </div>
+            </div>
+          </>
+        )}
+      </div>
+    </div>
+  );
+}
+
+function ExportData() {
+  const [loading, setLoading] = useState(false);
+  const [result, setResult] = useState(null);
+
+  const exportData = async function () {
+    setLoading(true);
+    const { filename, error } = await System.dataExport();
+    setLoading(false);
+
+    if (!filename) {
+      showToast(`Failed to export data: ${error}`, "error");
+    } else {
+      setResult(filename);
+      const link = document.createElement("a");
+      link.href = `${API_BASE}/system/data-exports/${filename}`;
+      link.target = "_blank";
+      document.body.appendChild(link);
+    }
+  };
+
+  if (loading) {
+    return (
+      <button
+        onClick={exportData}
+        className="transition-all max-w-[600px] bg-white rounded-lg justify-center items-center my-8 text-zinc-900 border-transparent border-2 cursor-not-allowed animate-pulse"
+      >
+        <div className="flex items-center justify-center gap-2">
+          <div className="duration-300 text-center text-sm font-bold py-3">
+            Exporting
+          </div>
+          <div className="h-4 w-4 animate-spin rounded-full border-2 border-solid border-zinc-900 border-t-transparent " />
+        </div>
+      </button>
+    );
+  }
+
+  if (!!result) {
+    return (
+      <a
+        target="_blank"
+        href={`${API_BASE}/system/data-exports/${result}`}
+        className="transition-all max-w-[600px] bg-green-100 hover:bg-zinc-900/50 hover:text-white hover:border-white rounded-lg justify-center items-center my-8 text-zinc-900 border-transparent border-2 cursor-pointer"
+      >
+        <div className="flex items-center justify-center gap-2">
+          <div className="duration-300 text-center text-sm font-bold py-3">
+            Download Data Export
+          </div>
+          <DownloadSimple className="w-6 h-6" />
+        </div>
+      </a>
+    );
+  }
+
+  return (
+    <button
+      onClick={exportData}
+      className="transition-all max-w-[600px] bg-white rounded-lg justify-center items-center my-8 cursor-pointer text-zinc-900 border-transparent border-2 hover:bg-zinc-900/50 hover:text-white hover:border-white"
+    >
+      <div className="duration-300 text-center text-sm font-bold py-3">
+        Export AnythingLLM Data
+      </div>
+    </button>
+  );
+}
diff --git a/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
new file mode 100644
index 000000000..645d5bb8f
--- /dev/null
+++ b/frontend/src/pages/GeneralSettings/LLMPreference/index.jsx
@@ -0,0 +1,256 @@
+import React, { useEffect, useState } from "react";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
+import { isMobile } from "react-device-detect";
+import System from "../../../models/system";
+import showToast from "../../../utils/toast";
+import OpenAiLogo from "../../../media/llmprovider/openai.png";
+import AzureOpenAiLogo from "../../../media/llmprovider/azure.png";
+import AnthropicLogo from "../../../media/llmprovider/anthropic.png";
+import PreLoader from "../../../components/Preloader";
+import LLMProviderOption from "../../../components/LLMProviderOption";
+
+export default function GeneralLLMPreference() {
+  const [saving, setSaving] = useState(false);
+  const [hasChanges, setHasChanges] = useState(false);
+  const [llmChoice, setLLMChoice] = useState("openai");
+  const [settings, setSettings] = useState(null);
+  const [loading, setLoading] = useState(true);
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    setSaving(true);
+    const data = {};
+    const form = new FormData(e.target);
+    for (var [key, value] of form.entries()) data[key] = value;
+    const { error } = await System.updateSystem(data);
+    if (error) {
+      showToast(`Failed to save LLM settings: ${error}`, "error");
+    } else {
+      showToast("LLM preferences saved successfully.", "success");
+    }
+    setSaving(false);
+    setHasChanges(!!error ? true : false);
+  };
+
+  const updateLLMChoice = (selection) => {
+    setLLMChoice(selection);
+    setHasChanges(true);
+  };
+
+  useEffect(() => {
+    async function fetchKeys() {
+      const _settings = await System.keys();
+      setSettings(_settings);
+      setLLMChoice(_settings?.LLMProvider);
+      setLoading(false);
+    }
+    fetchKeys();
+  }, []);
+
+  return (
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
+      {!isMobile && <Sidebar />}
+      {loading ? (
+        <div
+          style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+          className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll animate-pulse"
+        >
+          <div className="w-full h-full flex justify-center items-center">
+            <PreLoader />
+          </div>
+        </div>
+      ) : (
+        <div
+          style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+          className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        >
+          {isMobile && <SidebarMobileHeader />}
+          <form
+            onSubmit={handleSubmit}
+            onChange={() => setHasChanges(true)}
+            className="flex w-full"
+          >
+            <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+              <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+                <div className="items-center flex gap-x-4">
+                  <p className="text-2xl font-semibold text-white">
+                    LLM Preference
+                  </p>
+                  {hasChanges && (
+                    <button
+                      type="submit"
+                      disabled={saving}
+                      className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
+                    >
+                      {saving ? "Saving..." : "Save changes"}
+                    </button>
+                  )}
+                </div>
+                <p className="text-sm font-base text-white text-opacity-60">
+                  These are the credentials and settings for your preferred LLM
+                  chat & embedding provider. Its important these keys are
+                  current and correct or else AnythingLLM will not function
+                  properly.
+                </p>
+              </div>
+              <div className="text-white text-sm font-medium py-4">
+                LLM Providers
+              </div>
+              <div className="w-full flex md:flex-wrap overflow-x-scroll gap-4 max-w-[900px]">
+                <input hidden={true} name="LLMProvider" value={llmChoice} />
+                <LLMProviderOption
+                  name="OpenAI"
+                  value="openai"
+                  link="openai.com"
+                  description="The standard option for most non-commercial use. Provides both chat and embedding."
+                  checked={llmChoice === "openai"}
+                  image={OpenAiLogo}
+                  onClick={updateLLMChoice}
+                />
+                <LLMProviderOption
+                  name="Azure OpenAI"
+                  value="azure"
+                  link="azure.microsoft.com"
+                  description="The enterprise option of OpenAI hosted on Azure services. Provides both chat and embedding."
+                  checked={llmChoice === "azure"}
+                  image={AzureOpenAiLogo}
+                  onClick={updateLLMChoice}
+                />
+                <LLMProviderOption
+                  name="Anthropic Claude 2"
+                  value="anthropic-claude-2"
+                  link="anthropic.com"
+                  description="[COMING SOON] A friendly AI Assistant hosted by Anthropic. Provides chat services only!"
+                  checked={llmChoice === "anthropic-claude-2"}
+                  image={AnthropicLogo}
+                />
+              </div>
+              <div className="mt-10 flex flex-wrap gap-4 max-w-[800px]">
+                {llmChoice === "openai" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Key
+                      </label>
+                      <input
+                        type="text"
+                        name="OpenAiKey"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="OpenAI API Key"
+                        defaultValue={settings?.OpenAiKey ? "*".repeat(20) : ""}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Chat Model Selection
+                      </label>
+                      <select
+                        name="OpenAiModelPref"
+                        defaultValue={settings?.OpenAiModelPref}
+                        required={true}
+                        className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
+                      >
+                        {["gpt-3.5-turbo", "gpt-4"].map((model) => {
+                          return (
+                            <option key={model} value={model}>
+                              {model}
+                            </option>
+                          );
+                        })}
+                      </select>
+                    </div>
+                  </>
+                )}
+
+                {llmChoice === "azure" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Azure Service Endpoint
+                      </label>
+                      <input
+                        type="url"
+                        name="AzureOpenAiEndpoint"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="https://my-azure.openai.azure.com"
+                        defaultValue={settings?.AzureOpenAiEndpoint}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Key
+                      </label>
+                      <input
+                        type="password"
+                        name="AzureOpenAiKey"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="Azure OpenAI API Key"
+                        defaultValue={
+                          settings?.AzureOpenAiKey ? "*".repeat(20) : ""
+                        }
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Chat Model Deployment Name
+                      </label>
+                      <input
+                        type="text"
+                        name="AzureOpenAiModelPref"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="Azure OpenAI chat model deployment name"
+                        defaultValue={settings?.AzureOpenAiModelPref}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Embedding Model Deployment Name
+                      </label>
+                      <input
+                        type="text"
+                        name="AzureOpenAiEmbeddingModelPref"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="Azure OpenAI embedding model deployment name"
+                        defaultValue={settings?.AzureOpenAiEmbeddingModelPref}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+                  </>
+                )}
+
+                {llmChoice === "anthropic-claude-2" && (
+                  <div className="w-full h-40 items-center justify-center flex">
+                    <p className="text-gray-800 dark:text-slate-400">
+                      This provider is unavailable and cannot be used in
+                      AnythingLLM currently.
+                    </p>
+                  </div>
+                )}
+              </div>
+            </div>
+          </form>
+        </div>
+      )}
+    </div>
+  );
+}
diff --git a/frontend/src/pages/GeneralSettings/Security/index.jsx b/frontend/src/pages/GeneralSettings/Security/index.jsx
new file mode 100644
index 000000000..f0ecaf7ef
--- /dev/null
+++ b/frontend/src/pages/GeneralSettings/Security/index.jsx
@@ -0,0 +1,337 @@
+import { useEffect, useState } from "react";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
+import { isMobile } from "react-device-detect";
+import showToast from "../../../utils/toast";
+import System from "../../../models/system";
+import paths from "../../../utils/paths";
+import {
+  AUTH_TIMESTAMP,
+  AUTH_TOKEN,
+  AUTH_USER,
+} from "../../../utils/constants";
+import PreLoader from "../../../components/Preloader";
+
+export default function GeneralSecurity() {
+  return (
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
+      {!isMobile && <Sidebar />}
+      <div
+        style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+        className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+      >
+        {isMobile && <SidebarMobileHeader />}
+        <MultiUserMode />
+        <PasswordProtection />
+      </div>
+    </div>
+  );
+}
+
+function MultiUserMode() {
+  const [saving, setSaving] = useState(false);
+  const [hasChanges, setHasChanges] = useState(false);
+  const [useMultiUserMode, setUseMultiUserMode] = useState(false);
+  const [multiUserModeEnabled, setMultiUserModeEnabled] = useState(false);
+  const [loading, setLoading] = useState(true);
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    setSaving(true);
+
+    if (useMultiUserMode) {
+      const form = new FormData(e.target);
+      const data = {
+        username: form.get("username"),
+        password: form.get("password"),
+      };
+
+      const { success, error } = await System.setupMultiUser(data);
+      if (success) {
+        showToast("Multi-User mode enabled successfully.", "success");
+        setSaving(false);
+        setTimeout(() => {
+          window.localStorage.removeItem(AUTH_USER);
+          window.localStorage.removeItem(AUTH_TOKEN);
+          window.localStorage.removeItem(AUTH_TIMESTAMP);
+          window.location = paths.admin.users();
+        }, 2_000);
+        return;
+      }
+
+      showToast(`Failed to enable Multi-User mode: ${error}`, "error");
+      setSaving(false);
+      return;
+    }
+  };
+
+  useEffect(() => {
+    async function fetchIsMultiUserMode() {
+      setLoading(true);
+      const multiUserModeEnabled = await System.isMultiUserMode();
+      setMultiUserModeEnabled(multiUserModeEnabled);
+      setLoading(false);
+    }
+    fetchIsMultiUserMode();
+  }, []);
+
+  if (loading) {
+    return (
+      <div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] md:min-w-[82%] p-[18px] h-full overflow-y-scroll">
+        <div className="w-full h-full flex justify-center items-center">
+          <PreLoader />
+        </div>
+      </div>
+    );
+  }
+
+  return (
+    <form
+      onSubmit={handleSubmit}
+      onChange={() => setHasChanges(true)}
+      className="flex w-full"
+    >
+      <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+        <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+          <div className="items-center flex gap-x-4">
+            <p className="text-2xl font-semibold text-white">Multi-User Mode</p>
+            {hasChanges && (
+              <button
+                type="submit"
+                disabled={saving}
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
+              >
+                {saving ? "Saving..." : "Save changes"}
+              </button>
+            )}
+          </div>
+          <p className="text-sm font-base text-white text-opacity-60">
+            Set up your instance to support your team by activating Multi-User
+            Mode.
+          </p>
+        </div>
+        <div className="relative w-full max-h-full">
+          <div className="relative rounded-lg">
+            <div className="flex items-start justify-between px-6 py-4"></div>
+            <div className="space-y-6 flex h-full w-full">
+              <div className="w-full flex flex-col gap-y-4">
+                <div className="">
+                  <label className="mb-2.5 block font-medium text-white">
+                    {multiUserModeEnabled
+                      ? "Multi-User Mode is Enabled"
+                      : "Enable Multi-User Mode"}
+                  </label>
+
+                  <label className="relative inline-flex cursor-pointer items-center">
+                    <input
+                      type="checkbox"
+                      onClick={() => setUseMultiUserMode(!useMultiUserMode)}
+                      checked={useMultiUserMode}
+                      className="peer sr-only pointer-events-none"
+                    />
+                    <div
+                      hidden={multiUserModeEnabled}
+                      className="pointer-events-none peer h-6 w-11 rounded-full bg-stone-400 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border after:border-gray-600 after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-lime-300 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-800"
+                    ></div>
+                  </label>
+                </div>
+                {useMultiUserMode && (
+                  <div className="w-full flex flex-col gap-y-2 my-5">
+                    <div className="w-80">
+                      <label
+                        htmlFor="username"
+                        className="block mb-3 font-medium text-white"
+                      >
+                        Admin account username
+                      </label>
+                      <input
+                        name="username"
+                        type="text"
+                        className="bg-zinc-900 text-white text-sm rounded-lg focus:border-blue-500 block w-full p-2.5 placeholder-white placeholder-opacity-60 focus:ring-blue-500"
+                        placeholder="Your admin username"
+                        minLength={2}
+                        required={true}
+                        autoComplete="off"
+                        disabled={multiUserModeEnabled}
+                        defaultValue={multiUserModeEnabled ? "********" : ""}
+                      />
+                    </div>
+                    <div className="mt-4 w-80">
+                      <label
+                        htmlFor="password"
+                        className="block mb-3 font-medium text-white"
+                      >
+                        Admin account password
+                      </label>
+                      <input
+                        name="password"
+                        type="text"
+                        className="bg-zinc-900 text-white text-sm rounded-lg focus:border-blue-500 block w-full p-2.5 placeholder-white placeholder-opacity-60 focus:ring-blue-500"
+                        placeholder="Your admin password"
+                        minLength={8}
+                        required={true}
+                        autoComplete="off"
+                        defaultValue={multiUserModeEnabled ? "********" : ""}
+                      />
+                    </div>
+                  </div>
+                )}
+              </div>
+            </div>
+            <div className="flex items-center justify-between space-x-14">
+              <p className="text-white/80 text-xs rounded-lg w-96">
+                By default, you will be the only admin. As an admin you will
+                need to create accounts for all new users or admins. Do not lose
+                your password as only an Admin user can reset passwords.
+              </p>
+            </div>
+          </div>
+        </div>
+      </div>
+    </form>
+  );
+}
+
+function PasswordProtection() {
+  const [saving, setSaving] = useState(false);
+  const [hasChanges, setHasChanges] = useState(false);
+  const [multiUserModeEnabled, setMultiUserModeEnabled] = useState(false);
+  const [usePassword, setUsePassword] = useState(false);
+  const [loading, setLoading] = useState(true);
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    if (multiUserModeEnabled) return false;
+
+    setSaving(true);
+    const form = new FormData(e.target);
+    const data = {
+      usePassword,
+      newPassword: form.get("password"),
+    };
+
+    const { success, error } = await System.updateSystemPassword(data);
+    if (success) {
+      showToast("Your page will refresh in a few seconds.", "success");
+      setSaving(false);
+      setTimeout(() => {
+        window.localStorage.removeItem(AUTH_USER);
+        window.localStorage.removeItem(AUTH_TOKEN);
+        window.localStorage.removeItem(AUTH_TIMESTAMP);
+        window.location.reload();
+      }, 3_000);
+      return;
+    } else {
+      showToast(`Failed to update password: ${error}`, "error");
+      setSaving(false);
+    }
+  };
+
+  useEffect(() => {
+    async function fetchIsMultiUserMode() {
+      setLoading(true);
+      const multiUserModeEnabled = await System.isMultiUserMode();
+      const settings = await System.keys();
+      setMultiUserModeEnabled(multiUserModeEnabled);
+      setUsePassword(settings?.RequiresAuth);
+      setLoading(false);
+    }
+    fetchIsMultiUserMode();
+  }, []);
+
+  if (loading) {
+    return (
+      <div className="h-1/2 transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] md:min-w-[82%] p-[18px] h-full overflow-y-scroll">
+        <div className="w-full h-full flex justify-center items-center">
+          <PreLoader />
+        </div>
+      </div>
+    );
+  }
+
+  if (multiUserModeEnabled) return null;
+  return (
+    <form
+      onSubmit={handleSubmit}
+      onChange={() => setHasChanges(true)}
+      className="flex w-full"
+    >
+      <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+        <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+          <div className="items-center flex gap-x-4">
+            <p className="text-2xl font-semibold text-white">
+              Password Protection
+            </p>
+            {hasChanges && (
+              <button
+                type="submit"
+                disabled={saving}
+                className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
+              >
+                {saving ? "Saving..." : "Save changes"}
+              </button>
+            )}
+          </div>
+          <p className="text-sm font-base text-white text-opacity-60">
+            Protect your AnythingLLM instance with a password. If you forget
+            this there is no recovery method so ensure you save this password.
+          </p>
+        </div>
+        <div className="relative w-full max-h-full">
+          <div className="relative rounded-lg">
+            <div className="flex items-start justify-between px-6 py-4"></div>
+            <div className="space-y-6 flex h-full w-full">
+              <div className="w-full flex flex-col gap-y-4">
+                <div className="">
+                  <label className="mb-2.5 block font-medium text-white">
+                    Password Protect Instance
+                  </label>
+
+                  <label className="relative inline-flex cursor-pointer items-center">
+                    <input
+                      type="checkbox"
+                      onClick={() => setUsePassword(!usePassword)}
+                      checked={usePassword}
+                      className="peer sr-only pointer-events-none"
+                    />
+                    <div className="pointer-events-none peer h-6 w-11 rounded-full bg-stone-400 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border after:border-gray-600 after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-lime-300 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-800"></div>
+                  </label>
+                </div>
+                {usePassword && (
+                  <div className="w-full flex flex-col gap-y-2 my-5">
+                    <div className="mt-4 w-80">
+                      <label
+                        htmlFor="password"
+                        className="block mb-3 font-medium text-white"
+                      >
+                        Instance password
+                      </label>
+                      <input
+                        name="password"
+                        type="text"
+                        className="bg-zinc-900 text-white text-sm rounded-lg focus:border-blue-500 block w-full p-2.5 placeholder-white placeholder-opacity-60 focus:ring-blue-500"
+                        placeholder="Your Instance Password"
+                        minLength={8}
+                        required={true}
+                        autoComplete="off"
+                        defaultValue={usePassword ? "********" : ""}
+                      />
+                    </div>
+                  </div>
+                )}
+              </div>
+            </div>
+            <div className="flex items-center justify-between space-x-14">
+              <p className="text-white/80 text-xs rounded-lg w-96">
+                By default, you will be the only admin. As an admin you will
+                need to create accounts for all new users or admins. Do not lose
+                your password as only an Admin user can reset passwords.
+              </p>
+            </div>
+          </div>
+        </div>
+      </div>
+    </form>
+  );
+}
diff --git a/frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx b/frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx
new file mode 100644
index 000000000..c7620a5ee
--- /dev/null
+++ b/frontend/src/pages/GeneralSettings/VectorDatabase/index.jsx
@@ -0,0 +1,339 @@
+import React, { useState, useEffect } from "react";
+import Sidebar, {
+  SidebarMobileHeader,
+} from "../../../components/SettingsSidebar";
+import { isMobile } from "react-device-detect";
+import System from "../../../models/system";
+import showToast from "../../../utils/toast";
+import ChromaLogo from "../../../media/vectordbs/chroma.png";
+import PineconeLogo from "../../../media/vectordbs/pinecone.png";
+import LanceDbLogo from "../../../media/vectordbs/lancedb.png";
+import WeaviateLogo from "../../../media/vectordbs/weaviate.png";
+import QDrantLogo from "../../../media/vectordbs/qdrant.png";
+import PreLoader from "../../../components/Preloader";
+import VectorDBOption from "../../../components/VectorDBOption";
+
+export default function GeneralVectorDatabase() {
+  const [saving, setSaving] = useState(false);
+  const [hasChanges, setHasChanges] = useState(false);
+  const [vectorDB, setVectorDB] = useState("lancedb");
+  const [settings, setSettings] = useState({});
+  const [loading, setLoading] = useState(true);
+
+  useEffect(() => {
+    async function fetchKeys() {
+      const _settings = await System.keys();
+      setSettings(_settings);
+      setVectorDB(_settings?.VectorDB || "lancedb");
+      setLoading(false);
+    }
+    fetchKeys();
+  }, []);
+
+  const updateVectorChoice = (selection) => {
+    setHasChanges(true);
+    setVectorDB(selection);
+  };
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    setSaving(true);
+    const data = {};
+    const form = new FormData(e.target);
+    for (var [key, value] of form.entries()) data[key] = value;
+    const { error } = await System.updateSystem(data);
+    if (error) {
+      showToast(`Failed to save settings: ${error}`, "error");
+    } else {
+      showToast("Settings saved successfully.", "success");
+    }
+    setSaving(false);
+    setHasChanges(!!error ? true : false);
+  };
+
+  return (
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
+      {!isMobile && <Sidebar />}
+      {loading ? (
+        <div
+          style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+          className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll animate-pulse"
+        >
+          <div className="w-full h-full flex justify-center items-center">
+            <PreLoader />
+          </div>
+        </div>
+      ) : (
+        <div
+          style={{ height: isMobile ? "100%" : "calc(100% - 32px)" }}
+          className="transition-all duration-500 relative md:ml-[2px] md:mr-[8px] md:my-[16px] md:rounded-[26px] bg-main-gradient md:min-w-[82%] p-[18px] h-full overflow-y-scroll"
+        >
+          {isMobile && <SidebarMobileHeader />}
+          <form
+            onSubmit={handleSubmit}
+            onChange={() => setHasChanges(true)}
+            className="flex w-full"
+          >
+            <div className="flex flex-col w-full px-1 md:px-20 md:py-12 py-16">
+              <div className="w-full flex flex-col gap-y-1 pb-6 border-white border-b-2 border-opacity-10">
+                <div className="items-center flex gap-x-4">
+                  <p className="text-2xl font-semibold text-white">
+                    Vector Database
+                  </p>
+                  {hasChanges && (
+                    <button
+                      type="submit"
+                      disabled={saving}
+                      className="border border-slate-200 px-4 py-1 rounded-lg text-slate-200 text-sm items-center flex gap-x-2 hover:bg-slate-200 hover:text-slate-800"
+                    >
+                      {saving ? "Saving..." : "Save changes"}
+                    </button>
+                  )}
+                </div>
+                <p className="text-sm font-base text-white text-opacity-60">
+                  These are the credentials and settings for how your
+                  AnythingLLM instance will function. It's important these keys
+                  are current and correct.
+                </p>
+              </div>
+              <div className="text-white text-sm font-medium py-4">
+                Select your preferred vector database provider
+              </div>
+              <div className="w-full flex md:flex-wrap overflow-x-scroll gap-4 max-w-[900px]">
+                <input hidden={true} name="VectorDB" value={vectorDB} />
+                <VectorDBOption
+                  name="Chroma"
+                  value="chroma"
+                  link="trychroma.com"
+                  description="Open source vector database you can host yourself or on the cloud."
+                  checked={vectorDB === "chroma"}
+                  image={ChromaLogo}
+                  onClick={updateVectorChoice}
+                />
+                <VectorDBOption
+                  name="Pinecone"
+                  value="pinecone"
+                  link="pinecone.io"
+                  description="100% cloud-based vector database for enterprise use cases."
+                  checked={vectorDB === "pinecone"}
+                  image={PineconeLogo}
+                  onClick={updateVectorChoice}
+                />
+                <VectorDBOption
+                  name="QDrant"
+                  value="qdrant"
+                  link="qdrant.tech"
+                  description="Open source local and distributed cloud vector database."
+                  checked={vectorDB === "qdrant"}
+                  image={QDrantLogo}
+                  onClick={updateVectorChoice}
+                />
+                <VectorDBOption
+                  name="Weaviate"
+                  value="weaviate"
+                  link="weaviate.io"
+                  description="Open source local and cloud hosted multi-modal vector database."
+                  checked={vectorDB === "weaviate"}
+                  image={WeaviateLogo}
+                  onClick={updateVectorChoice}
+                />
+                <VectorDBOption
+                  name="LanceDB"
+                  value="lancedb"
+                  link="lancedb.com"
+                  description="100% local vector DB that runs on the same instance as AnythingLLM."
+                  checked={vectorDB === "lancedb"}
+                  image={LanceDbLogo}
+                  onClick={updateVectorChoice}
+                />
+              </div>
+              <div className="mt-10 flex flex-wrap gap-4 max-w-[800px]">
+                {vectorDB === "pinecone" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Pinecone DB API Key
+                      </label>
+                      <input
+                        type="password"
+                        name="PineConeKey"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="Pinecone API Key"
+                        defaultValue={
+                          settings?.PineConeKey ? "*".repeat(20) : ""
+                        }
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Pinecone Index Environment
+                      </label>
+                      <input
+                        type="text"
+                        name="PineConeEnvironment"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="us-gcp-west-1"
+                        defaultValue={settings?.PineConeEnvironment}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Pinecone Index Name
+                      </label>
+                      <input
+                        type="text"
+                        name="PineConeIndex"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="my-index"
+                        defaultValue={settings?.PineConeIndex}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+                  </>
+                )}
+
+                {vectorDB === "chroma" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Chroma Endpoint
+                      </label>
+                      <input
+                        type="url"
+                        name="ChromaEndpoint"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="http://localhost:8000"
+                        defaultValue={settings?.ChromaEndpoint}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Header
+                      </label>
+                      <input
+                        name="ChromaApiHeader"
+                        autoComplete="off"
+                        type="text"
+                        defaultValue={settings?.ChromaApiHeader}
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="X-Api-Key"
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Key
+                      </label>
+                      <input
+                        name="ChromaApiKey"
+                        autoComplete="off"
+                        type="password"
+                        defaultValue={
+                          settings?.ChromaApiKey ? "*".repeat(20) : ""
+                        }
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="sk-myApiKeyToAccessMyChromaInstance"
+                      />
+                    </div>
+                  </>
+                )}
+
+                {vectorDB === "lancedb" && (
+                  <div className="w-full h-40 items-center justify-center flex">
+                    <p className="text-sm font-base text-white text-opacity-60">
+                      There is no configuration needed for LanceDB.
+                    </p>
+                  </div>
+                )}
+
+                {vectorDB === "qdrant" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        QDrant API Endpoint
+                      </label>
+                      <input
+                        type="url"
+                        name="QdrantEndpoint"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="http://localhost:6633"
+                        defaultValue={settings?.QdrantEndpoint}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Key
+                      </label>
+                      <input
+                        type="password"
+                        name="QdrantApiKey"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="wOeqxsYP4....1244sba"
+                        defaultValue={settings?.QdrantApiKey}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+                  </>
+                )}
+
+                {vectorDB === "weaviate" && (
+                  <>
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        Weaviate Endpoint
+                      </label>
+                      <input
+                        type="url"
+                        name="WeaviateEndpoint"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="http://localhost:8080"
+                        defaultValue={settings?.WeaviateEndpoint}
+                        required={true}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+
+                    <div className="flex flex-col w-60">
+                      <label className="text-white text-sm font-semibold block mb-4">
+                        API Key
+                      </label>
+                      <input
+                        type="password"
+                        name="WeaviateApiKey"
+                        className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                        placeholder="sk-123Abcweaviate"
+                        defaultValue={settings?.WeaviateApiKey}
+                        autoComplete="off"
+                        spellCheck={false}
+                      />
+                    </div>
+                  </>
+                )}
+              </div>
+            </div>
+          </form>
+        </div>
+      )}
+    </div>
+  );
+}
diff --git a/frontend/src/pages/Login/index.jsx b/frontend/src/pages/Login/index.jsx
new file mode 100644
index 000000000..d7d80926b
--- /dev/null
+++ b/frontend/src/pages/Login/index.jsx
@@ -0,0 +1,11 @@
+import React from "react";
+import PasswordModal, {
+  usePasswordModal,
+} from "../../components/Modals/Password";
+import { FullScreenLoader } from "../../components/Preloader";
+
+export default function Login() {
+  const { loading, mode } = usePasswordModal();
+  if (loading) return <FullScreenLoader />;
+  return <PasswordModal mode={mode} />;
+}
diff --git a/frontend/src/pages/Main/index.jsx b/frontend/src/pages/Main/index.jsx
index 0a1e508f6..5d79c5cab 100644
--- a/frontend/src/pages/Main/index.jsx
+++ b/frontend/src/pages/Main/index.jsx
@@ -6,6 +6,7 @@ import PasswordModal, {
 } from "../../components/Modals/Password";
 import { isMobile } from "react-device-detect";
 import { FullScreenLoader } from "../../components/Preloader";
+import UserMenu from "../../components/UserMenu";
 
 export default function Main() {
   const { loading, requiresAuth, mode } = usePasswordModal();
@@ -16,9 +17,11 @@ export default function Main() {
   }
 
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
-      {!isMobile && <Sidebar />}
-      <DefaultChatContainer />
-    </div>
+    <UserMenu>
+      <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
+        {!isMobile && <Sidebar />}
+        <DefaultChatContainer />
+      </div>
+    </UserMenu>
   );
 }
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/AppearanceSetup/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/AppearanceSetup/index.jsx
new file mode 100644
index 000000000..7fcd46c13
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/AppearanceSetup/index.jsx
@@ -0,0 +1,136 @@
+import React, { memo, useEffect, useState } from "react";
+import System from "../../../../../models/system";
+import AnythingLLM from "../../../../../media/logo/anything-llm.png";
+import useLogo from "../../../../../hooks/useLogo";
+import { Plus } from "@phosphor-icons/react";
+import showToast from "../../../../../utils/toast";
+
+function AppearanceSetup({ nextStep }) {
+  const { logo: _initLogo } = useLogo();
+  const [logo, setLogo] = useState("");
+  const [isDefaultLogo, setIsDefaultLogo] = useState(true);
+
+  useEffect(() => {
+    async function logoInit() {
+      setLogo(_initLogo || "");
+      const _isDefaultLogo = await System.isDefaultLogo();
+      setIsDefaultLogo(_isDefaultLogo);
+    }
+    logoInit();
+  }, [_initLogo]);
+
+  const handleFileUpload = async (event) => {
+    const file = event.target.files[0];
+    if (!file) return false;
+
+    const objectURL = URL.createObjectURL(file);
+    setLogo(objectURL);
+
+    const formData = new FormData();
+    formData.append("logo", file);
+    const { success, error } = await System.uploadLogo(formData);
+    if (!success) {
+      showToast(`Failed to upload logo: ${error}`, "error");
+      setLogo(_initLogo);
+      return;
+    }
+
+    showToast("Image uploaded successfully.", "success");
+    setIsDefaultLogo(false);
+  };
+
+  const handleRemoveLogo = async () => {
+    setLogo("");
+    setIsDefaultLogo(true);
+
+    const { success, error } = await System.removeCustomLogo();
+    if (!success) {
+      console.error("Failed to remove logo:", error);
+      showToast(`Failed to remove logo: ${error}`, "error");
+      const logoURL = await System.fetchLogo();
+      setLogo(logoURL);
+      setIsDefaultLogo(false);
+      return;
+    }
+
+    showToast("Image successfully removed.", "success");
+  };
+
+  return (
+    <div>
+      <div className="flex flex-col w-full px-10 py-12">
+        <div className="flex flex-col gap-y-2">
+          <h2 className="text-white text-sm font-medium">Custom Logo</h2>
+          <p className="text-sm font-base text-white/60">
+            Upload your custom logo to make your chatbot yours.
+          </p>
+        </div>
+        <div className="flex md:flex-row flex-col items-center">
+          <img
+            src={logo}
+            alt="Uploaded Logo"
+            className="w-48 h-48 object-contain mr-6"
+            hidden={isDefaultLogo}
+            onError={(e) => (e.target.src = AnythingLLM)}
+          />
+          <div className="flex flex-row gap-x-8">
+            <label className="mt-5 hover:opacity-60" hidden={!isDefaultLogo}>
+              <input
+                id="logo-upload"
+                type="file"
+                accept="image/*"
+                className="hidden"
+                onChange={handleFileUpload}
+              />
+              <div
+                className="w-80 py-4 bg-zinc-900/50 rounded-2xl border-2 border-dashed border-white border-opacity-60 justify-center items-center inline-flex cursor-pointer"
+                htmlFor="logo-upload"
+              >
+                <div className="flex flex-col items-center justify-center">
+                  <div className="rounded-full bg-white/40">
+                    <Plus className="w-6 h-6 text-black/80 m-2" />
+                  </div>
+                  <div className="text-white text-opacity-80 text-sm font-semibold py-1">
+                    Add a custom logo
+                  </div>
+                  <div className="text-white text-opacity-60 text-xs font-medium py-1">
+                    Recommended size: 800 x 200
+                  </div>
+                </div>
+              </div>
+            </label>
+            <button
+              onClick={handleRemoveLogo}
+              className="text-white text-base font-medium hover:text-opacity-60"
+            >
+              Delete
+            </button>
+          </div>
+        </div>
+      </div>
+      <div className="flex w-full justify-between items-center p-6 space-x-6 border-t rounded-b border-gray-500/50">
+        <div className="w-96 text-white text-opacity-80 text-xs font-base">
+          Want to customize the automatic messages in your chat? Find more
+          customization options on the appearance settings page.
+        </div>
+        <div className="flex gap-2">
+          <button
+            onClick={nextStep}
+            type="button"
+            className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+          >
+            Skip
+          </button>
+          <button
+            onClick={nextStep}
+            type="button"
+            className="border border-slate-200 px-4 py-2 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            Continue
+          </button>
+        </div>
+      </div>
+    </div>
+  );
+}
+export default memo(AppearanceSetup);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/CreateFirstWorkspace/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/CreateFirstWorkspace/index.jsx
new file mode 100644
index 000000000..3b860f07b
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/CreateFirstWorkspace/index.jsx
@@ -0,0 +1,60 @@
+import React, { memo } from "react";
+import { useNavigate } from "react-router-dom";
+import paths from "../../../../../utils/paths";
+import Workspace from "../../../../../models/workspace";
+
+function CreateFirstWorkspace() {
+  const navigate = useNavigate();
+
+  const handleCreate = async (e) => {
+    e.preventDefault();
+    const form = new FormData(e.target);
+    const { workspace, error } = await Workspace.new({
+      name: form.get("name"),
+    });
+    if (!!workspace) {
+      navigate(paths.home());
+    } else {
+      alert(error);
+    }
+  };
+
+  return (
+    <div>
+      <form onSubmit={handleCreate} className="flex flex-col w-full">
+        <div className="flex flex-col w-full md:px-8 py-12">
+          <div className="space-y-6 flex h-full w-96">
+            <div className="w-full flex flex-col gap-y-4">
+              <div>
+                <label
+                  htmlFor="name"
+                  className="block mb-2 text-sm font-medium text-white"
+                >
+                  Workspace name
+                </label>
+                <input
+                  name="name"
+                  type="text"
+                  className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                  placeholder="My workspace"
+                  minLength={4}
+                  required={true}
+                  autoComplete="off"
+                />
+              </div>
+            </div>
+          </div>
+        </div>
+        <div className="flex w-full justify-end items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
+          <button
+            type="submit"
+            className="border border-slate-200 px-4 py-2 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            Finish
+          </button>
+        </div>
+      </form>
+    </div>
+  );
+}
+export default memo(CreateFirstWorkspace);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/LLMSelection/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/LLMSelection/index.jsx
new file mode 100644
index 000000000..70d957858
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/LLMSelection/index.jsx
@@ -0,0 +1,231 @@
+import React, { memo, useEffect, useState } from "react";
+
+import OpenAiLogo from "../../../../../media/llmprovider/openai.png";
+import AzureOpenAiLogo from "../../../../../media/llmprovider/azure.png";
+import AnthropicLogo from "../../../../../media/llmprovider/anthropic.png";
+import System from "../../../../../models/system";
+import PreLoader from "../../../../../components/Preloader";
+import LLMProviderOption from "../../../../../components/LLMProviderOption";
+
+function LLMSelection({ nextStep, prevStep, currentStep }) {
+  const [llmChoice, setLLMChoice] = useState("openai");
+  const [settings, setSettings] = useState(null);
+  const [loading, setLoading] = useState(true);
+
+  const updateLLMChoice = (selection) => {
+    setLLMChoice(selection);
+  };
+
+  useEffect(() => {
+    async function fetchKeys() {
+      const _settings = await System.keys();
+      setSettings(_settings);
+      setLLMChoice(_settings?.LLMProvider);
+      setLoading(false);
+    }
+
+    if (currentStep === 1) {
+      fetchKeys();
+    }
+  }, [currentStep]);
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    const form = e.target;
+    const data = {};
+    const formData = new FormData(form);
+    for (var [key, value] of formData.entries()) data[key] = value;
+    const { error } = await System.updateSystem(data);
+    if (error) {
+      alert(`Failed to save LLM settings: ${error}`, "error");
+      return;
+    }
+    nextStep();
+    return;
+  };
+
+  if (loading)
+    return (
+      <div className="w-full h-full flex justify-center items-center p-20">
+        <PreLoader />
+      </div>
+    );
+
+  return (
+    <div>
+      <form onSubmit={handleSubmit} className="flex flex-col w-full">
+        <div className="flex flex-col w-full px-1 md:px-8 py-12">
+          <div className="text-white text-sm font-medium pb-4">
+            LLM Providers
+          </div>
+          <div className="w-full flex md:flex-wrap overflow-x-scroll gap-4 max-w-[900px]">
+            <input hidden={true} name="LLMProvider" defaultValue={llmChoice} />
+            <LLMProviderOption
+              name="OpenAI"
+              value="openai"
+              link="openai.com"
+              description="The standard option for most non-commercial use. Provides both chat and embedding."
+              checked={llmChoice === "openai"}
+              image={OpenAiLogo}
+              onClick={updateLLMChoice}
+            />
+            <LLMProviderOption
+              name="Azure OpenAI"
+              value="azure"
+              link="azure.microsoft.com"
+              description="The enterprise option of OpenAI hosted on Azure services. Provides both chat and embedding."
+              checked={llmChoice === "azure"}
+              image={AzureOpenAiLogo}
+              onClick={updateLLMChoice}
+            />
+            <LLMProviderOption
+              name="Anthropic Claude 2"
+              value="anthropic-claude-2"
+              link="anthropic.com"
+              description="[COMING SOON] A friendly AI Assistant hosted by Anthropic. Provides chat services only!"
+              checked={llmChoice === "anthropic-claude-2"}
+              image={AnthropicLogo}
+            />
+          </div>
+          <div className="mt-10 flex flex-wrap gap-4 max-w-[800px]">
+            {llmChoice === "openai" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Key
+                  </label>
+                  <input
+                    type="password"
+                    name="OpenAiKey"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="OpenAI API Key"
+                    defaultValue={settings?.OpenAiKey ? "*".repeat(20) : ""}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Chat Model Selection
+                  </label>
+                  <select
+                    name="OpenAiModelPref"
+                    defaultValue={settings?.OpenAiModelPref}
+                    required={true}
+                    className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg block w-full p-2.5"
+                  >
+                    {["gpt-3.5-turbo", "gpt-4"].map((model) => {
+                      return (
+                        <option key={model} value={model}>
+                          {model}
+                        </option>
+                      );
+                    })}
+                  </select>
+                </div>
+              </>
+            )}
+
+            {llmChoice === "azure" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Azure Service Endpoint
+                  </label>
+                  <input
+                    type="url"
+                    name="AzureOpenAiEndpoint"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="https://my-azure.openai.azure.com"
+                    defaultValue={settings?.AzureOpenAiEndpoint}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Key
+                  </label>
+                  <input
+                    type="password"
+                    name="AzureOpenAiKey"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="Azure OpenAI API Key"
+                    defaultValue={
+                      settings?.AzureOpenAiKey ? "*".repeat(20) : ""
+                    }
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Chat Model Deployment Name
+                  </label>
+                  <input
+                    type="text"
+                    name="AzureOpenAiModelPref"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="Azure OpenAI chat model deployment name"
+                    defaultValue={settings?.AzureOpenAiModelPref}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Embedding Model Deployment Name
+                  </label>
+                  <input
+                    type="text"
+                    name="AzureOpenAiEmbeddingModelPref"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="Azure OpenAI embedding model deployment name"
+                    defaultValue={settings?.AzureOpenAiEmbeddingModelPref}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </>
+            )}
+
+            {llmChoice === "anthropic-claude-2" && (
+              <div className="w-full h-40 items-center justify-center flex">
+                <p className="text-gray-800 dark:text-slate-400">
+                  This provider is unavailable and cannot be used in AnythingLLM
+                  currently.
+                </p>
+              </div>
+            )}
+          </div>
+        </div>
+        <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
+          <button
+            onClick={prevStep}
+            type="button"
+            className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+          >
+            Back
+          </button>
+          <button
+            type="submit"
+            className="border border-slate-200 px-4 py-2 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            Continue
+          </button>
+        </div>
+      </form>
+    </div>
+  );
+}
+
+export default memo(LLMSelection);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/MultiUserSetup/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/MultiUserSetup/index.jsx
new file mode 100644
index 000000000..99c66b129
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/MultiUserSetup/index.jsx
@@ -0,0 +1,121 @@
+import React, { useState, memo } from "react";
+import System from "../../../../../models/system";
+import {
+  AUTH_TIMESTAMP,
+  AUTH_TOKEN,
+  AUTH_USER,
+} from "../../../../../utils/constants";
+import debounce from "lodash.debounce";
+
+// Multi-user mode step
+function MultiUserSetup({ nextStep, prevStep }) {
+  const [username, setUsername] = useState("");
+  const [password, setPassword] = useState("");
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    const form = e.target;
+    const formData = new FormData(form);
+    const data = {
+      username: formData.get("username"),
+      password: formData.get("password"),
+    };
+    const { success, error } = await System.setupMultiUser(data);
+    if (!success) {
+      alert(error);
+      return;
+    }
+
+    // Auto-request token with credentials that was just set so they
+    // are not redirected to login after completion.
+    const { user, token } = await System.requestToken(data);
+    window.localStorage.setItem(AUTH_USER, JSON.stringify(user));
+    window.localStorage.setItem(AUTH_TOKEN, token);
+    window.localStorage.removeItem(AUTH_TIMESTAMP);
+
+    nextStep();
+  };
+
+  const setNewUsername = (e) => setPassword(e.target.value);
+  const setNewPassword = (e) => setPassword(e.target.value);
+  const handleUsernameChange = debounce(setNewUsername, 500);
+  const handlePasswordChange = debounce(setNewPassword, 500);
+  return (
+    <div>
+      <form onSubmit={handleSubmit}>
+        <div className="flex flex-col w-full md:px-8 py-12">
+          <div className="space-y-6 flex h-full w-96">
+            <div className="w-full flex flex-col gap-y-4">
+              <div>
+                <label
+                  htmlFor="name"
+                  className="block mb-2 text-sm font-medium text-white"
+                >
+                  Admin account username
+                </label>
+                <input
+                  name="username"
+                  type="text"
+                  className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                  placeholder="Your admin username"
+                  minLength={6}
+                  required={true}
+                  autoComplete="off"
+                  onChange={handleUsernameChange}
+                />
+              </div>
+              <div>
+                <label
+                  htmlFor="name"
+                  className="block mb-2 text-sm font-medium text-white"
+                >
+                  Admin account password
+                </label>
+                <input
+                  name="password"
+                  type="password"
+                  className="bg-zinc-900 border border-gray-500 text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5"
+                  placeholder="Your admin password"
+                  minLength={8}
+                  required={true}
+                  autoComplete="off"
+                  onChange={handlePasswordChange}
+                />
+              </div>
+              <p className="w-96 text-white text-opacity-80 text-xs font-base">
+                Username must be at least 6 characters long. Password must be at
+                least 8 characters long.
+              </p>
+            </div>
+          </div>
+        </div>
+        <div className="flex w-full justify-between items-center p-6 space-x-6 border-t rounded-b border-gray-500/50">
+          <div className="w-96 text-white text-opacity-80 text-xs font-base">
+            By default, you will be the only admin. As an admin you will need to
+            create accounts for all new users or admins. Do not lose your
+            password as only admins can reset passwords.
+          </div>
+          <div className="flex gap-2">
+            <button
+              onClick={prevStep}
+              type="button"
+              className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+            >
+              Back
+            </button>
+            <button
+              type="submit"
+              className="border px-4 py-2 rounded-lg text-sm items-center flex gap-x-2 
+              border-slate-200 text-slate-800 bg-slate-200 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow
+              disabled:border-gray-400 disabled:text-slate-800 disabled:bg-gray-400 disabled:cursor-not-allowed"
+              disabled={!(!!username && !!password)}
+            >
+              Continue
+            </button>
+          </div>
+        </div>
+      </form>
+    </div>
+  );
+}
+export default memo(MultiUserSetup);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/PasswordProtection/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/PasswordProtection/index.jsx
new file mode 100644
index 000000000..1baca6d23
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/PasswordProtection/index.jsx
@@ -0,0 +1,107 @@
+import React, { memo, useState } from "react";
+import System from "../../../../../models/system";
+import {
+  AUTH_TIMESTAMP,
+  AUTH_TOKEN,
+  AUTH_USER,
+} from "../../../../../utils/constants";
+import debounce from "lodash.debounce";
+
+function PasswordProtection({ goToStep, prevStep }) {
+  const [password, setPassword] = useState("");
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    const form = e.target;
+    const formData = new FormData(form);
+    const { error } = await System.updateSystemPassword({
+      usePassword: true,
+      newPassword: formData.get("password"),
+    });
+
+    if (error) {
+      alert(`Failed to set password: ${error}`, "error");
+      return;
+    }
+
+    // Auto-request token with password that was just set so they
+    // are not redirected to login after completion.
+    const { token } = await System.requestToken({
+      password: formData.get("password"),
+    });
+    window.localStorage.removeItem(AUTH_USER);
+    window.localStorage.removeItem(AUTH_TIMESTAMP);
+    window.localStorage.setItem(AUTH_TOKEN, token);
+
+    goToStep(7);
+    return;
+  };
+
+  const handleSkip = () => {
+    goToStep(7);
+  };
+
+  const setNewPassword = (e) => setPassword(e.target.value);
+  const handlePasswordChange = debounce(setNewPassword, 500);
+  return (
+    <div className="w-full">
+      <form className="flex flex-col w-full" onSubmit={handleSubmit}>
+        <div className="flex flex-col w-full px-1 md:px-8 py-12">
+          <div className="w-full flex flex-col gap-y-2 my-5">
+            <div className="w-80">
+              <div className="flex flex-col mb-3 ">
+                <label
+                  htmlFor="password"
+                  className="block font-medium text-white"
+                >
+                  New Password
+                </label>
+                <p className="text-slate-300 text-xs">
+                  must be at least 8 characters.
+                </p>
+              </div>
+              <input
+                onChange={handlePasswordChange}
+                name="password"
+                type="text"
+                className="bg-zinc-900 text-white text-sm rounded-lg focus:border-blue-500 block w-full p-2.5 placeholder-white placeholder-opacity-60 focus:ring-blue-500"
+                placeholder="Your Instance Password"
+                minLength={8}
+                required={true}
+                autoComplete="off"
+              />
+            </div>
+          </div>
+        </div>
+        <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
+          <button
+            onClick={prevStep}
+            type="button"
+            className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+          >
+            Back
+          </button>
+
+          <div className="flex gap-2">
+            <button
+              onClick={handleSkip}
+              type="button"
+              className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+            >
+              Skip
+            </button>
+            <button
+              type="submit"
+              disabled={!password}
+              className="border px-4 py-2 rounded-lg text-sm items-center flex gap-x-2 
+              border-slate-200 text-slate-800 bg-slate-200 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow
+              disabled:border-gray-400 disabled:text-slate-800 disabled:bg-gray-400 disabled:cursor-not-allowed"
+            >
+              Continue
+            </button>
+          </div>
+        </div>
+      </form>
+    </div>
+  );
+}
+export default memo(PasswordProtection);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/UserModeSelection/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/UserModeSelection/index.jsx
new file mode 100644
index 000000000..1d981b35f
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/UserModeSelection/index.jsx
@@ -0,0 +1,47 @@
+import React, { memo } from "react";
+
+// How many people will be using your instance step
+function UserModeSelection({ goToStep, prevStep }) {
+  const justMeClicked = () => {
+    goToStep(5);
+  };
+
+  const myTeamClicked = () => {
+    goToStep(6);
+  };
+
+  return (
+    <div>
+      <div className="flex flex-col justify-center items-center px-20 py-20">
+        <div className="w-80 text-white text-center text-2xl font-base">
+          How many people will be using your instance?
+        </div>
+        <div className="flex gap-4 justify-center my-8">
+          <button
+            onClick={justMeClicked}
+            className="transition-all duration-200 border border-slate-200 px-4 py-2 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            Just Me
+          </button>
+          <button
+            onClick={myTeamClicked}
+            className="transition-all duration-200 border border-slate-200 px-5 py-2.5 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            My Team
+          </button>
+        </div>
+      </div>
+      <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
+        <button
+          onClick={prevStep}
+          type="button"
+          className="px-4 py-2 rounded-lg text-white hover:bg-sidebar transition-all duration-300"
+        >
+          Back
+        </button>
+      </div>
+    </div>
+  );
+}
+
+export default memo(UserModeSelection);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/VectorDatabaseConnection/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/VectorDatabaseConnection/index.jsx
new file mode 100644
index 000000000..47fbb870c
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/Steps/VectorDatabaseConnection/index.jsx
@@ -0,0 +1,310 @@
+import React, { memo, useEffect, useState } from "react";
+
+import VectorDBOption from "../../../../../components/VectorDBOption";
+import ChromaLogo from "../../../../../media/vectordbs/chroma.png";
+import PineconeLogo from "../../../../../media/vectordbs/pinecone.png";
+import LanceDbLogo from "../../../../../media/vectordbs/lancedb.png";
+import WeaviateLogo from "../../../../../media/vectordbs/weaviate.png";
+import QDrantLogo from "../../../../../media/vectordbs/qdrant.png";
+import System from "../../../../../models/system";
+import PreLoader from "../../../../../components/Preloader";
+
+function VectorDatabaseConnection({ nextStep, prevStep, currentStep }) {
+  const [vectorDB, setVectorDB] = useState("lancedb");
+  const [settings, setSettings] = useState({});
+  const [loading, setLoading] = useState(true);
+
+  useEffect(() => {
+    async function fetchKeys() {
+      const _settings = await System.keys();
+      setSettings(_settings);
+      setVectorDB(_settings?.VectorDB || "lancedb");
+      setLoading(false);
+    }
+    if (currentStep === 2) {
+      fetchKeys();
+    }
+  }, [currentStep]);
+
+  const updateVectorChoice = (selection) => {
+    setVectorDB(selection);
+  };
+
+  const handleSubmit = async (e, formElement) => {
+    e.preventDefault();
+    const form = formElement || e.target;
+    const data = {};
+    const formData = new FormData(form);
+    for (var [key, value] of formData.entries()) data[key] = value;
+    const { error } = await System.updateSystem(data);
+    if (error) {
+      alert(`Failed to save settings: ${error}`, "error");
+      return;
+    }
+    nextStep();
+    return;
+  };
+
+  if (loading)
+    return (
+      <div className="w-full h-full flex justify-center items-center p-20">
+        <PreLoader />
+      </div>
+    );
+
+  return (
+    <div>
+      <form onSubmit={handleSubmit} className="flex flex-col w-full">
+        <div className="flex flex-col w-full px-1 md:px-8 py-12">
+          <div className="text-white text-sm font-medium pb-4">
+            Select your preferred vector database provider
+          </div>
+          <div className="w-full flex md:flex-wrap overflow-x-scroll gap-4 max-w-[900px]">
+            <input hidden={true} name="VectorDB" value={vectorDB} />
+            <VectorDBOption
+              name="Chroma"
+              value="chroma"
+              link="trychroma.com"
+              description="Open source vector database you can host yourself or on the cloud."
+              checked={vectorDB === "chroma"}
+              image={ChromaLogo}
+              onClick={updateVectorChoice}
+            />
+            <VectorDBOption
+              name="Pinecone"
+              value="pinecone"
+              link="pinecone.io"
+              description="100% cloud-based vector database for enterprise use cases."
+              checked={vectorDB === "pinecone"}
+              image={PineconeLogo}
+              onClick={updateVectorChoice}
+            />
+            <VectorDBOption
+              name="QDrant"
+              value="qdrant"
+              link="qdrant.tech"
+              description="Open source local and distributed cloud vector database."
+              checked={vectorDB === "qdrant"}
+              image={QDrantLogo}
+              onClick={updateVectorChoice}
+            />
+            <VectorDBOption
+              name="Weaviate"
+              value="weaviate"
+              link="weaviate.io"
+              description="Open source local and cloud hosted multi-modal vector database."
+              checked={vectorDB === "weaviate"}
+              image={WeaviateLogo}
+              onClick={updateVectorChoice}
+            />
+            <VectorDBOption
+              name="LanceDB"
+              value="lancedb"
+              link="lancedb.com"
+              description="100% local vector DB that runs on the same instance as AnythingLLM."
+              checked={vectorDB === "lancedb"}
+              image={LanceDbLogo}
+              onClick={updateVectorChoice}
+            />
+          </div>
+          <div className="mt-10 flex flex-wrap gap-4 max-w-[800px]">
+            {vectorDB === "pinecone" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Pinecone DB API Key
+                  </label>
+                  <input
+                    type="password"
+                    name="PineConeKey"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="Pinecone API Key"
+                    defaultValue={settings?.PineConeKey ? "*".repeat(20) : ""}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Pinecone Index Environment
+                  </label>
+                  <input
+                    type="text"
+                    name="PineConeEnvironment"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="us-gcp-west-1"
+                    defaultValue={settings?.PineConeEnvironment}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Pinecone Index Name
+                  </label>
+                  <input
+                    type="text"
+                    name="PineConeIndex"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="my-index"
+                    defaultValue={settings?.PineConeIndex}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </>
+            )}
+
+            {vectorDB === "chroma" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Chroma Endpoint
+                  </label>
+                  <input
+                    type="url"
+                    name="ChromaEndpoint"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="http://localhost:8000"
+                    defaultValue={settings?.ChromaEndpoint}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Header
+                  </label>
+                  <input
+                    name="ChromaApiHeader"
+                    autoComplete="off"
+                    type="text"
+                    defaultValue={settings?.ChromaApiHeader}
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="X-Api-Key"
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Key
+                  </label>
+                  <input
+                    name="ChromaApiKey"
+                    autoComplete="off"
+                    type="password"
+                    defaultValue={settings?.ChromaApiKey ? "*".repeat(20) : ""}
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="sk-myApiKeyToAccessMyChromaInstance"
+                  />
+                </div>
+              </>
+            )}
+
+            {vectorDB === "lancedb" && (
+              <div className="w-full h-10 items-center justify-center flex">
+                <p className="text-sm font-base text-white text-opacity-60">
+                  There is no configuration needed for LanceDB.
+                </p>
+              </div>
+            )}
+
+            {vectorDB === "qdrant" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    QDrant API Endpoint
+                  </label>
+                  <input
+                    type="url"
+                    name="QdrantEndpoint"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="http://localhost:6633"
+                    defaultValue={settings?.QdrantEndpoint}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Key
+                  </label>
+                  <input
+                    type="password"
+                    name="QdrantApiKey"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="wOeqxsYP4....1244sba"
+                    defaultValue={settings?.QdrantApiKey}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </>
+            )}
+
+            {vectorDB === "weaviate" && (
+              <>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Weaviate Endpoint
+                  </label>
+                  <input
+                    type="url"
+                    name="WeaviateEndpoint"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="http://localhost:8080"
+                    defaultValue={settings?.WeaviateEndpoint}
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    API Key
+                  </label>
+                  <input
+                    type="password"
+                    name="WeaviateApiKey"
+                    className="bg-zinc-900 text-white placeholder-white placeholder-opacity-60 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="sk-123Abcweaviate"
+                    defaultValue={settings?.WeaviateApiKey}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </>
+            )}
+          </div>
+        </div>
+        <div className="flex w-full justify-between items-center p-6 space-x-2 border-t rounded-b border-gray-500/50">
+          <button
+            onClick={prevStep}
+            type="button"
+            className="px-4 py-2 rounded-lg text-white hover:bg-sidebar"
+          >
+            Back
+          </button>
+          <button
+            type="submit"
+            className="border border-slate-200 px-4 py-2 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow"
+          >
+            Continue
+          </button>
+        </div>
+      </form>
+    </div>
+  );
+}
+
+export default memo(VectorDatabaseConnection);
diff --git a/frontend/src/pages/OnboardingFlow/OnboardingModal/index.jsx b/frontend/src/pages/OnboardingFlow/OnboardingModal/index.jsx
new file mode 100644
index 000000000..0cdf05fae
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/OnboardingModal/index.jsx
@@ -0,0 +1,109 @@
+import React, { useState } from "react";
+import { X } from "react-feather";
+import LLMSelection from "./Steps/LLMSelection";
+import VectorDatabaseConnection from "./Steps/VectorDatabaseConnection";
+import AppearanceSetup from "./Steps/AppearanceSetup";
+import UserModeSelection from "./Steps/UserModeSelection";
+import PasswordProtection from "./Steps/PasswordProtection";
+import MultiUserSetup from "./Steps/MultiUserSetup";
+import CreateFirstWorkspace from "./Steps/CreateFirstWorkspace";
+
+const DIALOG_ID = "onboarding-modal";
+
+function hideModal() {
+  document.getElementById(DIALOG_ID)?.close();
+}
+
+const STEPS = {
+  1: {
+    title: "LLM Preference",
+    description:
+      "These are the credentials and settings for your preferred LLM chat & embedding provider.",
+    component: LLMSelection,
+  },
+  2: {
+    title: "Vector Database",
+    description:
+      "These are the credentials and settings for how your AnythingLLM instance will function.",
+    component: VectorDatabaseConnection,
+  },
+  3: {
+    title: "Appearance",
+    description: "Customize the appearance of your AnythingLLM instance.",
+    component: AppearanceSetup,
+  },
+  4: {
+    title: "User Mode Setup",
+    description: "Choose how many people will be using your instance.",
+    component: UserModeSelection,
+  },
+  5: {
+    title: "Password Protect",
+    description:
+      "Protect your instance with a password. It is important to save this password as it cannot be recovered.",
+    component: PasswordProtection,
+  },
+  6: {
+    title: "Multi-User Mode",
+    description:
+      "Setup your instance to support your team by activating multi-user mode.",
+    component: MultiUserSetup,
+  },
+  7: {
+    title: "Create Workspace",
+    description: "To get started, create a new workspace.",
+    component: CreateFirstWorkspace,
+  },
+};
+
+export const OnboardingModalId = DIALOG_ID;
+export default function OnboardingModal() {
+  const [currentStep, setCurrentStep] = useState(1);
+
+  const nextStep = () => {
+    setCurrentStep((prevStep) => prevStep + 1);
+  };
+
+  const prevStep = () => {
+    if (currentStep === 1) return hideModal();
+    setCurrentStep((prevStep) => prevStep - 1);
+  };
+
+  const goToStep = (step) => {
+    setCurrentStep(step);
+  };
+
+  const { component: StepComponent, ...step } = STEPS[currentStep];
+  return (
+    <dialog id={DIALOG_ID} className="bg-transparent outline-none">
+      <div className="relative max-h-full">
+        <div className="relative bg-main-gradient rounded-2xl shadow border-2 border-slate-300/10">
+          <div className="flex items-start justify-between p-8 border-b rounded-t border-gray-500/50">
+            <div className="flex flex-col gap-2">
+              <h3 className="text-xl font-semibold text-white">{step.title}</h3>
+              <p className="text-sm font-base text-white text-opacity-60">
+                {step.description || ""}
+              </p>
+            </div>
+
+            <button
+              onClick={hideModal}
+              type="button"
+              className="text-gray-400 bg-transparent rounded-lg text-sm p-1.5 ml-auto inline-flex items-center hover:border-white/60 bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+            >
+              <X className="text-gray-300 text-lg" />
+            </button>
+          </div>
+          <div className="space-y-6 flex h-full w-full justify-center">
+            <StepComponent
+              currentStep={currentStep}
+              nextStep={nextStep}
+              prevStep={prevStep}
+              goToStep={goToStep}
+            />
+          </div>
+        </div>
+      </div>
+    </dialog>
+  );
+}
diff --git a/frontend/src/pages/OnboardingFlow/index.jsx b/frontend/src/pages/OnboardingFlow/index.jsx
new file mode 100644
index 000000000..a8a85380b
--- /dev/null
+++ b/frontend/src/pages/OnboardingFlow/index.jsx
@@ -0,0 +1,31 @@
+import React from "react";
+import OnboardingModal, { OnboardingModalId } from "./OnboardingModal";
+import useLogo from "../../hooks/useLogo";
+
+export default function OnboardingFlow() {
+  const { logo } = useLogo();
+
+  function showModal() {
+    document?.getElementById(OnboardingModalId)?.showModal();
+  }
+
+  return (
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex items-center justify-center">
+      <div className="w-fit p-20 py-24 border-2 border-slate-300/10 rounded-2xl bg-main-gradient shadow-lg">
+        <div className="text-white text-2xl font-base text-center">
+          Welcome to
+        </div>
+        <img src={logo} alt="logo" className="w-80 mx-auto m-3 mb-11" />
+        <div className="flex justify-center items-center">
+          <button
+            className="border border-slate-200 px-5 py-2.5 rounded-lg text-slate-800 bg-slate-200 text-sm items-center flex gap-x-2 hover:text-white hover:bg-transparent focus:ring-gray-800 font-semibold shadow animate-pulse"
+            onClick={showModal}
+          >
+            Get Started
+          </button>
+        </div>
+      </div>
+      <OnboardingModal />
+    </div>
+  );
+}
diff --git a/frontend/src/pages/WorkspaceChat/index.jsx b/frontend/src/pages/WorkspaceChat/index.jsx
index 5b466bda3..5f8985f49 100644
--- a/frontend/src/pages/WorkspaceChat/index.jsx
+++ b/frontend/src/pages/WorkspaceChat/index.jsx
@@ -36,7 +36,7 @@ function ShowWorkspaceChat() {
   }, []);
 
   return (
-    <div className="w-screen h-screen overflow-hidden bg-orange-100 dark:bg-stone-700 flex">
+    <div className="w-screen h-screen overflow-hidden bg-sidebar flex">
       {!isMobile && <Sidebar />}
       <WorkspaceChatContainer loading={loading} workspace={workspace} />
     </div>
diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js
index 602460fd2..e86aa8aec 100644
--- a/frontend/src/utils/constants.js
+++ b/frontend/src/utils/constants.js
@@ -3,3 +3,6 @@ export const API_BASE = import.meta.env.VITE_API_BASE || "/api";
 export const AUTH_USER = "anythingllm_user";
 export const AUTH_TOKEN = "anythingllm_authToken";
 export const AUTH_TIMESTAMP = "anythingllm_authTimestamp";
+
+export const USER_BACKGROUND_COLOR = "bg-historical-msg-user";
+export const AI_BACKGROUND_COLOR = "bg-historical-msg-system";
diff --git a/frontend/src/utils/directories.js b/frontend/src/utils/directories.js
new file mode 100644
index 000000000..53a45b773
--- /dev/null
+++ b/frontend/src/utils/directories.js
@@ -0,0 +1,34 @@
+export function formatDate(dateString) {
+  const date = isNaN(new Date(dateString).getTime())
+    ? new Date()
+    : new Date(dateString);
+  const options = { year: "numeric", month: "short", day: "numeric" };
+  const formattedDate = date.toLocaleDateString("en-US", options);
+  return formattedDate;
+}
+
+export function getFileExtension(path) {
+  const match = path.match(/[^\/\\&\?]+\.\w{1,4}(?=([\?&].*$|$))/);
+  return match ? match[0].split(".").pop() : "file";
+}
+
+export function truncate(str, n) {
+  const fileExtensionPattern = /(\..+)$/;
+  const extensionMatch = str.match(fileExtensionPattern);
+
+  if (str.length <= n) return str;
+
+  if (extensionMatch && extensionMatch[1]) {
+    const extension = extensionMatch[1];
+    const nameWithoutExtension = str.replace(fileExtensionPattern, "");
+    const truncationPoint = Math.max(0, n - extension.length - 4);
+    const truncatedName =
+      nameWithoutExtension.substr(0, truncationPoint) +
+      "..." +
+      nameWithoutExtension.slice(-4);
+
+    return truncatedName + extension;
+  } else {
+    return str.length > n ? str.substr(0, n - 8) + "..." + str.slice(-4) : str;
+  }
+}
diff --git a/frontend/src/utils/paths.js b/frontend/src/utils/paths.js
index 4e1ab138d..f914f63b7 100644
--- a/frontend/src/utils/paths.js
+++ b/frontend/src/utils/paths.js
@@ -4,6 +4,12 @@ export default {
   home: () => {
     return "/";
   },
+  login: () => {
+    return "/login";
+  },
+  onboarding: () => {
+    return "/onboarding";
+  },
   github: () => {
     return "https://github.com/Mintplex-Labs/anything-llm";
   },
@@ -33,6 +39,26 @@ export default {
   apiDocs: () => {
     return `${API_BASE}/docs`;
   },
+  general: {
+    llmPreference: () => {
+      return "/general/llm-preference";
+    },
+    vectorDatabase: () => {
+      return "/general/vector-database";
+    },
+    exportImport: () => {
+      return "/general/export-import";
+    },
+    security: () => {
+      return "/general/security";
+    },
+    appearance: () => {
+      return "/general/appearance";
+    },
+    apiKeys: () => {
+      return "/general/api-keys";
+    },
+  },
   admin: {
     system: () => {
       return `/admin/system-preferences`;
@@ -49,11 +75,5 @@ export default {
     chats: () => {
       return "/admin/workspace-chats";
     },
-    appearance: () => {
-      return "/admin/appearance";
-    },
-    apiKeys: () => {
-      return "/admin/api-keys";
-    },
   },
 };
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index e0d23bb3f..e6dbbb94b 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -3,11 +3,52 @@ export default {
   content: ["./src/**/*.{js,jsx}"],
   theme: {
     extend: {
+      rotate: {
+        '270': '270deg',
+        '360': '360deg',
+      },
       colors: {
         'black-900': '#141414',
+        'accent': '#3D4147',
+        'sidebar-button': '#31353A',
+        'sidebar': '#25272C',
+        'historical-msg-system': 'rgba(255, 255, 255, 0.05);',
+        'historical-msg-user': '#2C2F35',
+      },
+      backgroundImage: {
+        'preference-gradient': 'linear-gradient(180deg, #5A5C63 0%, rgba(90, 92, 99, 0.28) 100%);',
+        'chat-msg-user-gradient': 'linear-gradient(180deg, #3D4147 0%, #2C2F35 100%);',
+        'selected-preference-gradient': 'linear-gradient(180deg, #313236 0%, rgba(63.40, 64.90, 70.13, 0) 100%);',
+        'main-gradient': 'linear-gradient(180deg, #3D4147 0%, #2C2F35 100%)',
+        'modal-gradient': 'linear-gradient(180deg, #3D4147 0%, #2C2F35 100%)',
+        'sidebar-gradient': 'linear-gradient(90deg, #5B616A 0%, #3F434B 100%)',
+        'menu-item-gradient': 'linear-gradient(90deg, #3D4147 0%, #2C2F35 100%)',
+        'menu-item-selected-gradient': 'linear-gradient(90deg, #5B616A 0%, #3F434B 100%)',
+        'workspace-item-gradient': 'linear-gradient(90deg, #3D4147 0%, #2C2F35 100%)',
+        'workspace-item-selected-gradient': 'linear-gradient(90deg, #5B616A 0%, #3F434B 100%)',
+        'switch-selected': 'linear-gradient(146deg, #5B616A 0%, #3F434B 100%)',
+      },
+      fontFamily: {
+        'sans': ['plus-jakarta-sans', 'ui-sans-serif', 'system-ui', '-apple-system', 'BlinkMacSystemFont', '"Segoe UI"', 'Roboto', '"Helvetica Neue"', 'Arial', '"Noto Sans"', 'sans-serif', '"Apple Color Emoji"', '"Segoe UI Emoji"', '"Segoe UI Symbol"', '"Noto Color Emoji"'],
+      },
+      animation: {
+        sweep: 'sweep 0.5s ease-in-out',
       },
+      keyframes: {
+        sweep: {
+          '0%': { transform: 'scaleX(0)', transformOrigin: 'bottom left' },
+          '100%': { transform: 'scaleX(1)', transformOrigin: 'bottom left' },
+        },
+        fadeIn: {
+          '0%': { opacity: 0 },
+          '100%': { opacity: 1 },
+        },
+        fadeOut: {
+          '0%': { opacity: 1 },
+          '100%': { opacity: 0 },
+        },
+      }
     },
   },
   plugins: [],
 }
-
diff --git a/frontend/yarn.lock b/frontend/yarn.lock
index c4199eb39..0c5e8749e 100644
--- a/frontend/yarn.lock
+++ b/frontend/yarn.lock
@@ -447,6 +447,11 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@phosphor-icons/react@^2.0.13":
+  version "2.0.13"
+  resolved "https://registry.yarnpkg.com/@phosphor-icons/react/-/react-2.0.13.tgz#4944b08859d16a6efdbd1e073b5e0ef7e8f55cb9"
+  integrity sha512-lRjFfCv4pU8vDnPgZ8/QFzYmAJS08Vx+J2/+Ldh217pXaxvaayBZMC/3EinuMwmMylc97+XYCMPdH+y10I+f0g==
+
 "@remix-run/router@1.6.3":
   version "1.6.3"
   resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz"
@@ -1642,6 +1647,11 @@ locate-path@^6.0.0:
   dependencies:
     p-locate "^5.0.0"
 
+lodash.debounce@^4.0.8:
+  version "4.0.8"
+  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+  integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
 lodash.merge@^4.6.2:
   version "4.6.2"
   resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
diff --git a/server/.gitignore b/server/.gitignore
index e063c4a04..be4af591d 100644
--- a/server/.gitignore
+++ b/server/.gitignore
@@ -1,8 +1,7 @@
 .env.production
 .env.development
 storage/assets/*
-!storage/assets/anything-llm-dark.png
-!storage/assets/anything-llm-light.png
+!storage/assets/anything-llm.png
 storage/documents/*
 storage/vector-cache/*.json
 storage/exports
diff --git a/server/endpoints/system.js b/server/endpoints/system.js
index eed85839a..915d31d19 100644
--- a/server/endpoints/system.js
+++ b/server/endpoints/system.js
@@ -32,7 +32,7 @@ const {
   validFilename,
   renameLogoFile,
   removeCustomLogo,
-  DARK_LOGO_FILENAME,
+  LOGO_FILENAME,
 } = require("../utils/files/logo");
 const { Telemetry } = require("../models/telemetry");
 const { WelcomeMessages } = require("../models/welcomeMessages");
@@ -317,7 +317,7 @@ function systemEndpoints(app) {
         updateENV(
           {
             AuthToken: "",
-            JWTSecret: process.env.JWT_SECRET ?? v4(),
+            JWTSecret: process.env.JWT_SECRET || v4(),
           },
           true
         );
@@ -325,12 +325,27 @@ function systemEndpoints(app) {
         await Telemetry.sendTelemetry("enabled_multi_user_mode");
         response.status(200).json({ success: !!user, error });
       } catch (e) {
+        await User.delete({});
+        await SystemSettings.updateSettings({
+          multi_user_mode: false,
+        });
+
         console.log(e.message, e);
         response.sendStatus(500).end();
       }
     }
   );
 
+  app.get("/system/multi-user-mode", async (request, response) => {
+    try {
+      const multiUserMode = await SystemSettings.isMultiUserMode();
+      response.status(200).json({ multiUserMode });
+    } catch (e) {
+      console.log(e.message, e);
+      response.sendStatus(500).end();
+    }
+  });
+
   app.get("/system/data-export", [validatedRequest], async (_, response) => {
     try {
       const { filename, error } = await exportData();
@@ -341,34 +356,32 @@ function systemEndpoints(app) {
     }
   });
 
-  app.get(
-    "/system/data-exports/:filename",
-    [validatedRequest],
-    (request, response) => {
-      const exportLocation = __dirname + "/../storage/exports/";
-      const sanitized = path
-        .normalize(request.params.filename)
-        .replace(/^(\.\.(\/|\\|$))+/, "");
-      const finalDestination = path.join(exportLocation, sanitized);
-
-      if (!fs.existsSync(finalDestination)) {
-        response.status(404).json({
-          error: 404,
-          msg: `File ${request.params.filename} does not exist in exports.`,
-        });
-        return;
-      }
-
-      response.download(finalDestination, request.params.filename, (err) => {
-        if (err) {
-          response.send({
-            error: err,
-            msg: "Problem downloading the file",
-          });
-        }
+  app.get("/system/data-exports/:filename", (request, response) => {
+    const exportLocation = __dirname + "/../storage/exports/";
+    const sanitized = path
+      .normalize(request.params.filename)
+      .replace(/^(\.\.(\/|\\|$))+/, "");
+    const finalDestination = path.join(exportLocation, sanitized);
+
+    if (!fs.existsSync(finalDestination)) {
+      response.status(404).json({
+        error: 404,
+        msg: `File ${request.params.filename} does not exist in exports.`,
       });
+      return;
     }
-  );
+
+    response.download(finalDestination, request.params.filename, (err) => {
+      if (err) {
+        response.send({
+          error: err,
+          msg: "Problem downloading the file",
+        });
+      }
+      // delete on download because endpoint is not authenticated.
+      fs.rmSync(finalDestination);
+    });
+  });
 
   app.post(
     "/system/data-import",
@@ -380,9 +393,9 @@ function systemEndpoints(app) {
     }
   );
 
-  app.get("/system/logo/:mode?", async function (request, response) {
+  app.get("/system/logo", async function (request, response) {
     try {
-      const defaultFilename = getDefaultFilename(request.params.mode);
+      const defaultFilename = getDefaultFilename();
       const logoPath = await determineLogoFilepath(defaultFilename);
       const { buffer, size, mime } = fetchLogo(logoPath);
       response.writeHead(200, {
@@ -443,6 +456,17 @@ function systemEndpoints(app) {
     }
   );
 
+  app.get("/system/is-default-logo", async (request, response) => {
+    try {
+      const currentLogoFilename = await SystemSettings.currentLogoFilename();
+      const isDefaultLogo = currentLogoFilename === LOGO_FILENAME;
+      response.status(200).json({ isDefaultLogo });
+    } catch (error) {
+      console.error("Error processing the logo request:", error);
+      response.status(500).json({ message: "Internal server error" });
+    }
+  });
+
   app.get(
     "/system/remove-logo",
     [validatedRequest],
@@ -458,7 +482,7 @@ function systemEndpoints(app) {
         const currentLogoFilename = await SystemSettings.currentLogoFilename();
         await removeCustomLogo(currentLogoFilename);
         const { success, error } = await SystemSettings.updateSettings({
-          logo_filename: DARK_LOGO_FILENAME,
+          logo_filename: LOGO_FILENAME,
         });
 
         return response.status(success ? 200 : 500).json({
@@ -546,15 +570,15 @@ function systemEndpoints(app) {
     }
   );
 
-  app.get("/system/api-key", [validatedRequest], async (_, response) => {
+  app.get("/system/api-keys", [validatedRequest], async (_, response) => {
     try {
       if (response.locals.multiUserMode) {
         return response.sendStatus(401).end();
       }
 
-      const apiKey = await ApiKey.get({});
+      const apiKeys = await ApiKey.where({});
       return response.status(200).json({
-        apiKey,
+        apiKeys,
         error: null,
       });
     } catch (error) {
@@ -575,7 +599,6 @@ function systemEndpoints(app) {
           return response.sendStatus(401).end();
         }
 
-        await ApiKey.delete();
         const { apiKey, error } = await ApiKey.create();
         return response.status(200).json({
           apiKey,
diff --git a/server/models/user.js b/server/models/user.js
index 3bf7e07a1..613aa95ed 100644
--- a/server/models/user.js
+++ b/server/models/user.js
@@ -54,7 +54,7 @@ const User = {
 
   delete: async function (clause = {}) {
     try {
-      await prisma.users.delete({ where: clause });
+      await prisma.users.deleteMany({ where: clause });
       return true;
     } catch (error) {
       console.error(error.message);
diff --git a/server/models/workspaceChats.js b/server/models/workspaceChats.js
index 3f8e67962..686dada98 100644
--- a/server/models/workspaceChats.js
+++ b/server/models/workspaceChats.js
@@ -29,6 +29,7 @@ const WorkspaceChats = {
         where: {
           workspaceId,
           user_id: userId,
+          include: true,
         },
         ...(limit !== null ? { take: limit } : {}),
         orderBy: {
@@ -48,6 +49,7 @@ const WorkspaceChats = {
       const chats = await prisma.workspace_chats.findMany({
         where: {
           workspaceId,
+          include: true,
         },
         ...(limit !== null ? { take: limit } : {}),
         orderBy: {
diff --git a/server/storage/anythingllm.db.bak b/server/storage/anythingllm.db.bak
new file mode 100644
index 0000000000000000000000000000000000000000..1fb2571e29fd64b66bfce26ee8b12cf557fff088
GIT binary patch
literal 106496
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%0D^@F&q*jzDSt&ud3Lg38
z3dxCi3Z4py#l@M$B?^`Kr3xkaDT$T#N;*o#`K3k4sl`fG(Xl#8C6xuKN>)nA8HpuI
zwT#_<NnMX1WP1b`7XznwKRYJ_D=XMsa&4(rN=YqFF3Kz@$;{7FvQkP^NG>fd$<I{)
zor0lIT9A{Un39^JkW{Hql98$a+Wn%Zq@z?&nv|1SoRONMWTj+eU}UUoXrOCgtYBzj
zWnf`tVxgp?R8*Sh36eE7HV3T&u>f^xLBoqlX}XC9X_mUi#+FHjNd_sV29~BuI<O!L
z&qyp$$ShWHgs!de@$t2f$&1ND;)A3?PDx5FE>S2?tW+q;S13u$PE{z$&ns5QPgBUt
zFG(%dQ3!BxE7nm+%u7+oFUd$PQh)@kLT+M7YEfolPBB=jq_ijx<gr|Z%)F9(g+v8V
zP$%V=D3oWGWaO8YC=?WBmL(=vDkSIUC8rkU73(28O(8k6B(+!}F((IPZ)OR|%;NIY
zqGE;2JOvQ9D77Fb6Qm+9MIp5;H4mgTzr0uhd{{|APO3sdYCec6$p>2uwiV<Yh2q5A
zRE3oM<kH;KJdm*^2+@+v+*CarVUn6yoQV`H8Hr`73W*9yrNx<fsl^~yB^RY87N;td
zWfo^9W#(j-RDwgH2s};;;pe9*1p5aR>wtV*Qk0lnQmms;oS2hZtdN|T0}VAufR-0!
zmXxICDJ19T=9cDVCMSYYP_cq8*vQNhka%h_#7l_^X+^223MHU`S18U0r+82nC{9gP
z$V^knEKw-WFUl@fNXst*$rT}-42r+Z67^z`X$3i{6$*K&sVT)^|A(a}m*f{IfOlYl
z5=CNpYH@yUsv;;gWtQZCG7i!bExnS85|B)Oc4}UHa(-!ENqlN?NhT;cC|MaA8R#gL
z7Ud{eDS?u`mA<}yXmM&$v3^NruD%N_8uZIja*Oq0v7%d0l%JehT%2E|pOIgZl3An=
z6-Z6d$F#RRzbM5SWUG>urCBXz)|T3__!DC{h-{DK<YM5IM9SJ^mms5g8<cHE^L8RM
zuaD;KoYVox+hXp!6dAigWOpbF7Xzp1v}92809#!Luf@?SyhMe9oWzo}{Gwci5>OSH
zn3DslM<6W+P*Gi$T2w-G&4*go=_z=YD5T~UmlmZK!|OXxxr?aX67#TCYhaCuImP)3
zsd<S>pelmYdaXDUq$4peHNUhtrxI*lX0bv_YH?<IUTO-cW>3w_NX$!41?6J`wN_bT
zQD%N=u>$sLNk^f$G&w^du^6*<19=sxhSO7s%r6Bu&`OFbK~)o|831YyD4^70pw>ch
zF}PMODOM;h%`AcCGK@-0y;z~RAT>ENEi+l6D7COOvnUl@t%Dj;kX8w(xmT@}oKc#W
z9Sm;&ff{1aCQwdJF0}4KZK#FjW#{FW=PBtZrQ|0&mX>7X7b#gOAw)Alt*^vHqf`TP
z0~6gu6Vo(Z6JsNDT?@k$W8FkkV>8p_B;&M{6f<niIRi^wBU1%KQ!8T=D+42>=3JtM
zWl~z2nSpMaQDQP^#e$)(rGY^b$iNf}vm^t<)U+f}H4AC+VoTyUnl7WwIcR+Q`1pca
zGoU8!h-uD&QVgk0HbYZlnryI^m~Ku^u6}ZUP7b)yNMei4)Wia*$yQjJT2!f2%h>g3
z?L!*~30nWp%3#mHBg?&w{V9tOgFQ*T-u3_?E(T8LK2J_YR@R`@;)49V6iCAvlnOvi
zM}_>nR4y)f?U0|BiqcgaZRmk2h|z`~tO^=!=nX(aPnNOUzj)t22-zMWIGUwL$7M2$
zK?Re-h^fdyjk{qqE(6Ze8~H$4dLv)Ep8yvFr#*pMdbEy)bZJHhT1N+32j4&|I781~
z2+Gj27pC%aF))fZ%5pHm=4#-X7d)k+NcL0>*cv}qkTrg;?FoEb44kU{?4Z^?*kI6T
gcTURau<q!TP3maVV2DoHfU<aj>~+R&{{q?T0N9fO)Bpeg

literal 0
HcmV?d00001

diff --git a/server/storage/assets/anything-llm-dark.png b/server/storage/assets/anything-llm-dark.png
deleted file mode 100644
index a294843869eface3065ca61c413528b3bfca668d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8413
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
C98zci

diff --git a/server/storage/assets/anything-llm-light.png b/server/storage/assets/anything-llm.png
similarity index 100%
rename from server/storage/assets/anything-llm-light.png
rename to server/storage/assets/anything-llm.png
diff --git a/server/swagger/index.js b/server/swagger/index.js
index 3f2529f8f..9ffdb2b97 100644
--- a/server/swagger/index.js
+++ b/server/swagger/index.js
@@ -21,8 +21,8 @@ function waitForElm(selector) {
 // Force change the Swagger logo in the header
 waitForElm('img[alt="Swagger UI"]').then((elm) => {
   if (window.SWAGGER_DOCS_ENV === 'development') {
-    elm.src = 'http://localhost:3000/public/anything-llm-light.png'
+    elm.src = 'http://localhost:3000/public/anything-llm.png'
   } else {
-    elm.src = `${window.location.origin}/anything-llm-light.png`
+    elm.src = `${window.location.origin}/anything-llm.png`
   }
 });
\ No newline at end of file
diff --git a/server/utils/files/logo.js b/server/utils/files/logo.js
index cf509d9ab..434f8d72c 100644
--- a/server/utils/files/logo.js
+++ b/server/utils/files/logo.js
@@ -3,18 +3,17 @@ const fs = require("fs");
 const { getType } = require("mime");
 const { v4 } = require("uuid");
 const { SystemSettings } = require("../../models/systemSettings");
-const LIGHT_LOGO_FILENAME = "anything-llm-light.png";
-const DARK_LOGO_FILENAME = "anything-llm-dark.png";
+const LOGO_FILENAME = "anything-llm.png";
 
 function validFilename(newFilename = "") {
-  return ![DARK_LOGO_FILENAME, LIGHT_LOGO_FILENAME].includes(newFilename);
+  return ![LOGO_FILENAME].includes(newFilename);
 }
 
-function getDefaultFilename(mode = "dark") {
-  return mode === "light" ? DARK_LOGO_FILENAME : LIGHT_LOGO_FILENAME;
+function getDefaultFilename() {
+  return LOGO_FILENAME;
 }
 
-async function determineLogoFilepath(defaultFilename = DARK_LOGO_FILENAME) {
+async function determineLogoFilepath(defaultFilename = LOGO_FILENAME) {
   const currentLogoFilename = await SystemSettings.currentLogoFilename();
   const basePath = path.join(__dirname, "../../storage/assets");
   const defaultFilepath = path.join(basePath, defaultFilename);
@@ -53,7 +52,7 @@ async function renameLogoFile(originalFilename = null) {
   return newFilename;
 }
 
-async function removeCustomLogo(logoFilename = DARK_LOGO_FILENAME) {
+async function removeCustomLogo(logoFilename = LOGO_FILENAME) {
   if (!logoFilename || !validFilename(logoFilename)) return false;
   const logoPath = path.join(__dirname, `../../storage/assets/${logoFilename}`);
   if (fs.existsSync(logoPath)) fs.unlinkSync(logoPath);
@@ -67,6 +66,5 @@ module.exports = {
   validFilename,
   getDefaultFilename,
   determineLogoFilepath,
-  LIGHT_LOGO_FILENAME,
-  DARK_LOGO_FILENAME,
+  LOGO_FILENAME,
 };
diff --git a/server/utils/helpers/updateENV.js b/server/utils/helpers/updateENV.js
index 3fcbb9a2a..88b079892 100644
--- a/server/utils/helpers/updateENV.js
+++ b/server/utils/helpers/updateENV.js
@@ -118,10 +118,7 @@ function supportedLLM(input = "") {
 }
 
 function validOpenAIModel(input = "") {
-  const validModels = [
-    "gpt-4",
-    "gpt-3.5-turbo",
-  ];
+  const validModels = ["gpt-4", "gpt-3.5-turbo"];
   return validModels.includes(input)
     ? null
     : `Invalid Model type. Must be one of ${validModels.join(", ")}.`;
-- 
GitLab