191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

191 password authentication frontend & backend; rudimentary - #196

Open
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend
Open

191 password authentication frontend & backend; rudimentary#196
saumyapalk23 wants to merge 5 commits into
mainfrom
191-auth-frontend-backend

Conversation

@saumyapalk23

@saumyapalk23saumyapalk23 commented Apr 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Issue

Closes#191

📝 Description

  1. Added forgotPassword(email) and resetPassword(email, code, newPassword) to AuthContext.tsx, wired to POST /auth/forgot-password and POST /auth/reset-password
  2. Wired app/login/page.tsx to useAuth().login(), added email format and empty field validation, and fixed the "Forgot password?" link to point to /forgot-password
  3. Created app/forgot-password/page.tsx — renders the reset request form, then switches to a confirmation screen after submission
  4. Created app/reset-password/page.tsx — renders the new password form, then switches to a success screen after submission; reads email and code from Cognito query params
  5. Fixed dead href="#" links to point to /login

✔️ Verification

Navigate to /login — submit with empty fields, confirm validation errors appear; submit with a bad email format (e.g. saumyagmail.com), confirm email error appears
image

Click "Forgot password?" — confirm it navigates to /forgot-password
image

On /forgot-password, enter a valid email and click "Request reset link" — the API call will fail since POST /auth/forgot-password is not yet implemented on the backend, but the page correctly catches the error and the UI flow can still be verified
Click "Back to login" — confirm it navigates to /login
image

Navigate to /reset-password — enter mismatched or weak passwords, confirm validation errors appear; enter valid matching passwords and click "Reset Password" — the API call will fail since POST /auth/reset-password is not yet implemented
image

Click "Back to login" on the success screen — confirm it navigates to /login
image

🏕️ (Optional) Future Work / Notes

  • lowk might've said i did implement something that i forgot, so lmk
  • Backend endpoints POST /auth/forgot-password and POST /auth/reset-password still need to be implemented for the full flow -to work end to end. The frontend is fully wired and ready.
  • TextInputField does not support type="password", so password fields currently render as plain text. Should be addressed in a follow-up ticket.

@github-actions
github-actionsBot requested a review from Rayna-YuApril 12, 2026 21:38
@saumyapalk23
saumyapalk23 removed the request for review from Rayna-YuApril 12, 2026 21:38
github-actionsBot added a commit that referenced this pull request Apr 12, 2026
Vaibhav978
Vaibhav978 previously approved these changes Apr 12, 2026

@nshoreibah-kvyonshoreibah-kvyo left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A couple questions but looks good to me!

let body = await res.json();
expect(body.message).toBe("Project not found for id: 1000");
});
test("update project test 🌞", async () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Were these tests flaking? Why'd we delete?

testEnvironment: 'node',
testMatch: ['**/*.test.ts'],
globals: { 'ts-jest': { isolatedModules: true } },
maxWorkers: 1,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also curious what this is for

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wiring auth frontend and backend

6 participants

@saumyapalk23@Vaibhav978@Rayna-Yu@tsudhakar87@nourshoreibah@nshoreibah-kvyo