'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { toast } from 'sonner'; import { authClient } from '@/lib/auth/client'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { BrandedAuthShell } from '@/components/shared/branded-auth-shell'; const loginSchema = z.object({ email: z.string().email('Please enter a valid email address'), password: z.string().min(1, 'Password is required'), }); type LoginFormData = z.infer; export default function LoginPage() { const router = useRouter(); const [isLoading, setIsLoading] = useState(false); const { register, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(loginSchema), }); async function onSubmit(data: LoginFormData) { setIsLoading(true); try { const result = await authClient.signIn.email({ email: data.email, password: data.password, }); if (result.error) { toast.error(result.error.message ?? 'Invalid email or password'); return; } router.push('/dashboard'); } catch { toast.error('Something went wrong. Please try again.'); } finally { setIsLoading(false); } } return (

Port Nimara CRM

Sign in to continue

{errors.email &&

{errors.email.message}

}
Forgot password?
{errors.password &&

{errors.password.message}

}
); }