"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState, FormEvent } from "react"; 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"; import { storeAuthTokens } from "@/lib/api"; type ApiResponse = { data: T; meta: { timestamp: string; version: "v1" }; error: null | { message: string; code?: string }; }; type AuthData = { user: { id: string; email: string; fullName?: string }; accessToken: string; refreshToken: string; message?: string; }; export default function RegisterPage() { const router = useRouter(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [status, setStatus] = useState(""); const [isError, setIsError] = useState(false); const schema = [ { "@context": "https://schema.org", "@type": "WebPage", name: "LedgerOne Create Account", description: "Create a LedgerOne account and start with two free accounts.", url: `${siteInfo.url}/register`, }, { "@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: FormEvent) => { event.preventDefault(); setStatus("Creating account..."); setIsError(false); try { const res = await fetch("/api/auth/register", { 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 ?? "Registration failed."); setIsError(true); return; } storeAuthTokens({ accessToken: payload.data.accessToken, refreshToken: payload.data.refreshToken, user: payload.data.user, }); setStatus("Account created! Please verify your email."); router.push("/app"); } catch { setStatus("Registration failed. Please try again."); setIsError(true); } }; return (
L1

Create your account

Already have an account?{" "} Sign in

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" />

Minimum 8 characters

{ const btn = document.getElementById("submit-btn") as HTMLButtonElement; if (btn) btn.disabled = !e.target.checked; }} />
{status && (

{status}

)}
); }