🎯

tmdb-codegen

🎯Skill

from qingqishi/shiqingqi.com

VibeIndex|
What it does

Generates selective Zod schemas and TypeScript types for TMDB API endpoints, optimizing performance and enabling AI-powered structured outputs.

tmdb-codegen

Installation

Install skill:
npx skills add https://github.com/qingqishi/shiqingqi.com --skill tmdb-codegen
1
AddedJan 25, 2026

Skill Details

SKILL.md

TMDB API code generation workflow with selective Zod schemas using pnpm codegen:tmdb. Use when working with TMDB endpoints, regenerating types, adding TMDB API functionality, modifying endpoints-config.js, tmdb-server-functions.ts, Zod schemas, or when the user mentions TMDB codegen, endpoints-config, pnpm codegen:tmdb, needsZodSchema, or auto-generated TMDB files.

Overview

# TMDB Code Generation

Overview

This project uses automatic code generation for TMDB API integration with selective Zod schema generation for optimal performance.

Critical Rule

NEVER manually edit src/_generated/tmdb-server-functions.ts - it is auto-generated.

Always use pnpm codegen:tmdb to regenerate after making changes to endpoint configurations.

Architecture

Selective Zod Schema Generation

The project uses a selective approach to Zod schema generation:

  • Performance optimization: 98.7% size reduction (from 16K lines to ~200 lines)
  • On-demand schemas: Only generates Zod schemas for endpoints that need them
  • AI tool compatibility: Schemas are generated for endpoints requiring OpenAI Structured Outputs validation

When Zod Schemas Are Generated

Zod schemas are only generated for endpoints marked with needsZodSchema: true in endpoints-config.js.

Why selective?

  • Most endpoints only need TypeScript types
  • Zod schemas are only required for AI tools using OpenAI Structured Outputs
  • Dramatically improves developer experience (faster builds, smaller bundles, better IDE performance)

Configuration

Endpoint Configuration File

Location: tooling/tmdb-codegen/endpoints-config.js

```js

export const endpoints = [

{

path: "/3/search/movie",

functionName: "searchMovies",

needsZodSchema: true, // βœ… Zod schema generated for AI tools

},

{

path: "/3/movie/{movie_id}",

functionName: "getMovieDetails",

// ❌ No needsZodSchema flag = TypeScript types only

},

];

```

Adding New Endpoints

  1. Add endpoint configuration to endpoints-config.js
  2. Set needsZodSchema: true only if needed for AI tools
  3. Run pnpm codegen:tmdb to regenerate

```js

{

path: "/3/discover/tv",

functionName: "discoverTvShows",

needsZodSchema: false, // Only TS types needed

}

```

Code Generation Commands

```bash

# Full pipeline (TypeScript types + Zod schemas)

pnpm codegen

# Only regenerate TMDB server functions

pnpm codegen:tmdb

# Only regenerate Zod schemas (fast!)

pnpm codegen:zod

```

Generated Files

Auto-Generated (DO NOT EDIT)

  • src/_generated/tmdb-server-functions.ts - Server functions with TypeScript types
  • src/_generated/tmdb-zod-schemas.ts - Selective Zod schemas (only for endpoints with needsZodSchema: true)

These files are git-ignored and must be regenerated after cloning:

```bash

pnpm codegen:tmdb

```

How It Works

1. Custom Generator

Location: tooling/tmdb-codegen/generate-selective-zod.js

  • Reads endpoints-config.js to find endpoints needing Zod schemas
  • Generates hand-crafted Zod schemas (not auto-generated from TypeScript)
  • Applies OpenAI compatibility fixes (.nullable().optional())
  • Outputs minimal, optimized schemas

2. OpenAI Compatibility

Automatically applies fixes for OpenAI Structured Outputs:

```typescript

// Generated schema with OpenAI compatibility

export const movieSchema = z.object({

id: z.number(),

title: z.string().nullable().optional(), // OpenAI-compatible

overview: z.string().nullable().optional(),

});

```

Usage in Code

Importing Server Functions

```typescript

import { searchMovies, getMovieDetails } from "@/utils/tmdb-server-functions";

// Use in server components

const movies = await searchMovies({ query: "Inception" });

```

Importing Zod Schemas (for AI tools)

```typescript

import { movieSearchSchema } from "@/utils/tmdb-zod-schemas";

// Use with OpenAI Structured Outputs

const completion = await openai.chat.completions.create({

model: "gpt-4",

messages: [...],

response_format: zodResponseFormat(movieSearchSchema, "movies"),

});

```

When to Regenerate

Regenerate TMDB code when:

  1. Adding new endpoints - Add to endpoints-config.js, then run pnpm codegen:tmdb
  2. Changing endpoint configuration - Modify endpoints-config.js, then regenerate
  3. After cloning repository - Generated files are git-ignored
  4. Updating TMDB API version - Update base URL, then regenerate

Best Practices

  1. Never edit generated files - Always use pnpm codegen:tmdb
  2. Minimal Zod schemas - Only set needsZodSchema: true when needed for AI tools
  3. Check generation - Verify generated files after running codegen
  4. Commit config changes - endpoints-config.js is version-controlled
  5. Don't commit generated files - They're git-ignored for a reason

Performance Impact

Before Selective Generation

  • 16,000+ lines of Zod schemas
  • Slow builds and IDE performance
  • Large bundle size

After Selective Generation

  • ~200 lines of Zod schemas (98.7% reduction)
  • Fast builds and responsive IDE
  • Minimal bundle impact

Common Workflows

Add New TMDB Endpoint

```bash

# 1. Edit configuration

# Add to tooling/tmdb-codegen/endpoints-config.js

# 2. Regenerate

pnpm codegen:tmdb

# 3. Use in code

import { newFunction } from "@/utils/tmdb-server-functions";

```

Add Zod Schema to Existing Endpoint

```bash

# 1. Edit configuration

# Set needsZodSchema: true in endpoints-config.js

# 2. Regenerate Zod schemas only (fast!)

pnpm codegen:zod

# 3. Use schema

import { newSchema } from "@/utils/tmdb-zod-schemas";

```

Troubleshooting

Generated files missing after clone

```bash

pnpm codegen:tmdb

```

TypeScript errors in generated files

```bash

# Regenerate from scratch

rm -rf src/_generated

pnpm codegen:tmdb

```

Zod schema needed but not generated

Check endpoints-config.js - ensure needsZodSchema: true is set for that endpoint, then regenerate.