Problem
When OAuth fails, src/app/auth/callback/route.ts:48 redirects to /login?error=auth_error. But src/app/login/login-form.tsx never reads an error search param — users land on a pristine login form with no message explaining why they're back.
Fix
Read error from useSearchParams() and render a dismissible alert ("Sign-in failed or was cancelled — please try again"). Map known codes to friendly copy.
Acceptance criteria
Problem
When OAuth fails,
src/app/auth/callback/route.ts:48redirects to/login?error=auth_error. Butsrc/app/login/login-form.tsxnever reads anerrorsearch param — users land on a pristine login form with no message explaining why they're back.Fix
Read
errorfromuseSearchParams()and render a dismissible alert ("Sign-in failed or was cancelled — please try again"). Map known codes to friendly copy.Acceptance criteria