From b353b1b2102e0f0f2e380594639b5e5af527f2a7 Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 01:45:49 -0700 Subject: [PATCH 1/9] feat: add welcome page --- backend/.eslintcache | 2 +- backend/package-lock.json | 24 ------ frontend/app/welcome/page.tsx | 18 ++++ frontend/app/welcome/welcome.module.css | 62 ++++++++++++++ frontend/package-lock.json | 108 ------------------------ frontend/public/Ellipse3819.svg | 9 ++ frontend/public/ep_back.svg | 4 + 7 files changed, 94 insertions(+), 133 deletions(-) create mode 100644 frontend/app/welcome/page.tsx create mode 100644 frontend/app/welcome/welcome.module.css create mode 100644 frontend/public/Ellipse3819.svg create mode 100644 frontend/public/ep_back.svg diff --git a/backend/.eslintcache b/backend/.eslintcache index 61ac395..1353002 100644 --- a/backend/.eslintcache +++ b/backend/.eslintcache @@ -1 +1 @@ -[{"/Users/alexisvega/Documents/test-dev-project-SP26/backend/eslint.config.mjs":"1","/Users/alexisvega/Documents/test-dev-project-SP26/backend/package.json":"2","/Users/alexisvega/Documents/test-dev-project-SP26/backend/prettier.config.mjs":"3","/Users/alexisvega/Documents/test-dev-project-SP26/backend/src/index.ts":"4","/Users/alexisvega/Documents/test-dev-project-SP26/backend/tsconfig.json":"5"},{"size":2310,"mtime":1778549402658,"results":"6","hashOfConfig":"7"},{"size":1235,"mtime":1778551875648,"results":"8","hashOfConfig":"9"},{"size":506,"mtime":1778549402409,"results":"10","hashOfConfig":"7"},{"size":366,"mtime":1778550302952,"results":"11","hashOfConfig":"12"},{"size":401,"mtime":1778550175418,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"ox2twy",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1q4ttqb",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"14awezl",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1xwcv0w","/Users/alexisvega/Documents/test-dev-project-SP26/backend/eslint.config.mjs",[],[],"/Users/alexisvega/Documents/test-dev-project-SP26/backend/package.json",[],[],"/Users/alexisvega/Documents/test-dev-project-SP26/backend/prettier.config.mjs",[],[],"/Users/alexisvega/Documents/test-dev-project-SP26/backend/src/index.ts",[],[],"/Users/alexisvega/Documents/test-dev-project-SP26/backend/tsconfig.json",[],[]] \ No newline at end of file +[{"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs":"1","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json":"2","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs":"3","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts":"4","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json":"5"},{"size":2400,"mtime":1779434322683,"results":"6","hashOfConfig":"7"},{"size":1273,"mtime":1779434322686,"results":"8","hashOfConfig":"9"},{"size":522,"mtime":1779434322686,"results":"10","hashOfConfig":"7"},{"size":382,"mtime":1779434322688,"results":"11","hashOfConfig":"12"},{"size":418,"mtime":1779434322688,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1pp31fz",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qysiek",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1y166j1",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"15hcc33","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json",[],[]] \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json index 9f52b82..78c6e4e 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1443,9 +1443,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1460,9 +1457,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1477,9 +1471,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1494,9 +1485,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1511,9 +1499,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1528,9 +1513,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1545,9 +1527,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1562,9 +1541,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ diff --git a/frontend/app/welcome/page.tsx b/frontend/app/welcome/page.tsx new file mode 100644 index 0000000..c26c343 --- /dev/null +++ b/frontend/app/welcome/page.tsx @@ -0,0 +1,18 @@ +import styles from "./welcome.module.css"; + +export default function WelcomePage() { + return ( +
+ + +

Welcome, Caleb!

+

Logging you in now...

+
+ Caleb avatar +
+
+
+ ); +} diff --git a/frontend/app/welcome/welcome.module.css b/frontend/app/welcome/welcome.module.css new file mode 100644 index 0000000..8b094ef --- /dev/null +++ b/frontend/app/welcome/welcome.module.css @@ -0,0 +1,62 @@ +.container { + background-color: #0c2b35; + font-family: Rubik, sans-serif; + min-height: 100dvh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1.5rem; + text-align: center; +} + +.backButton { + position: absolute; + top: 1.25rem; + left: 1.25rem; + cursor: pointer; +} + +.greeting { + color: #debb01; + font-size: clamp(2rem, 10vw, 3rem); + font-weight: 700; + line-height: 1; + margin: 0; +} + +.description { + color: #ffffff; + font-size: clamp(0.875rem, 3.5vw, 1.25rem); + font-weight: 400; + line-height: 1; + margin: 0; +} + +.avatar { + width: min(173px, 43vw); + height: min(173px, 43vw); + border-radius: 50%; + border: 3px solid #000000; +} + +.avatar img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.spinner { + width: min(48px, 12vw); + height: min(48px, 12vw); + border-radius: 50%; + border: 3px solid rgba(255, 255, 255, 0.2); + border-top-color: #fff; + animation: spin 0.9s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 95e65c2..a417585 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -843,9 +843,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -862,9 +859,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -881,9 +875,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -900,9 +891,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -919,9 +907,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -938,9 +923,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -957,9 +939,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -976,9 +955,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -995,9 +971,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1020,9 +993,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1045,9 +1015,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1070,9 +1037,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1095,9 +1059,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1120,9 +1081,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1145,9 +1103,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1170,9 +1125,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -1382,9 +1334,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1401,9 +1350,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1420,9 +1366,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1439,9 +1382,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1733,9 +1673,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1753,9 +1690,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1773,9 +1707,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1793,9 +1724,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2381,9 +2309,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2398,9 +2323,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2415,9 +2337,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2432,9 +2351,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2449,9 +2365,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2466,9 +2379,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2483,9 +2393,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2500,9 +2407,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6329,9 +6233,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -6353,9 +6254,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -6377,9 +6275,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MPL-2.0", "optional": true, "os": [ @@ -6401,9 +6296,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MPL-2.0", "optional": true, "os": [ diff --git a/frontend/public/Ellipse3819.svg b/frontend/public/Ellipse3819.svg new file mode 100644 index 0000000..24586e9 --- /dev/null +++ b/frontend/public/Ellipse3819.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/public/ep_back.svg b/frontend/public/ep_back.svg new file mode 100644 index 0000000..8280541 --- /dev/null +++ b/frontend/public/ep_back.svg @@ -0,0 +1,4 @@ + + + + From 44e7014b856d994391b9e9cb190eb748587f5d3d Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 01:58:36 -0700 Subject: [PATCH 2/9] fix: update package-lock.json with legacy peer deps resolution --- backend/.eslintcache | 2 +- package-lock.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/backend/.eslintcache b/backend/.eslintcache index 1353002..c2c7053 100644 --- a/backend/.eslintcache +++ b/backend/.eslintcache @@ -1 +1 @@ -[{"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs":"1","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json":"2","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs":"3","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts":"4","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json":"5"},{"size":2400,"mtime":1779434322683,"results":"6","hashOfConfig":"7"},{"size":1273,"mtime":1779434322686,"results":"8","hashOfConfig":"9"},{"size":522,"mtime":1779434322686,"results":"10","hashOfConfig":"7"},{"size":382,"mtime":1779434322688,"results":"11","hashOfConfig":"12"},{"size":418,"mtime":1779434322688,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1pp31fz",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qysiek",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1y166j1",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"15hcc33","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json",[],[]] \ No newline at end of file +[{"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs":"1","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json":"2","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs":"3","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts":"4","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json":"5"},{"size":2310,"mtime":1779439363751,"results":"6","hashOfConfig":"7"},{"size":1235,"mtime":1779439363800,"results":"8","hashOfConfig":"9"},{"size":506,"mtime":1779439363806,"results":"10","hashOfConfig":"7"},{"size":366,"mtime":1779439395283,"results":"11","hashOfConfig":"12"},{"size":401,"mtime":1779439363843,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1pp31fz",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qysiek",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1y166j1",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"15hcc33","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json",[],[]] \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..02b56ad --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "test-dev-project-SP26", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From 89a0f797855093b6d18d6ac009ced5e8a7868dd2 Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 14:44:13 -0700 Subject: [PATCH 3/9] format frontend and backend --- backend/.eslintcache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/.eslintcache b/backend/.eslintcache index c2c7053..27c62c7 100644 --- a/backend/.eslintcache +++ b/backend/.eslintcache @@ -1 +1 @@ -[{"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs":"1","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json":"2","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs":"3","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts":"4","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json":"5"},{"size":2310,"mtime":1779439363751,"results":"6","hashOfConfig":"7"},{"size":1235,"mtime":1779439363800,"results":"8","hashOfConfig":"9"},{"size":506,"mtime":1779439363806,"results":"10","hashOfConfig":"7"},{"size":366,"mtime":1779439395283,"results":"11","hashOfConfig":"12"},{"size":401,"mtime":1779439363843,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1pp31fz",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qysiek",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1y166j1",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"15hcc33","D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\package.json",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\src\\index.ts",[],[],"D:\\Documents\\School\\UCSD\\TEST\\Github\\test-dev-project-SP26\\backend\\tsconfig.json",[],[]] \ No newline at end of file +[{"C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs":"1","C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\package.json":"2","C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs":"3","C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\src\\index.ts":"4","C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\tsconfig.json":"5"},{"size":2310,"mtime":1779485694903,"results":"6","hashOfConfig":"7"},{"size":1235,"mtime":1779485694990,"results":"8","hashOfConfig":"9"},{"size":506,"mtime":1779485695002,"results":"10","hashOfConfig":"7"},{"size":366,"mtime":1779485695065,"results":"11","hashOfConfig":"12"},{"size":401,"mtime":1779485695072,"results":"13","hashOfConfig":"14"},{"filePath":"15","messages":"16","suppressedMessages":"17","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"i590ty",{"filePath":"18","messages":"19","suppressedMessages":"20","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1qsshfd",{"filePath":"21","messages":"22","suppressedMessages":"23","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"24","messages":"25","suppressedMessages":"26","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"19z74s",{"filePath":"27","messages":"28","suppressedMessages":"29","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1k5wbyy","C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\eslint.config.mjs",[],[],"C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\package.json",[],[],"C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\prettier.config.mjs",[],[],"C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\src\\index.ts",[],[],"C:\\Users\\Lynx\\Documents\\School\\Transfer\\UC\\UCSD\\Github\\test-dev-project-SP26\\backend\\tsconfig.json",[],[]] \ No newline at end of file From 1619ecc581a36fe3f8c6f4f07e99bff0cb30c7c9 Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 14:48:03 -0700 Subject: [PATCH 4/9] update eslint-plugin-react-hooks version --- frontend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/package.json b/frontend/package.json index c65fee7..0e97429 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,6 +26,7 @@ "@types/react-dom": "^19", "eslint": "^9.39.4", "eslint-config-next": "16.2.6", + "eslint-plugin-react-hooks": "^7.1.1", "husky": "^9.1.7", "prettier": "^3.8.3", "tailwindcss": "^4", From bfe8e3aa0a9fa9475fe0b0e11665ded0b337731e Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 14:48:47 -0700 Subject: [PATCH 5/9] update eslint-plugin-react-hooks version --- frontend/package-lock.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a417585..c22c61c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -20,6 +20,7 @@ "@types/react-dom": "^19", "eslint": "^9.39.4", "eslint-config-next": "16.2.6", + "eslint-plugin-react-hooks": "^7.1.1", "husky": "^9.1.7", "prettier": "^3.8.3", "tailwindcss": "^4", From dffdd825c19aa825cc59398c26c36196fe820cf8 Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Fri, 22 May 2026 14:53:28 -0700 Subject: [PATCH 6/9] update lint.yml for frontend --- .github/workflows/lint.yml | 55 +++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 32452a1..6721b29 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,28 +1,27 @@ -name: Lint and style checks - -on: - pull_request: - branches: - main - -jobs: - backend: - name: Backend lint and style check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - - working-directory: backend # Change this to the name of your backend directory - run: | - npm ci - npm run lint-check - frontend: - name: Frontend lint and style check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - - working-directory: frontend # Change this to the name of your frontend directory - run: | - npm ci - npm run lint-check +name: Lint and style checks + +on: + pull_request: + branches: main + +jobs: + backend: + name: Backend lint and style check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - working-directory: backend # Change this to the name of your backend directory + run: | + npm ci --legacy-peer-deps + npm run lint-check + frontend: + name: Frontend lint and style check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + - working-directory: frontend # Change this to the name of your frontend directory + run: | + npm ci --legacy-peer-deps + npm run lint-check From 1c13e3381e7c8e2b153286ec492bd47bfee60fcd Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Thu, 4 Jun 2026 20:35:42 -0700 Subject: [PATCH 7/9] add color variables + changed class name to be more specific + move name to next line --- frontend/app/welcome/page.tsx | 7 +++++-- frontend/app/welcome/welcome.module.css | 22 +++++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/frontend/app/welcome/page.tsx b/frontend/app/welcome/page.tsx index c26c343..ec1174f 100644 --- a/frontend/app/welcome/page.tsx +++ b/frontend/app/welcome/page.tsx @@ -7,8 +7,11 @@ export default function WelcomePage() { go back button -

Welcome, Caleb!

-

Logging you in now...

+

+ Welcome,
+ Caleb! +

+

Logging you in now...

Caleb avatar
diff --git a/frontend/app/welcome/welcome.module.css b/frontend/app/welcome/welcome.module.css index 8b094ef..42f0131 100644 --- a/frontend/app/welcome/welcome.module.css +++ b/frontend/app/welcome/welcome.module.css @@ -1,5 +1,13 @@ +:root { + --color-background: #0c2b35; + --color-accent: #debb01; + --color-text: white; + --color-border: black; + --color-spinner: rgba(255, 255, 255, 0.2); +} + .container { - background-color: #0c2b35; + background-color: var(--color-background); font-family: Rubik, sans-serif; min-height: 100dvh; display: flex; @@ -18,15 +26,15 @@ } .greeting { - color: #debb01; + color: var(--color-accent); font-size: clamp(2rem, 10vw, 3rem); font-weight: 700; line-height: 1; margin: 0; } -.description { - color: #ffffff; +.loadMessage { + color: var(--color-text); font-size: clamp(0.875rem, 3.5vw, 1.25rem); font-weight: 400; line-height: 1; @@ -37,7 +45,7 @@ width: min(173px, 43vw); height: min(173px, 43vw); border-radius: 50%; - border: 3px solid #000000; + border: 3px solid var(--color-border); } .avatar img { @@ -50,8 +58,8 @@ width: min(48px, 12vw); height: min(48px, 12vw); border-radius: 50%; - border: 3px solid rgba(255, 255, 255, 0.2); - border-top-color: #fff; + border: 3px solid var(--color-spinner); + border-top-color: var(--color-text); animation: spin 0.9s linear infinite; } From 05067cd69e0cd5a2902b4125e46a2b7c6a3dbdca Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Thu, 4 Jun 2026 21:11:59 -0700 Subject: [PATCH 8/9] add submit success page --- frontend/app/submit/success/page.module.css | 67 +++++++++++++++++++++ frontend/app/submit/success/page.tsx | 42 +++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 frontend/app/submit/success/page.module.css create mode 100644 frontend/app/submit/success/page.tsx diff --git a/frontend/app/submit/success/page.module.css b/frontend/app/submit/success/page.module.css new file mode 100644 index 0000000..8cecb1c --- /dev/null +++ b/frontend/app/submit/success/page.module.css @@ -0,0 +1,67 @@ +:root { + --color-background: #0c2b35; + --color-accent: #debb01; + --color-text: white; + --color-border: black; + --color-spinner: rgba(255, 255, 255, 0.2); +} + +.confirmationContainer { + background-color: var(--color-background); + min-height: 100dvh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 1.5rem; + text-align: center; + padding: 1.5rem; +} + +.thankYouHeading { + color: var(--color-accent); + font-size: clamp(1.5rem, 7vw, 2.5rem); + font-weight: 700; + line-height: 1.2; + margin: 0; +} + +.thankYouHeading span { + font-size: clamp(2rem, 10vw, 3rem); +} + +.avatar { + width: min(173px, 43vw); + height: min(173px, 43vw); + border-radius: 50%; + border: 3px solid black; + overflow: hidden; +} + +.avatarPlaceholder { + width: 100%; + height: 100%; + background-color: #888; +} + +.spinner { + width: min(48px, 12vw); + height: min(48px, 12vw); + border-radius: 50%; + border: 3px solid var(--color-spinner); + border-top-color: white; + animation: spin 0.9s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.redirectMessage { + color: white; + font-size: clamp(0.875rem, 3.5vw, 1.25rem); + font-weight: 400; + margin: 0; +} diff --git a/frontend/app/submit/success/page.tsx b/frontend/app/submit/success/page.tsx new file mode 100644 index 0000000..09a78ab --- /dev/null +++ b/frontend/app/submit/success/page.tsx @@ -0,0 +1,42 @@ +"use client"; + +import { useEffect } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import Image from "next/image"; +import styles from "./page.module.css"; + +export default function ConfirmationPage() { + const router = useRouter(); + const searchParams = useSearchParams(); + const name = searchParams.get("name") || "User"; + const avatar = searchParams.get("avatar") || ""; + + useEffect(() => { + const timer = setTimeout(() => { + router.push("/leaderboard"); + }, 3000); + return () => clearTimeout(timer); + }, [router]); + + return ( +
+

+ Thanks for your submission, +
+ {name}! +

+ +
+ {avatar ? ( + {name} + ) : ( +
+ )} +
+ +
+ +

Redirecting to leaderboard...

+
+ ); +} From efa77c64fa3d9292f04ef1583b105c289195f96c Mon Sep 17 00:00:00 2001 From: Thy Doan Date: Thu, 4 Jun 2026 21:39:28 -0700 Subject: [PATCH 9/9] add submit/success page.tsx and success.module.css --- frontend/app/submit/success/page.tsx | 14 +++++++------- .../{page.module.css => success.module.css} | 12 ++++++++---- frontend/public/avatar.png | Bin 0 -> 4403 bytes 3 files changed, 15 insertions(+), 11 deletions(-) rename frontend/app/submit/success/{page.module.css => success.module.css} (85%) create mode 100644 frontend/public/avatar.png diff --git a/frontend/app/submit/success/page.tsx b/frontend/app/submit/success/page.tsx index 09a78ab..1352574 100644 --- a/frontend/app/submit/success/page.tsx +++ b/frontend/app/submit/success/page.tsx @@ -1,14 +1,15 @@ "use client"; -import { useEffect } from "react"; -import { useRouter, useSearchParams } from "next/navigation"; import Image from "next/image"; -import styles from "./page.module.css"; +import { useRouter, useSearchParams } from "next/navigation"; +import { useEffect } from "react"; + +import styles from "./success.module.css"; export default function ConfirmationPage() { const router = useRouter(); const searchParams = useSearchParams(); - const name = searchParams.get("name") || "User"; + const name = searchParams.get("name") || "Karen"; const avatar = searchParams.get("avatar") || ""; useEffect(() => { @@ -25,18 +26,17 @@ export default function ConfirmationPage() {
{name}! +

Redirecting to leaderboard...

{avatar ? ( {name} ) : ( -
+ {`${name} )}
- -

Redirecting to leaderboard...

); } diff --git a/frontend/app/submit/success/page.module.css b/frontend/app/submit/success/success.module.css similarity index 85% rename from frontend/app/submit/success/page.module.css rename to frontend/app/submit/success/success.module.css index 8cecb1c..17f110c 100644 --- a/frontend/app/submit/success/page.module.css +++ b/frontend/app/submit/success/success.module.css @@ -13,17 +13,20 @@ flex-direction: column; align-items: center; justify-content: center; - gap: 1.5rem; + gap: 0.5rem; text-align: center; padding: 1.5rem; + padding-top: 2.5rem; } .thankYouHeading { color: var(--color-accent); - font-size: clamp(1.5rem, 7vw, 2.5rem); + font-size: clamp(1.5rem, 5.5vw, 2rem); font-weight: 700; line-height: 1.2; + white-space: nowrap; margin: 0; + padding: 0 2rem; } .thankYouHeading span { @@ -34,8 +37,8 @@ width: min(173px, 43vw); height: min(173px, 43vw); border-radius: 50%; - border: 3px solid black; overflow: hidden; + margin-bottom: 0.5rem; } .avatarPlaceholder { @@ -47,6 +50,7 @@ .spinner { width: min(48px, 12vw); height: min(48px, 12vw); + margin-top: 1rem; border-radius: 50%; border: 3px solid var(--color-spinner); border-top-color: white; @@ -63,5 +67,5 @@ color: white; font-size: clamp(0.875rem, 3.5vw, 1.25rem); font-weight: 400; - margin: 0; + margin-bottom: 1rem; } diff --git a/frontend/public/avatar.png b/frontend/public/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c63086120061d21eab9f25c5ae8e1364df7229 GIT binary patch literal 4403 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 literal 0 HcmV?d00001