From 93049e864ae6d281b60c23dee868bca3f585dd4a Mon Sep 17 00:00:00 2001
From: Mohamed Bassem <me@mbassem.com>
Date: Thu, 10 Jul 2025 08:35:32 +0000
Subject: feat: Add support for email verification

---
 apps/web/components/signin/CredentialsForm.tsx | 28 +++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

(limited to 'apps/web/components/signin/CredentialsForm.tsx')

diff --git a/apps/web/components/signin/CredentialsForm.tsx b/apps/web/components/signin/CredentialsForm.tsx
index 3772db09..05aa1cef 100644
--- a/apps/web/components/signin/CredentialsForm.tsx
+++ b/apps/web/components/signin/CredentialsForm.tsx
@@ -28,9 +28,11 @@ const signInSchema = z.object({
   password: z.string(),
 });
 
-const SIGNIN_FAILED = "Incorrect username or password";
+const SIGNIN_FAILED = "Incorrect email or password";
 const OAUTH_FAILED = "OAuth login failed: ";
 
+const VERIFY_EMAIL_ERROR = "Please verify your email address before signing in";
+
 function SignIn() {
   const [signinError, setSigninError] = useState("");
   const router = useRouter();
@@ -68,8 +70,16 @@ function SignIn() {
             email: value.email.trim(),
             password: value.password,
           });
-          if (!resp || !resp?.ok) {
-            setSigninError(SIGNIN_FAILED);
+          if (!resp || !resp?.ok || resp.error) {
+            if (resp?.error === "CredentialsSignin") {
+              setSigninError(SIGNIN_FAILED);
+            } else if (resp?.error === VERIFY_EMAIL_ERROR) {
+              router.replace(
+                `/check-email?email=${encodeURIComponent(value.email.trim())}`,
+              );
+            } else {
+              setSigninError(resp?.error ?? SIGNIN_FAILED);
+            }
             return;
           }
           router.replace("/");
@@ -149,8 +159,16 @@ function SignUp() {
             email: value.email.trim(),
             password: value.password,
           });
-          if (!resp || !resp.ok) {
-            setErrorMessage("Hit an unexpected error while signing in");
+          if (!resp || !resp.ok || resp.error) {
+            if (resp?.error === VERIFY_EMAIL_ERROR) {
+              router.replace(
+                `/check-email?email=${encodeURIComponent(value.email.trim())}`,
+              );
+            } else {
+              setErrorMessage(
+                resp?.error ?? "Hit an unexpected error while signing in",
+              );
+            }
             return;
           }
           router.replace("/");
-- 
cgit v1.2.3-70-g09d2

