new-input
Create a Zod input schema file in src/backend/services/inputs/ for a domain entity
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Create a Zod input schema file in src/backend/services/inputs/ for a domain entity
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Generate a semver-compliant release note from git history; on user confirmation, bump version, update CHANGELOG, create git tag, and publish a GitHub Release with gh
Scaffold a new backend server action with auth check, Zod input validation, repository call, and error handling
Scaffold a typed React client component with props interface, Tailwind styling, and shadcn/ui primitives
Scaffold a React Hook Form with Zod validation, useMutation, and toast notifications
Scaffold a Next.js App Router page with optional server-side session check, metadata, and layout
Scaffold TanStack Query useQuery and/or useMutation hooks for a feature, calling a backend server action
| name | new-input |
| description | Create a Zod input schema file in src/backend/services/inputs/ for a domain entity |
Create a new Zod input schema file for a domain in src/backend/services/inputs/.
src/backend/services/inputs/<domain>.input.tsconst <Domain>Input = { ... } object containing all schemas for the domainparseAsync() — never parse().optional() and .nullable() explicitly where needed.transform() to normalize data (e.g. empty string → null)page: z.number().default(1) and limit: z.number().default(10)z.string()z.enum([...]) matching the domain modelimport { z } from "zod";
export const <Domain>Input = {
// Create
create<Domain>Input: z.object({
field: z.string().min(1),
optional_field: z.string().optional().nullable(),
}),
// Update (always requires an ID)
update<Domain>Input: z.object({
<domain>_id: z.string(),
field: z.string().optional(),
}),
// Paginated list
list<Domain>Input: z.object({
page: z.number().default(1),
limit: z.number().default(10),
}),
// Nested metadata with transform
withMetaInput: z.object({
metadata: z.object({
canonical_url: z
.union([z.string().url(), z.literal(""), z.null()])
.transform((v) => (v === "" ? null : v))
.optional(),
}).optional().nullable(),
}),
};
src/backend/services/inputs/<domain>.input.ts with all schemas.