Index: backend/controllers/taskController.js
===================================================================
--- backend/controllers/taskController.js	(revision bb596cf64ceb2a0e2542e765a92baeee4921e39f)
+++ backend/controllers/taskController.js	(revision 5634f940ca943e75111813314a7b9eef12ea17aa)
@@ -1,4 +1,4 @@
-const { get } = require('http');
-const prisma = require('../lib/prisma');
+const { get } = require("http");
+const prisma = require("../lib/prisma");
 
 const getTaskByDate = async (req, res) => {
@@ -11,5 +11,5 @@
     let effectiveDate;
 
-    const localDate = now.toLocaleDateString('en-CA');
+    const localDate = now.toLocaleDateString("en-CA");
 
     if (date === localDate) {
@@ -23,5 +23,5 @@
       return res
         .status(404)
-        .json({ message: 'Cannot fetch task for different date!' });
+        .json({ message: "Cannot fetch task for different date!" });
     }
 
@@ -45,5 +45,5 @@
 
     if (tasks.length === 0) {
-      return res.status(404).json({ message: 'No tasks found for this date' });
+      return res.status(404).json({ message: "No tasks found for this date" });
     }
 
@@ -54,5 +54,5 @@
             return value.toISOString();
           }
-          if (typeof value === 'bigint') {
+          if (typeof value === "bigint") {
             return value.toString();
           }
@@ -68,6 +68,6 @@
         safeTask.test_cases = safeTask.test_cases.map((testCase) => ({
           id: testCase.id,
-          input: testCase.input || '',
-          output: testCase.output || '',
+          input: testCase.input || "",
+          output: testCase.output || "",
           challenge_id: testCase.challenge_id,
         }));
@@ -77,13 +77,13 @@
     });
 
-    res.setHeader('Content-Type', 'application/json');
+    res.setHeader("Content-Type", "application/json");
     res.status(200).json(processedTasks);
   } catch (error) {
-    console.error('Error fetching tasks:', error);
+    console.error("Error fetching tasks:", error);
 
     res.status(500).json({
-      message: 'Internal server error',
+      message: "Internal server error",
       error: error.message,
-      stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,
+      stack: process.env.NODE_ENV === "development" ? error.stack : undefined,
     });
   }
@@ -107,5 +107,5 @@
 
     if (testCases.length === 0) {
-      return res.status(404).json({ message: 'No test cases found for today' });
+      return res.status(404).json({ message: "No test cases found for today" });
     }
 
@@ -113,24 +113,77 @@
       testCases[Math.floor(Math.random() * testCases.length)];
 
