From 38e70ec4406e4f1c28a651bf9ff4f86c9ea3e872 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 27 May 2026 14:06:32 +0530 Subject: [PATCH 01/27] resolve heatmap-grid-styles --- frontend/src/index.css | 11 +++++++++++ issues.json | Bin 0 -> 856826 bytes 2 files changed, 11 insertions(+) create mode 100644 issues.json diff --git a/frontend/src/index.css b/frontend/src/index.css index 49698a98..abfa03d5 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -132,6 +132,17 @@ html.dark, html.dark body { .card-primary { @apply shadow-md; } + + /* Contribution Heatmap Styles */ + .grid-cols-53 { + grid-template-columns: repeat(53, minmax(0, 1fr)); + } + .grid-rows-7 { + grid-template-rows: repeat(7, minmax(0, 1fr)); + } + .text-glow { + text-shadow: 0 0 8px rgba(16,185,129,0.4); + } } @layer utilities { diff --git a/issues.json b/issues.json new file mode 100644 index 0000000000000000000000000000000000000000..1ea5120174f3c963addd211973fb78c3765663aa GIT binary patch literal 856826 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 |vKUv>aYv)DG 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 literal 0 HcmV?d00001 From bb580ad3fd7e2db34997bed35cf3b962d52de0e1 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 27 May 2026 14:16:00 +0530 Subject: [PATCH 02/27] resolve standardize-form-errors --- frontend/src/components/Task/TaskFormModal.jsx | 7 ++----- frontend/src/components/common/FormError.jsx | 15 +++++++++++++++ frontend/src/pages/Login.jsx | 7 ++----- frontend/src/pages/Signup.jsx | 13 +++---------- 4 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 frontend/src/components/common/FormError.jsx diff --git a/frontend/src/components/Task/TaskFormModal.jsx b/frontend/src/components/Task/TaskFormModal.jsx index d0642da4..6a1a6610 100644 --- a/frontend/src/components/Task/TaskFormModal.jsx +++ b/frontend/src/components/Task/TaskFormModal.jsx @@ -2,6 +2,7 @@ import { useState, useEffect } from "react"; import { createPortal } from "react-dom"; import { X } from "lucide-react"; import { TAGS } from "../../utils/tagUtils"; +import FormError from "../common/FormError"; const priorities = ["Low", "Medium", "High"]; const DESCRIPTION_MAX_LENGTH = 500; @@ -168,11 +169,7 @@ export default function TaskFormModal({ task, onClose, onSubmit, errorMessage, o {task ? "Edit Task" : "New Task"} - {errorMessage && ( -
- {errorMessage} -
- )} +
{/* Title */} diff --git a/frontend/src/components/common/FormError.jsx b/frontend/src/components/common/FormError.jsx new file mode 100644 index 00000000..bfdb2702 --- /dev/null +++ b/frontend/src/components/common/FormError.jsx @@ -0,0 +1,15 @@ +import { AlertCircle } from "lucide-react"; + +export default function FormError({ message }) { + if (!message) return null; + + return ( +
+ + {message} +
+ ); +} diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index 16dded3f..038df2a5 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -3,6 +3,7 @@ import { useNavigate, Link, useLocation } from "react-router-dom"; import { Eye, EyeOff } from "lucide-react"; import api from "../api/axios"; import { AuthContext } from "../context/AuthContext.jsx"; +import FormError from "../components/common/FormError"; const Login = () => { @@ -124,11 +125,7 @@ const Login = () => { - {error && ( -
- {error} -
- )} + -

- Don't have an account?{" "} - - Sign up - -

- ); }; diff --git a/frontend/src/pages/Signup.jsx b/frontend/src/pages/Signup.jsx index a200e82d..ff0aae29 100644 --- a/frontend/src/pages/Signup.jsx +++ b/frontend/src/pages/Signup.jsx @@ -191,33 +191,7 @@ const Signup = () => { {/* Glow blobs */}
- -
- - { - setName(e.target.value); - }} - placeholder="Full Name" - required - className={` - w-full px-3 py-2.5 - text-sm - surface-bg - rounded-sm - shadow-xs - input-focus hover-lift - ${errors.name ? "border-red-500" : "border-soft"} - `} - /> - {errors.name && {errors.name}} -
@@ -310,21 +284,7 @@ const Signup = () => { {/* Error */} - {errorMessage && ( -
- {errorMessage} -
- )} + {/* Name */}
@@ -500,13 +460,7 @@ const Signup = () => { > {isLoading ? "Signing up..." : "Sign Up"} -
- {errors.confirmPassword && ( - {errors.confirmPassword} - )} - - {/* Footer */}

From b044c380c61a3c78724f8637b520eb4094239c89 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 27 May 2026 15:12:49 +0530 Subject: [PATCH 05/27] routine-builder-persistence --- frontend/src/pages/RoutineBuilder.jsx | 42 +++++++++++++++++++++------ 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/frontend/src/pages/RoutineBuilder.jsx b/frontend/src/pages/RoutineBuilder.jsx index 84aeb399..2d034fc2 100644 --- a/frontend/src/pages/RoutineBuilder.jsx +++ b/frontend/src/pages/RoutineBuilder.jsx @@ -13,7 +13,7 @@ import TaskFormModal from "../components/Task/TaskFormModal"; import RoutineCard from "../components/Routine/RoutineCard.jsx"; import useTasks from "../hooks/useTasks.js"; import { useNavigate } from "react-router-dom"; -import { ArrowLeft, Download } from "lucide-react"; +import { ArrowLeft, Download, Trash2 } from "lucide-react"; import { toPng } from "html-to-image"; import api from "../api/axios.js"; import EmptyState from "../components/EmptyState"; @@ -23,7 +23,14 @@ export default function RoutineBuilder() { const { addTask, tasks } = useTasks(); const navigate = useNavigate(); const [isModalOpen, setIsModalOpen] = useState(false); - const [scheduledTasks, setScheduledTasks] = useState([]); + const [scheduledTasks, setScheduledTasks] = useState(() => { + try { + const saved = localStorage.getItem("draftScheduledTasks"); + return saved ? JSON.parse(saved) : []; + } catch { + return []; + } + }); const [isSaveModalOpen, setIsSaveModalOpen] = useState(false); const [selectedDay, setSelectedDay] = useState(null); const [routineName, setRoutineName] = useState(""); @@ -79,6 +86,10 @@ export default function RoutineBuilder() { fetchRoutines(); }, []); + useEffect(() => { + localStorage.setItem("draftScheduledTasks", JSON.stringify(scheduledTasks)); + }, [scheduledTasks]); + useEffect(() => { if (!savedRoutines.length) return; @@ -211,13 +222,26 @@ export default function RoutineBuilder() {

Design your week

- +
+ + +
{/* Main Layout */} From 61afa5a2a467582baf6a23a8785657a8f709edcc Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:05:48 +0530 Subject: [PATCH 06/27] adjust dashboard welcome card vertical positioning --- frontend/src/components/OnboardingModal.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/OnboardingModal.jsx b/frontend/src/components/OnboardingModal.jsx index ed666d44..f38d5137 100644 --- a/frontend/src/components/OnboardingModal.jsx +++ b/frontend/src/components/OnboardingModal.jsx @@ -58,7 +58,7 @@ const OnboardingModal = () => { return (
-
+
{/* Progress bar */}
From b87e4d24bc302c65b4fde7713607400cfbc688b8 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:16:35 +0530 Subject: [PATCH 07/27] duplicate-password-icons --- frontend/src/index.css | 307 +++++++++++++++++++++-------------------- 1 file changed, 159 insertions(+), 148 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index 560e196d..ac19527b 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,148 +1,159 @@ -@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap'); -@import "tailwindcss"; - -@custom-variant dark (&:where(.dark, .dark *)); - -.preserve-3d { - transform-style: preserve-3d; -} - -* { - font-family: 'Outfit', sans-serif; -} - -:root { - --bg: #d0f6e3; - --surface: #ffffff; - --primary: #4eb7b3; - --primary-hover: #6dd5c7; - --accent: #98e1d7; - --text-main: #3b8ea0; - --text-muted: #4eb7b3; - --border: #98e1d7; - --radius: 0.75rem; -} - -.dark { - --bg: #0f172a; - --surface: #1e293b; - --primary: #4eb7b3; - --primary-hover: #5ec7c3; - --accent: #1e2e30; - --text-main: #f8fafc; - --text-muted: #94a3b8; - --border: #334155; -} - -html.dark, -html.dark body { - background-color: var(--bg); - color: var(--text-main); - color-scheme: dark; -} - -@layer utilities { - .app-bg { - background-color: var(--bg); - } - - .surface-bg { - background-color: var(--surface); - } - - .text-main { - color: var(--text-main); - } - - .text-muted { - color: var(--text-muted); - } - - .border-soft { - border: 1px solid var(--border); - } - - .btn { - @apply inline-flex items-center justify-center px-4 py-2 font-medium rounded-xl transition-all duration-200 select-none; - } - - .btn-primary { - @apply text-white shadow-sm hover:shadow-md active:scale-[0.97] focus:outline-none focus:ring-2 focus:ring-offset-2; - background-color: var(--primary); - } - - .btn-primary:hover { - background-color: var(--primary-hover); - } - - .card { - background-color: var(--surface); - border-radius: var(--radius); - border: 1px solid var(--border); - @apply p-6 shadow-sm transition-shadow duration-200; - } - - .card:hover { - @apply shadow-md; - } - - .card-muted { - @apply bg-white/80; - } - - .card-primary { - @apply shadow-md; - } - - /* Contribution Heatmap Styles */ - .grid-cols-53 { - grid-template-columns: repeat(53, minmax(0, 1fr)); - } - .grid-rows-7 { - grid-template-rows: repeat(7, minmax(0, 1fr)); - } - .text-glow { - text-shadow: 0 0 8px rgba(16,185,129,0.4); - } - - /* Fade + slide up on mount */ - .animate-in { - animation: fadeUp 0.4s ease-out both; - } - - .animate-in-slow { - animation: fadeUp 0.6s ease-out both; - } - - .delay-100 { - animation-delay: 0.1s; - } - - .delay-200 { - animation-delay: 0.2s; - } - - .delay-300 { - animation-delay: 0.3s; - } - - .hover-lift { - transition: transform 0.2s ease, box-shadow 0.2s ease; - } - - .hover-lift:hover { - transform: translateY(-2px); - } -} - -@keyframes fadeUp { - from { - opacity: 0; - transform: translateY(12px); - } - - to { - opacity: 1; - transform: translateY(0); - } -} \ No newline at end of file +@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap'); +@import "tailwindcss"; + +@custom-variant dark (&:where(.dark, .dark *)); + +.preserve-3d { + transform-style: preserve-3d; +} + +* { + font-family: 'Outfit', sans-serif; +} + +:root { + --bg: #d0f6e3; + --surface: #ffffff; + --primary: #4eb7b3; + --primary-hover: #6dd5c7; + --accent: #98e1d7; + --text-main: #3b8ea0; + --text-muted: #4eb7b3; + --border: #98e1d7; + --radius: 0.75rem; +} + +.dark { + --bg: #0f172a; + --surface: #1e293b; + --primary: #4eb7b3; + --primary-hover: #5ec7c3; + --accent: #1e2e30; + --text-main: #f8fafc; + --text-muted: #94a3b8; + --border: #334155; +} + +html.dark, +html.dark body { + background-color: var(--bg); + color: var(--text-main); + color-scheme: dark; +} + +@layer utilities { + .app-bg { + background-color: var(--bg); + } + + .surface-bg { + background-color: var(--surface); + } + + .text-main { + color: var(--text-main); + } + + .text-muted { + color: var(--text-muted); + } + + .border-soft { + border: 1px solid var(--border); + } + + .btn { + @apply inline-flex items-center justify-center px-4 py-2 font-medium rounded-xl transition-all duration-200 select-none; + } + + .btn-primary { + @apply text-white shadow-sm hover:shadow-md active:scale-[0.97] focus:outline-none focus:ring-2 focus:ring-offset-2; + background-color: var(--primary); + } + + .btn-primary:hover { + background-color: var(--primary-hover); + } + + .card { + background-color: var(--surface); + border-radius: var(--radius); + border: 1px solid var(--border); + @apply p-6 shadow-sm transition-shadow duration-200; + } + + .card:hover { + @apply shadow-md; + } + + .card-muted { + @apply bg-white/80; + } + + .card-primary { + @apply shadow-md; + } + + /* Contribution Heatmap Styles */ + .grid-cols-53 { + grid-template-columns: repeat(53, minmax(0, 1fr)); + } + .grid-rows-7 { + grid-template-rows: repeat(7, minmax(0, 1fr)); + } + .text-glow { + text-shadow: 0 0 8px rgba(16,185,129,0.4); + } + + /* Fade + slide up on mount */ + .animate-in { + animation: fadeUp 0.4s ease-out both; + } + + .animate-in-slow { + animation: fadeUp 0.6s ease-out both; + } + + .delay-100 { + animation-delay: 0.1s; + } + + .delay-200 { + animation-delay: 0.2s; + } + + .delay-300 { + animation-delay: 0.3s; + } + + .hover-lift { + transition: transform 0.2s ease, box-shadow 0.2s ease; + } + + .hover-lift:hover { + transform: translateY(-2px); + } +} + +@keyframes fadeUp { + from { + opacity: 0; + transform: translateY(12px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Hide default browser password reveal icons */ +input[type="password"]::-ms-reveal, +input[type="password"]::-ms-clear { + display: none; +} + +input[type="password"]::-webkit-reveal, +input[type="password"]::-webkit-clear { + display: none; +} \ No newline at end of file From e7b4a543748ce5f9ba21d46bac6576c4fd6cbeca Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:36:57 +0530 Subject: [PATCH 08/27] fix(ui): clean up duplicate index.css and hide default browser password reveal icons --- frontend/src/index.css | 130 ----------------------------------------- 1 file changed, 130 deletions(-) diff --git a/frontend/src/index.css b/frontend/src/index.css index 3cabf981..dbc51df1 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -157,133 +157,3 @@ input[type="password"]::-webkit-reveal, input[type="password"]::-webkit-clear { display: none; } -@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap'); -@import "tailwindcss"; - -* { - font-family: 'Outfit', sans-serif; -} - -:root { - --bg: #d0f6e3; - --surface: #ffffff; - --primary: #4eb7b3; - --primary-hover: #6dd5c7; - --accent: #98e1d7; - --text-main: #3b8ea0; - --text-muted: #4eb7b3; - --border: #98e1d7; - --radius: 0.75rem; -} - -.dark { - --bg: #0f172a; - --surface: #1e293b; - --primary: #4eb7b3; - --primary-hover: #5ec7c3; - --accent: #1e2e30; - --text-main: #f8fafc; - --text-muted: #94a3b8; - --border: #334155; -} - -html.dark, -html.dark body { - background-color: var(--bg); - color: var(--text-main); - color-scheme: dark; -} - -@layer utilities { - .app-bg { - background-color: var(--bg); - } - - .surface-bg { - background-color: var(--surface); - } - - .text-main { - color: var(--text-main); - } - - .text-muted { - color: var(--text-muted); - } - - .border-soft { - border: 1px solid var(--border); - } - - .btn { - @apply inline-flex items-center justify-center px-4 py-2 font-medium rounded-xl transition-all duration-200 select-none; - } - - .btn-primary { - @apply text-white shadow-sm hover:shadow-md active:scale-[0.97] focus:outline-none focus:ring-2 focus:ring-offset-2; - background-color: var(--primary); - } - - .btn-primary:hover { - background-color: var(--primary-hover); - } - - .card { - background-color: var(--surface); - border-radius: var(--radius); - border: 1px solid var(--border); - @apply p-6 shadow-sm transition-shadow duration-200; - } - - .card:hover { - @apply shadow-md; - } - - .card-muted { - @apply bg-white/80; - } - - .card-primary { - @apply shadow-md; - } - - .animate-in { - animation: fadeUp 0.4s ease-out both; - } - - .animate-in-slow { - animation: fadeUp 0.6s ease-out both; - } - - .delay-100 { - animation-delay: 0.1s; - } - - .delay-200 { - animation-delay: 0.2s; - } - - .delay-300 { - animation-delay: 0.3s; - } - - .hover-lift { - transition: transform 0.2s ease, box-shadow 0.2s ease; - } - - .hover-lift:hover { - transform: translateY(-2px); - } -} - -@keyframes fadeUp { - from { - opacity: 0; - transform: translateY(12px); - } - - to { - opacity: 1; - transform: translateY(0); - } -} From a0606f63268572197e362a534a9f42ea8b2adf20 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:38:32 +0530 Subject: [PATCH 09/27] resove ci check --- frontend/src/pages/Login.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index 3c6b0946..76d52af2 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -196,7 +196,7 @@ const Login = () => { type="submit" disabled={isGoogleLoading || isSubmitLoading} className="btn btn-primary cursor-pointer w-full py-3 mt-1 hover-lift disabled:opacity-50 disabled:cursor-not-allowed rounded-2xl" - > + /> {error && (
{error} From d03c0993ee79e745785ec123ca5b0fae3aff0db3 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:40:53 +0530 Subject: [PATCH 10/27] fix(ui): remove undefined buttonRef and clean up Login redundant markup --- frontend/src/pages/Login.jsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index 76d52af2..20f5ff5a 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -192,17 +192,10 @@ const Login = () => {

From b3bfa89bb828e9ff8d36f1919d6c986a070a2a6e Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:55:38 +0530 Subject: [PATCH 11/27] fix(auth): remove redundant /auth/me call on signup that causes false 409 errors --- frontend/src/pages/Signup.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/Signup.jsx b/frontend/src/pages/Signup.jsx index ff0aae29..04e75cc4 100644 --- a/frontend/src/pages/Signup.jsx +++ b/frontend/src/pages/Signup.jsx @@ -154,9 +154,8 @@ const Signup = () => { setIsLoading(true); try { localStorage.removeItem("token"); - await api.post("/auth/signup", { name, email, password }); - const me = await api.get("/auth/me"); - setUser(me.data.user); + const res = await api.post("/auth/signup", { name, email, password }); + setUser(res.data.user); navigate("/dashboard"); } catch (error) { if (error.response?.status === 409) { From 84cf1dcb82f51bee839fa55a4d96d9c2bf740ea7 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Thu, 28 May 2026 21:58:25 +0530 Subject: [PATCH 12/27] fix(ui): prevent task form modal from closing on accidental backdrop click --- frontend/src/components/Task/TaskFormModal.jsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/components/Task/TaskFormModal.jsx b/frontend/src/components/Task/TaskFormModal.jsx index a2d6043b..1e181aea 100644 --- a/frontend/src/components/Task/TaskFormModal.jsx +++ b/frontend/src/components/Task/TaskFormModal.jsx @@ -154,9 +154,6 @@ export default function TaskFormModal({ task, onClose, onSubmit, errorMessage, o py-10 px-4 bg-black/20 dark:bg-black/50 backdrop-blur-sm animate-in" - onMouseDown={(e) => { - if (e.target === e.currentTarget) onClose(); - }} aria-modal="true" role="dialog" > From 0ae6cb2ed8db1576250a2cd7f9451d12c2528699 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Fri, 29 May 2026 21:13:30 +0530 Subject: [PATCH 13/27] feat: implement Forge Mode Pomodoro deep work environment with MERN integration --- frontend/src/App.jsx | 35 ++ frontend/src/components/Footer.jsx | 7 +- frontend/src/components/Navbar.jsx | 9 +- frontend/src/components/ScrollToTop.jsx | 4 +- frontend/src/pages/ForgeMode.jsx | 695 ++++++++++++++++++++++++ 5 files changed, 746 insertions(+), 4 deletions(-) create mode 100644 frontend/src/pages/ForgeMode.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index bbb8323b..0ed2a895 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -16,6 +16,8 @@ import About from "./pages/About.jsx"; import Profile from './pages/Profile.jsx'; import ScrollToTop from "./components/ScrollToTop.jsx"; import PageTransition from "./components/PageTransition.jsx"; +import ForgeMode from "./pages/ForgeMode.jsx"; + const AuthLayout = ({ children }) => (

@@ -73,8 +75,25 @@ const AnimatedRoutes = () => { } /> + + + + } + /> + + + + } + /> } /> + ); }; @@ -129,6 +148,22 @@ const App = () => { } /> + + + + } + /> + + + + } + /> } /> diff --git a/frontend/src/components/Footer.jsx b/frontend/src/components/Footer.jsx index 0f0c358c..18237a80 100644 --- a/frontend/src/components/Footer.jsx +++ b/frontend/src/components/Footer.jsx @@ -1,7 +1,12 @@ -import { Link } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import { Github, MessageSquare, BookOpen, Heart } from 'lucide-react'; export default function Footer() { + const location = useLocation(); + if (location.pathname === "/forge" || location.pathname === "/focus") { + return null; + } + const githubBase = "https://github.com/aryandas2911/DailyForge"; const navLinks = [ { label: "Dashboard", path: "/dashboard" }, diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index bdef2553..6afb48e1 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -2,7 +2,7 @@ import { useState, useContext, useEffect } from "react"; import { Link, NavLink, useLocation } from "react-router-dom"; // eslint-disable-next-line no-unused-vars import { motion, AnimatePresence } from "framer-motion"; -import { Menu, X, LayoutDashboard, CheckSquare, Calendar, LogOut, LogIn, User, Sun, Moon, TrendingUp } from "lucide-react"; +import { Menu, X, LayoutDashboard, CheckSquare, Calendar, LogOut, LogIn, User, Sun, Moon, TrendingUp, Flame } from "lucide-react"; import { AuthContext } from "../context/AuthContext"; import { ThemeContext } from "../context/ThemeContext"; import gsap from "gsap"; @@ -80,6 +80,11 @@ const Navbar = () => { const location = useLocation(); const [showLogoutModal, setShowLogoutModal] = useState(false); + if (location.pathname === "/forge" || location.pathname === "/focus") { + return null; + } + + // Handle scroll effect for premium glassmorphism transition useEffect(() => { const handleScroll = () => { @@ -208,10 +213,12 @@ const Navbar = () => { { name: "Dashboard", path: "/dashboard", icon: LayoutDashboard }, { name: "Tasks", path: "/tasks", icon: CheckSquare }, { name: "Routine Builder", path: "/routine-builder", icon: Calendar }, + { name: "Forge Mode", path: "/forge", icon: Flame }, { name: "Analytics", path: "/analytics", icon: TrendingUp }, { name: "Profile", path: "/profile", icon: User }, ]; + return ( <> {/* logout modal here, outside of nav so that it overlays everything */} diff --git a/frontend/src/components/ScrollToTop.jsx b/frontend/src/components/ScrollToTop.jsx index 47b28a89..cfaa1165 100644 --- a/frontend/src/components/ScrollToTop.jsx +++ b/frontend/src/components/ScrollToTop.jsx @@ -6,8 +6,8 @@ const ScrollToTop = () => { const [isVisible, setIsVisible] = useState(false); const location = useLocation(); - // Hide the button on login and root pages - const isLoginPage = location.pathname === "/login" || location.pathname === "/"; + // Hide the button on login, root, and forge/focus mode pages + const isLoginPage = location.pathname === "/login" || location.pathname === "/" || location.pathname === "/forge" || location.pathname === "/focus"; // Toggle visibility based on scroll position const toggleVisibility = () => { diff --git a/frontend/src/pages/ForgeMode.jsx b/frontend/src/pages/ForgeMode.jsx new file mode 100644 index 00000000..8e2865fe --- /dev/null +++ b/frontend/src/pages/ForgeMode.jsx @@ -0,0 +1,695 @@ +import { useState, useEffect, useRef } from "react"; +import { useNavigate } from "react-router-dom"; +import { + Play, Pause, RotateCcw, Volume2, VolumeX, ArrowLeft, CheckCircle2, + Settings, Music, Moon, AlertCircle, RefreshCw, Layers +} from "lucide-react"; +import api from "../api/axios"; + +// Available copyright-free ambient soundscapes +const SOUNDSCAPES = [ + { id: "none", name: "Silence", url: "" }, + { id: "lofi", name: "Lofi Study Beats", url: "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3" }, + { id: "rain", name: "Summer Rain", url: "https://www.soundjay.com/nature/sounds/rain-07.mp3" }, + { id: "river", name: "Forest Stream", url: "https://www.soundjay.com/nature/sounds/river-1.mp3" } +]; + +export default function ForgeMode() { + const navigate = useNavigate(); + + // Timer settings & states + const [totalSeconds, setTotalSeconds] = useState(25 * 60); + const [secondsLeft, setSecondsLeft] = useState(25 * 60); + const [isRunning, setIsRunning] = useState(false); + const [sessionCompleted, setSessionCompleted] = useState(false); + const [timerMode, setTimerMode] = useState(25); // Default 25 minutes + + // Task selection & auto-loading + const [tasks, setTasks] = useState([]); + const [selectedTask, setSelectedTask] = useState(null); + const [customTaskTitle, setCustomTaskTitle] = useState(""); + const [isSelectorOpen, setIsSelectorOpen] = useState(false); + const [isLoading, setIsLoading] = useState(true); + const [routinesList, setRoutinesList] = useState([]); + const [routineTaskLoaded, setRoutineTaskLoaded] = useState(null); + + // Ambient audio state + const [currentSound, setCurrentSound] = useState("none"); + const [volume, setVolume] = useState(0.5); + const [isMuted, setIsMuted] = useState(false); + const [soundscapeMenuOpen, setSoundscapeMenuOpen] = useState(false); + + // Canvas particle state + const canvasRef = useRef(null); + const animationFrameId = useRef(null); + const particles = useRef([]); + + // Audio reference + const audioRef = useRef(null); + + // Fetch routines and tasks on mount to auto-load active task + useEffect(() => { + async function loadData() { + setIsLoading(true); + try { + // Fetch user tasks library + const tasksRes = await api.get("/tasks"); + const fetchedTasks = tasksRes.data.tasks || []; + setTasks(fetchedTasks); + + // Fetch routines to search for currently active routine task + const routinesRes = await api.get("/routines"); + const fetchedRoutines = routinesRes.data.routines || []; + setRoutinesList(fetchedRoutines); + + // Auto-load scheduled task if active routine exists + const activeIds = JSON.parse(localStorage.getItem("activeRoutineIds") || "[]"); + if (activeIds.length > 0 && fetchedRoutines.length > 0) { + const activeRoutines = fetchedRoutines.filter(r => activeIds.includes(r._id)); + + // Get current weekday and time + const weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + const currentDayName = weekdays[new Date().getDay()]; + const now = new Date(); + const currentMinutes = now.getHours() * 60 + now.getMinutes(); + + // Find if there is a routine item scheduled right now + let matchedItem = null; + let matchedRoutine = null; + + for (const routine of activeRoutines) { + const item = routine.items.find(it => { + const start = it.startTime; + const end = it.startTime + it.duration; + return it.day === currentDayName && currentMinutes >= start && currentMinutes < end; + }); + if (item) { + matchedItem = item; + matchedRoutine = routine; + break; + } + } + + if (matchedItem) { + // Find task info in task library + const taskInfo = fetchedTasks.find(t => t._id === matchedItem.taskId); + const loadedTask = { + _id: matchedItem.taskId, + title: taskInfo?.title || "Scheduled Routine Task", + tags: taskInfo?.tags || ["Routine"], + priority: taskInfo?.priority || "Medium", + isFromRoutine: true, + duration: matchedItem.duration, + routineId: matchedRoutine._id + }; + setSelectedTask(loadedTask); + setRoutineTaskLoaded(loadedTask); + // Pre-fill timer to match scheduled duration if desired (e.g. capped to 50 mins or set explicitly) + const scheduledSec = Math.min(matchedItem.duration * 60, 90 * 60); + setTotalSeconds(scheduledSec); + setSecondsLeft(scheduledSec); + } + } + } catch (err) { + console.error("Failed to load Forge Mode initial data:", err); + } finally { + setIsLoading(false); + } + } + + loadData(); + }, []); + + // Timer interval effect + useEffect(() => { + let intervalId = null; + if (isRunning && secondsLeft > 0) { + intervalId = setInterval(() => { + setSecondsLeft(prev => prev - 1); + }, 1000); + } else if (secondsLeft === 0 && isRunning) { + setIsRunning(false); + handleTimerComplete(); + } + return () => clearInterval(intervalId); + }, [isRunning, secondsLeft]); + + // Audio stream controller + useEffect(() => { + // Cleanup any existing audio instance + if (audioRef.current) { + audioRef.current.pause(); + audioRef.current = null; + } + + const soundObj = SOUNDSCAPES.find(s => s.id === currentSound); + if (soundObj && soundObj.url) { + const audio = new Audio(soundObj.url); + audio.loop = true; + audio.volume = isMuted ? 0 : volume; + audioRef.current = audio; + + // Attempt play (handling browser autoplays safely) + if (isRunning) { + audio.play().catch(err => console.log("Audio play deferred until user interaction", err)); + } + } + }, [currentSound]); + + // Sync audio with play/pause of the Pomodoro timer + useEffect(() => { + if (audioRef.current) { + if (isRunning && !sessionCompleted) { + audioRef.current.play().catch(() => {}); + } else { + audioRef.current.pause(); + } + } + }, [isRunning, sessionCompleted]); + + // Sync volume adjustments + useEffect(() => { + if (audioRef.current) { + audioRef.current.volume = isMuted ? 0 : volume; + } + }, [volume, isMuted]); + + // Format MM:SS + const formatTime = (secs) => { + const m = Math.floor(secs / 60).toString().padStart(2, "0"); + const s = (secs % 60).toString().padStart(2, "0"); + return `${m}:${s}`; + }; + + // SVG circular circumference configurations + const radius = 120; + const circumference = 2 * Math.PI * radius; + const strokeDashoffset = circumference - ((secondsLeft / totalSeconds) * circumference); + + // Dynamic Spot Glow Color based on active task tag + const getGlowColorClass = () => { + if (!selectedTask) return "from-emerald-500/10 via-transparent to-transparent"; + const tag = (selectedTask.tags && selectedTask.tags[0]) || ""; + const priority = selectedTask.priority || "Medium"; + + if (priority === "High") return "from-rose-500/15 via-transparent to-transparent"; + + switch (tag.toLowerCase()) { + case "homework": + return "from-blue-500/15 via-transparent to-transparent"; + case "creative": + return "from-purple-500/15 via-transparent to-transparent"; + case "routine": + return "from-emerald-500/15 via-transparent to-transparent"; + default: + return "from-teal-500/12 via-transparent to-transparent"; + } + }; + + const getBorderGlowClass = () => { + if (!selectedTask) return "shadow-[0_0_40px_rgba(16,185,129,0.2)] border-emerald-500/30"; + const tag = (selectedTask.tags && selectedTask.tags[0]) || ""; + const priority = selectedTask.priority || "Medium"; + + if (priority === "High") return "shadow-[0_0_45px_rgba(239,68,68,0.25)] border-rose-500/30 text-rose-400"; + + switch (tag.toLowerCase()) { + case "homework": + return "shadow-[0_0_45px_rgba(59,130,246,0.25)] border-blue-500/30 text-blue-400"; + case "creative": + return "shadow-[0_0_45px_rgba(168,85,247,0.25)] border-purple-500/30 text-purple-400"; + case "routine": + return "shadow-[0_0_45px_rgba(16,185,129,0.25)] border-emerald-500/30 text-emerald-400"; + default: + return "shadow-[0_0_45px_rgba(20,184,166,0.25)] border-teal-500/30 text-teal-400"; + } + }; + + // Timer complete triggers + const handleTimerComplete = async () => { + setIsRunning(false); + setSessionCompleted(true); + triggerSparks(); + + // Play completion chime + try { + const chime = new Audio("https://assets.mixkit.co/active_storage/sfx/2019/2019-200.wav"); + chime.volume = volume; + chime.play(); + } catch (e) { + console.log("Failed to play completion chime:", e); + } + + // Write to database to log task execution analytics + if (selectedTask) { + const elapsedMinutes = Math.round((totalSeconds - secondsLeft) / 60) || 1; + + try { + if (selectedTask.isFromRoutine || !selectedTask._id) { + // If a routine placeholder or custom string task completed, create new task doc in db + await api.post("/tasks", { + title: selectedTask.title, + description: `Session completed in Forge Mode`, + priority: selectedTask.priority || "Medium", + status: "Completed", + dueDate: new Date().toISOString(), + tags: selectedTask.tags || ["Routine"], + }); + } else { + // Update existing library task status to Completed + await api.put(`/tasks/${selectedTask._id}`, { + status: "Completed", + actualDuration: elapsedMinutes + }); + } + } catch (err) { + console.error("Failed to log focus task success to MERN backend:", err); + } + } + }; + + // Start Confetti Particles + const triggerSparks = () => { + const canvas = canvasRef.current; + if (!canvas) return; + const ctx = canvas.getContext("2d"); + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + + particles.current = []; + + // Create 100 gold particle sparks + for (let i = 0; i < 150; i++) { + particles.current.push({ + x: canvas.width / 2, + y: canvas.height / 2 - 40, + vx: (Math.random() - 0.5) * 14, + vy: (Math.random() - 0.6) * 16 - 3, + radius: Math.random() * 4 + 1.5, + color: `hsla(${Math.random() * 20 + 38}, 100%, ${Math.random() * 30 + 55}%, ${Math.random() * 0.7 + 0.3})`, + alpha: 1, + decay: Math.random() * 0.015 + 0.008 + }); + } + + const animateParticles = () => { + ctx.clearRect(0, 0, canvas.width, canvas.height); + let alive = false; + + particles.current.forEach(p => { + if (p.alpha > 0) { + alive = true; + p.x += p.vx; + p.y += p.vy; + p.vy += 0.28; // gravity + p.vx *= 0.98; // drag + p.alpha -= p.decay; + + ctx.beginPath(); + ctx.arc(p.x, p.y, p.radius, 0, Math.PI * 2); + ctx.fillStyle = p.color; + ctx.globalAlpha = Math.max(p.alpha, 0); + ctx.fill(); + } + }); + + if (alive) { + animationFrameId.current = requestAnimationFrame(animateParticles); + } else { + ctx.clearRect(0, 0, canvas.width, canvas.height); + } + }; + + animateParticles(); + }; + + // Stop current animations on unmount + useEffect(() => { + return () => { + if (animationFrameId.current) { + cancelAnimationFrame(animationFrameId.current); + } + if (audioRef.current) { + audioRef.current.pause(); + } + }; + }, []); + + const changeTimerMode = (mins) => { + setTimerMode(mins); + setTotalSeconds(mins * 60); + setSecondsLeft(mins * 60); + setIsRunning(false); + setSessionCompleted(false); + }; + + const handleCustomTaskAdd = () => { + if (!customTaskTitle.trim()) return; + const newTask = { + title: customTaskTitle.trim(), + priority: "Medium", + tags: ["Focus"], + status: "Due" + }; + setSelectedTask(newTask); + setCustomTaskTitle(""); + setIsSelectorOpen(false); + setSessionCompleted(false); + }; + + return ( +
+ {/* Background radial spotlights */} +
+
+
+ + {/* Confetti canvas overlay */} + + + {/* Top Bar Navigation */} +
+ + +
+
+ + {isRunning ? 'Deep Focus Session Active' : 'Forge Mode Ready'} + +
+ + +
+ + {/* Center Main Countdown Timer */} +
+ + {/* Dynamic Task card heading */} +
+

Active Task

+

+ {selectedTask?.title || "Choose a task to start..."} +

+ + {selectedTask && ( +
+ {selectedTask.tags?.map((t, idx) => ( + + {t} + + ))} + + {selectedTask.priority || "Medium"} Priority + +
+ )} +
+ + {/* SVG Pomodoro circular countdown */} +
+ + {/* Background ring */} + + {/* Dynamic glowing countdown ring */} + + + + {/* Time digits centered */} +
+ {sessionCompleted ? ( +
+ +
+ ) : ( + + {formatTime(secondsLeft)} + + )} + + {sessionCompleted ? 'Splendid Job!' : `${timerMode}m interval`} + +
+
+ + {/* Minimalist circular Controls Panel */} +
+ + + + + +
+ + {/* Short break & Interval standard toggles */} +
+ {[15, 25, 50].map((mins) => ( + + ))} +
+
+ + {/* Bottom Panel Drawer - Ambient Sounds controls */} +
+ + {/* Sound Selection Button & popup */} +
+ + + {soundscapeMenuOpen && ( +
+
Ambient Audio
+ {SOUNDSCAPES.map(sound => ( + + ))} +
+ )} +
+ + {/* Volume controls */} + {currentSound !== "none" && ( +
+ + { + setVolume(Number(e.target.value)); + setIsMuted(false); + }} + className="w-24 accent-[#4eb7b3] h-1 bg-slate-800 rounded-lg appearance-none cursor-pointer" + /> + + {Math.round((isMuted ? 0 : volume) * 100)}% + +
+ )} + + {/* Exit Hint */} +

+ PRO-TIP: Turn off notifications to promote deep flow states. +

+
+ + {/* Task Selector overlay modal drawer */} + {isSelectorOpen && ( +
+
+ +

Select Active Task

+

Select a task from your scheduled active routines or your library to execute.

+ + {/* Scheduled Routine Task status */} + {routineTaskLoaded ? ( +
+
+ + Scheduled in Active Routine +
+
+
+
{routineTaskLoaded.title}
+
{routineTaskLoaded.duration} min scheduled today
+
+ +
+
+ ) : ( +
+
Routine Status
+

No active routine task scheduled for this hour. Select one below or input custom focus.

+
+ )} + + {/* Custom Task Entry */} +
+ +
+ setCustomTaskTitle(e.target.value)} + className="flex-1 p-3 rounded-xl border border-white/10 bg-slate-950 text-xs text-white placeholder-slate-500 focus:outline-none focus:border-[#4eb7b3]/60 transition-colors" + /> + +
+
+ + {/* Library Selector */} +
+ +
+ {isLoading ? ( +

Loading library...

+ ) : tasks.filter(t => t.status !== "Completed").length === 0 ? ( +

No due tasks in your library.

+ ) : ( + tasks.filter(t => t.status !== "Completed").map(task => ( + + )) + )} +
+
+ + {/* Close button */} + + +
+
+ )} +
+ ); +} From 87106a909617e6fa99dcba0b6e923338ab919d43 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Fri, 29 May 2026 21:18:41 +0530 Subject: [PATCH 14/27] fix: resolve React Rules of Hooks violation in Navbar early return --- frontend/src/components/Navbar.jsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index 6afb48e1..b0548f8a 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -80,10 +80,6 @@ const Navbar = () => { const location = useLocation(); const [showLogoutModal, setShowLogoutModal] = useState(false); - if (location.pathname === "/forge" || location.pathname === "/focus") { - return null; - } - // Handle scroll effect for premium glassmorphism transition useEffect(() => { @@ -219,7 +215,12 @@ const Navbar = () => { ]; + if (location.pathname === "/forge" || location.pathname === "/focus") { + return null; + } + return ( + <> {/* logout modal here, outside of nav so that it overlays everything */} Date: Sun, 31 May 2026 21:15:13 +0530 Subject: [PATCH 15/27] fix: resolve misleading empty state in TaskLibrary search --- frontend/src/components/Routine/TaskLibrary.jsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Routine/TaskLibrary.jsx b/frontend/src/components/Routine/TaskLibrary.jsx index 5ad23fe7..0f0bf54f 100644 --- a/frontend/src/components/Routine/TaskLibrary.jsx +++ b/frontend/src/components/Routine/TaskLibrary.jsx @@ -92,12 +92,17 @@ export default function TaskLibrary({ tasks, onAddTask }) { {/* Task List */}
- {filteredTasks?.length ? ( + {tasks?.length === 0 ? ( + + ) : filteredTasks?.length > 0 ? ( filteredTasks.map((task) => ( )) ) : ( - +
+

No tasks found

+

We couldn't find anything matching "{query}"

+
)}
From cc7f3e9f5304b1ff93f247cea5d2725bf7008e1c Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Sun, 31 May 2026 21:23:19 +0530 Subject: [PATCH 16/27] fix: resolve react hook dependencies and unused variables in ForgeMode --- frontend/src/pages/ForgeMode.jsx | 39 ++++++++------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/frontend/src/pages/ForgeMode.jsx b/frontend/src/pages/ForgeMode.jsx index 8e2865fe..39a95b00 100644 --- a/frontend/src/pages/ForgeMode.jsx +++ b/frontend/src/pages/ForgeMode.jsx @@ -30,7 +30,6 @@ export default function ForgeMode() { const [customTaskTitle, setCustomTaskTitle] = useState(""); const [isSelectorOpen, setIsSelectorOpen] = useState(false); const [isLoading, setIsLoading] = useState(true); - const [routinesList, setRoutinesList] = useState([]); const [routineTaskLoaded, setRoutineTaskLoaded] = useState(null); // Ambient audio state @@ -60,7 +59,6 @@ export default function ForgeMode() { // Fetch routines to search for currently active routine task const routinesRes = await api.get("/routines"); const fetchedRoutines = routinesRes.data.routines || []; - setRoutinesList(fetchedRoutines); // Auto-load scheduled task if active routine exists const activeIds = JSON.parse(localStorage.getItem("activeRoutineIds") || "[]"); @@ -120,6 +118,8 @@ export default function ForgeMode() { loadData(); }, []); + const handleTimerCompleteRef = useRef(null); + // Timer interval effect useEffect(() => { let intervalId = null; @@ -129,7 +129,7 @@ export default function ForgeMode() { }, 1000); } else if (secondsLeft === 0 && isRunning) { setIsRunning(false); - handleTimerComplete(); + if (handleTimerCompleteRef.current) handleTimerCompleteRef.current(); } return () => clearInterval(intervalId); }, [isRunning, secondsLeft]); @@ -146,13 +146,7 @@ export default function ForgeMode() { if (soundObj && soundObj.url) { const audio = new Audio(soundObj.url); audio.loop = true; - audio.volume = isMuted ? 0 : volume; audioRef.current = audio; - - // Attempt play (handling browser autoplays safely) - if (isRunning) { - audio.play().catch(err => console.log("Audio play deferred until user interaction", err)); - } } }, [currentSound]); @@ -165,14 +159,14 @@ export default function ForgeMode() { audioRef.current.pause(); } } - }, [isRunning, sessionCompleted]); + }, [isRunning, sessionCompleted, currentSound]); // Sync volume adjustments useEffect(() => { if (audioRef.current) { audioRef.current.volume = isMuted ? 0 : volume; } - }, [volume, isMuted]); + }, [volume, isMuted, currentSound]); // Format MM:SS const formatTime = (secs) => { @@ -206,25 +200,6 @@ export default function ForgeMode() { } }; - const getBorderGlowClass = () => { - if (!selectedTask) return "shadow-[0_0_40px_rgba(16,185,129,0.2)] border-emerald-500/30"; - const tag = (selectedTask.tags && selectedTask.tags[0]) || ""; - const priority = selectedTask.priority || "Medium"; - - if (priority === "High") return "shadow-[0_0_45px_rgba(239,68,68,0.25)] border-rose-500/30 text-rose-400"; - - switch (tag.toLowerCase()) { - case "homework": - return "shadow-[0_0_45px_rgba(59,130,246,0.25)] border-blue-500/30 text-blue-400"; - case "creative": - return "shadow-[0_0_45px_rgba(168,85,247,0.25)] border-purple-500/30 text-purple-400"; - case "routine": - return "shadow-[0_0_45px_rgba(16,185,129,0.25)] border-emerald-500/30 text-emerald-400"; - default: - return "shadow-[0_0_45px_rgba(20,184,166,0.25)] border-teal-500/30 text-teal-400"; - } - }; - // Timer complete triggers const handleTimerComplete = async () => { setIsRunning(false); @@ -268,6 +243,10 @@ export default function ForgeMode() { } }; + useEffect(() => { + handleTimerCompleteRef.current = handleTimerComplete; + }); + // Start Confetti Particles const triggerSparks = () => { const canvas = canvasRef.current; From 514c06beb5c22225fb5665b2406a338c31024579 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Mon, 8 Jun 2026 21:31:55 +0530 Subject: [PATCH 17/27] remove duplicate 2fa check resolve --- backend/controllers/authController.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backend/controllers/authController.js b/backend/controllers/authController.js index ab4c4454..794c0576 100644 --- a/backend/controllers/authController.js +++ b/backend/controllers/authController.js @@ -122,10 +122,7 @@ export const login = async (req, res) => { tempUserId: user._id, }); } - // If 2FA enabled, don't issue token yet - if (user.twoFactorEnabled) { - return res.status(200).json({ requires2FA: true, tempUserId: user._id }); - } + const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '24h', }); From d25ae6e98fab064c2b6022912d4bde2f3932bc16 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Mon, 8 Jun 2026 21:35:57 +0530 Subject: [PATCH 18/27] authcontext session restore --- frontend/src/context/AuthContext.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/context/AuthContext.jsx b/frontend/src/context/AuthContext.jsx index e9f9e768..2e9027c9 100644 --- a/frontend/src/context/AuthContext.jsx +++ b/frontend/src/context/AuthContext.jsx @@ -26,7 +26,7 @@ const AuthProvider = ({ children }) => { // restore session on app load useEffect(() => { api - .get("/auth/me") + .get("/auth/user") .then((res) => { setUser(res.data.user); }) From 9bba2d189bd13dd57499cd3520f1ac7c78baf350 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Mon, 8 Jun 2026 21:38:27 +0530 Subject: [PATCH 19/27] routine schema adaptive settings --- backend/src/models/Routine.js | 116 ++++++++++++++++------------------ 1 file changed, 53 insertions(+), 63 deletions(-) diff --git a/backend/src/models/Routine.js b/backend/src/models/Routine.js index b9029425..473219eb 100644 --- a/backend/src/models/Routine.js +++ b/backend/src/models/Routine.js @@ -34,69 +34,6 @@ const routineSchema = mongoose.Schema( "Saturday", "Sunday", ], - adaptiveSettings: { - adaptiveEnabled: { - type: Boolean, - default: true, - }, - - difficultyLevel: { - type: String, - enum: ["easy", "moderate", "hard"], - default: "moderate", - }, - - burnoutScore: { - type: Number, - default: 0, - min: 0, - max: 100, - }, - - consistencyScore: { - type: Number, - default: 100, - min: 0, - max: 100, - }, - - fatigueLevel: { - type: String, - enum: ["low", "medium", "high"], - default: "low", - }, - - recoveryMode: { - type: Boolean, - default: false, - }, - - recoveryDays: { - type: Number, - default: 0, - }, - - missedDaysCount: { - type: Number, - default: 0, - }, - - completedDaysCount: { - type: Number, - default: 0, - }, - - sustainabilityScore: { - type: Number, - default: 100, - min: 0, - max: 100, - }, - - lastRecoveryDate: { - type: Date, - }, - }, }, startTime: { type: Number, @@ -109,6 +46,59 @@ const routineSchema = mongoose.Schema( }, }, ], + adaptiveSettings: { + adaptiveEnabled: { + type: Boolean, + default: true, + }, + difficultyLevel: { + type: String, + enum: ["easy", "moderate", "hard"], + default: "moderate", + }, + burnoutScore: { + type: Number, + default: 0, + min: 0, + max: 100, + }, + consistencyScore: { + type: Number, + default: 100, + min: 0, + max: 100, + }, + fatigueLevel: { + type: String, + enum: ["low", "medium", "high"], + default: "low", + }, + recoveryMode: { + type: Boolean, + default: false, + }, + recoveryDays: { + type: Number, + default: 0, + }, + missedDaysCount: { + type: Number, + default: 0, + }, + completedDaysCount: { + type: Number, + default: 0, + }, + sustainabilityScore: { + type: Number, + default: 100, + min: 0, + max: 100, + }, + lastRecoveryDate: { + type: Date, + }, + }, }, { timestamps: true } ); From 1b560a7895cd9b9584d00367560e0b057d14c116 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 10 Jun 2026 20:58:58 +0530 Subject: [PATCH 20/27] fix: revert ci.yml node version change, keep node 18 matrix as per main branch --- .github/workflows/ci.yml | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70453e1a..8e646f7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,8 +7,13 @@ on: branches: ["main"] jobs: - backend: + ci: runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18] + steps: - name: Checkout Code uses: actions/checkout@v4 @@ -16,9 +21,11 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: ${{ matrix.node-version }} cache: "npm" - cache-dependency-path: backend/package-lock.json + cache-dependency-path: | + backend/package-lock.json + frontend/package-lock.json - name: Install Backend Dependencies working-directory: backend @@ -28,23 +35,6 @@ jobs: working-directory: backend run: npm run lint - - name: Backend Tests - working-directory: backend - run: npm test --if-present - - frontend: - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: "npm" - cache-dependency-path: frontend/package-lock.json - - name: Install Frontend Dependencies working-directory: frontend run: npm ci @@ -53,6 +43,10 @@ jobs: working-directory: frontend run: npm run lint + - name: Backend Tests + working-directory: backend + run: npm test --if-present + - name: Frontend Tests working-directory: frontend run: npm test --if-present From 46897c6148430975b028722551c9a50af4835317 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 10 Jun 2026 21:17:04 +0530 Subject: [PATCH 21/27] fix: move tags default into field definition to fix rogue schema field in Task model --- backend/src/models/Task.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/models/Task.js b/backend/src/models/Task.js index ff6b232e..4893585e 100644 --- a/backend/src/models/Task.js +++ b/backend/src/models/Task.js @@ -17,11 +17,11 @@ const taskSchema = mongoose.Schema( required: false, trim: true }, - tags: [{ - type: String, + tags: { + type: [String], trim: true, - }], - default: [], + default: [], + }, priority: { type: String, required: true, From 3956a75541df89f25e1a29c3c18a276a75545f63 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 10 Jun 2026 21:26:01 +0530 Subject: [PATCH 22/27] ci: split into separate backend and frontend jobs (node 18) to satisfy required checks --- .github/workflows/ci.yml | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8e646f7f..2109fb99 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,13 +7,8 @@ on: branches: ["main"] jobs: - ci: + backend: runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [18] - steps: - name: Checkout Code uses: actions/checkout@v4 @@ -21,11 +16,9 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} + node-version: 18 cache: "npm" - cache-dependency-path: | - backend/package-lock.json - frontend/package-lock.json + cache-dependency-path: backend/package-lock.json - name: Install Backend Dependencies working-directory: backend @@ -35,6 +28,23 @@ jobs: working-directory: backend run: npm run lint + - name: Backend Tests + working-directory: backend + run: npm test --if-present + + frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + cache-dependency-path: frontend/package-lock.json + - name: Install Frontend Dependencies working-directory: frontend run: npm ci @@ -43,10 +53,6 @@ jobs: working-directory: frontend run: npm run lint - - name: Backend Tests - working-directory: backend - run: npm test --if-present - - name: Frontend Tests working-directory: frontend run: npm test --if-present From 85676cd134e9b69218d68bb44f19cb4190352f20 Mon Sep 17 00:00:00 2001 From: Abhishek Dhatrak Date: Wed, 10 Jun 2026 21:31:48 +0530 Subject: [PATCH 23/27] fix: render AnimatedRoutes in App, add missing ForgeMode import and missing routes --- frontend/src/App.jsx | 70 +++++++------------------------------------- 1 file changed, 11 insertions(+), 59 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 91e10270..0ae286cf 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -16,11 +16,11 @@ import About from "./pages/About.jsx"; import Profile from './pages/Profile.jsx'; import ScrollToTop from "./components/ScrollToTop.jsx"; import Pomodoro from "./pages/Pomodoro.jsx"; +import ForgeMode from "./pages/ForgeMode.jsx"; import ErrorBoundary from "./components/ErrorBoundary.jsx"; import PageTransition from "./components/PageTransition.jsx"; import ShareRoutine from "./pages/ShareRoutine.jsx"; - const AuthLayout = ({ children }) => (
{children} @@ -99,9 +99,17 @@ const AnimatedRoutes = () => { } /> + + + + } + /> + } /> } /> - ); }; @@ -111,63 +119,7 @@ const App = () => {
- - } /> - } /> - } /> - } /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } - /> - - - - } -/> - - - - } - /> - } /> - } /> - - +