import type { MetaFunction } from "@remix-run/node" import { Link } from "@remix-run/react" import { Button } from "~/components/ui/button" import logoPng from "~/images/lume-logo.png?url" import lumeColorLogoPng from "~/images/lume-color-logo.png?url" import discordLogoPng from "~/images/discord-logo.png?url" import lumeBgPng from "~/images/lume-bg-image.png?url" import { Field, FieldCheckbox } from "~/components/forms" import { getFormProps, useForm } from "@conform-to/react" import { z } from "zod" import { getZodConstraint, parseWithZod } from "@conform-to/zod" export const meta: MetaFunction = () => { return [{ title: "Sign Up" }] } const SignUpSchema = z .object({ email: z.string().email(), password: z .string() .min(8, { message: "Password must be at least 8 characters" }), confirmPassword: z .string() .min(8, { message: "Password must be at least 8 characters" }), termsOfService: z.boolean({ required_error: "You must agree to the terms of service" }) }) .superRefine((data, ctx) => { if (data.password !== data.confirmPassword) { return ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["confirmPassword"], message: "Passwords do not match" }) } return true }) export default function SignUp() { const [form, fields] = useForm({ id: "sign-up", constraint: getZodConstraint(SignUpSchema), onValidate({ formData }) { return parseWithZod(formData, { schema: SignUpSchema }) } }) return (
Lume logo

All roads lead to Lume

🤘 Get 50 GB free storage and download for free,{" "} forever .{" "}

I agree to the Terms of Service and Privacy Policy ) }} errors={fields.termsOfService.errors} />

Already have an account?{" "} Login here instead →

Lume background
) }