From e9f95c5ff348949adea9dae4c039c8a9ff2aed7a Mon Sep 17 00:00:00 2001 From: Anshu Date: Sun, 7 Jun 2026 11:38:05 +0530 Subject: [PATCH 1/9] Create Landing Page component --- frontend/src/components/PublicRoute.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/PublicRoute.jsx b/frontend/src/components/PublicRoute.jsx index 64339e8c..34282c54 100644 --- a/frontend/src/components/PublicRoute.jsx +++ b/frontend/src/components/PublicRoute.jsx @@ -20,9 +20,11 @@ const PublicRoute = ({ children }) => { repeat: Infinity, ease: "easeInOut", }} - className="w-16 h-16 rounded-2xl bg-gradient-to-tr from-[#4eb7b3] to-[#98e1d7] flex items-center justify-center shadow-lg" + className="w-16 h-16 rounded-2xl bg-linear-to-tr from-[#4eb7b3] to-[#98e1d7] flex items-center justify-center shadow-lg" > - D + + D + Date: Sun, 7 Jun 2026 11:39:20 +0530 Subject: [PATCH 2/9] Create Landing Page component --- frontend/src/pages/LandingPage.jsx | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 frontend/src/pages/LandingPage.jsx diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx new file mode 100644 index 00000000..6c7fe2eb --- /dev/null +++ b/frontend/src/pages/LandingPage.jsx @@ -0,0 +1,22 @@ +const LandingPage = () => { + return ( +
+

DailyForge

+

+ Build routines. Forge habits. Own your week. +

+ +
+ + + + + + + +
+
+ ); +}; + +export default LandingPage; From 899a7b3d703dcabea9c317368047904fc25402fe Mon Sep 17 00:00:00 2001 From: Anshu Date: Sun, 7 Jun 2026 11:40:39 +0530 Subject: [PATCH 3/9] Link landing Page --- frontend/src/App.jsx | 103 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 14 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index d955f861..7cbf5f0d 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -2,6 +2,7 @@ import React from "react"; import { BrowserRouter, Route, Routes, useLocation } from "react-router-dom"; import { AnimatePresence } from "framer-motion"; import Navbar from "./components/Navbar.jsx"; +import LandingPage from "./pages/LandingPage"; import Login from "./pages/Login.jsx"; import Signup from "./pages/Signup.jsx"; import Dashboard from "./pages/Dashboard.jsx"; @@ -13,7 +14,7 @@ import Analytics from "./pages/Analytics.jsx"; import Footer from "./components/Footer.jsx"; import NotFound from "./pages/NotFound.jsx"; import About from "./pages/About.jsx"; -import Profile from './pages/Profile.jsx'; +import Profile from "./pages/Profile.jsx"; import ScrollToTop from "./components/ScrollToTop.jsx"; import ErrorBoundary from "./components/ErrorBoundary.jsx"; import PageTransition from "./components/PageTransition.jsx"; @@ -30,16 +31,50 @@ const AnimatedRoutes = () => { return ( - } /> - } /> - } /> - } /> + + + + } + /> + + + + + + } + /> + + + + + + } + /> + + + + } + /> - + + + } @@ -49,7 +84,9 @@ const AnimatedRoutes = () => { element={ - + + + } @@ -59,7 +96,9 @@ const AnimatedRoutes = () => { element={ - + + + } @@ -68,7 +107,9 @@ const AnimatedRoutes = () => { path="/profile" element={ - + + + } /> @@ -76,7 +117,9 @@ const AnimatedRoutes = () => { path="/analytics" element={ - + + + } /> @@ -92,10 +135,42 @@ const App = () => {
- } /> - } /> - } /> - } /> + + + + } + /> + + + + + + } + /> + + + + + + } + /> + + + + } + /> Date: Sun, 7 Jun 2026 11:41:25 +0530 Subject: [PATCH 4/9] Install packages --- frontend/package-lock.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9470a42c..90a495c8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -67,6 +67,7 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -993,6 +994,7 @@ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.13.tgz", "integrity": "sha512-H89Jeyp31+EZk9GPu6vaeL9mEmoXgM3nASB7UPBYYS/lqAks21mO1BU1dF8NbsVTL6tgGZkGUtiGJgxtDiwHkw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@firebase/component": "0.7.3", "@firebase/logger": "0.5.1", @@ -1059,6 +1061,7 @@ "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.13.tgz", "integrity": "sha512-pn3FvXwUR34kWPccDQfCKsNZcM2wD1OS+J1jeEgzM1ZNXoxR2NaF6e5DjDuRrnTwR6LN2XQQt0IqE6yKmgpCQg==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@firebase/app": "0.14.13", "@firebase/component": "0.7.3", @@ -1075,6 +1078,7 @@ "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.5.tgz", "integrity": "sha512-YevqTjvo7Iujsa9Dwowmd6dSoElhzmD63ZSrq6bzjvQ6POjYgNjOFHLmNIgJs48eNO093NCERibuFnxbfOvU7A==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@firebase/logger": "0.5.1" } @@ -1528,6 +1532,7 @@ "integrity": "sha512-LUdM4Wg7YM9Pq/49nGYySJA0CSQEKnGffFzWV8+6gXN7mGxn+FL1IqvFbuZUtAQcfZgHYDwCE1wwlK7rB7gl2g==", "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" }, @@ -2394,6 +2399,7 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2435,6 +2441,7 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2574,6 +2581,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2957,6 +2965,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4240,6 +4249,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4333,6 +4343,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -4342,6 +4353,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -4720,6 +4732,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.3.tgz", "integrity": "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -4923,6 +4936,7 @@ "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From 25471c3f07b427cc273bc9df17fe4f41a68cf18e Mon Sep 17 00:00:00 2001 From: Anshu Date: Mon, 8 Jun 2026 22:42:17 +0530 Subject: [PATCH 5/9] updated --- frontend/src/components/Navbar.jsx | 227 +++++++++++++++++------------ 1 file changed, 132 insertions(+), 95 deletions(-) diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx index d580a884..71d6b0db 100644 --- a/frontend/src/components/Navbar.jsx +++ b/frontend/src/components/Navbar.jsx @@ -2,7 +2,19 @@ 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, +} from "lucide-react"; import { AuthContext } from "../context/AuthContext"; import { ThemeContext } from "../context/ThemeContext"; import gsap from "gsap"; @@ -15,7 +27,7 @@ function cn(...inputs) { return twMerge(clsx(inputs)); } -//logout modal +//logout modal const LogoutModal = ({ isOpen, onConfirm, onCancel }) => ( {isOpen && ( @@ -25,7 +37,10 @@ const LogoutModal = ({ isOpen, onConfirm, onCancel }) => ( exit={{ opacity: 0 }} transition={{ duration: 0.2 }} className="fixed inset-0 z-100 flex items-center justify-center p-4" - style={{ backgroundColor: "rgba(0,0,0,0.45)", backdropFilter: "blur(4px)" }} + style={{ + backgroundColor: "rgba(0,0,0,0.45)", + backdropFilter: "blur(4px)", + }} onClick={onCancel} > ( Log out of DailyForge?

