"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { getApiUrl } from "@/lib/api" export default function LoginPage() { const router = useRouter() const [email, setEmail] = useState("") const [password, setPassword] = useState("") const [error, setError] = useState("") const [isLoading, setIsLoading] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError("") setIsLoading(true) try { const response = await fetch(`${getApiUrl()}/api/auth/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email, password }), }) if (!response.ok) { const data = await response.json() throw new Error(data.detail || "Login failed") } const data = await response.json() // Store token in localStorage localStorage.setItem("access_token", data.access_token) localStorage.setItem("user", JSON.stringify(data.user)) // Redirect to home router.push("/") } catch (err) { setError(err instanceof Error ? err.message : "Login failed") } finally { setIsLoading(false) } } return (
{/* Logo/Title */}

Audio Classifier

Sign in to continue

{/* Error message */} {error && (
{error}
)} {/* Login form */}
setEmail(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="admin@example.com" disabled={isLoading} />
setPassword(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" placeholder="••••••••" disabled={isLoading} />
{/* Footer */}

Audio Classifier v1.0.0

) }