Index: frontend/index.html
===================================================================
--- frontend/index.html	(revision 42da64dc0d28f9380336816f6fb82c7572d0021d)
+++ frontend/index.html	(revision 447c39f7111f1415e8f44660911d00bb61568780)
@@ -3,7 +3,7 @@
   <head>
     <meta charset="UTF-8" />
-    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <link rel="icon" type="image/svg+xml" href="/favicon.png" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <title>frontend</title>
+    <title>Trekr</title>
   </head>
   <body>
Index: frontend/src/pages/Dashboard/pages/CustomCategory/components/TaskFormModal.jsx
===================================================================
--- frontend/src/pages/Dashboard/pages/CustomCategory/components/TaskFormModal.jsx	(revision 447c39f7111f1415e8f44660911d00bb61568780)
+++ frontend/src/pages/Dashboard/pages/CustomCategory/components/TaskFormModal.jsx	(revision 447c39f7111f1415e8f44660911d00bb61568780)
@@ -0,0 +1,244 @@
+import React, { useEffect, useState } from "react";
+import { MdClose } from "react-icons/md";
+
+export default function TaskFormModal({
+  isOpen,
+  onClose,
+  onSubmit,
+  task = null,
+  isLoading = false,
+}) {
+  const isEditing = !!task;
+  const [formData, setFormData] = useState({
+    name: "",
+    description: "",
+    dueDate: "",
+    priority: "MEDIUM",
+    status: "NOT_STARTED",
+  });
+  const [errors, setErrors] = useState({});
+
+  // Initialize form with task data when editing
+  useEffect(() => {
+    if (task) {
+      setFormData({
+        name: task.name || "",
+        description: task.description || "",
+        dueDate: task.dueDate || "",
+        priority: task.priority || "MEDIUM",
+        status: task.status || "NOT_STARTED",
+      });
+    } else {
+      setFormData({
+        name: "",
+        description: "",
+        dueDate: "",
+        priority: "MEDIUM",
+        status: "NOT_STARTED",
+      });
+    }
+    setErrors({});
+  }, [task, isOpen]);
+
+  const handleChange = (e) => {
+    const { name, value } = e.target;
+    setFormData((prev) => ({ ...prev, [name]: value }));
+    // Clear error for this field
+    if (errors[name]) {
+      setErrors((prev) => ({ ...prev, [name]: null }));
+    }
+  };
+
+  const validate = () => {
+    const newErrors = {};
+    if (!formData.name.trim()) {
+      newErrors.name = "Task name is required";
+    }
+    if (formData.name.length > 200) {
+      newErrors.name = "Task name must be 200 characters or less";
+    }
+    if (formData.dueDate && new Date(formData.dueDate) < new Date()) {
+      const today = new Date().toISOString().split('T')[0];
+      if (formData.dueDate < today) {
+        newErrors.dueDate = "Due date cannot be in the past";
+      }
+    }
+    return newErrors;
+  };
+
+  const handleSubmit = async (e) => {
+    e.preventDefault();
+    const newErrors = validate();
+    if (Object.keys(newErrors).length > 0) {
+      setErrors(newErrors);
+      return;
+    }
+
+    const payload = {
+      name: formData.name.trim(),
+      description: formData.description.trim() || null,
+      dueDate: formData.dueDate || null,
+      priority: formData.priority,
+    };
+
+    // Only include status if editing
+    if (isEditing) {
+      payload.status = formData.status;
+    }
+
+    try {
+      await onSubmit(payload);
+      onClose();
+    } catch (error) {
+      console.error("Form submission error:", error);
+    }
+  };
+
+  if (!isOpen) return null;
+
+  return (
+    <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4">
+      <div className="w-full max-w-md rounded-lg border border-white/10 bg-neutral-900 p-6 shadow-xl">
+        {/* Header */}
+        <div className="mb-4 flex items-center justify-between">
+          <h2 className="text-lg font-bold text-white">
+            {isEditing ? "Edit Task" : "Create New Task"}
+          </h2>
+          <button
+            onClick={onClose}
+            className="rounded-md p-1 text-white/60 hover:bg-white/10 hover:text-white"
+            title="Close"
+          >
+            <MdClose className="size-5" />
+          </button>
+        </div>
+
+        {/* Form */}
+        <form onSubmit={handleSubmit} className="space-y-4">
+          {/* Name */}
+          <div>
+            <label className="block text-sm font-medium text-white/80 mb-1">
+              Task Name <span className="text-red-400">*</span>
+            </label>
+            <input
+              type="text"
+              name="name"
+              value={formData.name}
+              onChange={handleChange}
+              placeholder="Enter task name"
+              maxLength={200}
+              className={`w-full rounded-lg border bg-black/40 px-3 py-2 text-sm text-white outline-none transition ${
+                errors.name
+                  ? "border-red-500/50 focus:border-red-400"
+                  : "border-white/10 focus:border-green-400"
+              }`}
+              disabled={isLoading}
+            />
+            {errors.name && (
+              <p className="mt-1 text-xs text-red-400">{errors.name}</p>
+            )}
+            <p className="mt-1 text-xs text-white/40">
+              {formData.name.length}/200
+            </p>
+          </div>
+
+          {/* Description */}
+          <div>
+            <label className="block text-sm font-medium text-white/80 mb-1">
+              Description
+            </label>
+            <textarea
+              name="description"
+              value={formData.description}
+              onChange={handleChange}
+              placeholder="Enter task description (optional)"
+              rows={3}
+              className="w-full rounded-lg border border-white/10 bg-black/40 px-3 py-2 text-sm text-white outline-none transition focus:border-green-400"
+              disabled={isLoading}
+            />
+          </div>
+
+          {/* Priority */}
+          <div>
+            <label className="block text-sm font-medium text-white/80 mb-1">
+              Priority
+            </label>
+            <select
+              name="priority"
+              value={formData.priority}
+              onChange={handleChange}
+              className="w-full rounded-lg border border-white/10 bg-black/40 px-3 py-2 text-sm text-white outline-none transition focus:border-green-400"
+              disabled={isLoading}
+            >
+              <option value="LOW">Low</option>
+              <option value="MEDIUM">Medium</option>
+              <option value="HIGH">High</option>
+            </select>
+          </div>
+
+          {/* Due Date */}
+          <div>
+            <label className="block text-sm font-medium text-white/80 mb-1">
+              Due Date
+            </label>
+            <input
+              type="date"
+              name="dueDate"
+              value={formData.dueDate}
+              onChange={handleChange}
+              className={`w-full rounded-lg border bg-black/40 px-3 py-2 text-sm text-white outline-none transition ${
+                errors.dueDate
+                  ? "border-red-500/50 focus:border-red-400"
+                  : "border-white/10 focus:border-green-400"
+              }`}
+              disabled={isLoading}
+            />
+            {errors.dueDate && (
+              <p className="mt-1 text-xs text-red-400">{errors.dueDate}</p>
+            )}
+          </div>
+
+          {/* Status (only for editing) */}
+          {isEditing && (
+            <div>
+              <label className="block text-sm font-medium text-white/80 mb-1">
+                Status
+              </label>
+              <select
+                name="status"
+                value={formData.status}
+                onChange={handleChange}
+                className="w-full rounded-lg border border-white/10 bg-black/40 px-3 py-2 text-sm text-white outline-none transition focus:border-green-400"
+                disabled={isLoading}
+              >
+                <option value="NOT_STARTED">Not Started</option>
+                <option value="IN_PROGRESS">In Progress</option>
+                <option value="FINISHED">Finished</option>
+              </select>
+            </div>
+          )}
+
+          {/* Buttons */}
+          <div className="flex gap-3 pt-4">
+            <button
+              type="button"
+              onClick={onClose}
+              className="flex-1 rounded-lg border border-white/10 bg-transparent px-4 py-2 text-sm font-medium text-white transition hover:bg-white/5"
+              disabled={isLoading}
+            >
+              Cancel
+            </button>
+            <button
+              type="submit"
+              className="flex-1 rounded-lg bg-green-400 px-4 py-2 text-sm font-medium text-black transition hover:bg-green-300 disabled:opacity-50"
+              disabled={isLoading}
+            >
+              {isLoading ? "Saving..." : isEditing ? "Update Task" : "Create Task"}
+            </button>
+          </div>
+        </form>
+      </div>
+    </div>
+  );
+}
+
Index: frontend/src/pages/Dashboard/pages/Discipline/DisciplineTracking.jsx
===================================================================
--- frontend/src/pages/Dashboard/pages/Discipline/DisciplineTracking.jsx	(revision 42da64dc0d28f9380336816f6fb82c7572d0021d)
+++ frontend/src/pages/Dashboard/pages/Discipline/DisciplineTracking.jsx	(revision 447c39f7111f1415e8f44660911d00bb61568780)
@@ -293,4 +293,5 @@
 
   const isTodayClosed = useMemo(() => {
+    console.log('todayIso:', todayIso);
     return (dailyCompletions ?? []).some((dc) => dc?.date === todayIso);
   }, [dailyCompletions, todayIso]);
