Index: ReserveNGo-frontend/package-lock.json
===================================================================
--- ReserveNGo-frontend/package-lock.json	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/package-lock.json	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -16,4 +16,6 @@
         "vue": "^3.5.13",
         "vue-router": "^4.5.0",
+        "vue3-google-login": "^2.0.34",
+        "vue3-google-signin": "^2.1.1",
         "vue3-otp-input": "^0.5.40",
         "vuetify": "^3.8.0-beta.0"
@@ -103,4 +105,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
@@ -655,4 +658,5 @@
       ],
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=18"
@@ -678,4 +682,5 @@
       ],
       "license": "MIT",
+      "peer": true,
       "engines": {
         "node": ">=18"
@@ -1400,5 +1405,4 @@
       "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@jridgewell/gen-mapping": "^0.3.5",
@@ -1434,5 +1438,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
@@ -1449,5 +1452,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">= 8"
@@ -1460,5 +1462,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
@@ -2130,5 +2131,4 @@
       "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/estree": "*",
@@ -2141,5 +2141,4 @@
       "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/eslint": "*",
@@ -2164,5 +2163,4 @@
       "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "undici-types": "~6.21.0"
@@ -2175,5 +2173,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@typescript-eslint/types": "8.21.0",
@@ -2194,5 +2191,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2209,5 +2205,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@typescript-eslint/types": "8.21.0",
@@ -2262,5 +2257,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@typescript-eslint/types": "8.21.0",
@@ -2281,5 +2275,4 @@
       "dev": true,
       "license": "Apache-2.0",
-      "peer": true,
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2712,5 +2705,4 @@
       "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/helper-numbers": "1.13.2",
@@ -2722,6 +2714,5 @@
       "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
       "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/@webassemblyjs/helper-api-error": {
@@ -2729,6 +2720,5 @@
       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
       "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/@webassemblyjs/helper-buffer": {
@@ -2736,6 +2726,5 @@
       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
       "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/@webassemblyjs/helper-numbers": {
@@ -2744,5 +2733,4 @@
       "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/floating-point-hex-parser": "1.13.2",
@@ -2755,6 +2743,5 @@
       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
       "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/@webassemblyjs/helper-wasm-section": {
@@ -2763,5 +2750,4 @@
       "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2776,5 +2762,4 @@
       "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@xtuc/ieee754": "^1.2.0"
@@ -2786,5 +2771,4 @@
       "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
       "license": "Apache-2.0",
-      "peer": true,
       "dependencies": {
         "@xtuc/long": "4.2.2"
@@ -2795,6 +2779,5 @@
       "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
       "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/@webassemblyjs/wasm-edit": {
@@ -2803,5 +2786,4 @@
       "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2820,5 +2802,4 @@
       "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2834,5 +2815,4 @@
       "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2847,5 +2827,4 @@
       "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2862,5 +2841,4 @@
       "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.14.1",
@@ -2872,6 +2850,5 @@
       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
       "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-      "license": "BSD-3-Clause",
-      "peer": true
+      "license": "BSD-3-Clause"
     },
     "node_modules/@xtuc/long": {
@@ -2879,6 +2856,5 @@
       "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-      "license": "Apache-2.0",
-      "peer": true
+      "license": "Apache-2.0"
     },
     "node_modules/abbrev": {
@@ -2897,4 +2873,5 @@
       "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
       "license": "MIT",
+      "peer": true,
       "bin": {
         "acorn": "bin/acorn"
@@ -2946,5 +2923,4 @@
       "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "ajv": "^8.0.0"
@@ -2964,5 +2940,4 @@
       "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
@@ -2980,6 +2955,5 @@
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/ansi-regex": {
@@ -3102,4 +3076,5 @@
       ],
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "caniuse-lite": "^1.0.30001688",
@@ -3119,6 +3094,5 @@
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/bundle-name": {
@@ -3242,5 +3216,4 @@
       "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=6.0"
@@ -3561,5 +3534,4 @@
       "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "graceful-fs": "^4.2.4",
@@ -3667,4 +3639,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
@@ -3727,4 +3700,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "bin": {
         "eslint-config-prettier": "build/bin/cli.js"
@@ -3957,5 +3931,4 @@
       "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=0.8.x"
@@ -4018,5 +3991,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -4036,5 +4008,4 @@
       "dev": true,
       "license": "ISC",
-      "peer": true,
       "dependencies": {
         "is-glob": "^4.0.1"
@@ -4072,6 +4043,5 @@
         }
       ],
-      "license": "BSD-3-Clause",
-      "peer": true
+      "license": "BSD-3-Clause"
     },
     "node_modules/fastq": {
@@ -4081,5 +4051,4 @@
       "dev": true,
       "license": "ISC",
-      "peer": true,
       "dependencies": {
         "reusify": "^1.0.4"
@@ -4293,6 +4262,5 @@
       "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
       "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "license": "BSD-2-Clause",
-      "peer": true
+      "license": "BSD-2-Clause"
     },
     "node_modules/globals": {
@@ -4639,5 +4607,4 @@
       "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/node": "*",
@@ -4654,5 +4621,4 @@
       "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -4792,6 +4758,5 @@
       "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
       "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/json-schema-traverse": {
@@ -4871,5 +4836,4 @@
       "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=6.11.5"
@@ -4933,6 +4897,5 @@
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
       "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/merge2": {
@@ -4942,5 +4905,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">= 8"
@@ -5417,4 +5379,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "bin": {
         "prettier": "bin/prettier.cjs"
@@ -5492,6 +5455,5 @@
         }
       ],
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/randombytes": {
@@ -5500,5 +5462,4 @@
       "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "safe-buffer": "^5.1.0"
@@ -5523,5 +5484,4 @@
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=0.10.0"
@@ -5544,5 +5504,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "iojs": ">=1.0.0",
@@ -5563,4 +5522,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@types/estree": "1.0.6"
@@ -5636,5 +5596,4 @@
       ],
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "queue-microtask": "^1.2.2"
@@ -5659,6 +5618,5 @@
         }
       ],
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/safer-buffer": {
@@ -5674,4 +5632,5 @@
       "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==",
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "chokidar": "^4.0.0",
@@ -5744,5 +5703,4 @@
       "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
@@ -5781,5 +5739,4 @@
       "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3"
@@ -5793,6 +5750,5 @@
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/semver": {
@@ -5814,5 +5770,4 @@
       "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
       "license": "BSD-3-Clause",
-      "peer": true,
       "dependencies": {
         "randombytes": "^2.1.0"
@@ -5882,5 +5837,4 @@
       "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
       "license": "BSD-3-Clause",
-      "peer": true,
       "engines": {
         "node": ">=0.10.0"
@@ -5901,5 +5855,4 @@
       "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "buffer-from": "^1.0.0",
@@ -6122,5 +6075,4 @@
       "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=6"
@@ -6132,5 +6084,4 @@
       "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==",
       "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
         "@jridgewell/source-map": "^0.3.3",
@@ -6151,5 +6102,4 @@
       "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@jridgewell/trace-mapping": "^0.3.25",
@@ -6185,6 +6135,5 @@
       "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
       "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/tinybench": {
@@ -6307,5 +6256,4 @@
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=18.12"
@@ -6367,6 +6315,5 @@
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
       "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
-      "license": "MIT",
-      "peer": true
+      "license": "MIT"
     },
     "node_modules/unicorn-magic": {
@@ -6446,4 +6393,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "esbuild": "^0.24.2",
@@ -6636,4 +6584,5 @@
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@vitest/expect": "3.0.3",
@@ -6708,4 +6657,5 @@
       "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
       "license": "MIT",
+      "peer": true,
       "dependencies": {
         "@vue/compiler-dom": "3.5.13",
@@ -6830,4 +6780,22 @@
       "peerDependencies": {
         "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue3-google-login": {
+      "version": "2.0.34",
+      "resolved": "https://registry.npmjs.org/vue3-google-login/-/vue3-google-login-2.0.34.tgz",
+      "integrity": "sha512-YLEYcv8eKzA7BLsTciDogvxXxyJga4879HkmvWjYsm1t0mJ0Vx5A1EWKMx0YCtMQ2VwQJGy3F8aOw6zO+KkUhA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "vue": "^3.0.3"
+      }
+    },
+    "node_modules/vue3-google-signin": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/vue3-google-signin/-/vue3-google-signin-2.1.1.tgz",
+      "integrity": "sha512-RwlwyeCv8+PZjK35C/UyJN4/9MH+Fsz4bJDO7IjtmRuOaTMrvmMmI6SP5qkJgD7w9MIKOCj5rYVFMAL7+NCM0A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "vue": "^3"
       }
     },
@@ -6902,5 +6870,4 @@
       "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "glob-to-regexp": "^0.4.1",
@@ -6926,5 +6893,4 @@
       "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==",
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@types/eslint-scope": "^3.7.7",
@@ -6974,5 +6940,4 @@
       "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
       "license": "MIT",
-      "peer": true,
       "engines": {
         "node": ">=10.13.0"
@@ -6984,5 +6949,4 @@
       "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
       "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
@@ -6998,5 +6962,4 @@
       "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
       "license": "BSD-2-Clause",
-      "peer": true,
       "engines": {
         "node": ">=4.0"
Index: ReserveNGo-frontend/package.json
===================================================================
--- ReserveNGo-frontend/package.json	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/package.json	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -20,4 +20,6 @@
     "vue": "^3.5.13",
     "vue-router": "^4.5.0",
+    "vue3-google-login": "^2.0.34",
+    "vue3-google-signin": "^2.1.1",
     "vue3-otp-input": "^0.5.40",
     "vuetify": "^3.8.0-beta.0"
Index: ReserveNGo-frontend/src/components/Project/Auth/login_.vue
===================================================================
--- ReserveNGo-frontend/src/components/Project/Auth/login_.vue	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/src/components/Project/Auth/login_.vue	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -7,9 +7,9 @@
 import { useAuth } from '@/repository/Authentication.ts'
 import DisabledAccountPage from '@/components/Project/Auth/DisabledAccountPage.vue'
-import disabledAccountPage from '@/components/Project/Auth/DisabledAccountPage.vue'
 import { useToasts } from '@/composables/useToast.js'
+import { GoogleLogin } from 'vue3-google-login'
 
 export default {
-  components: { DisabledAccountPage, LoadingIcon },
+  components: { DisabledAccountPage, LoadingIcon, GoogleLogin },
   data() {
     return {
@@ -41,9 +41,11 @@
   },
   methods: {
-    async makeLogin() {
+    async makeLogin(isGoogleLogin = false, googleToken) {
       this.isLoading = true
 
       try {
-        const json = await useAuth.makeLogin(this.form_info.email, this.form_info.password)
+        const json = isGoogleLogin
+          ? await useAuth.makeGoogleLogin(googleToken)
+          : await useAuth.makeLogin(this.form_info.email, this.form_info.password)
 
         console.log('Priting the json object to help me with profile picture.', json)
@@ -74,4 +76,20 @@
       finally {
         this.isLoading = false
+      }
+    },
+    async googleLoginCallback(response) {
+      try {
+        const googleToken = response?.credential
+        if (!googleToken) {
+          this.errorMessage = 'Google login failed to provide a token.'
+          this.showToast(this.errorMessage, 'error')
+          return
+        }
+        await this.makeLogin(true, googleToken)
+      } catch (err) {
+        console.error('Google login error', err)
+        const message = err?.response || 'Google login failed.'
+        this.errorMessage = message
+        this.showToast(message, 'error')
       }
     },
@@ -138,4 +156,7 @@
           <LoadingIcon v-else></LoadingIcon>
         </button>
+        <div class="mt-3 d-grid">
+          <GoogleLogin :callback="googleLoginCallback" />
+        </div>
       </form>
     </div>
Index: ReserveNGo-frontend/src/components/Project/Auth/register_.vue
===================================================================
--- ReserveNGo-frontend/src/components/Project/Auth/register_.vue	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/src/components/Project/Auth/register_.vue	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -7,7 +7,8 @@
 import { useToasts } from '@/composables/useToast.js'
 import OtpInput from 'vue3-otp-input'
+import { GoogleLogin } from 'vue3-google-login'
 
 export default {
-  components: { LoadingIcon, OtpInput },
+  components: { LoadingIcon, OtpInput, GoogleLogin },
   data() {
     return {
@@ -92,4 +93,29 @@
       }
     },
+    async googleRegisterCallback(response) {
+      console.log('Google login response', response.credential)
+      try {
+        const googleToken = response?.credential
+        if (!googleToken) {
+          this.errorMessage = 'Google login failed to provide a token.'
+          const { showToast } = useToasts()
+          showToast(this.errorMessage, 'error')
+          return
+        }
+        this.isLoading = true
+        this.errorMessage = ''
+        await useAuth.googleRegister(this.roleType, googleToken, this.tokenRegister)
+        this.showToast('Successfully registered with Google. You can now log in.', 'success')
+        router.push('/login')
+      } catch (err) {
+        console.error('Google register error', err)
+        const message = err?.response || err?.response?.data?.message || 'Google registration failed.'
+        this.errorMessage = message
+        const { showToast } = useToasts()
+        showToast(message, 'error')
+      } finally {
+        this.isLoading = false
+      }
+    },
   },
   computed: {
@@ -202,4 +228,7 @@
                     </button>
                   </div>
+                  <div class="mt-3 d-grid">
+                    <GoogleLogin :callback="googleRegisterCallback"></GoogleLogin>
+                  </div>
                 </form>
                 <div v-else>
Index: ReserveNGo-frontend/src/components/Project/Restaurant/Locale_listing_container.vue
===================================================================
--- ReserveNGo-frontend/src/components/Project/Restaurant/Locale_listing_container.vue	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/src/components/Project/Restaurant/Locale_listing_container.vue	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -35,5 +35,4 @@
         .then(() => {
           if (isFav) {
-            console.log("DOES IT GET HERE", "ID", id, "favourite_locals", this.favourite_locals.filter((fav) => fav.id !== id))
             this.favourite_locals = this.favourite_locals.filter((fav) => fav.id !== id)
           } else {
Index: ReserveNGo-frontend/src/main.js
===================================================================
--- ReserveNGo-frontend/src/main.js	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/src/main.js	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -3,4 +3,5 @@
 import { createApp } from 'vue'
 import { createPinia } from 'pinia'
+import vue3GoogleLogin from 'vue3-google-login'
 
 
@@ -24,4 +25,7 @@
 app.use(router)
 app.use(vuetify)
+app.use(vue3GoogleLogin, {
+  clientId: import.meta.env.VITE_GOOGLE_CLIENT_ID,
+})
 
 app.mount('#app')
Index: ReserveNGo-frontend/src/repository/Authentication.ts
===================================================================
--- ReserveNGo-frontend/src/repository/Authentication.ts	(revision 110db011c4f236184c3f8f19759727486757c30a)
+++ ReserveNGo-frontend/src/repository/Authentication.ts	(revision 24a9bc0b469d11c8c69b6c1c9a92335ac1667e21)
@@ -14,4 +14,9 @@
   makeLogin(email: String, password: String) : Promise<any> {
     return this.httpClient.post('login', { email, password })
+  }
+  // Google OAuth login
+  makeGoogleLogin(googleIdToken: String): Promise<any> {
+    const headers: Record<string, any> = { 'X-Google-Token': googleIdToken }
+    return this.httpClient.post('oauth/google/login', null, { headers })
   }
   makeRegister(
@@ -32,4 +37,11 @@
     return this.httpClient.patch('enable', { email, password })
   }
+
+
+  googleRegister(role: String, googleIdToken: String, inviteToken?: String): Promise<any> {
+    const headers: Record<string, any> = { 'X-Google-Token': googleIdToken }
+    if (inviteToken) headers['Invite-Token'] = inviteToken
+    return this.httpClient.post(`oauth/google/${role}`, null, { headers })
+  }
 }
 
