"use client"; import { useMemo, useState } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import Image from "next/image"; import { Button } from "@/components/ui/button"; import { Card, CardContent, } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Checkbox } from "@/components/ui/checkbox"; import { Briefcase, AlertCircle, Eye, EyeOff, User as UserIcon, Lock, Building2, Mail, Phone, } from "lucide-react"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { motion } from "framer-motion"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { Navbar } from "@/components/navbar"; import { Footer } from "@/components/footer"; type RegisterFormData = { name: string; email: string; phone?: string; password: string; confirmPassword: string; acceptTerms: boolean; }; export default function RegisterUserPage() { const router = useRouter(); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const registerSchema = useMemo(() => z.object({ name: z.string().min(3, "Name must be at least 3 characters"), email: z.string().email("Invalid email address"), phone: z.string().min(7, "Phone number too short").optional().or(z.literal("")), password: z.string().min(6, "Password must be at least 6 characters"), confirmPassword: z.string().min(6, "Please confirm your password"), acceptTerms: z.boolean().refine((val) => val === true, { message: "You must accept the terms of use", }), }).refine((data) => data.password === data.confirmPassword, { message: "Passwords do not match", path: ["confirmPassword"], }), []); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(registerSchema), defaultValues: { name: "", email: "", phone: "", password: "", confirmPassword: "", acceptTerms: false, }, }); const handleRegister = async (data: RegisterFormData) => { setError(""); setLoading(true); try { const { registerCandidate } = await import("@/lib/auth"); await registerCandidate({ name: data.name, email: data.email, phone: data.phone || "", password: data.password, username: data.email.split("@")[0], }); router.push("/login?message=Account created successfully! Please log in."); } catch (err: any) { setError(err.message || "Failed to create account. Please try again."); } finally { setLoading(false); } }; return (
{/* Left Side - Branding */}
GoHorseJobs

Start your professional journey

Connect with the best opportunities worldwide. Sign up for free and find the job that's right for you!

Build your complete professional profile
Apply to top jobs from companies worldwide
Track your applications in real time
{/* Right Side - Register Form */}

Create your account

Fill in your details to get started

{error && ( {error} )}
{errors.name && (

{errors.name.message}

)}
{errors.email && (

{errors.email.message}

)}
{errors.phone && (

{errors.phone.message}

)}
{errors.password && (

{errors.password.message}

)}
{errors.confirmPassword && (

{errors.confirmPassword.message}

)}
{errors.acceptTerms && (

{errors.acceptTerms.message}

)}

Already have an account?{" "} Log in

Back to home
); }