Index: frontend/src/pages/Dashboard/pages/Finance/components/NewIncomeForm.jsx
===================================================================
--- frontend/src/pages/Dashboard/pages/Finance/components/NewIncomeForm.jsx	(revision 42da64dc0d28f9380336816f6fb82c7572d0021d)
+++ frontend/src/pages/Dashboard/pages/Finance/components/NewIncomeForm.jsx	(revision 447c39f7111f1415e8f44660911d00bb61568780)
@@ -4,4 +4,5 @@
   const [date, setDate] = useState(() => {
     const d = new Date();
+    console.log('Date:', d);
     return d.toISOString().slice(0, 10);
   });
Index: frontend/src/pages/Dashboard/pages/Training/NewTrainingSession.jsx
===================================================================
--- frontend/src/pages/Dashboard/pages/Training/NewTrainingSession.jsx	(revision 42da64dc0d28f9380336816f6fb82c7572d0021d)
+++ frontend/src/pages/Dashboard/pages/Training/NewTrainingSession.jsx	(revision 447c39f7111f1415e8f44660911d00bb61568780)
@@ -18,4 +18,5 @@
   const [autoCalculateCalories, setAutoCalculateCalories] = useState(true);
   const [calories, setCalories] = useState("");
+  const [date, setDate] = useState(() => new Date().toISOString().slice(0, 10));
 
   const [error, setError] = useState("");
