Index: backend/auth/passportConfig.js
===================================================================
--- backend/auth/passportConfig.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
+++ backend/auth/passportConfig.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -0,0 +1,63 @@
+const passport = require("passport");
+const GoogleStrategy = require("passport-google-oauth20").Strategy;
+const Student = require("../models/Student");
+const prisma = require("../lib/prisma");
+
+const { supabase } = require("../supabaseClient");
+
+passport.use(
+  new GoogleStrategy(
+    {
+      clientID: process.env.GOOGLE_CLIENT_ID,
+      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
+      callbackURL: "http://localhost:5001/api/auth/google/callback",
+    },
+    async (accessToken, refreshToken, profile, done) => {
+      try {
+        const email =
+          profile.emails && profile.emails[0] ? profile.emails[0].value : null;
+        if (!email) {
+          return done(new Error("No email found in Google profile"), null);
+        }
+
+        let user = await prisma.users.findUnique({
+          where: { email: email },
+        });
+
+        if (!user) {
+          const { data: authData, error: authError } =
+            await supabase.auth.admin.createUser({
+              email: email,
+              user_metadata: {
+                name: profile.displayName,
+                avatar_url: profile.photos[0].value,
+              },
+
+              email_confirm: true,
+            });
+
+          if (authError) {
+            console.error("Supabase Auth user creation error:", authError);
+            return done(authError, null);
+          }
+          console.log(profile);
+          const studentForDb = new Student({
+            id: authData.user.id,
+            username: profile.displayName,
+            email: email,
+            name: profile.displayName,
+          });
+
+          user = await prisma.users.create({
+            data: studentForDb,
+          });
+        }
+
+        return done(null, user);
+      } catch (error) {
+        console.error("Error in Google Strategy:", error);
+        return done(error, null);
+      }
+    }
+  )
+);
Index: backend/node_modules/.package-lock.json
===================================================================
--- backend/node_modules/.package-lock.json	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ backend/node_modules/.package-lock.json	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -248,4 +248,13 @@
       "dev": true,
       "license": "MIT"
+    },
+    "node_modules/base64url": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
     },
     "node_modules/bcrypt": {
@@ -1639,4 +1648,10 @@
       }
     },
+    "node_modules/oauth": {
+      "version": "0.10.2",
+      "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.2.tgz",
+      "integrity": "sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==",
+      "license": "MIT"
+    },
     "node_modules/object-inspect": {
       "version": "1.13.4",
@@ -1743,4 +1758,62 @@
       }
     },
+    "node_modules/passport": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz",
+      "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "passport-strategy": "1.x.x",
+        "pause": "0.0.1",
+        "utils-merge": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/jaredhanson"
+      }
+    },
+    "node_modules/passport-google-oauth20": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
+      "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
+      "license": "MIT",
+      "dependencies": {
+        "passport-oauth2": "1.x.x"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/passport-oauth2": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz",
+      "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==",
+      "license": "MIT",
+      "dependencies": {
+        "base64url": "3.x.x",
+        "oauth": "0.10.x",
+        "passport-strategy": "1.x.x",
+        "uid2": "0.0.x",
+        "utils-merge": "1.x.x"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/jaredhanson"
+      }
+    },
+    "node_modules/passport-strategy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
+      "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
     "node_modules/path-to-regexp": {
       "version": "8.2.0",
@@ -1749,4 +1822,9 @@
         "node": ">=16"
       }
+    },
+    "node_modules/pause": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
+      "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
     },
     "node_modules/picomatch": {
@@ -2178,4 +2256,10 @@
       }
     },
+    "node_modules/uid2": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+      "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==",
+      "license": "MIT"
+    },
     "node_modules/undefsafe": {
       "version": "2.0.5",
@@ -2208,4 +2292,13 @@
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "license": "MIT"
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
     },
     "node_modules/vary": {
Index: backend/package-lock.json
===================================================================
--- backend/package-lock.json	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ backend/package-lock.json	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -23,4 +23,6 @@
         "nodemailer": "^7.0.5",
         "openai": "^5.1.1",
+        "passport": "^0.7.0",
+        "passport-google-oauth20": "^2.0.0",
         "supabase": "^2.24.3"
       },
@@ -274,4 +276,13 @@
       "dev": true,
       "license": "MIT"
+    },
+    "node_modules/base64url": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
     },
     "node_modules/bcrypt": {
@@ -1665,4 +1676,10 @@
       }
     },
