import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Lock, Mail } from 'lucide-react'; import { Alert, AlertDescription, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Form, FormControl, FormField, FormItem, FormLabel, FormMessage, Input, ButtonWithLoading, } from '@/components'; import { useAuth } from '@/lib/contexts/AuthContext'; import { useMcpUsage } from '@/features/logs/hooks/useMcpUsage'; import { loginFormSchema, LoginForm } from '@/lib/utils/schemaValidations'; export default function LoginPage() { const navigate = useNavigate(); const { loginWithPassword, isAuthenticated } = useAuth(); const { hasCompletedOnboarding, isLoading: isMcpUsageLoading } = useMcpUsage(); const [isSubmitting, setIsSubmitting] = useState(false); const [submitError, setSubmitError] = useState(null); const form = useForm({ resolver: zodResolver(loginFormSchema), defaultValues: { email: 'admin@example.com', password: 'change-this-password', }, }); const onSubmit = async (data: LoginForm) => { setIsSubmitting(true); setSubmitError(null); try { const success = await loginWithPassword(data.email, data.password); if (!success) { throw new Error('Invalid email or password'); } } catch (error) { const errorMessage = error instanceof Error ? error.message : 'An error occurred'; setSubmitError(errorMessage); } finally { setIsSubmitting(false); } }; useEffect(() => { if (isAuthenticated && !isMcpUsageLoading) { const redirectPath = hasCompletedOnboarding ? '/dashboard' : '/dashboard/onboard'; void navigate(redirectPath, { replace: true }); } }, [hasCompletedOnboarding, isAuthenticated, isMcpUsageLoading, navigate]); return (
{/* Logo and Title */}

Insforge Admin

Sign in to access your dashboard

{/* Login Card */}
void form.handleSubmit(onSubmit)(e)}> Sign In Enter your admin credentials to continue ( Email
)} /> ( Password
)} /> {submitError && ( {submitError} )}
Sign in

Use the credentials configured in your .env file

{/* Footer */}

Insforge - Self-hosted Backend as a Service

); }