| name | validation-schemas |
| description | Enforces Head Shakers Zod validation schema conventions when creating or modifying validation schemas. This skill ensures consistent patterns for drizzle-zod integration, custom zod utilities, schema composition, type exports, and form/action integration. |
Validation Schemas Skill
Purpose
This skill enforces the Head Shakers 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 lengthzodMaxString- Optional/required strings with max lengthzodMinString- Required strings with min lengthzodDateString- Date string parsing with nullable optionzodDecimal- Decimal number parsing from stringszodYear- 4-digit year validationzodNullableUUID- Optional UUID with null defaultzodInteger- 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