diff --git a/app/api/signup/route.ts b/app/api/signup/route.ts
index 9aceda98f6bc309f010ed1a97c9264e7b0c4454b..124f2fdc5cef381eafdba1e9e08508adc245c308 100644
--- a/app/api/signup/route.ts
+++ b/app/api/signup/route.ts
@@ -3,17 +3,43 @@ import { hash } from 'bcrypt'
 import { NextResponse } from 'next/server'
 
 export async function POST(req: Request) {
-    console.log("aaaa", req)
-
     try {
         const { username, email, password } = await req.json()
         const hashed = await hash(password, 12)
 
+        let usernameCheck = username.toLowerCase()
+        const emailCheck = email.toLowerCase()
+
+        const existingUser = await db.user.findUnique({
+            where: {
+                email: emailCheck
+            }
+        })
+
+        if (existingUser) {
+            throw new Error('email already exists')
+        }
+
+        let isUnique = false;
+        while (!isUnique) {
+            const existingUserName = await db.user.findUnique({
+                where: {
+                    username: usernameCheck
+                }
+            })
+
+            if (existingUserName) {
+                usernameCheck = `${username}${Math.floor(Math.random() * 1000)}`
+            } else {
+                isUnique = true;
+            }
+        }
+
         const user = await db.user.create({
             data: {
                 name: username,
-                username: username.toLowerCase(),
-                email: email.toLowerCase(),
+                username: usernameCheck,
+                email: emailCheck,
                 password: hashed
             }
         })
@@ -22,24 +48,17 @@ export async function POST(req: Request) {
             usernameOrEmail: user.email
         })
     } catch (err: any) {
-        return new NextResponse(JSON.stringify({
-            error: err.message
-        }), { status: 500 }
+        if (err.message === 'email already exists') {
+            return new NextResponse(JSON.stringify({
+                error: err.message
+            }), { status: 422 }
+            )
+        }
+
+        return new NextResponse(
+            JSON.stringify({
+                error: err.message
+            }), { status: 500 }
         )
     }
-}
-
-// let isUnique = false;
-// while (!isUnique) {
-//     const existingUserName = await db.user.findUnique({
-//         where: {
-//             username: credentials.username
-//         }
-//     })
-
-//     if (existingUserName) {
-//         credentials.username = `${credentials.username}${Math.floor(Math.random() * 1000)}`
-//     } else {
-//         isUnique = true;
-//     }
-// }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/components/user-auth-form.tsx b/components/user-auth-form.tsx
index d02458f15db99a99f38b95217b5442852a195037..05955881f56481e1e9bf2a2223e4d408195b5452 100644
--- a/components/user-auth-form.tsx
+++ b/components/user-auth-form.tsx
@@ -25,6 +25,7 @@ export function UserAuthForm({ type, className, ...props }: UserAuthFormProps) {
     const {
         register,
         handleSubmit,
+        setError,
         formState: { errors },
     } = useForm<FormData>({
         resolver: zodResolver(userAuthSchema),
@@ -49,8 +50,12 @@ export function UserAuthForm({ type, className, ...props }: UserAuthFormProps) {
             })
 
             if (!res.ok) {
+                if (res.status === 422) {
+                    setError('email', { type: 'manual', message: 'This email is already in use. Please choose another one.' });
+                }
+
                 setIsLoading(false)
-                toast({
+                return toast({
                     variant: "destructive",
                     title: "Uh oh! Something went wrong.",
                     description: "Your sign up request failed. Please try again.",