From d872ea5654b027cea754f54f7e1ec8dfce8c9aee Mon Sep 17 00:00:00 2001
From: "jaswanthshakthi@gmail.com" <23it054.jaswanth@measiit.edu.in>
Date: Thu, 20 Mar 2025 20:05:23 +0530
Subject: [PATCH] update

---
 public/assets/chillguy-gID_7.webp           | Bin 0 -> 22346 bytes
 public/assets/dashb.png                     | Bin 0 -> 655 bytes
 public/assets/path288.png                   | Bin 0 -> 568 bytes
 src/App.jsx                                 |  14 +-
 src/components2/AdminLogin2/AdminLogin4.jsx | 154 ++++++++++----------
 src/components2/Dashboard/dashboard.jsx     |  16 --
 src/components2/pages/Sidebar.jsx           | 151 +++++++++++++++++++
 src/components2/pages/Topbar.jsx            |  31 ++++
 src/components2/pages/add-agent.jsx         |  51 +++++++
 src/components2/pages/assign-task.jsx       |  73 ++++++++++
 src/components2/pages/dashboard.jsx         |  75 ++++++++++
 11 files changed, 471 insertions(+), 94 deletions(-)
 create mode 100644 public/assets/chillguy-gID_7.webp
 create mode 100644 public/assets/dashb.png
 create mode 100644 public/assets/path288.png
 delete mode 100644 src/components2/Dashboard/dashboard.jsx
 create mode 100644 src/components2/pages/Sidebar.jsx
 create mode 100644 src/components2/pages/Topbar.jsx
 create mode 100644 src/components2/pages/add-agent.jsx
 create mode 100644 src/components2/pages/assign-task.jsx
 create mode 100644 src/components2/pages/dashboard.jsx

diff --git a/public/assets/chillguy-gID_7.webp b/public/assets/chillguy-gID_7.webp
new file mode 100644
index 0000000000000000000000000000000000000000..675b468afc1bc4f98029398deac0466daf0c538a
GIT binary patch
literal 22346
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

literal 0
HcmV?d00001

