Skip to content

Conversation

@banana-claude
Copy link
Contributor

@banana-claude banana-claude bot commented Jan 6, 2026

Summary

  • Add /reset-password page to request password reset email via Supabase Auth
  • Add /update-password page to set new password from reset link
  • Add "Forgot password?" link on login page

Closes #22


Generated with Claude Code

@banana-claude banana-claude bot requested a review from bitnimble January 6, 2026 12:14
@vercel
Copy link

vercel bot commented Jan 6, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
paradb Ready Ready Preview, Comment Jan 20, 2026 0:53am

Copy link
Owner

@bitnimble bitnimble left a comment

Choose a reason for hiding this comment

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

@intern address review comments

}

runInAction(() => (this.store.submitting = true));
const redirectTo = `${window.location.origin}${routeFor([RoutePath.UPDATE_PASSWORD])}`;
Copy link
Owner

Choose a reason for hiding this comment

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

use the baseUrl env var instead of window.location.origin

import { ResetPassword } from './reset_password';
import { ResetPasswordPresenter, ResetPasswordStore } from './reset_password_presenter';

function createResetPasswordPage(supabase: ReturnType<typeof useApi>['supabase']) {
Copy link
Owner

Choose a reason for hiding this comment

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

no need to DI supabase, it should be possible to use the global create in the presenter directly instead of drilling


return observer(() => {
return (
<ResetPassword
Copy link
Owner

Choose a reason for hiding this comment

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

inline the contents of reset_password.tsx into here instead of a separate file

import { UpdatePassword } from './update_password';
import { UpdatePasswordPresenter, UpdatePasswordStore } from './update_password_presenter';

function createUpdatePasswordPage(supabase: ReturnType<typeof useApi>['supabase']) {
Copy link
Owner

Choose a reason for hiding this comment

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

ditto here, don't drill this


return observer(() => {
return (
<UpdatePassword
Copy link
Owner

Choose a reason for hiding this comment

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

ditto here, no need for a separate file for this component

});
}

onChangePassword = (value: string) => (this.store.password = value);
Copy link
Owner

Choose a reason for hiding this comment

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

wrap in mobx action()

private readonly store: UpdatePasswordStore
) {
super(store);
makeObservable(this, {
Copy link
Owner

Choose a reason for hiding this comment

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

remove in favour of wrapping the function definition in the action directly

private readonly store: ResetPasswordStore
) {
super(store);
makeObservable(this, {
Copy link
Owner

Choose a reason for hiding this comment

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

remove in favour of wrapping the function definition in mobx.action.bound directly

MAP = 'map',
LOGIN = 'login',
LOGOUT = 'logout',
RESET_PASSWORD = 'reset-password',
Copy link
Owner

Choose a reason for hiding this comment

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

make the reset path /password/reset, and the update route /password/reset/update

@banana-claude
Copy link
Contributor Author

banana-claude bot commented Jan 19, 2026

Claude finished @banana-claude[bot]'s task in 4m 32s —— View job


Addressed all review comments

  • Change routes to /password/reset and /password/reset/update
  • Move files to new directory structure
  • Inline reset_password.tsx into page.tsx
  • Inline update_password.tsx into page.tsx
  • Remove supabase DI, use global createClient() in presenters
  • Fix mobx action patterns (use action.bound and setSubmitting/setSuccess helpers instead of multiple runInAction)
  • Use NEXT_PUBLIC_BASE_URL env var instead of window.location.origin
  • Update login_signup.tsx link reference

Changes pushed to claude/issue-22-20260106-1209. @bitnimble ready for re-review.

github-actions bot and others added 4 commits January 20, 2026 11:48
- Add /reset-password page to request password reset email
- Add /update-password page to set new password from reset link
- Add "Forgot password?" link on login page
- Uses Supabase Auth resetPasswordForEmail and updateUser APIs

Co-authored-by: bitnimble <bitnimble@users.noreply.github.com>
- Move routes from /reset-password and /update-password to /password/reset and /password/reset/update
- Inline separate component files into page.tsx
- Use global createClient() instead of DI for supabase
- Use action.bound and setSubmitting/setSuccess helpers instead of runInAction
- Use NEXT_PUBLIC_BASE_URL env var instead of window.location.origin

Co-authored-by: bitnimble <bitnimble@users.noreply.github.com>
@bitnimble bitnimble force-pushed the claude/issue-22-20260106-1209 branch from 7ffbd28 to fda66ec Compare January 20, 2026 00:51
@bitnimble bitnimble merged commit 77b4899 into main Jan 20, 2026
@bitnimble bitnimble deleted the claude/issue-22-20260106-1209 branch January 20, 2026 00:52
banana-claude bot pushed a commit that referenced this pull request Jan 20, 2026
Add new sections covering:
- React patterns (mobx-react-lite, observer structure, page.tsx patterns)
- MobX conventions (action.bound, makeObservable generics)
- Dependency injection (prefer createClient() at usage site)
- Routing conventions (nested routes over hyphens)
- Forms/UX (password confirmation, required fields)
- TypeScript (don't export internal types)

These guidelines address patterns that required manual fixes in the password
reset feature implementation.

Closes #55

Co-authored-by: bitnimble <bitnimble@users.noreply.github.com>
Sign up for free to 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.

Add password reset feature

1 participant