trpc-scaffolder
Scaffolds tRPC routers, procedures, and Zod schemas with full type safety following DevPrep AI patterns
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
tRPC Scaffolder
Automate creation of type-safe tRPC endpoints with Zod validation.
TL;DR: Run scripts to create routers/schemas, register in _app.ts, validate with scripts.
Auto-Triggers
Auto-triggered by keywords:
- "new endpoint", "create endpoint", "tRPC procedure"
- "new router", "API", "Zod schema"
Quick Standards
File Locations
lib/trpc/routers/
_app.ts # Register all routers here ⚠️
{name}.ts # Router files
lib/trpc/schemas/
{entity}.schema.ts # Zod schemas
Router Pattern
export const nameRouter = router({
doThing: publicProcedure
.input(inputSchema)
.output(outputSchema)
.mutation(async ({ input }) => { /* logic */ }),
});
Schema Pattern
export const inputSchema = z.object({
field: z.string().min(1),
});
export type Input = z.infer<typeof inputSchema>; // ⚠️ Required!
Registration (Required!)
// In _app.ts
export const appRouter = router({
ai: aiRouter,
name: nameRouter, // ⬅️ Add new routers here
});
Run Scripts
Create Router
./.claude/skills/trpc-scaffolder/scripts/create-router.sh user
# Creates: lib/trpc/routers/user.ts
# ⚠️ Remember to register in _app.ts!
Add Procedure
./.claude/skills/trpc-scaffolder/scripts/add-procedure.sh ai getHints query
# Outputs code snippet to add to router
Create Schema
./.claude/skills/trpc-scaffolder/scripts/create-schema.sh hint
# Creates: lib/trpc/schemas/hint.schema.ts
Validate Setup
./.claude/skills/trpc-scaffolder/scripts/validate-trpc.sh
# Checks: router registration, type exports
Quick Reference
Query vs Mutation
| Type | Use For | Method |
|---|---|---|
| Query | Fetch data (GET) | .query(async ({ input }) => ...) |
| Mutation | Modify data (POST/PUT/DELETE) | .mutation(async ({ input }) => ...) |
Common Zod Patterns
| Type | Pattern | Example |
|---|---|---|
| String | z.string().min(1).max(100) |
Name validation |
| Number | z.number().int().min(0).max(10) |
Difficulty 0-10 |
z.string().email() |
Email validation | |
| Optional | z.string().optional() |
Optional field |
| Array | z.array(z.string()).min(1) |
At least 1 item |
| Enum | z.enum(["a", "b", "c"]) |
Fixed choices |
| Object | z.object({ field: z.string() }) |
Nested object |
Naming Conventions
-
Routers:
{domain}Router(e.g.,aiRouter,userRouter) -
Procedures:
camelCase(e.g.,generateQuestions,getHints) -
Schemas:
{action}{Entity}{Input\|Output}Schema -
Files:
{entity}.schema.ts,{domain}.ts
Error Codes
| Code | When | Example |
|---|---|---|
NOT_FOUND |
Resource doesn't exist | User not found |
BAD_REQUEST |
Invalid input | Validation failed |
UNAUTHORIZED |
Not authenticated | Login required |
FORBIDDEN |
Not authorized | Access denied |
INTERNAL_SERVER_ERROR |
Server error | API failure |
Common Fixes
Router Not Registered
// ❌ Forgot this step
// ✅ Add to _app.ts:
import { userRouter } from "./user";
export const appRouter = router({ ai: aiRouter, user: userRouter });
Missing Type Exports
// ❌ Schema without types
export const userSchema = z.object({ name: z.string() });
// ✅ Always export inferred types
export type User = z.infer<typeof userSchema>;
Wrong Procedure Type
// ❌ Using mutation for fetching data
getData: publicProcedure.mutation(...)
// ✅ Use query for GET operations
getData: publicProcedure.query(...)
Schema Validation Error
// ❌ No validation
field: z.string()
// ✅ Add constraints
field: z.string().min(1, "Field is required")
When to Load Additional Docs
SKILL.md is self-sufficient for:
- Creating routers and schemas
- Running scripts
- Fixing common errors
Load additional docs when needed:
| Need | Load |
|---|---|
| Step-by-step tutorial | docs/quick-start-guide.md |
| Advanced Zod patterns | docs/trpc-patterns.md (lines 1-80) |
| Error handling strategies | docs/trpc-patterns.md (lines 150-220) |
| Testing procedures | docs/trpc-patterns.md (lines 220-270) |
| Context & middleware | docs/trpc-patterns.md (lines 80-150) |
Code examples:
- ✅ Perfect:
examples/good-router.ts,examples/good-schema.ts
Full project docs: Docs/api-design.md, Docs/api-transition/trpc-migration.md
Version: 1.0.0 | Updated: October 2025 Pattern: Follows quality-reviewer structure (optimized)
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-28
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!