- You'll need to log back in to access your dashboard, tasks, and routines. + You'll need to log back in to access your dashboard, tasks, and + routines.

{/* Buttons */} @@ -103,29 +119,29 @@ const Navbar = () => { const handleConfirmLogout = (e) => { setShowLogoutModal(false); setIsOpen(false); - + if (!e || !e.clientX) { logout(); return; } const { clientX, clientY } = e; - + const overlay = document.createElement("div"); overlay.id = "logout-transition-overlay"; overlay.style.position = "fixed"; - overlay.style.backgroundColor = "#f97316"; + overlay.style.backgroundColor = "#f97316"; overlay.style.borderRadius = "50%"; - overlay.style.zIndex = "9999"; + overlay.style.zIndex = "9999"; overlay.style.pointerEvents = "none"; - + const size = 10; overlay.style.width = `${size}px`; overlay.style.height = `${size}px`; overlay.style.top = `${clientY - size / 2}px`; overlay.style.left = `${clientX - size / 2}px`; overlay.style.transformOrigin = "center center"; - + document.body.appendChild(overlay); const maxDistX = Math.max(clientX, window.innerWidth - clientX); @@ -139,15 +155,15 @@ const Navbar = () => { ease: "power2.inOut", onComplete: () => { logout(); - + setTimeout(() => { gsap.to(overlay, { opacity: 0, duration: 0.4, - onComplete: () => overlay.remove() + onComplete: () => overlay.remove(), }); }, 300); - } + }, }); }; @@ -160,58 +176,65 @@ const Navbar = () => { const { clientX, clientY } = e; const isDark = theme === "dark"; - - // Background color of the TARGET theme - const targetColor = isDark ? "#ffffff" : "#0f172a"; const overlay = document.createElement("div"); overlay.id = "theme-transition-overlay"; + overlay.style.position = "fixed"; - overlay.style.backgroundColor = targetColor; overlay.style.borderRadius = "50%"; - overlay.style.zIndex = "9999"; + overlay.style.zIndex = "9999"; overlay.style.pointerEvents = "none"; - + + overlay.style.background = isDark + ? "radial-gradient(circle, #ffffff 0%, #98e1d7 100%)" + : "radial-gradient(circle, #98e1d7 0%, #4eb7b3 100%)"; + const size = 10; + overlay.style.width = `${size}px`; overlay.style.height = `${size}px`; + overlay.style.top = `${clientY - size / 2}px`; overlay.style.left = `${clientX - size / 2}px`; + overlay.style.transformOrigin = "center center"; - + document.body.appendChild(overlay); const maxDistX = Math.max(clientX, window.innerWidth - clientX); const maxDistY = Math.max(clientY, window.innerHeight - clientY); + const maxRadius = Math.sqrt(maxDistX * maxDistX + maxDistY * maxDistY); + const scale = (maxRadius * 2) / size; gsap.to(overlay, { - scale: scale, - duration: 0.6, - ease: "power2.inOut", + scale, + duration: 0.75, + ease: "power3.inOut", onComplete: () => { toggleTheme(); - + setTimeout(() => { gsap.to(overlay, { opacity: 0, - duration: 0.3, - onComplete: () => overlay.remove() + duration: 0.35, + ease: "power2.out", + onComplete: () => overlay.remove(), }); - }, 50); - } + }, 80); + }, }); }; // Navigation Links configuration - const navLinks = [ - { name: "Dashboard", path: "/dashboard", icon: LayoutDashboard }, - { name: "Tasks", path: "/tasks", icon: CheckSquare }, - { name: "Routine Builder", path: "/routine-builder", icon: Calendar }, - { name: "Analytics", path: "/analytics", icon: TrendingUp }, - { name: "Profile", path: "/profile", icon: User }, -]; + const navLinks = [ + { name: "Dashboard", path: "/dashboard", icon: LayoutDashboard }, + { name: "Tasks", path: "/tasks", icon: CheckSquare }, + { name: "Routine Builder", path: "/routine-builder", icon: Calendar }, + { name: "Analytics", path: "/analytics", icon: TrendingUp }, + { name: "Profile", path: "/profile", icon: User }, + ]; return ( <> @@ -230,20 +253,24 @@ const Navbar = () => { "fixed top-0 inset-x-0 z-50 transition-all duration-300", scrolled ? "bg-white/80 dark:bg-slate-900/80 backdrop-blur-xl border-b border-soft shadow-sm" - : "bg-transparent border-b border-transparent" + : "bg-transparent border-b border-transparent", )} >
- {/* Logo Section with Hover Animation */} - + - D + + D + DailyForge @@ -262,11 +289,14 @@ const Navbar = () => { "px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 flex items-center gap-2", isActive ? "bg-[#d0f6e3] text-[#3b8ea0] shadow-sm" - : "text-[#4eb7b3] hover:bg-[#d0f6e3]/50 hover:text-[#3b8ea0] dark:text-gray-300 dark:hover:bg-gray-800" + : "text-[#4eb7b3] hover:bg-[#d0f6e3]/50 hover:text-[#3b8ea0] dark:text-gray-300 dark:hover:bg-gray-800", ) } > - + {link.name} ))} @@ -284,11 +314,13 @@ const Navbar = () => { aria-label="Toggle dark mode" > {theme === "dark" ? ( - + ) : ( - - )} - + + )} {!user ? ( @@ -320,7 +352,7 @@ const Navbar = () => { {/* Mobile Menu Toggle Button */}
- +
- + {/* Mobile Navigation Dropdown */} {isOpen && ( @@ -356,61 +388,66 @@ const Navbar = () => { className="md:hidden border-b border-soft bg-white/95 dark:bg-slate-900/95 backdrop-blur-xl overflow-hidden" >
- {user && navLinks.map((link) => ( - setIsOpen(false)} - className={({ isActive }) => - cn( - "px-4 py-3 rounded-xl text-base font-medium transition-colors flex items-center gap-3 w-full", - isActive - ? "bg-[#d0f6e3] text-[#3b8ea0]" - : "text-[#4eb7b3] dark:text-gray-300 hover:bg-[#d0f6e3]/50 dark:hover:bg-gray-800 hover:text-[#3b8ea0]" - ) - } - > - - {link.name} - - ))} - -
- - {!user ? ( - <> - ( + setIsOpen(false)} - className="w-full flex items-center justify-center gap-2 px-4 py-3 rounded-xl text-[#3b8ea0] dark:text-gray-300 font-medium hover:bg-[#d0f6e3] dark:hover:bg-gray-800 dark:hover:text-white transition-colors" + className={({ isActive }) => + cn( + "px-4 py-3 rounded-xl text-base font-medium transition-colors flex items-center gap-3 w-full", + isActive + ? "bg-[#d0f6e3] text-[#3b8ea0]" + : "text-[#4eb7b3] dark:text-gray-300 hover:bg-[#d0f6e3]/50 dark:hover:bg-gray-800 hover:text-[#3b8ea0]", + ) + } > - - Login - + + {link.name} + + ))} - setIsOpen(false)} +
+ {!user ? ( + <> + setIsOpen(false)} + className="w-full flex items-center justify-center gap-2 px-4 py-3 rounded-xl text-[#3b8ea0] dark:text-gray-300 font-medium hover:bg-[#d0f6e3] dark:hover:bg-gray-800 dark:hover:text-white transition-colors" + > + + Login + + + setIsOpen(false)} + className="w-full flex items-center justify-center gap-2 btn btn-primary py-3" + > + + Signup + + + ) : ( + - )} -
+ + Logout + + )} +
-
+ )} -
+ ); From a24b4ab677525d1ba312706d2437abc49a38582a Mon Sep 17 00:00:00 2001 From: Anshu Date: Mon, 8 Jun 2026 22:42:56 +0530 Subject: [PATCH 6/9] updated --- frontend/src/pages/LandingPage.jsx | 172 ++++++++++++++++++++++++++--- frontend/src/pages/Login.jsx | 147 +++++++++++++++++++----- 2 files changed, 278 insertions(+), 41 deletions(-) diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index 6c7fe2eb..4ec4b2e1 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -1,20 +1,162 @@ +import { Link } from "react-router-dom"; + const LandingPage = () => { return ( -
-

DailyForge

-

- Build routines. Forge habits. Own your week. -

- - +
+ {/* Hero */} +
+
+
+ +

+ DailyForge +

+ +

+ Build routines. Forge habits. Own your week. +

+ +

+ Design powerful weekly routines with drag-and-drop scheduling, + reusable task templates, productivity insights, and smart conflict + detection. +

+ +
+ + Get Started + + + + Login + +
+
+ + {/* Features */} +
+

+ Why DailyForge? +

+ +

+ Everything you need to organize your tasks, build routines and stay + productive every single week. +

+ +
+ {/* Card 1 */} +
+
+ 📋 +
+ +

+ Smart Task Management +

+ +

+ Create tasks with categories, priorities and durations. Keep your + workflow organized without clutter. +

+
+ + {/* Card 2 */} +
+
+ 🗓️ +
+ +

+ Visual Routine Builder +

+ +

+ Drag and drop tasks into a weekly planner and build routines that + fit your lifestyle and goals. +

+
+ + {/* Card 3 */} +
+
+ 📊 +
+ +

+ Productivity Insights +

+ +

+ Track streaks, completion rates and consistency with beautiful + analytics and contribution heatmaps. +

+
+
+
+ + {/* CTA */} +
+

+ Start building better habits today +

+ +

+ Join DailyForge and take control of your weekly routine. +

+ + + Create Free Account + +
); }; diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index a017d1e8..ccc97616 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -8,17 +8,44 @@ import { signInWithPopup } from "firebase/auth"; const GoogleIcon = () => ( - - - - + + + + ); const LoadingSpinner = () => ( - - - + + + ); @@ -65,6 +92,9 @@ const Login = () => { }; const handleGoogleLogin = async () => { + console.log("auth:", auth); + console.log("googleProvider:", googleProvider); + setIsGoogleLoading(true); setError(""); try { @@ -76,7 +106,11 @@ const Login = () => { navigate(redirectPath, { replace: true }); } catch (err) { console.error(err); - setError(err.response?.data?.message || err.message || "Failed to log in with Google."); + setError( + err.response?.data?.message || + err.message || + "Failed to log in with Google.", + ); } finally { setIsGoogleLoading(false); } @@ -126,11 +160,17 @@ const Login = () => { className="surface-bg animate-in w-full max-w-md rounded-[30px] px-8 py-10 flex flex-col gap-6 border border-white/10 shadow-[0_20px_60px_rgba(0,0,0,0.7)]" >
-

Two-Factor Auth

-

Enter the code from your authenticator app

+

+ Two-Factor Auth +

+

+ Enter the code from your authenticator app +

- + { {error}
)} - @@ -159,30 +202,73 @@ const Login = () => {
-
-
+
+
-

Welcome Back

-

Login to continue your experience

+

+ Welcome Back +

+

+ Login to continue your experience +

-
- OR + + OR +
- - setEmail(e.target.value)} className="input-modern w-full px-4 py-3 rounded-2xl text-sm" /> + + setEmail(e.target.value)} + className="input-modern w-full px-4 py-3 rounded-2xl text-sm" + />
- +
- setPassword(e.target.value)} className="input-modern w-full px-4 py-3 pr-11 rounded-2xl text-sm" /> -
@@ -192,12 +278,21 @@ const Login = () => { {error}
)} -

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