diff --git a/public/assets/dashb.png b/public/assets/dashb.png
new file mode 100644
index 0000000000000000000000000000000000000000..e32d56ac34aa88c3dff3951a95d20ce3608ab4b9
GIT binary patch
literal 655
zcmV;A0&x9_P)<h;3K|Lk000e1NJLTq001Wd001Zm1^@s6ef8tu00009a7bBm000XU
z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0whU9K~#7F?U*r6
z!!Q(v{~`nv0>lJUSYSdz>H!El65If8z!B&T;0C|}5aI;o27tuGl1^nptyGqFG5<r3
zl$gYc9j628Cp|fdoA}F%?KlM%ET~2)waQpS06GW=rM6g{Fjn=UFCD{9r}F_vLd)&3
zh)b#`3=#aG=ma%b!u*g&-DRBUo2VqTT%C-FWK6+s)epVoc;OAk1>?-9nxQ^jo_}Qf
zfs>pT>T`3%xMe(YzXv}#Vc(X)Wz>_3SzI#?3#zksKZQGz!A}m7p;=LxIi7gQqF*8=
zMCk?_aLruG5!+dTiyTk5VsQgEYE2UcGDr^0gQap>tcPkg5Qchk6pK(#OfcoX;l~Qw
z-N_y(%UmB0=$lFL85Ako*`1|=hAxol<R17A3L&>(D9YS9+=(*VO){68PIB{{empVU
zS<h_0Go<gx)FAy&WM?|2nf<i<?W0AD0do>Ao6D-$OgD5R4+wzySbgO}O(!{)12uAr
zg2`GI2>P07M7m14!I)XT#~kEj36w~KhKv=SvrEAqYRZk_PXu?ImP`Z8mp5CbDff!`
zVto_+`M_a6kcDI`qptwzbAz(VqBn$f1O?>DCMFbRE@F|OeU2&j3|A<4quS*bzUZ&3
zM72Yr@=Gi)!AOM{95oheNl?Um-`!ThJJpQ73YD=EN%^2olp6`dXYuMS8S6~GScGJ>
p$7o37zrc*gCCi{Di-!gOpC8R~zB=T6Ag=%b002ovPDHLkV1fmo81VoA

literal 0
HcmV?d00001

diff --git a/public/assets/path288.png b/public/assets/path288.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d40a887ec47fdaab926342ef78ae38511a70629
GIT binary patch
literal 568
zcmV-80>}M{P)<h;3K|Lk000e1NJLTq000>P000^Y1^@s6LVfqm00009a7bBm000XU
z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH0nJH7K~#7FwU)h3
z<3JRJ&%HLgNZWYd0G@!|Zdq1ZZ^cS9v~=(UarjFKDT4$y(9i*IK!>O>1%fgqW!?Z&
zBAglSSV97liN{v*Nt48xYahk;+~W`&h+1*z!D|3Il*2$)CaVjLv;DosdD;0?R<PbW
ziU~RzQIh&lYn@KBS4+e};O!#a{8{}=l4dq+pREF0@v4h}K?6T%3f5Yy2r=)V0?gcq
zqBw9CX|>`Rd7D8s0{<KTbr#913lyjqHR~)gZib5VfgWl=B(vixl8EQUmMJPA4(siA
znyIr$agtVts3fASlkeF!?ryIhe*angE;r#9%IO|-q7~cb$i~ahmjP34j6`4bW!gto
zl)6hykSf@2ola#P+T!Gmq1k07m%sQ8B4wf?Ksh2p7e4y!VL>?{vaua6OQxJUUVK1I
z4AVZ?YbNi%{LuK#?c*JhJ&}*osK+!B{hwc0660Ln42YQ2l@28s14KHUUs!w+hu#;*
z=EVeJ4!%as%(9Tl!|bQ&QQ@v!^X`}h3_%XBcwCTilJ}J#F&Q$Mp;_iBEMs!WC}5R|
zIK(6&nq%qw93}{XLRK{PhJPmT<sXU3ovf@<g956T0>LYv+Kms=tg^=d0000<MNUMn
GLSTX|xAzbL

literal 0
HcmV?d00001

diff --git a/src/App.jsx b/src/App.jsx
index 4e1cb8f..ed1bfd2 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,13 +1,19 @@
 import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
-import AdminLogin4 from "./components2/AdminLogin2/AdminLogin4";
-import Dashboard from "./components2/Dashboard/dashboard";
-
+import AdminLogin from "./components2/AdminLogin2/AdminLogin4";
+import Dashboard from "./components2/pages/dashboard";
+import AddAgent from "./components2/pages/add-agent";
+import Sidebar from "./components2/pages/Sidebar";
+//import AssignTask from "./components2/pages/assign-task";
 function App() {
   return (
     <Router>
       <Routes>
-        <Route path="/" element={<AdminLogin4 />} />
+
+        <Route path="/" element={<AdminLogin />} />
+        <Route path="/sidebar" element={<Sidebar />} />
         <Route path="/dashboard" element={<Dashboard />} />
+        <Route path="/add-agent" element={<AddAgent />} />
+       {/*<Route path="/assign-task" element={<AssignTask />} />*/}
       </Routes>
     </Router>
   );
diff --git a/src/components2/AdminLogin2/AdminLogin4.jsx b/src/components2/AdminLogin2/AdminLogin4.jsx
index 887f763..b5b967f 100644
--- a/src/components2/AdminLogin2/AdminLogin4.jsx
+++ b/src/components2/AdminLogin2/AdminLogin4.jsx
@@ -1,28 +1,39 @@
-import { useState } from "react"; 
+import { useState, useEffect } from "react";
 import { FiMail, FiEye, FiEyeOff } from "react-icons/fi";
 import { useNavigate } from "react-router-dom";
 import axios from "axios";
+
 const loginImage = new URL("/public/assets/login_img/loginadmin.svg", import.meta.url).href;
-//const API_BASE_URL = "https://8dfst7hm-3000.inc1.devtunnels.ms/";
 const API_BASE_URL = "http://localhost:5000/";
 
 export default function AdminLogin() {
   const [email, setEmail] = useState("");
   const [password, setPassword] = useState("");
   const [showPassword, setShowPassword] = useState(false);
+  const [loading, setLoading] = useState(false);
   const [error, setError] = useState({ email: "", password: "", general: "" });
+  
+  const navigate = useNavigate();
+
+  // Cleanup function 
+  useEffect(() => {
+    let isMounted = true;
+    return () => {
+      isMounted = false;
+    };
+  }, []);
 
+  // Validation functions
   const validateEmail = (email) => /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email);
   const validatePassword = (pass) => pass.length >= 8;
 
-  const navigate = useNavigate(); 
-
+  // Handle input changes
   const handleEmailChange = (e) => {
     const value = e.target.value;
     setEmail(value);
     setError((prev) => ({
       ...prev,
-      email: value === "" ? "" : !validateEmail(value) ? "Invalid email format" : ""
+      email: value && !validateEmail(value) ? "Invalid email format" : "",
     }));
   };
 
@@ -31,60 +42,57 @@ export default function AdminLogin() {
     setPassword(value);
     setError((prev) => ({
       ...prev,
-      password: value === "" ? "" : !validatePassword(value) ? "Password must be at least 8 characters" : ""
+      password: value && !validatePassword(value) ? "Password must be at least 8 characters" : "",
     }));
   };
-  const [loading, setLoading] = useState(false); 
 
-const handleSubmit = async (e) => {
-  e.preventDefault();
+  // Handle form submission
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    if (loading) return;
+    setLoading(true);
+  
+    let newErrors = { email: "", password: "", general: "" };
+  
+    if (!validateEmail(email)) newErrors.email = "Invalid email format.";
+    if (!validatePassword(password)) newErrors.password = "Password must be at least 8 characters long.";
   
-  if (loading) return; 
-  setLoading(true);
-
-  let newErrors = { email: "", password: "", general: "" };
-
-  // Validation
-  if (!validateEmail(email)) newErrors.email = "Invalid email format.";
-  if (!validatePassword(password)) newErrors.password = "Password must be at least 8 characters long.";
-
-  if (newErrors.email || newErrors.password) {
-    //newErrors.general = "*Incorrect Email or Password!";
-    setError(newErrors);
-    setLoading(false); 
-    return;
-  }
-
-  try {
-    const response = await axios.post(
-      `${API_BASE_URL}api/auth/login`,
-      { email, password },
-      {
-        headers: { "Content-Type": "application/json" },
-        withCredentials: true,
+    if (newErrors.email || newErrors.password) {
+      setError(newErrors);
+      setLoading(false);
+      return;
+    }
+  
+    try {
+      const response = await axios.post(
+        `${API_BASE_URL}api/auth/login`,
+        { email, password },
+        {
+          headers: { "Content-Type": "application/json" },
+          withCredentials: true,
+        }
+      );
+  
+      if (response.status === 200) {
+        console.log("Login Success:", response.data);
+        document.cookie = "session_token=sample_token; path=/";
+        alert("Login Successful!");
+        setError({ email: "", password: "", general: "" });
+        navigate("/dashboard");
       }
-    );
-
-    if (response.status === 200) {
-      console.log("Login Success:", response.data);
-      alert("Login Successful!");
-      setError({ email: "", password: "", general: "" });
-      navigate("/dashboard"); 
+    } catch (error) {
+      console.error("Login error:", error.response?.data || error.message);
+  
+      setError((prev) => ({
+        ...prev,
+        email: error.response?.data?.email ? "Email not found or incorrect" : "",
+        password: error.response?.data?.password ? "Incorrect password" : "",
+        general: error.response?.data?.message || "Login failed. Please check your credentials.",
+      }));
+    } finally {
+      setLoading(false);
     }
-  } catch (error) {
-    console.error(error.response?.data || error.message);
-    setError({
-      email: error.response?.data?.email || "",
-    password: error.response?.data?.password || "",
-    general: error.response?.data?.message || "Login failed. Please check your credentials.",
-
-    });
-  }finally{
-
-  setLoading(false);
-  }
-};
-
+  };
   
   return (
     <div className="flex flex-col items-center justify-center h-screen bg-[#D9F6F0] px-6 py-4">
@@ -107,27 +115,25 @@ const handleSubmit = async (e) => {
           <form onSubmit={handleSubmit} className="w-full max-w-md">
             
           <div className="relative w-full mb-8">
-  <div className={`relative border-2 rounded-lg border-[#6FE7D1] bg-transparent ${error.email ? "border-[#EEAB4D]" : ""}`}>
-    <label
-      className={`absolute -top-3 left-4 px-2 bg-[#2E2E2E] border border-[#6FE7D1] rounded-md text-sm font-font-primary font-medium ${error.email ? "border-[#EEAB4D] text-[#EEAB4D]" : "text-[#6FE7D1]"}`}
-    >
-     Admin Email
-    </label>
-    <input
-      type="text"
-      value={email}
-      onChange={handleEmailChange}
-      placeholder="Enter email"
-      className={`w-full h-14 px-3 pr-12 bg-transparent text-white text-lg focus:outline-none font-font-primary  ${
-         error.email ? "border-red-500" : "border-gray-300"
-      }`}
-    />
-    <FiMail 
-      className="absolute right-4 top-1/2 transform -translate-y-1/2 text-xl"
-      style={{ color: error.email ? "#EEAB4D" : "#6FE7D1" }} 
-    />
-  </div>
-  {error.email && <p className="text-[#EEAB4D] text-sm mt-1">{error.email}</p>}
+          <div className={`relative border-2 rounded-lg bg-transparent ${error.email ? "border-[#EEAB4D]" : "border-[#6FE7D1]"}`}>
+  <label
+    className={`absolute -top-3 left-4 px-2 bg-[#2E2E2E] border rounded-md text-sm font-font-primary font-medium ${error.email ? "border-[#EEAB4D] text-[#EEAB4D]" : "border-[#6FE7D1] text-[#6FE7D1]"}`}
+  >
+    Admin Email
+  </label>
+  <input
+    type="text"
+    value={email}
+    onChange={handleEmailChange}
+    placeholder="Enter email"
+    className="w-full h-14 px-3 pr-12 bg-transparent text-white text-lg focus:outline-none font-font-primary"
+  />
+  <FiMail 
+    className="absolute right-4 top-1/2 transform -translate-y-1/2 text-xl"
+    style={{ color: error.email ? "#EEAB4D" : "#6FE7D1" }} 
+  />
+</div>
+{error.email && <p className="text-[#EEAB4D] text-sm mt-1">{error.email}</p>}
 </div>
 
 {/* Passwd Input */}
diff --git a/src/components2/Dashboard/dashboard.jsx b/src/components2/Dashboard/dashboard.jsx
deleted file mode 100644
index 5e43f85..0000000
--- a/src/components2/Dashboard/dashboard.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react'
-
-const Dashboard = () => {
-  return (
-    <div className="flex flex-col items-center justify-center h-screen bg-[#D9F6F0] px-6 py-4">
-      <h1 className="text-4xl font-bold text-[#0C4339] mb-6">Dashboard</h1>
-      <p className="text-lg text-[#6FE7D1] mb-4">Welcome to the Admin Dashboard!</p>
-      <button className="mt-4 px-4 py-2 bg-[#6FE7D1] text-white rounded hover:bg-[#5CC4AE]">
-        Logout
-      </button>
-    </div>
-  )
-}
-
-
-export default Dashboard;
diff --git a/src/components2/pages/Sidebar.jsx b/src/components2/pages/Sidebar.jsx
new file mode 100644
index 0000000..09fd3d2
--- /dev/null
+++ b/src/components2/pages/Sidebar.jsx
@@ -0,0 +1,151 @@
+import { useState, useEffect } from "react";
+import { Link, useLocation, useNavigate } from "react-router-dom";
+import { FaTasks, FaCog, FaSignOutAlt } from "react-icons/fa";
+import axios from "axios";
+import { FiMenu, FiX } from "react-icons/fi";
+
+const Sidebar = () => {
+  const location = useLocation(); // Get current route path
+  const navigate = useNavigate(); // Navigation hook
+  const [isOpen, setIsOpen] = useState(false);
+
+  const handleLogout = async () => {
+    try {
+      await axios.post("http://localhost:5000/api/auth/logout", {}, { withCredentials: true });
+      document.cookie = "session_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
+      navigate("/");
+    } catch (err) {
+      console.error("Logout failed:", err);
+    }
+  };
+
+  // Automatically close the sidebar when the route changes
+  useEffect(() => {
+    setIsOpen(false);
+  }, [location.pathname]);
+
+  return (
+    <>
+      {/* Mobile Toggle Button */}
+      <button
+        onClick={() => setIsOpen(true)}
+        className="md:hidden p-2 fixed top-4 left-4 z-50 bg-white shadow-lg rounded-lg"
+      >
+        <FiMenu size={24} />
+      </button>
+
+      {/* Backdrop for Mobile */}
+      {isOpen && (
+        <div
+          className={`fixed inset-0 z-40 ${
+            window.innerWidth >= 768 ? "bg-transparent" : "bg-transparent"
+          }`}
+          onClick={() => setIsOpen(false)}
+        ></div>
+      )}
+
+      {/* Sidebar Container */}
+      <div
+        className={`fixed md:relative top-0 left-0 h-[80vh] md:h-[90vh] w-64 bg-white shadow-lg flex flex-col p-6 rounded-2xl md:ml-4 md:mt-4 md:mb-4 transition-transform transform ${
+          isOpen ? "translate-x-0" : "-translate-x-full"
+        } md:translate-x-0 z-50`}
+      >
+        {/* Close Button for Mobile */}
+        <button
+          onClick={(e) => {
+            e.stopPropagation();
+            setIsOpen(false);
+          }}
+          className="md:hidden p-2 self-end z-50"
+        >
+          <FiX size={24} />
+        </button>
+
+        {/* Logo Section */}
+        <div className="flex items-center space-x-2 mb-10">
+          <div className="bg-[#136D5E] text-white w-10 h-10 flex items-center justify-center rounded-2xl text-lg font-bold">
+            O
+          </div>
+          <h2 className="text-xl font-bold text-gray-900">OMPOI</h2>
+        </div>
+
+        {/* Navigation Menu */}
+        <nav className="flex flex-col gap-4">
+          <Link
+            to="/dashboard"
+            className={`flex items-center space-x-3 px-4 py-2 rounded-lg ${
+              location.pathname === "/dashboard"
+                ? "bg-[#136D5E] text-white font-semibold"
+                : "text-gray-600 hover:text-green-700 hover:bg-transparent"
+            }`}
+          >
+            <img src="/assets/path288.png" alt="Agent Task" className="w-5 h-5" />
+            <span>DashBoard</span>
+          </Link>
+
+          <Link
+            to="/add-agent"
+            className={`flex items-center space-x-3 px-4 py-2 rounded-lg ${
+              location.pathname === "/add-agent"
+                ? "bg-[#136D5E] text-white font-semibold"
+                : "text-gray-600 hover:text-green-700 hover:bg-transparent"
+            }`}
+          >
+            <img src="/assets/path288.png" alt="Agent Task" className="w-5 h-5" />
+            <span>Agent Task</span>
+          </Link>
+
+          <Link
+            to="/assign-task"
+            className={`flex items-center space-x-3 px-4 py-2 rounded-lg ${
+              location.pathname === "/assign-task"
+                ? "bg-[#136D5E] text-white font-semibold"
+                : "text-gray-600 hover:text-green-700 hover:bg-transparent"
+            }`}
+          >
+            <FaTasks />
+            <span>Assign Task</span>
+          </Link>
+
+          <Link
+            to="/settings"
+            className={`flex items-center space-x-3 px-4 py-2 rounded-lg ${
+              location.pathname === "/settings"
+                ? "bg-[#136D5E] text-white font-semibold"
+                : "text-gray-600 hover:text-green-700 hover:bg-transparent"
+            }`}
+          >
+            <FaCog />
+            <span>Settings</span>
+          </Link>
+        </nav>
+
+        {/* Admin Info + Logout Button */}
+        <div className="mt-auto flex flex-col space-y-3">
+          <div className="flex items-center space-x-3 p-4 border-t">
+            <img
+              src="/assets/chillguy-gID_7.webp"
+              alt="Admin"
+              className="w-10 h-10 rounded-full"
+            />
+            <div>
+              <p className="text-sm font-semibold">Master Admin</p>
+              <p className="text-xs text-gray-500">Admin@ompoi.com</p>
+            </div>
+          </div>
+
+          {/* 🔴 Logout Button */}
+          <button
+            onClick={handleLogout}
+            className="flex items-center space-x-3 px-4 py-2 rounded-lg bg-red-500 text-white font-semibold hover:bg-red-700"
+          >
+            <FaSignOutAlt />
+            <span>Logout</span>
+          </button>
+        </div>
+      </div>
+    </>
+  );
+};
+
+export default Sidebar;
diff --git a/src/components2/pages/Topbar.jsx b/src/components2/pages/Topbar.jsx
new file mode 100644
index 0000000..500b34b
--- /dev/null
+++ b/src/components2/pages/Topbar.jsx
@@ -0,0 +1,31 @@
+import { useLocation } from "react-router-dom";
+
+const TopBar = () => {
+  const location = useLocation();
+
+  // Map the paths to their respective titles
+  const pageTitles = {
+    "/dashboard": "Admin Dashboard",
+    "/add-agent": "Add Agent",
+    "/users": "Manage Users",
+    "/settings": "Settings",
+  };
+
+  // Get the title based on the path, fallback to "Dashboard"
+  const title = pageTitles[location.pathname] || "Dashboard";
+
+  return (
+    <div className="p-4">
+     <div className="flex justify-between items-center px-10 py-10 bg-white rounded-2xl shadow-md w-[100%] h-[10vh] mx-auto">
+
+        <h1 className="text-xl font-semibold text-teal-700">{title}</h1>
+        <div className="flex items-center gap-2">
+          <img src="/assets/chillguy-gID_7.webp" alt="Admin Icon" className="w-6 h-6 rounded-lg" />
+          <span className="text-gray-800 font-medium">Admin</span>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default TopBar;
diff --git a/src/components2/pages/add-agent.jsx b/src/components2/pages/add-agent.jsx
new file mode 100644
index 0000000..015fcac
--- /dev/null
+++ b/src/components2/pages/add-agent.jsx
@@ -0,0 +1,51 @@
+import React, { useEffect } from "react";
+import { useNavigate } from "react-router-dom";
+import axios from "axios";
+import Sidebar from "./Sidebar";
+import Topbar from "./Topbar";
+const API_BASE_URL = "http://localhost:5000";
+
+const AddAgent = () => {
+  const navigate = useNavigate();
+
+  useEffect(() => {
+    const checkSession = async () => {
+      try {
+        await axios.get(`${API_BASE_URL}/api/auth/session`, { withCredentials: true });
+      } catch (error) {
+        console.log("Session expired. Logging out...");
+        navigate("/");
+      }
+    };
+
+
+    const interval = setInterval(checkSession, 60000);
+
+    return () => clearInterval(interval); 
+  }, [navigate]);
+
+  // Handle logout
+  {/*
+  const handleLogout = async () => {
+    try {
+      await axios.post(`${API_BASE_URL}/api/auth/logout`, {}, { withCredentials: true });
+      navigate("/");
+    } catch (err) {
+      console.error("Logout failed:", err);
+    }
+  };*/}
+
+  return (
+    <div className="flex h-screen bg-[#CCF2EC]">
+    {/* Sidebar */}
+    <Sidebar />
+    {/* Main Content */}
+          <div className="flex-1 flex flex-col">
+            {/* Top Navbar */}
+            <Topbar />
+            </div>
+  </div>
+  );
+};
+
+export default AddAgent;
\ No newline at end of file
diff --git a/src/components2/pages/assign-task.jsx b/src/components2/pages/assign-task.jsx
new file mode 100644
index 0000000..17eb01e
--- /dev/null
+++ b/src/components2/pages/assign-task.jsx
@@ -0,0 +1,73 @@
+import React, { useEffect, useState } from "react";
+import { useNavigate } from "react-router-dom";
+import axios from "axios";
+import Sidebar from "./Sidebar";
+import Topbar from "./Topbar"; // New Top Navbar component
+
+const API_BASE_URL = "http://localhost:5000";
+
+const AssignTask= () => {
+  const navigate = useNavigate();
+
+  useEffect(() => {
+    const abortController = new AbortController();
+
+    const checkSession = async () => {
+      try {
+        await axios.get(`${API_BASE_URL}/api/auth/session`, {
+          withCredentials: true,
+          signal: abortController.signal,
+        });
+      } catch (error) {
+        console.log("Session expired. Logging out...");
+        handleLogout();
+      }
+    };
+
+    const handleLogout = async () => {
+      try {
+        await axios.post(`${API_BASE_URL}/api/auth/logout`, {}, { withCredentials: true });
+      } catch (err) {
+        console.error("Logout failed:", err);
+      }
+      document.cookie = "session_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
+      navigate("/", { replace: true });
+    };
+
+    const interval = setInterval(checkSession, 30000);
+
+    return () => {
+      clearInterval(interval);
+      abortController.abort();
+    };
+  }, [navigate]);
+
+  return (
+    <div className="flex h-screen bg-[#CCF2EC]">
+      {/* Sidebar */}
+      <Sidebar />
+
+      {/* Main Content */}
+      <div className="flex-1 flex flex-col">
+        {/* Top Navbar */}
+        <Topbar />
+
+        {/* Dashboard Content */}
+        <div className="p-6 flex flex-wrap gap-6">
+          <div className="bg-white p-4 rounded-xl shadow-md w-full md:w-1/2 h-[]">
+            <h2 className="font-semibold text-lg">Statistics and Summary</h2>
+          </div>
+          <div className="bg-white p-4 rounded-xl shadow-md w-full md:w-1/2">
+            <h2 className="font-semibold text-lg">Today's Sales</h2>
+          </div>
+          <div className="bg-white p-4 rounded-xl shadow-md w-full">
+            <h2 className="font-semibold text-lg">Other Details</h2>
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default AssignTask;
+
diff --git a/src/components2/pages/dashboard.jsx b/src/components2/pages/dashboard.jsx
new file mode 100644
index 0000000..08919c0
--- /dev/null
+++ b/src/components2/pages/dashboard.jsx
@@ -0,0 +1,75 @@
+import React, { useEffect, useState } from "react";
+import { useNavigate } from "react-router-dom";
+import axios from "axios";
+import Sidebar from "./Sidebar";
+import Topbar from "./Topbar"; // New Top Navbar component
+
+const API_BASE_URL = "http://localhost:5000";
+
+const Dashboard = () => {
+  const navigate = useNavigate();
+
+  useEffect(() => {
+    const abortController = new AbortController();
+
+    const checkSession = async () => {
+      try {
+        await axios.get(`${API_BASE_URL}/api/auth/session`, {
+          withCredentials: true,
+          signal: abortController.signal,
+        });
+      } catch (error) {
+        console.log("Session expired. Logging out...");
+        handleLogout();
+      }
+    };
+
+    const handleLogout = async () => {
+      try {
+        await axios.post(`${API_BASE_URL}/api/auth/logout`, {}, { withCredentials: true });
+      } catch (err) {
+        console.error("Logout failed:", err);
+      }
+      document.cookie = "session_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
+      navigate("/", { replace: true });
+    };
+
+    const interval = setInterval(checkSession, 30000);
+
+    return () => {
+      clearInterval(interval);
+      abortController.abort();
+    };
+  }, [navigate]);
+
+  return (
+    <div className="flex h-screen bg-[#CCF2EC]">
+      {/* Sidebar */}
+      <Sidebar />
+
+      {/* Main Content */}
+      <div className="flex-1 flex flex-col">
+        {/* Top Navbar */}
+        <Topbar />
+
+        {/* Dashboard Content */}
+        <div className="p-6 flex flex-wrap gap-6">
+        <div className="bg-white p-4 rounded-xl shadow-md w-[450px] h-[300px]">
+  <h2 className="font-semibold text-[#136D5E]">Statistics and Summary</h2>
+</div>
+
+          <div className="bg-white p-4 rounded-xl shadow-md w-full md:w-1/2">
+            <h2 className="font-semibold text-[#136D5E]">Today's Sales</h2>
+          </div>
+          <div className="bg-white p-4 rounded-xl shadow-md w-full ">
+            <h2 className="font-semibold text-[#136D5E]">Other Details</h2>
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default Dashboard;
+
+
-- 
GitLab