Tutoriales por semana
Semana 3 · Tu primera función con IA
OpenAI con structured outputs — el modelo devuelve datos ordenados que tu app usa directo.
Esta semana tu producto deja de ser una página bonita y empieza a hacer algo inteligente: una función real que usa IA y muestra el resultado en tu app. La construye Cursor — tú decides qué hace y verificas que funcione.
Qué vas a tener al final
- ✅ Tu API key de OpenAI configurada y funcionando.
- ✅ Una función de tu producto que llama a OpenAI y devuelve datos estructurados (no texto suelto).
- ✅ Ese resultado renderizado en tu app, usable por tu ICP.
- ✅ Noción de cuánto cuesta cada llamada (spoiler: centavos).
Lo que debes tener antes
- Semana 2 completa: login funcionando y base de datos con las tablas subidas (
supabase db push). - Cuenta de OpenAI con saldo cargado ($5–10) — lo hiciste en Semana 0; si no, hazlo ahora en Setup → Cuentas.
Concepto: structured outputs (2 min)
En vez de pedirle al modelo "responde en formato JSON" (y cruzar los dedos), se le da un molde que describe exactamente qué campos debe traer la respuesta, y la API garantiza que lo cumple. El modelo deja de ser una caja negra que devuelve texto: se vuelve una función confiable de tu producto.
Así se ve por dentro — no lo escribes tú, lo escribe Cursor — pero conviene que lo reconozcas:
import { z } from "zod"
import { generateObject } from "@/lib/openai/structured"
const schema = z.object({
resumen: z.string(),
puntos_clave: z.array(z.string()),
sentimiento: z.enum(["positivo", "neutral", "negativo"]),
})
const resultado = await generateObject(schema, "Analiza este review: ...")
// resultado.sentimiento === "positivo" ← garantizado, siempre viene(Zod es la librería que define el molde; generateObject es un helper que ya viene en el boilerplate, en web/lib/openai/. Cómo funciona por dentro: Features → IA con OpenAI.)
Paso 1 · Consigue tu API key de OpenAI
El paso a paso vive en la guía dedicada. Ahí vas a:
- Entrar a tu cuenta de OpenAI (la creaste con saldo en Semana 0).
- Crear tu API key y copiarla al momento (solo se muestra una vez).
- Pegarla en
web/.env.localy reiniciaryarn dev. - Ponerle un límite de gasto mensual para dormir tranquilo.
→ Sigue OpenAI paso a paso (API key) (~10 min; la guía incluye los errores típicos 401 / quota / billing).
Regresa aquí cuando yarn dev reinicie sin errores con la key puesta.
web/.env.local tiene tu OPENAI_API_KEY y reiniciaste yarn dev sin errores en la terminal.
Paso 2 · Decide qué hará tu primera función IA
La regla: que le sirva a tu ICP, no que sea impresionante. Ejemplos del calibre correcto:
- Un CRM inmobiliario → "analiza este mensaje de un lead y devuelve: intención de compra (alta/media/baja), presupuesto detectado y respuesta sugerida".
- Una app de nutrición → "a partir de esta lista de ingredientes devuelve: calorías estimadas, macros y 2 sugerencias de mejora".
- Un marketplace de servicios → "resume esta solicitud de cliente en: categoría, urgencia y precio estimado".
¿No se te ocurre? Pídeselo a la IA con tu ficha:
Mi producto: {describe tu producto en 1 frase}. Mi ICP: {tu cliente ideal}.
Proponme 3 funciones con IA que pueda construir esta semana, donde la IA reciba un texto del usuario y devuelva datos estructurados (campos concretos, no texto libre). Para cada una dime: qué recibe, qué campos devuelve y por qué le sirve a mi ICP. Ordénalas de más a menos valiosa.Paso 3 · Deja que Cursor la construya
Con la función elegida, este es el prompt. Rellena las llaves:
Construye mi primera feature con IA en este proyecto VibeFast (Next.js, la app vive en web/):La función: recibe {qué escribe o sube el usuario} y devuelve {lista los campos exactos que quieres de vuelta, ej: categoría, urgencia (alta/media/baja), respuesta_sugerida}.Requisitos:
Usa el helper generateObject de web/lib/openai/structured con un schema Zod de esos campos.
La llamada a OpenAI va en el backend (nunca en el navegador) — elige tú el lugar correcto.
Crea una página o sección en la app donde yo pegue el texto de entrada, con un botón, y el resultado se muestre bonito (usa los componentes de UI que ya trae el proyecto).
Usa gpt-4o-mini como modelo.
Al final dime qué archivos creaste y en qué URL pruebo la función.
Si Cursor se equivoca, no arregles tú el código
Descríbele el problema: pega el error exacto o describe lo que ves ("el botón no hace nada", "sale undefined en el resultado"). Iterar con la IA es el flujo de trabajo, no un fracaso.
Paso 4 · Pruébala
Abre la URL que te dijo Cursor y usa la función con un caso real de tu producto.
✅ Escribes una entrada real y el resultado aparece en pantalla con todos los campos de tu molde.
✅ Lo intentas con una entrada rara (texto vacío, algo fuera de tema) y la app no se rompe.
✅ En platform.openai.com/usage ves las llamadas registradas — cada una debería costar fracciones de centavo con gpt-4o-mini.
Por qué gpt-4o-mini
Es el modelo barato y rápido de OpenAI: perfecto para funciones de producto. Los $5 que cargaste alcanzan para miles de llamadas. Sube de modelo solo cuando una función lo justifique.
Entregable de la semana
Demo de tu función con IA: un video corto (1–2 min) o tu URL mostrando la entrada, el click y el resultado estructurado en pantalla. Mándalo al docente con 1 frase de por qué esta función le sirve a tu ICP.
Si te sobra tiempo
- Chat con streaming: pídele a Cursor que active
features.aiChatenweb/config.jsy prueba la pantalla de chat que trae el boilerplate (/chat). - Segunda función: la runner-up de tu lista del Paso 2 — ahora te va a tomar la mitad del tiempo.
- Guarda los resultados: pídele a Cursor que persista cada análisis en la tabla
ai_conversationsde Supabase, y míralos aparecer en el Table Editor.