"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { ContactSection } from "../../components/contact-section"; import { DemoCta } from "../../components/demo-cta"; import { FaqSection } from "../../components/faq-section"; import { PageSchema } from "../../components/page-schema"; import { SiteFooter } from "../../components/site-footer"; import { SiteHeader } from "../../components/site-header"; import { defaultFaqs } from "../../data/faq"; import { siteInfo } from "../../data/site"; type ApiResponse = { data: T; meta: { timestamp: string; version: "v1" }; error: null | { message: string; code?: string }; }; type AuthData = { user: { id: string; email: string }; token: string }; export default function LoginPage() { const router = useRouter(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [status, setStatus] = useState(""); const schema = [ { "@context": "https://schema.org", "@type": "WebPage", name: "LedgerOne Login", description: "Sign in to LedgerOne to access your audit-ready ledger.", url: `${siteInfo.url}/login` }, { "@context": "https://schema.org", "@type": "FAQPage", mainEntity: defaultFaqs.map((item) => ({ "@type": "Question", name: item.question, acceptedAnswer: { "@type": "Answer", text: item.answer } })) } ]; const onSubmit = async (event: React.FormEvent) => { event.preventDefault(); setStatus("Signing in..."); try { const res = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, password }) }); const payload = (await res.json()) as ApiResponse; if (!res.ok || payload.error) { setStatus(payload.error?.message ?? "Login failed."); return; } setStatus(`Welcome back, ${payload.data.user.email}`); localStorage.setItem("ledgerone_token", payload.data.token); localStorage.setItem("ledgerone_user_id", payload.data.user.id); router.push("/app"); } catch { setStatus("Login failed."); } }; return (
L1

Sign in to your account

Or{" "} start your 14-day free trial

setEmail(e.target.value)} className="block w-full appearance-none rounded-lg border border-border bg-background/50 px-3 py-2 placeholder-muted-foreground shadow-sm focus:border-primary focus:outline-none focus:ring-primary sm:text-sm transition-all" />
setPassword(e.target.value)} className="block w-full appearance-none rounded-lg border border-border bg-background/50 px-3 py-2 placeholder-muted-foreground shadow-sm focus:border-primary focus:outline-none focus:ring-primary sm:text-sm transition-all" />
{status && (

{status}

)}
); }