aboutsummaryrefslogtreecommitdiffstats
path: root/website/src/lib/schemas/profile.ts
diff options
context:
space:
mode:
Diffstat (limited to 'website/src/lib/schemas/profile.ts')
-rw-r--r--website/src/lib/schemas/profile.ts13
1 files changed, 13 insertions, 0 deletions
diff --git a/website/src/lib/schemas/profile.ts b/website/src/lib/schemas/profile.ts
new file mode 100644
index 0000000..7272800
--- /dev/null
+++ b/website/src/lib/schemas/profile.ts
@@ -0,0 +1,13 @@
+import { z } from 'zod';
+
+export const profileSchema = z.object({
+ username: z
+ .string()
+ .min(3, { message: 'Username must be at least 3 characters' })
+ .max(20, { message: 'Username is too long' })
+ .regex(/^[a-zA-Z0-9_]+$/, { message: 'Only letters, numbers, and underscores allowed' }),
+ bio: z.string().max(160, { message: 'Bio must be under 160 characters' }).optional().default(''),
+});
+
+// Automatically generate a TS type from the Zod schema
+export type ProfileSchema = z.infer<typeof profileSchema>;