import { useState, type FormEvent } from 'react' import { useAuth } from '../../contexts/AuthContext' import api from '../../services/api' export function SetupPage() { const { onSetupComplete } = useAuth() const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [error, setError] = useState(null) const [loading, setLoading] = useState(false) const handleSubmit = async (e: FormEvent) => { e.preventDefault() setError(null) if (password !== confirmPassword) { setError('Passwords do not match.') return } if (password.length < 6) { setError('Password must be at least 6 characters.') return } if (username.trim().length < 2) { setError('Username must be at least 2 characters.') return } setLoading(true) try { const res = await api.post('/auth/setup', { username: username.trim(), password, }) const { access_token, refresh_token } = res.data await onSetupComplete(access_token, refresh_token) } catch (err: any) { setError( err.response?.data?.detail ?? 'Setup failed. Please try again.', ) } finally { setLoading(false) } } return (

Welcome to Mulita

Create your admin account to get started.

{error && (
{error}
)}
setUsername(e.target.value)} required autoFocus className="w-full rounded border border-border bg-bg px-3 py-2 text-sm text-text outline-none focus:border-accent" />
setPassword(e.target.value)} required className="w-full rounded border border-border bg-bg px-3 py-2 text-sm text-text outline-none focus:border-accent" />
setConfirmPassword(e.target.value)} required className="w-full rounded border border-border bg-bg px-3 py-2 text-sm text-text outline-none focus:border-accent" />
) }