+    "node_modules/oauth": {
+      "version": "0.10.2",
+      "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.2.tgz",
+      "integrity": "sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==",
+      "license": "MIT"
+    },
     "node_modules/object-inspect": {
       "version": "1.13.4",
@@ -1769,4 +1786,62 @@
       }
     },
+    "node_modules/passport": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz",
+      "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "passport-strategy": "1.x.x",
+        "pause": "0.0.1",
+        "utils-merge": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/jaredhanson"
+      }
+    },
+    "node_modules/passport-google-oauth20": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
+      "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
+      "license": "MIT",
+      "dependencies": {
+        "passport-oauth2": "1.x.x"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/passport-oauth2": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz",
+      "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==",
+      "license": "MIT",
+      "dependencies": {
+        "base64url": "3.x.x",
+        "oauth": "0.10.x",
+        "passport-strategy": "1.x.x",
+        "uid2": "0.0.x",
+        "utils-merge": "1.x.x"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/jaredhanson"
+      }
+    },
+    "node_modules/passport-strategy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
+      "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
     "node_modules/path-to-regexp": {
       "version": "8.2.0",
@@ -1775,4 +1850,9 @@
         "node": ">=16"
       }
+    },
+    "node_modules/pause": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
+      "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
     },
     "node_modules/picomatch": {
@@ -2204,4 +2284,10 @@
       }
     },
+    "node_modules/uid2": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
+      "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==",
+      "license": "MIT"
+    },
     "node_modules/undefsafe": {
       "version": "2.0.5",
@@ -2234,4 +2320,13 @@
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "license": "MIT"
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
     },
     "node_modules/vary": {
Index: backend/package.json
===================================================================
--- backend/package.json	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ backend/package.json	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -26,4 +26,6 @@
     "nodemailer": "^7.0.5",
     "openai": "^5.1.1",
+    "passport": "^0.7.0",
+    "passport-google-oauth20": "^2.0.0",
     "supabase": "^2.24.3"
   },
Index: backend/routers/authRouter.js
===================================================================
--- backend/routers/authRouter.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
+++ backend/routers/authRouter.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -0,0 +1,49 @@
+const express = require("express");
+const passport = require("passport");
+const jwt = require("jsonwebtoken");
+const { supabase } = require("../supabaseClient");
+const router = express.Router();
+
+router.get(
+  "/google",
+  passport.authenticate("google", {
+    scope: ["profile", "email"],
+    session: false,
+  })
+);
+
+router.get(
+  "/google/callback",
+  passport.authenticate("google", {
+    session: false,
+    failureRedirect: "http://localhost:5173/login?error=google_auth_failed",
+  }),
+  async (req, res) => {
+    if (!req.user) {
+      return res.redirect("http://localhost:5173/login?error=user_not_found");
+    }
+
+    try {
+      const { data, error } = await supabase.auth.admin.generateLink({
+        type: "magiclink",
+        email: req.user.email,
+        options: {
+          redirectTo: "http://localhost:5173/dashboard",
+        },
+      });
+
+      if (error) {
+        throw error;
+      }
+
+      res.redirect(data.properties.action_link);
+    } catch (error) {
+      console.error("Error generating Supabase magic link:", error);
+      return res.redirect(
+        "http://localhost:5173/login?error=session_generation_failed"
+      );
+    }
+  }
+);
+
+module.exports = router;
Index: backend/server.js
===================================================================
--- backend/server.js	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ backend/server.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -1,30 +1,33 @@
-const express = require('express');
+const express = require("express");
 const app = express();
-const indexRouter = require('./routers/indexRouter');
-const path = require('path');
-const apiRouter = require('./routers/apiRouter');
-
-const forumRouter = require('./routers/forumRouter');
-const reviewRouter = require('./routers/reviewRouter');
-const taskRouter = require('./routers/taskRouter');
-const authenticateToken = require('./auth/auth');
+const indexRouter = require("./routers/indexRouter");
+const path = require("path");
+const apiRouter = require("./routers/apiRouter");
+const passport = require("passport");
+require("./auth/passportConfig");
+const forumRouter = require("./routers/forumRouter");
+const reviewRouter = require("./routers/reviewRouter");
+const taskRouter = require("./routers/taskRouter");
+const authRouter = require("./routers/authRouter");
+const authenticateToken = require("./auth/auth");
 
 app.use(express.json());
 app.use(express.urlencoded({ extended: true }));