@@ -205,4 +300,4 @@ const Login = () => { ); }; -export default Login; \ No newline at end of file +export default Login; From 6e95b475602e78b6061f5eeb8d88dd8e555be60c Mon Sep 17 00:00:00 2001 From: Anshu Date: Mon, 8 Jun 2026 22:44:54 +0530 Subject: [PATCH 7/9] updated --- frontend/src/utils/firebase.js | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/frontend/src/utils/firebase.js b/frontend/src/utils/firebase.js index efd7a5f8..d2513e9c 100644 --- a/frontend/src/utils/firebase.js +++ b/frontend/src/utils/firebase.js @@ -1,6 +1,8 @@ import { initializeApp } from "firebase/app"; import { getAuth, GoogleAuthProvider } from "firebase/auth"; +console.log("Firebase API Key:", import.meta.env.VITE_FIREBASE_API_KEY); + const firebaseConfig = { apiKey: import.meta.env.VITE_FIREBASE_API_KEY, authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN, @@ -10,28 +12,18 @@ const firebaseConfig = { appId: import.meta.env.VITE_FIREBASE_APP_ID, }; -let app = null; -let auth = null; -let googleProvider = null; +const app = initializeApp(firebaseConfig); -// Only initialize Firebase if an API key is provided -if (firebaseConfig.apiKey && firebaseConfig.apiKey !== "your_firebase_api_key") { - // Initialize Firebase - app = initializeApp(firebaseConfig); +const auth = getAuth(app); - // Initialize Firebase Auth and Google Provider - auth = getAuth(app); - googleProvider = new GoogleAuthProvider(); +const googleProvider = new GoogleAuthProvider(); - // Request profile and email scopes (standard for Google Sign-In) - googleProvider.addScope("profile"); - googleProvider.addScope("email"); +googleProvider.addScope("profile"); +googleProvider.addScope("email"); - // Force account selection screen - googleProvider.setCustomParameters({ - prompt: "select_account", - }); -} +googleProvider.setCustomParameters({ + prompt: "select_account", +}); export { auth, googleProvider }; export default app; From ad7bf94d1d225f9b79543a8c75148982bd8c1d2c Mon Sep 17 00:00:00 2001 From: Anshu Date: Tue, 16 Jun 2026 16:46:38 +0530 Subject: [PATCH 8/9] Improve footer UI and enhance overall user experience --- frontend/src/components/Footer.jsx | 313 ++++++++++++++++++++--------- 1 file changed, 216 insertions(+), 97 deletions(-) diff --git a/frontend/src/components/Footer.jsx b/frontend/src/components/Footer.jsx index 6d0ad94f..abf46e8c 100644 --- a/frontend/src/components/Footer.jsx +++ b/frontend/src/components/Footer.jsx @@ -1,8 +1,17 @@ -import { Link } from 'react-router-dom'; -import { Github, MessageSquare, BookOpen, Heart } from 'lucide-react'; +import { Link } from "react-router-dom"; +import { + Github, + MessageSquare, + BookOpen, + Heart, + Instagram, + Linkedin, + TwitterIcon, +} from "lucide-react"; export default function Footer() { const githubBase = "https://github.com/aryandas2911/DailyForge"; + const navLinks = [ { label: "Dashboard", path: "/dashboard" }, { label: "Tasks", path: "/tasks" }, @@ -10,112 +19,222 @@ export default function Footer() { ]; return ( -