Generating TMDB Code
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.
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 2
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: Generating TMDB Code
description: 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.
---
# 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.