← back to Designer Portfolio Pages

src/schemas.ts

30 lines

import { z } from "zod";

export const ContactSchema = z.object({
  name: z.string().min(1).max(120),
  business: z.string().max(160).optional().or(z.literal("")),
  email: z.string().email(),
  phone: z.string().max(40).optional().or(z.literal("")),
  website: z.string().max(200).optional().or(z.literal(""))
});

export const PatternSnapshotSchema = z.object({
  id: z.string().min(1).max(80),
  name: z.string().min(1).max(200),
  imageUrl: z.string().url(),
  productUrl: z.string().url().optional(),
  tags: z.array(z.string().max(40)).default([])
});

export type PatternSnapshot = z.infer<typeof PatternSnapshotSchema>;

export const CreatePortfolioSchema = z.object({
  title: z.string().max(160).optional().or(z.literal("")),
  contact: ContactSchema,
  password: z.string().max(200).optional().or(z.literal("")),
  patternIds: z.array(z.string().min(1)).min(1).max(80),
  generateAiIntro: z.boolean().optional().default(false)
});

export type CreatePortfolioInput = z.infer<typeof CreatePortfolioSchema>;