'use client' import { useState } from 'react' import { useRouter } from 'next/navigation' import { loginWithPassword, signUpWithPassword } from '@/lib/auth/client' import { Brain, Zap, Target, Clock } from 'lucide-react' import { BentoGrid, BentoCard } from '@/components/ui/bento-grid' import Link from 'next/link' // Bento grid features with different sizes for visual interest const bentoFeatures = [ { name: 'AI Intake Samenvatting', description: 'Van 30 minuten handmatig werk naar 5 seconden automatisch. AI leest, begrijpt en structureert intake gesprekken.', icon: Brain, className: 'col-span-3 lg:col-span-2', background: (
), href: '#', cta: 'Meer info' }, { name: '90%+ Tijdsbesparing', description: 'Gemiddeld bespaar je 2+ uur per dag op documentatie', icon: Clock, className: 'col-span-3 lg:col-span-1', background: (
), href: '#', cta: 'Zie metrics' }, { name: 'DSM Classificatie', description: 'Automatische categorisatie in 3 seconden vs 15 minuten handmatig', icon: Zap, className: 'col-span-3 lg:col-span-1', background: (
), href: '#', cta: 'Ontdekken' }, { name: 'SMART Behandelplannen', description: 'Gestructureerde doelen en interventies in 10 seconden. AI genereert evidence-based plannen.', icon: Target, className: 'col-span-3 lg:col-span-2', background: (
), href: '#', cta: 'Bekijk voorbeeld' } ] export default function LoginPage() { const router = useRouter() const [mode, setMode] = useState<'login' | 'signup'>('login') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') // Only for signup const [loading, setLoading] = useState(false) const [message, setMessage] = useState<{ type: 'success' | 'error' text: string } | null>(null) // Handle form submission const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setLoading(true) setMessage(null) try { if (mode === 'signup') { // Signup Flow if (password !== confirmPassword) { throw new Error('Wachtwoorden komen niet overeen') } // Sign up const result = await signUpWithPassword(email, password) // Check if user got a session immediately (email confirmation disabled) if (result.session) { // User is logged in immediately setMessage({ type: 'success', text: 'Account aangemaakt! Je wordt doorgestuurd...' }) setTimeout(() => { router.push('/epd/clients') }, 1000) } else { // Email confirmation required - user needs to check inbox setMessage({ type: 'success', text: 'Check je inbox voor een verificatie link om je account te activeren.' }) } } else { // Login Flow await loginWithPassword(email, password) setMessage({ type: 'success', text: 'Ingelogd! Redirect naar EPD...' }) // Redirect to EPD setTimeout(() => { router.push('/epd/clients') }, 1000) } } catch (error: any) { // Check for duplicate email error with auto-login if (error.code === 'user_already_registered' && error.data?.session) { // User was auto-logged in (client-side detection succeeded) setMessage({ type: 'success', text: 'Dit emailadres bestaat al. Je bent nu ingelogd!' }) setTimeout(() => { router.push('/epd/clients') }, 1000) } // Check for duplicate email error (from Auth Hook or client-side) else if (error.code === 'user_already_registered') { setMessage({ type: 'error', text: error.message || 'Dit emailadres is al geregistreerd. Probeer in te loggen.' }) // Switch to login mode after 2 seconds setTimeout(() => { setMode('login') setPassword('') setConfirmPassword('') }, 2000) } // Generic error handling else { setMessage({ type: 'error', text: error.message || 'Er ging iets mis. Probeer opnieuw.' }) } } finally { setLoading(false) } } // Quick demo login const handleQuickDemoLogin = async () => { setMode('login') setEmail('demo@mini-ecd.demo') setPassword('Demo2024!') // Auto-submit setLoading(true) try { await loginWithPassword('demo@mini-ecd.demo', 'Demo2024!') router.push('/epd/clients') } catch (error: any) { setMessage({ type: 'error', text: 'Demo login mislukt. Probeer handmatig in te loggen.' }) setLoading(false) } } return (
{/* Left Side - Bento Grid Showcase (60%) */}
{/* Header */}
← Terug naar home

AI-Gestuurde EPD Workflows

Van uren documentatie naar seconden. Ontdek hoe AI je dagelijkse workflow transformeert.

{/* Bento Grid */} {bentoFeatures.map((feature, index) => ( ))} {/* Stats Footer */}
90%+
Tijdsbesparing
< 5 sec
Gemiddelde respons
4 weken
Build tijd
{/* Right Side - Login/Signup Form (40%) */}
{/* Header */}

{mode === 'login' ? 'Welkom terug' : 'Maak een account'}

{mode === 'login' ? 'Log in om toegang te krijgen tot het EPD' : 'Start vandaag nog met snellere rapportages' }

{/* Mode Toggle */}
{/* Message Display */} {message && (

{message.text}

)}
setEmail(e.target.value)} placeholder="jouw@email.nl" required className="w-full px-4 py-2.5 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" />
setPassword(e.target.value)} placeholder="••••••••" required minLength={8} className="w-full px-4 py-2.5 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" /> {mode === 'login' && (
Wachtwoord vergeten?
)}
{mode === 'signup' && (
setConfirmPassword(e.target.value)} placeholder="••••••••" required minLength={8} className="w-full px-4 py-2.5 border border-slate-300 rounded-lg focus:ring-2 focus:ring-slate-400 focus:border-slate-400" />
)}
{/* Divider */}
of
{/* Quick Demo Button */} {/* Footer */}

Build in Public door{' '} AI Speedrun

) }