-    res.setHeader('Content-Type', 'application/json');
+    res.setHeader("Content-Type", "application/json");
     res.status(200).json(randomTestCase);
   } catch (error) {
-    console.error('Error fetching test cases:', error);
+    console.error("Error fetching test cases:", error);
     res
       .status(500)
-      .json({ message: 'Internal server error', error: error.message });
-  }
-};
+      .json({ message: "Internal server error", error: error.message });
+  }
+};
+
+const getSpecificTestCaseById = async (req, res) => {
+  const { testCaseId } = req.params;
+
+  try {
+    const testCase = await prisma.test_cases.findUnique({
+      where: { id: testCaseId },
+      select: {
+        id: true,
+        input: true,
+
+        challenge_id: true,
+      },
+    });
+    if (!testCase) {
+      return res.status(404).json({ message: "Test case not found" });
+    }
+    res.status(200).json(testCase);
+  } catch (error) {
+    console.error("Error fetching specific test case by ID:", error);
+    res
+      .status(500)
+      .json({ message: "Internal server error", error: error.message });
+  }
+};
+
+const updateUserDailyChallengeId = async (req, res) => {
+  const { userId } = req.params;
+  const { testCaseId } = req.body;
+  console.log("Updating user daily challenge ID:", userId, testCaseId);
+
+  if (!testCaseId) {
+    return res.status(400).json({ message: "testCaseId is required" });
+  }
+
+  try {
+    const updatedUser = await prisma.users.update({
+      where: { id: userId },
+      data: { daily_test_case_id: testCaseId },
+      select: { id: true, daily_test_case_id: true },
+    });
+    res.status(200).json({ user: updatedUser });
+  } catch (error) {
+    console.error("Error updating user daily test case ID:", error);
+    if (error.code === "P2025") {
+      return res.status(404).json({ message: "User not found" });
+    }
+    res
+      .status(500)
+      .json({ message: "Internal server error", error: error.message });
+  }
+};
+
 const RANK_DATA = {
-  Novice: { id: 1, title: 'Novice', requiredPoints: 0 },
-  Learner: { id: 2, title: 'Learner', requiredPoints: 300 },
-  Coder: { id: 3, title: 'Coder', requiredPoints: 800 },
-  'Problem Solver': { id: 4, title: 'Problem Solver', requiredPoints: 1500 },
-  Algorithmist: { id: 5, title: 'Algorithmist', requiredPoints: 2500 },
-  'Hacker Mage': { id: 6, title: 'Hacker Mage', requiredPoints: 4000 },
-  Challenger: { id: 7, title: 'Challenger', requiredPoints: 6000 },
-  'Code Master': { id: 8, title: 'Code Master', requiredPoints: 8500 },
-  'FINKI Royalty': { id: 9, title: 'FINKI Royalty', requiredPoints: 11000 },
-  'FINKI Legend': { id: 10, title: 'FINKI Legend', requiredPoints: 16000 },
+  Novice: { id: 1, title: "Novice", requiredPoints: 0 },
+  Learner: { id: 2, title: "Learner", requiredPoints: 300 },
+  Coder: { id: 3, title: "Coder", requiredPoints: 800 },
+  "Problem Solver": { id: 4, title: "Problem Solver", requiredPoints: 1500 },
+  Algorithmist: { id: 5, title: "Algorithmist", requiredPoints: 2500 },
+  "Hacker Mage": { id: 6, title: "Hacker Mage", requiredPoints: 4000 },
+  Challenger: { id: 7, title: "Challenger", requiredPoints: 6000 },
+  "Code Master": { id: 8, title: "Code Master", requiredPoints: 8500 },
+  "FINKI Royalty": { id: 9, title: "FINKI Royalty", requiredPoints: 11000 },
+  "FINKI Legend": { id: 10, title: "FINKI Legend", requiredPoints: 16000 },
 };
 
@@ -144,5 +197,5 @@
     }
   }
-  return RANK_DATA['Novice'];
+  return RANK_DATA["Novice"];
 }
 
@@ -160,5 +213,5 @@
 function getTimeBonus() {
   const minutes = getMinutesSinceSevenAM();
-  console.log('Minutes since 7 AM:', minutes);
+  console.log("Minutes since 7 AM:", minutes);
   return Math.max(0, 60 - Math.floor(minutes * 0.0833));
 }
