Validation Schemas Skill
Purpose
This skill enforces the project Zod validation schema conventions automatically during schema development. It ensures consistent patterns for:
- •Drizzle-zod schema generation from database tables
- •Custom zod utility functions for common patterns
- •Schema composition and extension for actions
- •Type exports for both input and output types
- •Form integration with TanStack Form
- •Server action validation patterns
Activation
This skill activates when:
- •Creating new validation files in
src/lib/validations/ - •Modifying existing validation schemas
- •Working with drizzle-zod schema generation
- •Defining input/output types for server actions
- •Creating form validators for TanStack Form
- •Working with zod utility functions in
src/lib/utils/zod.utils.ts
Workflow
- •Detect validation work (file path contains
validations/or imports fromzodordrizzle-zod) - •Load
references/Validation-Schemas-Conventions.md - •Generate/modify code following all conventions
- •Use custom zod utilities (
zodMinMaxString,zodMaxString, etc.) instead of raw zod chains - •Export both input types (
z.input) and output types (z.infer) for form schemas - •Scan for violations of schema patterns
- •Auto-fix all violations (no permission needed)
- •Report fixes applied
Key Patterns
Schema Generation
- •Use
createSelectSchemaandcreateInsertSchemafrom drizzle-zod - •Apply custom zod utilities for field validation (not raw zod chains)
- •Omit auto-generated fields (id, createdAt, updatedAt, userId)
- •Create public schemas by omitting sensitive fields
Custom Zod Utilities
Use utilities from @/lib/utils/zod.utils:
- •
zodMinMaxString- Required strings with min/max length - •
zodMaxString- Optional/required strings with max length - •
zodMinString- Required strings with min length - •
zodDateString- Date string parsing with nullable option - •
zodDecimal- Decimal number parsing from strings - •
zodYear- 4-digit year validation - •
zodNullableUUID- Optional UUID with null default - •
zodInteger- Integer parsing from strings
Type Exports
- •Export
z.infer<typeof schema>for output types (after transforms) - •Export
z.input<typeof schema>for input types (before transforms, for forms) - •Use naming:
Insert{Entity},Select{Entity},Update{Entity},Public{Entity} - •Use naming:
Insert{Entity}Input,Update{Entity}Inputfor form input types
Form Integration
- •Schemas work with TanStack Form via
validators: { onSubmit: schema } - •Input types match form field values before zod transforms
- •Output types match validated data after transforms
Action Integration
- •Actions use
schema.parse(ctx.sanitizedInput)for validation - •Extend base schemas with
.extend()for action-specific fields - •Use
z.uuid()for ID parameters in action schemas
References
- •
references/Validation-Schemas-Conventions.md- Complete validation schema conventions