From cf59c252e26849b9bbf547445d0c3e22d4f95b28 Mon Sep 17 00:00:00 2001 From: jyswee Date: Thu, 23 Jul 2026 22:08:28 +0000 Subject: [PATCH] Seed: saas template (34 files) --- src/pages/Signup.tsx | 132 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/pages/Signup.tsx diff --git a/src/pages/Signup.tsx b/src/pages/Signup.tsx new file mode 100644 index 0000000..62bf3d8 --- /dev/null +++ b/src/pages/Signup.tsx @@ -0,0 +1,132 @@ +import { useState } from "react"; +import { toast } from "sonner"; +import { Link } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Checkbox } from "@/components/ui/checkbox"; +import { Separator } from "@/components/ui/separator"; +import { Layers, CheckCircle2 } from "lucide-react"; +import { useAuth } from "@/hooks/use-tygarun"; + +export default function SignupPage() { + const { signup, loading } = useAuth(); + const [name, setName] = useState(""); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [terms, setTerms] = useState(false); + const [success, setSuccess] = useState(false); + + return ( +
+
+ {/* Logo */} + +
+ +
+ Nexus + + + + +
+

Create your account

+

Start your 14-day free trial

+
+ + {success && ( +
+ Account created! Redirecting to dashboard... +
+ )} + +
{ e.preventDefault(); try { await signup({ name, email, password }); setSuccess(true); toast.success("Account created! Check your email."); } catch (err) { toast.error("Sign up failed. Please try again."); } }} className="space-y-4"> +
+ + setName(e.target.value)} + className="mt-1.5 bg-slate-800/50 border-slate-700 text-white placeholder:text-slate-500 focus:border-indigo-500 focus:ring-indigo-500/20" + /> +
+
+ + setEmail(e.target.value)} + className="mt-1.5 bg-slate-800/50 border-slate-700 text-white placeholder:text-slate-500 focus:border-indigo-500 focus:ring-indigo-500/20" + /> +
+
+ + setPassword(e.target.value)} + className="mt-1.5 bg-slate-800/50 border-slate-700 text-white placeholder:text-slate-500 focus:border-indigo-500 focus:ring-indigo-500/20" + /> +
+
+ + setConfirmPassword(e.target.value)} + className="mt-1.5 bg-slate-800/50 border-slate-700 text-white placeholder:text-slate-500 focus:border-indigo-500 focus:ring-indigo-500/20" + /> +
+ +
+ setTerms(checked === true)} + className="border-slate-600 data-[state=checked]:bg-indigo-600 data-[state=checked]:border-indigo-600 mt-0.5" + /> + +
+ + +
+ +
+ + or +
+ + + +

+ Already have an account?{" "} + Sign in +

+
+
+
+
+ ); +}