@@ -175,22 +228,35 @@
 function isOutputCorrect(userOutput, expectedOutput, outputType) {
   const normalizeString = (str) =>
-    str.toLowerCase().replace(/[,"']/g, '').replace(/\s+/g, ' ').trim();
+    str
+      .toString()
+      .replace(/[^\w.-]/g, "") // keep only word chars, dot and hyphen
+      .trim()
+      .toLowerCase();
 
   const normalizeArray = (str) => {
-    const cleaned = str.replace(/[\[\]]/g, '');
+    const cleaned = str.replace(/[\[\]]/g, "");
     return cleaned
       .split(/[\s,]+/)
-      .filter((val) => val !== '')
+      .filter((val) => val !== "")
       .map((val) => val.trim());
   };
 
-  if (outputType === 'integer') {
-    return parseInt(userOutput) === parseInt(expectedOutput);
-  }
-
-  if (outputType === 'float') {
-    return Math.abs(parseFloat(userOutput) - parseFloat(expectedOutput)) < 1e-6;
-  }
-  if (outputType === 'array') {
+  if (outputType === "integer") {
+    const cleanedUserOutput = normalizeString(userOutput);
+    const cleanedExpectedOutput = normalizeString(expectedOutput);
+    return parseInt(cleanedUserOutput) === parseInt(cleanedExpectedOutput);
+  }
+
+  if (outputType === "float") {
+    const cleanedUserOutput = normalizeString(userOutput);
+    const cleanedExpectedOutput = normalizeString(expectedOutput);
+    return (
+      Math.abs(
+        parseFloat(cleanedUserOutput) - parseFloat(cleanedExpectedOutput)
+      ) < 1e-6
+    );
+  }
+
+  if (outputType === "array") {
     const userArr = normalizeArray(userOutput);
     const expectedArr = normalizeArray(expectedOutput);
@@ -212,5 +278,5 @@
   try {
     if (!testCaseId || !userOutput || !userId) {
-      return res.status(400).json({ message: 'Missing required fields' });
+      return res.status(400).json({ message: "Missing required fields" });
     }
     const testCase = await prisma.test_cases.findUnique({
@@ -223,10 +289,10 @@
       return res
         .status(400)
-        .json({ message: 'Test case does not belong to the task' });
+        .json({ message: "Test case does not belong to the task" });
     }
     let user = await prisma.users.findUnique({ where: { id: userId } });
 
     if (!user) {
-      return res.status(404).json({ message: 'User not found' });
+      return res.status(404).json({ message: "User not found" });
     }
     let attempts = user.attempts || 0;
@@ -250,7 +316,7 @@
       const attemptScore = getAttemptScore(attempts + 1);
       const difficultyScore =
-        task.difficulty === 'Easy'
+        task.difficulty === "Easy"
           ? 10
-          : task.difficulty === 'Medium'
+          : task.difficulty === "Medium"
           ? 20
           : 30;
@@ -267,13 +333,14 @@
           solved_problems: { increment: 1 },
           rank: userRank.title,
+          daily_points: totalScore,
         },
       });
       const responseUser = { ...updatedUser };
 
-      if (typeof responseUser.points === 'bigint') {
+      if (typeof responseUser.points === "bigint") {
         responseUser.points = responseUser.points.toString();
       }
 
-      console.log('User Rank:', userRank);
+      console.log("User Rank:", userRank);
       await prisma.challenges.update({
         where: { id: taskId },
@@ -283,5 +350,5 @@
       return res.status(200).json({
         success: true,
-        message: 'Task solved successfully!',
+        message: "Task solved successfully!",
         scoreAwarded: totalScore,
         newTotalPoints: responseUser.points,
@@ -299,7 +366,7 @@
       return res.status(200).json({
         success: false,
-        message: 'Incorrect solution. Try again!',
+        message: "Incorrect solution. Try again!",
         attemptsMade:
-          typeof newAttempts === 'bigint'
+          typeof newAttempts === "bigint"
             ? newAttempts.toString()
             : newAttempts,
@@ -307,7 +374,7 @@
     }
   } catch (error) {
-    console.error('Error evaluating task:', error);
+    console.error("Error evaluating task:", error);
     return res.status(500).json({
-      message: 'Internal server error during evaluation.',
+      message: "Internal server error during evaluation.",
       error: error.message,
     });
@@ -316,5 +383,6 @@
 module.exports = {
   getTaskByDate,
-
+  getSpecificTestCaseById,
+  updateUserDailyChallengeId,
   fetchTestCaseForToday,
   evaluateTask,
Index: backend/routers/taskRouter.js
===================================================================
--- backend/routers/taskRouter.js	(revision bb596cf64ceb2a0e2542e765a92baeee4921e39f)
+++ backend/routers/taskRouter.js	(revision 5634f940ca943e75111813314a7b9eef12ea17aa)
@@ -1,10 +1,15 @@
-const express = require('express');
+const express = require("express");
 const router = express.Router();
-const taskController = require('../controllers/taskController');
+const taskController = require("../controllers/taskController");
 
-router.get('/:date', taskController.getTaskByDate);
-router.get('/:id/test-case', taskController.fetchTestCaseForToday);
+router.get("/:date", taskController.getTaskByDate);
+router.get("/:id/test-case", taskController.fetchTestCaseForToday);
+router.get("/test-cases/:testCaseId", taskController.getSpecificTestCaseById);
+router.put(
+  "/users/:userId/daily-test-case-id",
+  taskController.updateUserDailyChallengeId
+);
 
-router.post('/:id/evaluate', taskController.evaluateTask);
+router.post("/:id/evaluate", taskController.evaluateTask);
 
 module.exports = router;
Index: client/src/Dashboard/components/Task.jsx
===================================================================
--- client/src/Dashboard/components/Task.jsx	(revision bb596cf64ceb2a0e2542e765a92baeee4921e39f)
+++ client/src/Dashboard/components/Task.jsx	(revision 5634f940ca943e75111813314a7b9eef12ea17aa)
@@ -6,4 +6,6 @@
   getTestCaseForTask,
   evaluate,
+  getSpecificTestCase,
+  updateUserDailyTestCaseId,
 } from "@/services/taskService";
 const Task = () => {
@@ -14,15 +16,31 @@
   const [isCorrect, setIsCorrect] = useState(null);
   const [isSubmitting, setIsSubmitting] = useState(false);
-  const token = localStorage.getItem("jwt");
 
   const today = new Date().toLocaleDateString();
-  const user = JSON.parse(localStorage.getItem("user")) || { attempts: 0 };
+  const [currentUser, setCurrentUser] = useState(() => {
+    const storedUser = localStorage.getItem("user");
+    const initialUser = storedUser ? JSON.parse(storedUser) : {};
+    return {
+      attempts: 0,
+      daily_test_case_id: null,
+      solvedDailyChallenge: false,
+      points: 0,
+      id: null,
+      ...initialUser,
+    };
+  });
+
+  useEffect(() => {
+    if (currentUser && currentUser.id) {
+      localStorage.setItem("user", JSON.stringify(currentUser));
+    }
+  }, [currentUser]);
   const navigate = useNavigate();
 
   useEffect(() => {
-    if (task && task.id) {
-      fetchTestCaseForToday(task.id);
-    }
-  }, [task]);
+    if (task && task.id && showTask) {
+      fetchTestCaseLogic(task.id);
+    }
+  }, [task, showTask]);
 
   async function fetchTaskForToday(date) {
@@ -62,28 +80,82 @@
   }
 
-  function toggleSolvedDailyChallenge(user) {
-    const updatedUser = {
-      ...user,
-      solvedDailyChallenge: true,
-    };
-    localStorage.setItem("user", JSON.stringify(updatedUser));
-    return updatedUser;
-  }
-
-  async function fetchTestCaseForToday(id) {
+  async function fetchTestCaseLogic(challengeId) {
     try {
-      const data = await getTestCaseForTask(id);
-
-      if (data && data.input) {
+      let fetchedApiTestCaseData;
+      let finalTestCaseIdToStore = null;
+
+      if (currentUser.daily_test_case_id) {
+        try {
+          fetchedApiTestCaseData = await getSpecificTestCase(
+            currentUser.daily_test_case_id
+          );
+          if (fetchedApiTestCaseData && fetchedApiTestCaseData.id) {
+            finalTestCaseIdToStore = fetchedApiTestCaseData.id;
+          } else {
+            setCurrentUser((prev) => ({ ...prev, daily_test_case_id: null }));
+          }
+        } catch (specificFetchError) {
+          console.warn(
+            `Error fetching specific test case ${currentUser.daily_test_case_id}:`,
+            specificFetchError
+          );
+
+          if (
+            specificFetchError.response &&
+            specificFetchError.response.status === 404
+          ) {
+            setCurrentUser((prev) => ({ ...prev, daily_test_case_id: null }));
+          }
+        }
+      }
+
+      if (!finalTestCaseIdToStore) {
+        console.log("Fetching random test case for challenge:", challengeId);
+
+        fetchedApiTestCaseData = await getTestCaseForTask(challengeId);
+        if (fetchedApiTestCaseData && fetchedApiTestCaseData.id) {
+          finalTestCaseIdToStore = fetchedApiTestCaseData.id;
+
+          setCurrentUser((prev) => ({
+            ...prev,
+            daily_test_case_id: finalTestCaseIdToStore,
+          }));
+
+          if (currentUser.id) {
+            try {
+              await updateUserDailyTestCaseId(
+                currentUser.id,
+                finalTestCaseIdToStore
+              );
+              console.log(
+                "Successfully updated daily_test_case_id on backend."
+              );
+            } catch (error) {
+              console.error(
+                "Failed to update daily_test_case_id on backend:",
+                error
+              );
+            }
+          } else {
+            console.warn(
+              "User ID not available, cannot update daily_test_case_id on backend."
+            );
+          }
+        } else {
+          console.warn("No random test case found for the task:", challengeId);
+        }
+      }
+
+      if (fetchedApiTestCaseData && fetchedApiTestCaseData.input) {
         setTestCase({
-          id: data.id,
-          input: data.input,
+          id: fetchedApiTestCaseData.id,
+          input: fetchedApiTestCaseData.input,
         });
       } else {
-        console.error("No test case found for the task");
+        console.error("No valid test case data to set after fetch attempts.");
         setTestCase(null);
       }
     } catch (error) {
-      console.error("Error fetching test case:", error);
+      console.error("Error in fetchTestCaseLogic (outer try):", error);
       setTestCase(null);
     }
@@ -93,6 +165,4 @@
     const today = new Date();
     fetchTaskForToday(today);
-
-    // toggleSolvedDailyChallenge(user);
 
     setShowTask(true);
@@ -109,5 +179,10 @@
       const userOutput = document.getElementById("userOutput").value;
 
-      const result = await evaluate(task.id, userOutput, testCase.id, user.id);
+      const result = await evaluate(
+        task.id,
+        userOutput,
+        testCase.id,
+        currentUser.id
+      );
 
       if (result.success) {
@@ -117,13 +192,11 @@
         setIsCorrect(true);
 
-        const updatedUserFromStorage =
-          JSON.parse(localStorage.getItem("user")) || {};
-        updatedUserFromStorage.points = result.newTotalPoints;
-        updatedUserFromStorage.solvedDailyChallenge = true;
-        updatedUserFromStorage.pointsAwarded = result.scoreAwarded;
-        updatedUserFromStorage.rank = result.rank;
-
-        toggleSolvedDailyChallenge(user);
-        localStorage.setItem("user", JSON.stringify(updatedUserFromStorage));
+        setCurrentUser((prev) => ({
+          ...prev,
+          points: result.newTotalPoints,
+          solvedDailyChallenge: true,
+          daily_points: result.scoreAwarded,
+          rank: result.rank,
+        }));
       } else {
         setEvalResult(
@@ -132,8 +205,8 @@
         setIsCorrect(false);
 
-        const updatedUserFromStorage =
-          JSON.parse(localStorage.getItem("user")) || {};
-        updatedUserFromStorage.attempts = result.attemptsMade;
-        localStorage.setItem("user", JSON.stringify(updatedUserFromStorage));
+        setCurrentUser((prev) => ({
+          ...prev,
+          attempts: result.attemptsMade,
+        }));
       }
     } catch (error) {
@@ -214,5 +287,5 @@
                       <path d="M5 3l14 9-14 9V3z" />
                     </svg>
-                    {user.solvedDailyChallenge
+                    {currentUser.solvedDailyChallenge
                       ? "View Challenge"
                       : "Start Challenge"}
@@ -230,5 +303,5 @@
                 </div>
 
-                {user.solvedDailyChallenge && (
+                {currentUser.solvedDailyChallenge && (
                   <div className="alert alert-info mb-4">
                     <svg
@@ -315,5 +388,5 @@
                       type="text"
                       placeholder={
-                        user.solvedDailyChallenge
+                        currentUser.solvedDailyChallenge
                           ? "Challenge already completed"
                           : "Enter your output here..."
@@ -327,9 +400,11 @@
                       }`}
                       rows="6"
-                      disabled={user.solvedDailyChallenge || isSubmitting}
+                      disabled={
+                        currentUser.solvedDailyChallenge || isSubmitting
+                      }
                     />
-                    {user.solvedDailyChallenge && (
+                    {currentUser.solvedDailyChallenge && (
                       <p className="text-lg text-success">
-                        You earned: {user.pointsAwarded} for today's task
+                        You earned: {currentUser.daily_points} for today's task
                       </p>
                     )}
@@ -367,13 +442,15 @@
                         onClick={() => handleSubmitSolution()}
                         className={`btn btn-lg ${
-                          user.solvedDailyChallenge || isSubmitting
+                          currentUser.solvedDailyChallenge || isSubmitting
                             ? "btn-disabled"
                             : "border-amber-400"
                         }`}
-                        disabled={user.solvedDailyChallenge || isSubmitting}
+                        disabled={
+                          currentUser.solvedDailyChallenge || isSubmitting
+                        }
                       >
                         {isSubmitting ? (
                           <span className="loading loading-spinner"></span>
-                        ) : user.solvedDailyChallenge ? (
+                        ) : currentUser.solvedDailyChallenge ? (
                           "Already Completed"
                         ) : (
Index: client/src/services/taskService.js
===================================================================
--- client/src/services/taskService.js	(revision bb596cf64ceb2a0e2542e765a92baeee4921e39f)
+++ client/src/services/taskService.js	(revision 5634f940ca943e75111813314a7b9eef12ea17aa)
@@ -8,4 +8,12 @@
   return await apiClient.get(`/task/${taskId}/test-case`);
 };
+export const getSpecificTestCase = async (testCaseId) => {
+  return await apiClient.get(`task/test-cases/${testCaseId}`);
+};
+export const updateUserDailyTestCaseId = async (userId, testCaseId) => {
+  return await apiClient.put(`task/users/${userId}/daily-test-case-id`, {
+    testCaseId,
+  });
+};
 
 export const evaluate = async (taskId, userOutput, testCaseId, userId) => {
