diff --git a/be/app/config.py b/be/app/config.py index 394a77e..e709af5 100644 --- a/be/app/config.py +++ b/be/app/config.py @@ -113,15 +113,20 @@ Organic Bananas AUTH_HEADER_PREFIX: str = "Bearer" # OAuth Settings + # IMPORTANT: For Google OAuth to work, you MUST set the following environment variables + # (e.g., in your .env file): + # GOOGLE_CLIENT_ID: Your Google Cloud project's OAuth 2.0 Client ID + # GOOGLE_CLIENT_SECRET: Your Google Cloud project's OAuth 2.0 Client Secret + # Ensure the GOOGLE_REDIRECT_URI below matches the one configured in your Google Cloud Console. GOOGLE_CLIENT_ID: str = "" GOOGLE_CLIENT_SECRET: str = "" - GOOGLE_REDIRECT_URI: str = "http://localhost:8000/api/v1/auth/google/callback" + GOOGLE_REDIRECT_URI: str = "https://mitlistbe.mohamad.dev/api/v1/auth/google/callback" APPLE_CLIENT_ID: str = "" APPLE_TEAM_ID: str = "" APPLE_KEY_ID: str = "" APPLE_PRIVATE_KEY: str = "" - APPLE_REDIRECT_URI: str = "http://localhost:8000/api/v1/auth/apple/callback" + APPLE_REDIRECT_URI: str = "https://mitlistbe.mohamad.dev/api/v1/auth/apple/callback" # Session Settings SESSION_SECRET_KEY: str = "your-session-secret-key" # Change this in production diff --git a/PRODUCTION.md b/docs/PRODUCTION.md similarity index 100% rename from PRODUCTION.md rename to docs/PRODUCTION.md diff --git a/mitlist_doc.md b/docs/mitlist_doc.md similarity index 100% rename from mitlist_doc.md rename to docs/mitlist_doc.md diff --git a/notes.md b/docs/notes.md similarity index 100% rename from notes.md rename to docs/notes.md diff --git a/env.production.template b/env.production.template index a3e8582..b1948a6 100644 --- a/env.production.template +++ b/env.production.template @@ -30,9 +30,9 @@ VITE_API_URL=https://yourdomain.com/api VITE_SENTRY_DSN=your_frontend_sentry_dsn_here VITE_ROUTER_MODE=history -# OAuth Configuration (if using) -GOOGLE_CLIENT_ID=your_google_client_id -GOOGLE_CLIENT_SECRET=your_google_client_secret +# Google OAuth Configuration - Replace with your actual credentials +GOOGLE_CLIENT_ID="YOUR_GOOGLE_CLIENT_ID_HERE" +GOOGLE_CLIENT_SECRET="YOUR_GOOGLE_CLIENT_SECRET_HERE" GOOGLE_REDIRECT_URI=https://yourdomain.com/auth/google/callback APPLE_CLIENT_ID=your_apple_client_id diff --git a/fe/index.html b/fe/index.html index b9f9387..ba107c0 100644 --- a/fe/index.html +++ b/fe/index.html @@ -3,7 +3,7 @@ - + diff --git a/fe/package-lock.json b/fe/package-lock.json index a49cb17..23a1c65 100644 --- a/fe/package-lock.json +++ b/fe/package-lock.json @@ -23,7 +23,7 @@ "workbox-background-sync": "^7.3.0" }, "devDependencies": { - "@intlify/unplugin-vue-i18n": "^6.0.8", + "@intlify/unplugin-vue-i18n": "^4.0.0", "@playwright/test": "^1.51.1", "@storybook/addon-docs": "^9.0.2", "@storybook/addon-onboarding": "^9.0.2", @@ -2558,14 +2558,13 @@ } }, "node_modules/@intlify/bundle-utils": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-10.0.1.tgz", - "integrity": "sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-8.0.0.tgz", + "integrity": "sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==", "dev": true, - "license": "MIT", "dependencies": { - "@intlify/message-compiler": "^11.1.2", - "@intlify/shared": "^11.1.2", + "@intlify/message-compiler": "^9.4.0", + "@intlify/shared": "^9.4.0", "acorn": "^8.8.2", "escodegen": "^2.1.0", "estree-walker": "^2.0.2", @@ -2575,7 +2574,7 @@ "yaml-eslint-parser": "^1.2.2" }, "engines": { - "node": ">= 18" + "node": ">= 14.16" }, "peerDependenciesMeta": { "petite-vue-i18n": { @@ -2587,13 +2586,12 @@ } }, "node_modules/@intlify/bundle-utils/node_modules/@intlify/message-compiler": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.3.tgz", - "integrity": "sha512-7rbqqpo2f5+tIcwZTAG/Ooy9C8NDVwfDkvSeDPWUPQW+Dyzfw2o9H103N5lKBxO7wxX9dgCDjQ8Umz73uYw3hw==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.4.tgz", + "integrity": "sha512-vcyCLiVRN628U38c3PbahrhbbXrckrM9zpy0KZVlDk2Z0OnGwv8uQNNXP3twwGtfLsCf4gu3ci6FMIZnPaqZsw==", "dev": true, - "license": "MIT", "dependencies": { - "@intlify/shared": "11.1.3", + "@intlify/shared": "9.14.4", "source-map-js": "^1.0.2" }, "engines": { @@ -2604,11 +2602,10 @@ } }, "node_modules/@intlify/bundle-utils/node_modules/@intlify/shared": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.3.tgz", - "integrity": "sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.4.tgz", + "integrity": "sha512-P9zv6i1WvMc9qDBWvIgKkymjY2ptIiQ065PjDv7z7fDqH3J/HBRBN5IoiR46r/ujRcU7hCuSIZWvCAFCyuOYZA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -2661,19 +2658,15 @@ } }, "node_modules/@intlify/unplugin-vue-i18n": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-6.0.8.tgz", - "integrity": "sha512-Vvm3KhjE6TIBVUQAk37rBiaYy2M5OcWH0ZcI1XKEsOTeN1o0bErk+zeuXmcrcMc/73YggfI8RoxOUz9EB/69JQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-4.0.0.tgz", + "integrity": "sha512-q2Mhqa/mLi0tulfLFO4fMXXvEbkSZpI5yGhNNsLTNJJ41icEGUuyDe+j5zRZIKSkOJRgX6YbCyibTDJdRsukmw==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@intlify/bundle-utils": "^10.0.1", - "@intlify/shared": "^11.1.2", - "@intlify/vue-i18n-extensions": "^8.0.0", + "@intlify/bundle-utils": "^8.0.0", + "@intlify/shared": "^9.4.0", "@rollup/pluginutils": "^5.1.0", - "@typescript-eslint/scope-manager": "^8.13.0", - "@typescript-eslint/typescript-estree": "^8.13.0", + "@vue/compiler-sfc": "^3.2.47", "debug": "^4.3.3", "fast-glob": "^3.2.12", "js-yaml": "^4.1.0", @@ -2681,16 +2674,15 @@ "pathe": "^1.0.0", "picocolors": "^1.0.0", "source-map-js": "^1.0.2", - "unplugin": "^1.1.0", - "vue": "^3.4" + "unplugin": "^1.1.0" }, "engines": { - "node": ">= 18" + "node": ">= 14.16" }, "peerDependencies": { "petite-vue-i18n": "*", - "vue": "^3.2.25", - "vue-i18n": "*" + "vue-i18n": "*", + "vue-i18n-bridge": "*" }, "peerDependenciesMeta": { "petite-vue-i18n": { @@ -2698,15 +2690,17 @@ }, "vue-i18n": { "optional": true + }, + "vue-i18n-bridge": { + "optional": true } } }, "node_modules/@intlify/unplugin-vue-i18n/node_modules/@intlify/shared": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.3.tgz", - "integrity": "sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.4.tgz", + "integrity": "sha512-P9zv6i1WvMc9qDBWvIgKkymjY2ptIiQ065PjDv7z7fDqH3J/HBRBN5IoiR46r/ujRcU7hCuSIZWvCAFCyuOYZA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 16" }, @@ -2744,117 +2738,6 @@ "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "license": "MIT" }, - "node_modules/@intlify/vue-i18n-extensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-extensions/-/vue-i18n-extensions-8.0.0.tgz", - "integrity": "sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.24.6", - "@intlify/shared": "^10.0.0", - "@vue/compiler-dom": "^3.2.45", - "vue-i18n": "^10.0.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@intlify/shared": "^9.0.0 || ^10.0.0 || ^11.0.0", - "@vue/compiler-dom": "^3.0.0", - "vue": "^3.0.0", - "vue-i18n": "^9.0.0 || ^10.0.0 || ^11.0.0" - }, - "peerDependenciesMeta": { - "@intlify/shared": { - "optional": true - }, - "@vue/compiler-dom": { - "optional": true - }, - "vue": { - "optional": true - }, - "vue-i18n": { - "optional": true - } - } - }, - "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/core-base": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.7.tgz", - "integrity": "sha512-mE71aUH5baH0me8duB4FY5qevUJizypHsYw3eCvmOx07QvmKppgOONx3dYINxuA89Z2qkAGb/K6Nrpi7aAMwew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "10.0.7", - "@intlify/shared": "10.0.7" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/message-compiler": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.7.tgz", - "integrity": "sha512-nrC4cDL/UHZSUqd8sRbVz+DPukzZ8NnG5OK+EB/nlxsH35deyzyVkXP/QuR8mFZrISJ+4hCd6VtCQCcT+RO+5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/shared": "10.0.7", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/vue-i18n-extensions/node_modules/@intlify/shared": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.7.tgz", - "integrity": "sha512-oeoq0L5+5P4ShXa6jBQcx+BT+USe3MjX0xJexZO1y7rfDJdwZ9+QP3jO4tcS1nxhBYYdjvFTqe4bmnLijV0GxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/vue-i18n-extensions/node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@intlify/vue-i18n-extensions/node_modules/vue-i18n": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.7.tgz", - "integrity": "sha512-bKsk0PYwP9gdYF4nqSAT0kDpnLu1gZzlxFl885VH4mHVhEnqP16+/mAU05r1U6NIrc0fGDWP89tZ8GzeJZpe+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/core-base": "10.0.7", - "@intlify/shared": "10.0.7", - "@vue/devtools-api": "^6.5.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -6040,8 +5923,7 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/config-chain": { "version": "1.1.13", @@ -6848,7 +6730,6 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -9092,7 +8973,6 @@ "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^3.0.0", @@ -9111,7 +8991,6 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -9444,7 +9323,6 @@ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", @@ -10118,7 +9996,6 @@ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, - "license": "MIT", "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", @@ -12273,8 +12150,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/unbox-primitive": { "version": "1.1.0", @@ -13868,7 +13744,6 @@ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.0.tgz", "integrity": "sha512-E/+VitOorXSLiAqtTd7Yqax0/pAS3xaYMP+AUUJGOK1OZG3rhcj9fcJOM5HJ2VrP1FrStVCWr1muTfQCdj4tAA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.0.0", "yaml": "^2.0.0" diff --git a/fe/package.json b/fe/package.json index 6f3f247..1a6b9d6 100644 --- a/fe/package.json +++ b/fe/package.json @@ -34,7 +34,7 @@ "workbox-background-sync": "^7.3.0" }, "devDependencies": { - "@intlify/unplugin-vue-i18n": "^6.0.8", + "@intlify/unplugin-vue-i18n": "^4.0.0", "@playwright/test": "^1.51.1", "@storybook/addon-docs": "^9.0.2", "@storybook/addon-onboarding": "^9.0.2", diff --git a/fe/public/favicon.ico b/fe/public/favicon.ico index df36fcf..4143bba 100644 Binary files a/fe/public/favicon.ico and b/fe/public/favicon.ico differ diff --git a/fe/public/icons/apple-icon-152x152.png b/fe/public/icons/apple-icon-152x152.png index 6d9d360..f43a72f 100644 Binary files a/fe/public/icons/apple-icon-152x152.png and b/fe/public/icons/apple-icon-152x152.png differ diff --git a/fe/public/icons/icon-128x128.png b/fe/public/icons/icon-128x128.png index 1401176..2264501 100644 Binary files a/fe/public/icons/icon-128x128.png and b/fe/public/icons/icon-128x128.png differ diff --git a/fe/public/icons/icon-144x144.png b/fe/public/icons/icon-144x144.png new file mode 100644 index 0000000..e460f08 Binary files /dev/null and b/fe/public/icons/icon-144x144.png differ diff --git a/fe/public/icons/icon-152x152.png b/fe/public/icons/icon-152x152.png new file mode 100644 index 0000000..f43a72f Binary files /dev/null and b/fe/public/icons/icon-152x152.png differ diff --git a/fe/public/icons/icon-192x192.png b/fe/public/icons/icon-192x192.png index 57cbac8..d72c3ce 100644 Binary files a/fe/public/icons/icon-192x192.png and b/fe/public/icons/icon-192x192.png differ diff --git a/fe/public/icons/icon-256x256.png b/fe/public/icons/icon-256x256.png index 12f043e..963feec 100644 Binary files a/fe/public/icons/icon-256x256.png and b/fe/public/icons/icon-256x256.png differ diff --git a/fe/public/icons/icon-384x384.png b/fe/public/icons/icon-384x384.png index df8e257..478eb7c 100644 Binary files a/fe/public/icons/icon-384x384.png and b/fe/public/icons/icon-384x384.png differ diff --git a/fe/public/icons/icon-48x48.png b/fe/public/icons/icon-48x48.png new file mode 100644 index 0000000..bb85d48 Binary files /dev/null and b/fe/public/icons/icon-48x48.png differ diff --git a/fe/public/icons/icon-512x512.png b/fe/public/icons/icon-512x512.png index 9ca1391..d6defac 100644 Binary files a/fe/public/icons/icon-512x512.png and b/fe/public/icons/icon-512x512.png differ diff --git a/fe/public/icons/icon-72x72.png b/fe/public/icons/icon-72x72.png new file mode 100644 index 0000000..31e9843 Binary files /dev/null and b/fe/public/icons/icon-72x72.png differ diff --git a/fe/public/icons/icon-96x96.png b/fe/public/icons/icon-96x96.png new file mode 100644 index 0000000..ba5bf1f Binary files /dev/null and b/fe/public/icons/icon-96x96.png differ diff --git a/fe/src/components/SocialLoginButtons.vue b/fe/src/components/SocialLoginButtons.vue index 524dc76..b54f0a0 100644 --- a/fe/src/components/SocialLoginButtons.vue +++ b/fe/src/components/SocialLoginButtons.vue @@ -35,11 +35,12 @@ diff --git a/fe/src/pages/GroupDetailPage.vue b/fe/src/pages/GroupDetailPage.vue index 1c9ca17..ac34505 100644 --- a/fe/src/pages/GroupDetailPage.vue +++ b/fe/src/pages/GroupDetailPage.vue @@ -1,11 +1,11 @@