-app.use(express.static(path.join(__dirname, '../client/dist')));
+app.use(express.static(path.join(__dirname, "../client/dist")));
 app.use(
-  '/assets',
-  express.static(path.join(__dirname, '../client/dist/assets'))
+  "/assets",
+  express.static(path.join(__dirname, "../client/dist/assets"))
 );
-app.use('/api', apiRouter);
+app.use("/api", apiRouter);
 
-app.use('/forum', authenticateToken, forumRouter);
-app.use('/review', authenticateToken, reviewRouter);
-app.use('/task', authenticateToken, taskRouter);
-app.get('/', indexRouter);
+app.use("/forum", authenticateToken, forumRouter);
+app.use("/review", authenticateToken, reviewRouter);
+app.use("/task", authenticateToken, taskRouter);
+app.use("/api/auth", authRouter);
+app.get("/", indexRouter);
 app.use((req, res, next) => {
-  if (req.method === 'GET' && req.accepts('html')) {
+  if (req.method === "GET" && req.accepts("html")) {
     res.sendFile(
-      path.resolve(__dirname, '../client/dist/index.html'),
+      path.resolve(__dirname, "../client/dist/index.html"),
       (err) => {
         if (err) {
@@ -39,4 +42,4 @@
 
 app.listen(5001, () => {
-  console.log('Server started on port 5001');
+  console.log("Server started on port 5001");
 });
Index: client/package-lock.json
===================================================================
--- client/package-lock.json	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/package-lock.json	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -15,4 +15,5 @@
         "class-variance-authority": "^0.7.1",
         "clsx": "^2.1.1",
+        "jwt-decode": "^4.0.0",
         "lucide-react": "^0.503.0",
         "react": "^19.0.0",
@@ -3528,4 +3529,13 @@
       }
     },
+    "node_modules/jwt-decode": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz",
+      "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/keyv": {
       "version": "4.5.4",
Index: client/package.json
===================================================================
--- client/package.json	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/package.json	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -18,4 +18,5 @@
     "class-variance-authority": "^0.7.1",
     "clsx": "^2.1.1",
+    "jwt-decode": "^4.0.0",
     "lucide-react": "^0.503.0",
     "react": "^19.0.0",
Index: client/src/App.jsx
===================================================================
--- client/src/App.jsx	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/App.jsx	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -15,4 +15,5 @@
 import ManageChallenges from "./Dashboard/components/ManageChallenges";
 import CreateNewChallenge from "./Dashboard/components/CreateNewChallenge";
+
 import UserPosts from "./Dashboard/components/userPosts";
 export default function App() {
Index: client/src/Dashboard/components/Forum.jsx
===================================================================
--- client/src/Dashboard/components/Forum.jsx	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/Dashboard/components/Forum.jsx	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -23,4 +23,5 @@
   const postsPerPage = 5;
   const { user } = useAuth();
+  console.log(user);
 
   const showModal = (message, type = "info", postId = null) => {
Index: client/src/LogIn/LogIn.jsx
===================================================================
--- client/src/LogIn/LogIn.jsx	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/LogIn/LogIn.jsx	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -3,4 +3,5 @@
 import { supabase } from "../contexts/AuthContext";
 import { useAuth } from "../contexts/AuthContext";
+import { signInWithGoogle } from "@/services/registerLoginService";
 const Login = () => {
   const [email, setEmail] = useState("");
@@ -9,4 +10,5 @@
   const [error, setError] = useState("");
   const [loading, setLoading] = useState(false);
+  const [googleLoading, setGoogleLoading] = useState(false);
   const { login } = useAuth();
   const navigate = useNavigate();
@@ -14,4 +16,8 @@
   const togglePasswordVisibility = () => {
     setShowPassword(!showPassword);
+  };
+  const handleGoogleSignIn = () => {
+    setGoogleLoading(true);
+    signInWithGoogle();
   };
 
@@ -53,9 +59,8 @@
             onChange={(e) => setEmail(e.target.value)}
             required
-            disabled={loading}
+            disabled={loading || googleLoading}
           />
           <p className="text-sm mt-1">*Must use your students address</p>
         </div>
-
         <div>
           <label className="label text-lg" htmlFor="password">
@@ -71,5 +76,5 @@
               onChange={(e) => setPassword(e.target.value)}
               required
-              disabled={loading}
+              disabled={loading || googleLoading}
             />
             <button
@@ -78,5 +83,5 @@
               onClick={togglePasswordVisibility}
               tabIndex="-1"
-              disabled={loading}
+              disabled={loading || googleLoading}
             >
               {!showPassword ? (
@@ -119,9 +124,51 @@
           </div>
         </div>
+        <div className="text-center">
+          <p className="text-sm mb-3">or continue with Google</p>
+          <button
+            type="button"
+            onClick={handleGoogleSignIn}
+            className="btn btn-outline w-full flex items-center justify-center"
+            disabled={loading || googleLoading}
+          >
+            {googleLoading ? (
+              <span className="flex items-center gap-2">
+                <span className="loading loading-spinner loading-xs"></span>
+                Redirecting...
+              </span>
+            ) : (
+              <>
+                <svg
+                  className="w-5 h-5 mr-2"
+                  viewBox="0 0 24 24"
+                  xmlns="http://www.w3.org/2000/svg"
+                >
+                  <path
+                    fill="#4285F4"
+                    d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
+                  />
+                  <path
+                    fill="#34A853"
+                    d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
+                  />
+                  <path
+                    fill="#FBBC05"
+                    d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
+                  />
+                  <path
+                    fill="#EA4335"
+                    d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
+                  />
+                </svg>
+                Google
+              </>
+            )}
+          </button>
+        </div>{" "}
         {error && <p className="text-red-500 text-sm mt-1">{error}</p>}
         <button
           type="submit"
           className="btn bg-black btn-xs sm:btn-sm md:btn-md lg:btn-lg xl:btn-xl"
-          disabled={loading}
+          disabled={loading || googleLoading}
         >
           {loading ? (
Index: client/src/Register/Register.jsx
===================================================================
--- client/src/Register/Register.jsx	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/Register/Register.jsx	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -3,5 +3,5 @@
 import { useState } from "react";
 import { supabase } from "../contexts/AuthContext";
-import { registerUser } from "@/services/registerLoginService";
+import { signInWithGoogle } from "@/services/registerLoginService";
 import { useAuth } from "../contexts/AuthContext";
 
@@ -10,4 +10,5 @@
   const [formErrors, setFormErrors] = useState({});
   const [generalError, setGeneralError] = useState("");
+  const [googleLoading, setGoogleLoading] = useState(false);
   const nav = useNavigate();
   const [showPassword, setShowPassword] = useState({
@@ -101,5 +102,4 @@
       }
     } catch (error) {
-      s;
       console.error("Unexpected error in Register handleSubmit:", error);
       setGeneralError("A client-side error occurred. Please try again.");
@@ -107,4 +107,9 @@
       setLoading(false);
     }
+  };
+
+  const handleGoogleSignIn = () => {
+    setGoogleLoading(true);
+    signInWithGoogle();
   };
 
@@ -132,5 +137,5 @@
               className="input input-lg w-full"
               placeholder="John Doe"
-              disabled={loading}
+              disabled={loading || googleLoading}
             />
             {formErrors.name && (
@@ -151,5 +156,5 @@
               className="input input-lg w-full"
               placeholder="User123"
-              disabled={loading}
+              disabled={loading || googleLoading}
             />
             {formErrors.username && (
@@ -170,5 +175,5 @@
               className="input input-lg w-full"
               placeholder="user123@students.finki.ukim.mk"
-              disabled={loading}
+              disabled={loading || googleLoading}
             />
             {formErrors.email && (
@@ -190,5 +195,5 @@
                 value={formData.password}
                 onChange={handleInputChange}
-                disabled={loading}
+                disabled={loading || googleLoading}
               />
               <button
@@ -197,5 +202,5 @@
                 onClick={() => togglePasswordVisibility("password")}
                 tabIndex="-1"
-                disabled={loading}
+                disabled={loading || googleLoading}
               >
                 {!showPassword.password ? (
@@ -271,5 +276,5 @@
                 className="input input-lg w-full"
                 placeholder="Confirm Password"
-                disabled={loading}
+                disabled={loading || googleLoading}
               />
               <button
@@ -278,5 +283,5 @@
                 onClick={() => togglePasswordVisibility("confirmPassword")}
                 tabIndex="-1"
-                disabled={loading}
+                disabled={loading || googleLoading}
               >
                 {!showPassword.confirmPassword ? (
@@ -332,6 +337,6 @@
           <button
             type="submit"
-            className="btn bg-black btn-xs sm:btn-sm md:btn-md lg:btn-lg xl:btn-xl w-full flex items-center justify-center" // Added w-full for consistency
-            disabled={loading}
+            className="btn bg-black btn-xs sm:btn-sm md:btn-md lg:btn-lg xl:btn-xl w-full flex items-center justify-center"
+            disabled={loading || googleLoading}
           >
             {loading ? (
@@ -341,10 +346,46 @@
           </button>
 
-          {!generalError && Object.keys(formErrors).length === 0 && (
-            <p className="text-sm mt-1 text-center">
-              {" "}
-              *Must register with your FINKI student email address.
-            </p>
-          )}
+          <div className="text-center">
+            <p className="text-sm mb-3">or continue with Google</p>
+            <button
+              type="button"
+              onClick={handleGoogleSignIn}
+              className="btn btn-outline w-full flex items-center justify-center"
+              disabled={loading || googleLoading}
+            >
+              {googleLoading ? (
+                <span className="flex items-center gap-2">
+                  <span className="loading loading-spinner loading-xs"></span>
+                  Redirecting...
+                </span>
+              ) : (
+                <>
+                  <svg
+                    className="w-5 h-5 mr-2"
+                    viewBox="0 0 24 24"
+                    xmlns="http://www.w3.org/2000/svg"
+                  >
+                    <path
+                      fill="#4285F4"
+                      d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
+                    />
+                    <path
+                      fill="#34A853"
+                      d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
+                    />
+                    <path
+                      fill="#FBBC05"
+                      d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
+                    />
+                    <path
+                      fill="#EA4335"
+                      d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
+                    />
+                  </svg>
+                  Google
+                </>
+              )}
+            </button>
+          </div>
         </form>
 
Index: client/src/contexts/AuthContext.jsx
===================================================================
--- client/src/contexts/AuthContext.jsx	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/contexts/AuthContext.jsx	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -10,5 +10,5 @@
 import { createClient } from "@supabase/supabase-js";
 import { loginUser, registerUser } from "@/services/registerLoginService";
-
+import { jwtDecode } from "jwt-decode";
 export const supabase = createClient(
   import.meta.env.VITE_SUPABASE_URL,
@@ -105,32 +105,39 @@
   const register = useCallback(
     async (userData) => {
-      const backendResult = await registerUser(userData);
-      if (!backendResult.success) {
-        return {
-          success: false,
-          error: backendResult.message,
-          errors: backendResult.errors,
-        };
-      }
-
-      const { data, error } = await supabase.auth.signInWithPassword({
-        email: userData.email,
-        password: userData.password,
-      });
-
-      if (error || !data.session?.access_token) {
-        return {
-          success: false,
-          error: "Registration succeeded but login failed.",
-        };
-      }
-
-      setUser(backendResult.user);
-      userRef.current = backendResult.user.id;
-      localStorage.setItem("user", JSON.stringify(backendResult.user));
-      localStorage.setItem("jwt", data.session.access_token);
-      resetInactivityTimer();
-
-      return { success: true };
+      try {
+        const response = await registerUser(userData);
+
+        if (response.success) {
+          const { data: signInData, error: signInError } =
+            await supabase.auth.signInWithPassword({
+              email: userData.email,
+              password: userData.password,
+            });
+
+          if (signInError) {
+            return { success: false, error: signInError.message };
+          }
+          return { success: true, user: signInData.user };
+        } else {
+          return {
+            success: false,
+            error: response.data.message,
+            errors: response.data.errors,
+          };
+        }
+      } catch (error) {
+        if (error.response && error.response.data) {
+          return {
+            success: false,
+            error: error.response.data.message,
+            errors: error.response.data.errors,
+          };
+        } else {
+          return {
+            success: false,
+            error: "An unexpected network error occurred.",
+          };
+        }
+      }
     },
     [resetInactivityTimer]
@@ -145,4 +152,5 @@
     const { data: authListener } = supabase.auth.onAuthStateChange(
       async (event, session) => {
+        console.log(event);
         if (event === "TOKEN_REFRESHED" && session) {
           const now = Date.now();
@@ -205,4 +213,5 @@
         logout,
         resetInactivityTimer,
+
         loading,
         updateUser,
Index: client/src/services/registerLoginService.js
===================================================================
--- client/src/services/registerLoginService.js	(revision 31278e2987551e942ce69728eee16e7f21dc8b28)
+++ client/src/services/registerLoginService.js	(revision f94102aeb5db902a22abd23cd5e8a3188d64e652)
@@ -20,2 +20,6 @@
   }
 };
+
+export const signInWithGoogle = () => {
+  window.location.href = "http://localhost:5001/api/auth/google";
+};
