| Separate Sign up / Log in tabs users pick wrong | One email field; server routes to the right flow |
| Password + confirm + name + phone at signup | Email (or SSO) only; show/hide replaces confirm |
| Blocking all product use until email verified | Let them in; gate only sensitive actions |
| "No account found with that email" | Neutral copy or silent route-to-signup |
| Magic link as the ONLY credential | Send a 6-digit code too; links strand cross-device users |
| SMS as default 2FA | Passkey/TOTP first; SMS as last-resort fallback |
| Disabling paste in password/OTP fields | Never — it breaks password managers and autofill |
| Session expiry → hard redirect, draft lost | Overlay re-auth, preserve state, replay the action |
| Logout confirmation dialog | Just log out |
| Verification link → "Success, please log in" | Land logged-in at the original destination |
| 5+ social login buttons | 1–3; more measurably lowers completion |
| Password rules revealed only via rejection | Live checklist while typing |
| Forced periodic password rotation | Drop it; push passkeys instead |
| CAPTCHA on every login by default | Only after rate-limit signals fire |
| Auth dumps user on a generic dashboard | Carry the deep link through every redirect |
| Missing autocomplete attributes | Full autofill markup; test with a password manager |