Index: backend/ai/processRequestAi.js
===================================================================
--- backend/ai/processRequestAi.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/ai/processRequestAi.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -30,5 +30,5 @@
       model: "gpt-4",
       messages: [{ role: "user", content: prompt }],
-      temperature: 0.2, // Even lower temperature for more consistent responses
+      temperature: 0.2,
     });
 
Index: backend/auth/auth.js
===================================================================
--- backend/auth/auth.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/auth/auth.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,21 +1,20 @@
-const jwt = require('jsonwebtoken');
-const path = require('path');
-const dotenv = require('dotenv');
-dotenv.config({ path: path.resolve(__dirname, '../.env') });
+const jwt = require("jsonwebtoken");
+const path = require("path");
+const dotenv = require("dotenv");
+dotenv.config({ path: path.resolve(__dirname, "../.env") });
 
 const authenticateToken = (req, res, next) => {
-  const authHeader = req.headers['authorization'];
-  const token = authHeader && authHeader.split(' ')[1];
+  const authHeader = req.headers["authorization"];
+  const token = authHeader && authHeader.split(" ")[1];
 
   if (!token) {
-    return res.status(401).json({ message: 'Authentication required' });
+    return res.status(401).json({ message: "Authentication required" });
   }
 
   jwt.verify(token, process.env.SUPABASE_JWT_SECRET, (err, decoded) => {
     if (err) {
-      return res.status(403).json({ message: 'Invalid or expired token' });
+      return res.status(403).json({ message: "Invalid or expired token" });
     }
 
-    // Add the decoded user info to request for permission checks
     req.user = {
       ...decoded,
Index: backend/controllers/apiController.js
===================================================================
--- backend/controllers/apiController.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/controllers/apiController.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -49,5 +49,5 @@
           password,
           user_metadata: { username, name },
-          // email_confirm: true,
+          email_confirm: true,
         });
 
Index: backend/controllers/taskController.js
===================================================================
--- backend/controllers/taskController.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/controllers/taskController.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -295,4 +295,8 @@
     if (!user) {
       return res.status(404).json({ message: "User not found" });
+    }
+    if (user.solvedDailyChallenge) {
+      alert("You have already solved today's challenge!");
+      return;
     }
     let attempts = user.attempts || 0;
Index: backend/prisma/schema.prisma
===================================================================
--- backend/prisma/schema.prisma	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/prisma/schema.prisma	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -90,2 +90,8 @@
   challenges   challenges @relation(fields: [challenge_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
 }
+
+model leaderboard_cache {
+  cache_key String  @id
+  data      Json?
+  timestamp BigInt?
+}
Index: backend/scripts/deleteAllChallenges.js
===================================================================
--- backend/scripts/deleteAllChallenges.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/scripts/deleteAllChallenges.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,13 +1,13 @@
-const prisma = require('../lib/prisma');
+const prisma = require("../lib/prisma");
 
 async function deleteAllChallenges() {
   try {
     const result = await prisma.challenges.deleteMany({});
-    console.log(`✅ Successfully deleted ${result.count} challenges`);
+    console.log(`Successfully deleted ${result.count} challenges`);
   } catch (error) {
-    console.error('❌ Error deleting challenges:', error);
+    console.error("Error deleting challenges:", error);
     throw error;
   } finally {
-    console.log('Disconnecting from database...');
+    console.log("Disconnecting from database...");
     await prisma.$disconnect();
   }
Index: backend/scripts/deleteAllTestCases.js
===================================================================
--- backend/scripts/deleteAllTestCases.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/scripts/deleteAllTestCases.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -10,5 +10,5 @@
     return result.count;
   } catch (error) {
-    console.error("❌ Error deleting test cases:", error);
+    console.error("Error deleting test cases:", error);
     throw error;
   } finally {
Index: backend/scripts/resetDailyTaskId.js
===================================================================
--- backend/scripts/resetDailyTaskId.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/scripts/resetDailyTaskId.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -3,11 +3,8 @@
 async function resetDailyTestCaseIds() {
   try {
-    // IMPORTANT: Replace 'user' with the actual name of your user model in schema.prisma
-    // (e.g., if your model is `model Users { ... }`, use `prisma.users.updateMany`)
-    // IMPORTANT: Ensure 'daily_test_case_id' is the correct field name.
     const result = await prisma.users.updateMany({
-      where: {}, // An empty where clause applies the update to all records
+      where: {},
       data: {
-        daily_test_case_id: null, // Set the field to an empty string
+        daily_test_case_id: null,
       },
     });
@@ -18,5 +15,5 @@
   } catch (error) {
     console.error("Error resetting daily_test_case_id:", error);
-    process.exitCode = 1; // Indicate an error occurred
+    process.exitCode = 1;
   } finally {
     await prisma.$disconnect();
Index: backend/supabase/config.toml
===================================================================
--- backend/supabase/config.toml	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/supabase/config.toml	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -4,4 +4,5 @@
 verify_jwt = true
 import_map = "./functions/leaderboard/deno.json"
+
 # Uncomment to specify a custom file path to the entrypoint.
 # Supported file extensions are: .ts, .js, .mjs, .jsx, .tsx
@@ -10,2 +11,6 @@
 # For example, if you want to serve static HTML pages in your function:
 # static_files = [ "./functions/leaderboard/*.html" ]
+
+[functions.leaderboard.env]
+SUPABASE_URL = "https://your-project.supabase.co"
+SUPABASE_SERVICE_ROLE_KEY = "your-service-role-key"
Index: backend/supabase/functions/leaderboard/index.ts
===================================================================
--- backend/supabase/functions/leaderboard/index.ts	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/supabase/functions/leaderboard/index.ts	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,13 +1,9 @@
 import { serve } from "https://deno.land/std/http/server.ts";
-import { createClient } from "https://esm.sh/@supabase/supabase-js";
-import supabase from "../../../supabaseClient";
+import supabase from "../../../supabaseEdgeClient.js";
 
 const CACHE_DURATION = 5 * 60 * 1000;
 const PAGE_SIZE = 20;
 
-type CacheEntry = {
-  data: any;
-  timestamp: number;
-};
+console.log("Starting leaderboard function...");
 
 serve(async (req: Request): Promise<Response> => {
@@ -49,28 +45,23 @@
     const cacheKey = `leaderboard:${page}-${limit}`;
 
-    const kv = await Deno.openKv();
+    const { data: cacheData, error: cacheError } = await supabase
+      .from("leaderboard_cache")
+      .select("*")
+      .eq("cache_key", cacheKey)
+      .single();
 
-    // Check cache in KV
-    const cacheResult = await kv.get<CacheEntry>([cacheKey]);
+    if (cacheData && now - cacheData.timestamp < CACHE_DURATION) {
+      console.log("Cache hit");
+      return new Response(JSON.stringify({ ...cacheData.data, cached: true }), {
+        status: 200,
+        headers: {
+          "Content-Type": "application/json",
+          "Access-Control-Allow-Origin": "*",
+          "Cache-Control": "max-age=300",
+        },
+      });
+    }
 
-    // If we have a valid cache entry, return it
-    if (
-      cacheResult.value &&
-      now - cacheResult.value.timestamp < CACHE_DURATION
-    ) {
-      console.log("entered");
-      return new Response(
-        JSON.stringify({ ...cacheResult.value.data, cached: true }),
-        {
-          status: 200,
-          headers: {
-            "Content-Type": "application/json",
-            "Access-Control-Allow-Origin": "*",
-            "Cache-Control": "max-age=300",
-          },
-        }
-      );
-    }
-    console.log("not entered");
+    console.log("Cache miss — fetching leaderboard");
     const offset = (page - 1) * limit;
     const { data, error, count } = await supabase
@@ -80,7 +71,5 @@
       .range(offset, offset + limit - 1);
 
-    if (error) {
-      throw new Error(`Supabase query error: ${error.message}`);
-    }
+    if (error) throw new Error(`Supabase query error: ${error.message}`);
 
     const totalPages = Math.ceil((count ?? 0) / limit);
@@ -104,13 +93,9 @@
     };
 
-    // Store in KV with automatic expiration
-    // This is cleaner than manual deletion as KV handles expiration for us
-    await kv.set(
-      [cacheKey],
-      { data: responseData, timestamp: now },
-      {
-        expireIn: CACHE_DURATION,
-      }
-    );
+    await supabase.from("leaderboard_cache").upsert({
+      cache_key: cacheKey,
+      data: responseData,
+      timestamp: now,
+    });
 
     return new Response(JSON.stringify(responseData), {
@@ -119,5 +104,5 @@
         "Content-Type": "application/json",
         "Access-Control-Allow-Origin": "*",
-        "Cache-Control": "max-age=300", // Allow browser caching
+        "Cache-Control": "max-age=300",
       },
     });
Index: backend/supabaseClient.js
===================================================================
--- backend/supabaseClient.js	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ backend/supabaseClient.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,4 +1,4 @@
-const { createClient } = require('@supabase/supabase-js');
-require('dotenv').config();
+const { createClient } = require("@supabase/supabase-js");
+require("dotenv").config();
 
 const supabaseUrl = process.env.SUPABASE_URL;
@@ -7,5 +7,5 @@
 if (!supabaseUrl || !supabaseKey) {
   throw new Error(
-    'Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY in environment variables'
+    "Node.js: Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY in .env file"
   );
 }
@@ -13,5 +13,3 @@
 const supabase = createClient(supabaseUrl, supabaseKey);
 
-module.exports = {
-  supabase,
-};
+module.exports = { supabase };
Index: backend/supabseEdgeClient.js
===================================================================
--- backend/supabseEdgeClient.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
+++ backend/supabseEdgeClient.js	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -0,0 +1,15 @@
+import { createClient } from "https://esm.sh/@supabase/supabase-js";
+import "https://deno.land/std/dotenv/load.ts";
+
+const supabaseUrl = Deno.env.get("SUPABASE_URL");
+const supabaseKey = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY");
+
+if (!supabaseUrl || !supabaseKey) {
+  throw new Error(
+    "Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY in environment variables"
+  );
+}
+
+const supabase = createClient(supabaseUrl, supabaseKey);
+
+export default supabase;
Index: client/src/Dashboard/components/Profile.jsx
===================================================================
--- client/src/Dashboard/components/Profile.jsx	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ client/src/Dashboard/components/Profile.jsx	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,17 +1,17 @@
 // Example for Profile.jsx
-import React from 'react';
-import pp from '../../assets/images/pp.svg';
-import Navbar from './Navbar';
-import RankBadge from '@/utils/RankBadge.jsx';
-import { useAuth } from '../../contexts/AuthContext.jsx';
-import { useNavigate } from 'react-router-dom';
-import { useEffect } from 'react';
+import React from "react";
+import pp from "../../assets/images/pp.svg";
+import Navbar from "./Navbar";
+import RankBadge from "@/utils/RankBadge.jsx";
+import { useAuth } from "../../contexts/AuthContext.jsx";
+import { useNavigate } from "react-router-dom";
+import { useEffect } from "react";
 const Profile = () => {
   const { logout } = useAuth();
   const navigate = useNavigate();
-  const user = JSON.parse(localStorage.getItem('user'));
+  const user = JSON.parse(localStorage.getItem("user"));
   useEffect(() => {
     if (!user) {
-      navigate('/');
+      navigate("/");
     }
   }, [user, navigate]);
@@ -19,5 +19,5 @@
   const handleSignOut = async () => {
     await logout();
-    navigate('/');
+    navigate("/");
   };
 
@@ -55,7 +55,7 @@
             <p className="text-gray-500">{user.email}</p>
             <div className="mt-4">
-              <p className="text-lg">
+              <div className="text-lg">
                 <RankBadge rankName={user.rank} size="lg" />
-              </p>
+              </div>
               <p className="text-lg mt-5">
                 <span className="font-bold">Points:</span> {user.points}
Index: client/src/LandingPage/components/LeaderBoardEx.jsx
===================================================================
--- client/src/LandingPage/components/LeaderBoardEx.jsx	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ client/src/LandingPage/components/LeaderBoardEx.jsx	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -22,5 +22,4 @@
   }, [location.pathname]);
 
-  // Function to fetch leaderboard data
   const fetchLeaderboard = async (page = 1, append = false) => {
     console.log("entered from leaderboard.jsx");
@@ -33,9 +32,8 @@
       }
 
-      // Fix: Use the correct Supabase function URL
       const response = await fetch(
         `${
           import.meta.env.VITE_SUPABASE_URL
-        }/functions/v1/leaderboard?page=${page}&limit=20`,
+        }functions/v1/leaderboard?page=${page}&limit=20`,
         {
           method: "GET",
Index: client/src/LandingPage/components/OurRankSystem.jsx
===================================================================
--- client/src/LandingPage/components/OurRankSystem.jsx	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ client/src/LandingPage/components/OurRankSystem.jsx	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -5,5 +5,4 @@
 
 export const OurRankSystem = () => {
-  // Convert RANK_DATA object to array and sort by id
   const rankData = Object.values(RANK_DATA).sort((a, b) => a.id - b.id);
 
Index: client/src/contexts/AuthContext.jsx
===================================================================
--- client/src/contexts/AuthContext.jsx	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ client/src/contexts/AuthContext.jsx	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -119,4 +119,5 @@
     checkStaleSession();
   }, [navigate, INACTIVITY_TIMEOUT]);
+
   const setupTokenExpiryLogout = useCallback(
     (accessToken) => {
@@ -128,5 +129,5 @@
       const now = Math.floor(Date.now() / 1000);
       const expiresIn = payload.exp - now;
-      console.log("Token expires in:", expiresIn, "seconds");
+
       if (expiresIn <= 0) {
         console.warn("Token already expired, handling expiration");
@@ -183,18 +184,4 @@
           setupTokenExpiryLogout(session.access_token);
         }
-        //check if this is needed
-        // const tokenExp = localStorage.getItem("token_exp");
-        // if (tokenExp) {
-        //   const now = Math.floor(Date.now() / 1000);
-        //   const expiresIn = parseInt(tokenExp) - now;
-
-        //   if (expiresIn <= 0) {
-        //     await logout();
-        //   } else {
-        //     tokenExpiryTimeoutRef.current = setTimeout(() => {
-        //       logout();
-        //     }, expiresIn * 1000);
-        //   }
-        // }
       } catch (error) {
         console.error("Error retrieving session:", error);
@@ -210,4 +197,5 @@
         if (event === "SIGNED_IN" && session?.user) {
           setUser(session.user);
+
           localStorage.setItem("jwt", session.access_token);
           setupTokenExpiryLogout(session.access_token);
Index: client/src/main.jsx
===================================================================
--- client/src/main.jsx	(revision 67b7df22741e859337db3553c616f396048c8cd3)
+++ client/src/main.jsx	(revision bb73d1e2a7f68d665b6db7396ee89009ed7d19ef)
@@ -1,21 +1,21 @@
-import { StrictMode } from 'react';
-import { createRoot } from 'react-dom/client';
-import './index.css';
+import { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import "./index.css";
 
-import ProtectedRoute from './routes/ProtectedRoute';
-import LandingPage from './LandingPage/LandingPage';
-import Register from './Register/Register';
-import Login from './LogIn/LogIn';
-import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
-import CreatePost from './CreatePost/CreatePost';
-import Task from './Dashboard/components/Task';
-import Forum from './Dashboard/components/Forum';
-import ForumPostDetail from './Dashboard/components/ForumPostDetail';
-import Profile from './Dashboard/components/Profile';
-import LeaderBoardEx from './LandingPage/components/LeaderBoardEx';
-import ManagePosts from '@/Dashboard/components/ManagePosts.jsx';
-import { AuthProvider } from './contexts/AuthContext';
+import ProtectedRoute from "./routes/ProtectedRoute";
+import LandingPage from "./LandingPage/LandingPage";
+import Register from "./Register/Register";
+import Login from "./LogIn/LogIn";
+import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
+import CreatePost from "./CreatePost/CreatePost";
+import Task from "./Dashboard/components/Task";
+import Forum from "./Dashboard/components/Forum";
+import ForumPostDetail from "./Dashboard/components/ForumPostDetail";
+import Profile from "./Dashboard/components/Profile";
+import LeaderBoardEx from "./LandingPage/components/LeaderBoardEx";
+import ManagePosts from "@/Dashboard/components/ManagePosts.jsx";
+import { AuthProvider } from "./contexts/AuthContext";
 
-createRoot(document.getElementById('root')).render(
+createRoot(document.getElementById("root")).render(
   <Router>
     <AuthProvider>
@@ -25,5 +25,4 @@
         <Route path="/login" element={<Login />} />
 
-        {/* Protected routes - let ProtectedRoute handle the logic */}
         <Route
           path="/dashboard"