@@ -95,4 +96,11 @@
     }
 
+    // Date must not be in the future (allow past or today)
+    const todayStr = new Date().toISOString().slice(0, 10);
+    if (!date || date > todayStr) {
+      setError("Date cannot be in the future.");
+      return;
+    }
+
     const caloriesNum = calories === "" ? NaN : Number(calories);
     if (!autoCalculateCalories) {
@@ -108,4 +116,5 @@
         type,
         durationMinutes: durationNum,
+        date,
         autoCalculateCalories,
         calories: autoCalculateCalories ? null : caloriesNum,
@@ -145,5 +154,5 @@
           ) : null}
 
-          <div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
+          <div className="mt-4 grid grid-cols-1 gap-4 md:grid-cols-3">
             <WorkoutTypeSelect
               workoutTypes={workoutTypes}
@@ -165,4 +174,18 @@
                 disabled={isLoading}
               />
+            </div>
+
+            <div>
+              <label className="label">Date</label>
+              <input
+                type="date"
+                className="input input-bordered w-full"
+                value={date}
+                onChange={(e) => setDate(e.target.value)}
+                max={new Date().toISOString().slice(0, 10)}
+                required
+                disabled={isLoading}
+              />
+              <p className="text-xs opacity-70 mt-1">Choose a past date or today (no future dates).</p>
             </div>
           </div>
