Prompt para Construir un Directorio de Herramientas de IA con Next.js
Prompt para agente de IA para construir un directorio de herramientas de IA en Next.js con archivos de datos MDX, filtros de categoría y generación estática.
CursorClaude CodeCodexWindsurf Next.jsTypeScriptTailwind
Proporciona este prompt a tu agente para construir un directorio de herramientas de IA generado estáticamente y optimizado para SEO, con filtrado por categoría, búsqueda del lado del cliente y una página de detalle por herramienta — sin necesidad de recurrir a una base de datos cuando los archivos MDX planos son suficientes.
Prompt Principal
You are building a new Next.js 15 App Router project using TypeScript and Tailwind CSS v4.
Task: build an AI tool directory site.
Data model — each tool is a `.mdx` file in `src/data/tools/` with this frontmatter: name, slug, tagline, description, category, website, pricing ('free'|'freemium'|'paid'), tags (string[]), logo (relative path to public/).
Requirements:- `src/lib/tools.ts`: read all MDX files at build time using `fs` + `gray-matter`; export `getAllTools()` returning `Tool[]` and `getToolBySlug(slug)` returning `Tool | undefined`.- `src/app/page.tsx`: static page showing a grid of `<ToolCard>` components. - A `<CategoryFilter>` client component that filters by category using URL search params (`?category=writing`). Use `useSearchParams` — no external state library. - A `<SearchBar>` client component that does client-side substring match on name and tagline using `useSearchParams` (`?q=cursor`).- `src/app/tools/[slug]/page.tsx`: static detail page with `generateStaticParams` and `generateMetadata`. Include og:title, og:description, og:image (the tool logo).- `src/app/categories/[category]/page.tsx`: static list filtered by category.- Seed data: create 5 real AI coding tools as MDX files (Cursor, GitHub Copilot, Claude Code, Codeium, Tabnine) with accurate free/paid info.- Do NOT use a database, Contentlayer, or next-mdx-remote. Use `gray-matter` + `fs` only.
Stop and list all planned files before writing code.Notas de Implementación
getAllTools()debe ejecutarse solo del lado del servidor; llamarlo en un Componente Cliente expondráfsal navegador y romperá la compilación. Pasa los datos como props a los componentes cliente.generateStaticParamspara[slug]debe llamar agetAllTools()y mapear a objetos{ slug }.- Para las páginas de categorías, deriva la lista de categorías de los datos de las herramientas en lugar de codificarla.
Cambios de Archivos Esperados
src/lib/tools.ts (new)src/app/page.tsx (new)src/app/tools/[slug]/page.tsx (new)src/app/categories/[category]/page.tsx (new)src/components/ToolCard.tsx (new)src/components/CategoryFilter.tsx (new — Client)src/components/SearchBar.tsx (new — Client)src/data/tools/cursor.mdx (new)src/data/tools/github-copilot.mdx (new)src/data/tools/claude-code.mdx (new)src/data/tools/codeium.mdx (new)src/data/tools/tabnine.mdx (new)Criterios de Aceptación
bun run buildtermina con código 0 y genera una página estática para cada slug de herramienta.- Hacer clic en un filtro de categoría actualiza la URL y filtra la cuadrícula sin recargar completamente.
- Cada página de detalle de herramienta tiene
og:titleyog:descriptionúnicos en el<head>de HTML. - Buscar “cursor” muestra solo la tarjeta de Cursor.
Comandos de Prueba
bun run typecheckbun run buildbun run startcurl -s http://localhost:3000/tools/cursor | grep 'og:title'# navigate to /?category=writing and confirm filterErrores Comunes de la IA
- Llamar a
getAllTools()dentro de un Componente Cliente, rompiendo la compilación con un error del módulofs. - Olvidar
generateStaticParamsen la página[slug], causando errores 404 en la exportación estática. - Usar
next-mdx-remotecuando el prompt lo prohíbe explícitamente. - Codificar la lista de categorías en lugar de derivarla de los datos de las herramientas.
Prompt de Corrección
The build fails because `fs` is used in a client component, or static pages are not generated.Fix in order:1. Move `getAllTools()` to a Server Component and pass the `tools` array as a prop to `CategoryFilter` and `SearchBar`.2. Add `export async function generateStaticParams()` to `src/app/tools/[slug]/page.tsx`.3. Confirm `gray-matter` is installed: `bun add gray-matter`.Show only the corrected diff.