Introducción

Esta guía proporciona una serie de técnicas y consejos para utilizar Cursor de manera efectiva, maximizando la productividad y la calidad del código generado con IA a través de cursor.

Antes de comenzar, asegúrate de tener instalado Cursor y configurado tu entorno de desarrollo. Es recomendable establecer ciertas reglas básicas en el archivo .cursorrules para unificar el estilo del código.

Consejo del instructor

Durante el workshop, puedes usar esta guía como referencia para mostrar ejemplos prácticos de cada técnica. Recuerda que la práctica es fundamental: invita a los participantes a probar cada técnica en tiempo real.

1. Configuración Inicial

La base de una buena experiencia con Cursor es una configuración adecuada del archivo .cursorrules.

Crear archivo .cursorrules

Este archivo debe incluir toda la información esencial para que Cursor entienda el contexto del proyecto.

Ejemplo de .cursorrules
          
# Project Overview
Vector es una aplicación de productividad impulsada por IA que ayuda a los usuarios a gestionar tareas y notas. La aplicación ofrece una experiencia sin fricciones con agentes de IA trabajando en segundo plano.

# Personality
Actúa como un desarrollador senior con 15+ años de experiencia en desarrollo web. Prioriza la simplicidad y la eficiencia. Explica tu razonamiento de forma clara y concisa.

# Tech Stack
- Frontend: Next.js 14, React, Tailwind CSS
- Backend: Node.js, Express, FastAPI (Python)
- Database: Supabase (PostgreSQL)
- Authentication: Auth0
- Hosting: Vercel

# Processes
## Error Fixing Process
1. Explica el error en términos simples
2. Identifica la causa raíz
3. Propón una solución mínima y limpia
4. Verifica que la solución no introduce otros problemas

## Code Review Process
1. Verifica la funcionalidad
2. Evalúa la legibilidad y mantenibilidad
3. Sugiere optimizaciones si son necesarias
4. Asegúrate de que sigue las mejores prácticas

# Environment Variables
- DATABASE_URL: URL de conexión a Supabase
- AUTH0_SECRET: Clave secreta para Auth0
- AUTH0_BASE_URL: URL base para Auth0
- AUTH0_ISSUER_BASE_URL: URL base del emisor Auth0
- AUTH0_CLIENT_ID: ID de cliente de Auth0
- AUTH0_CLIENT_SECRET: Secreto de cliente de Auth0
- ANTHROPIC_API_KEY: Clave API para Claude

# Current File Structure
project/
├── src/
│   ├── app/
│   │   ├── api/
│   │   │   └── tasks/
│   │   │       └── route.js
│   │   ├── dashboard/
│   │   │   └── page.jsx
│   │   ├── tasks/
│   │   │   └── page.jsx
│   │   └── layout.jsx
│   ├── components/
│   │   ├── TaskItem.jsx
│   │   ├── TaskList.jsx
│   │   └── Sidebar.jsx
│   ├── lib/
│   │   ├── db.js
│   │   └── utils.js
│   └── styles/
│       └── globals.css
├── public/
├── .env
└── package.json

# Most Important Instructions
- Escribe código limpio y mantenible
- No elimines comentarios existentes
- Añade comentarios para explicar lógica compleja
- Piensa como un desarrollador senior
- Prioriza la experiencia de usuario

# Other Context
El proyecto está en fase MVP, priorizando funcionalidad sobre características avanzadas.

# Comments
Asegúrate de que cada función tenga un comentario que explique su propósito, parámetros y valor de retorno. Documenta cualquier decisión de diseño no obvia.

Configurar .cursorignore

Este archivo especifica qué archivos o patrones debe ignorar Cursor, especialmente útil para evitar la sobrescritura de variables de entorno.

Ejemplo de .cursorignore
   .env
.env.local
node_modules/
.next/
dist/
build/
*.log
Consejo para el workshop

Pide a los participantes que creen su propio archivo .cursorrules para un proyecto ficticio o real. Revisa algunos ejemplos en grupo y discute las ventajas de cada enfoque.

2. Selección de Modelos IA

La elección del modelo correcto puede hacer una gran diferencia en la calidad y precisión de las respuestas.

Modelos recomendados

  • Claude 3.5 Sonnet (1022) - Modelo principal para la mayoría de tareas
  • Gemini Pro/Flash - Buenos para situaciones específicas o cuando Sonnet se atasca
  • GPT-4o - Alternativa cuando las APIs de Anthropic tienen problemas
  • Claude para razonamiento - Modelos o1 y o1 mini para tareas de razonamiento complejas
Configuración de modelos en Cursor

En Configuración > Modelos:

  • ✓ Claude 3.5 Sonnet (20241022)
  • ✓ Gemini Pro
  • ✓ Gemini Flash
  • ✓ GPT-4o
  • ✓ Claude 3 Opus
  • ✓ Claude 3 Sonnet (reasoning)
  • ✓ Claude 3 Sonnet mini (reasoning)
Estrategia

Usa principalmente Claude 3.5 Sonnet, pero si te atascas con un problema específico, prueba a cambiar a otro modelo. Diferentes modelos tienen fortalezas distintas.

3. Técnicas de Prompting Efectivas

Dominar el arte del prompting es clave para obtener los mejores resultados de cualquier modelo de IA.

La forma en que se formulan las instrucciones (prompts) a Cursor tiene un gran impacto en los resultados. Algunas técnicas efectivas incluyen:

  • Start reasoning with uncertainty: Comienza tus prompts expresando la necesidad de razonar *antes* de llegar a una solución. Ejemplo: "Let's think step by step about how to..."
  • Ser específico: Cuanto más detallado sea el prompt, mejor. Incluye ejemplos del formato de salida deseado.
  • Dividir tareas complejas: En lugar de pedir una solución completa de una vez, divide el problema en subtareas más pequeñas.
  • Usar "few-shot learning": Proporciona algunos ejemplos de entrada y salida para guiar al modelo.

Ejemplos de Prompts:

"The fewer lines of code, the better"
   Necesito una función que valide direcciones de email. Por favor, mantenla simple y eficiente. The fewer lines of code, the better.

Este prompt evita que el modelo intente impresionarte con código innecesariamente complejo.

"Proceed like a senior developer"
   Tengo un problema con mi sistema de autenticación en Next.js. Los tokens no se están renovando correctamente. Proceed like a senior developer para diagnosticar y resolver este problema.

Mejora la calidad del código y el enfoque de resolución de problemas.

"Do not stop working until you've implemented this feature fully"
   Necesito implementar un componente de calendario que permita a los usuarios programar tareas. Debe incluir vista mensual, semanal y diaria, y permitir arrastrar y soltar eventos. Do not stop working until you've implemented this feature fully and completely.

Reduce la "pereza" del modelo y evita que deje implementaciones a medias.

"Start by writing three reasoning paragraphs"
   Hay un error en este componente React. Cuando intentamos actualizar el estado, la aplicación se bloquea con el error "Cannot read properties of undefined (reading 'map')". Start by writing three reasoning paragraphs analyzing what the error might be. Do not jump to conclusions.

Fuerza al modelo a analizar el problema a fondo antes de proponer soluciones.

"Answer in short"
   ¿Cuáles son las mejores prácticas para implementar el manejo de estado en una aplicación React grande? Answer in short.

Obtiene respuestas concisas cuando no necesitas explicaciones detalladas.

"Do not delete comments"
   Refactoriza esta función para mejorar su rendimiento. Do not delete comments.

Evita que el modelo elimine la documentación importante del código.

"Summary of current state"
   Before we proceed, I need you to give me a summary of the current state of our task management implementation. What files we've modified, what funcionalidades have been implemented, and what issues remain pending. Describe as if you were a senior developer briefing another programmer who's just joined the project.

Útil cuando necesitas transferir contexto entre sesiones del compositor.

"Unbiased 50/50"
   Estoy considerando dos enfoques para la arquitectura de datos de mi aplicación:
1. Usar GraphQL para todas las consultas de datos
2. Utilizar REST API con endpoints específicos

Before you answer, I want you to write two detailed paragraphs, one arguing for each of these Solutions. Do not jump to conclusions. Seriously consider both approaches. Then after you finish, tell me which one of these solutions is obviously better for a small-to-medium app con ~5000 usuarios and why.

Obtiene un análisis equilibrado cuando estás decidiendo entre alternativas.

"Properly formed search query"
   Your task is to write a one paragraph search query as if you were telling a human researcher what to find, including all the relevant context. Format the paragraph as clear instructions commanding a researcher to find what we're looking for. Ask for code snippets or technical details when relevant.

Necesito entender cómo implementar correctamente la autenticación JWT en una aplicación Next.js 14 con App Router y cómo manejar la renovación de tokens.

Optimiza búsquedas web en Perplexity o ChatGPT.

"Start reasoning with uncertainty"
   Analiza por qué este componente React podría estar causando re-renders innecesarios. You should start the reasoning paragraph with lots of uncertainty and slowly gain confidence as you think about the item more.

Mejora el proceso de razonamiento de los modelos, evitando conclusiones prematuras.

4. Estructura de Prompts para Desarrollo

Una estructura consistente en tus prompts mejora significativamente la calidad de las respuestas.

Esquema recomendado:

  1. Explicar objetivo (2-4 oraciones)
  2. Etiquetar archivos relevantes
  3. Especificar cómo ejecutar e instrucciones específicas
  4. Incluir dump de contexto (documentación, etc.)
  5. Usar delimitadores para separar secciones
  6. Repetir instrucción principal
  7. Especificar formato de salida deseado
Ejemplo de prompt estructurado
   Quiero crear un sistema de notificaciones en tiempo real para mi aplicación web.

Archivos relevantes:
- src/components/Notification.jsx
- src/lib/notificationService.js
- src/context/NotificationContext.jsx

Quiero usar WebSockets para las notificaciones en tiempo real y mostrar un toast cuando llegue una nueva notificación. Las notificaciones deben agruparse si hay muchas y permitir al usuario marcarlas como leídas.

Contexto adicional:
- Estamos usando Socket.io en el backend
- Las notificaciones se almacenan en Supabase
- Cada notificación tiene: id, userId, message, type, createdAt, read

---

Necesito que implementes primero el servicio de notificaciones, luego el contexto, y finalmente el componente que mostrará las notificaciones. Piensa como un desarrollador senior y asegúrate de manejar los casos extremos. El código debe ser limpio y bien comentado.
Consejo para el workshop

Proporciona un problema de código y pide a los participantes que creen un prompt estructurado siguiendo este esquema. Compara los resultados y discute las diferencias.

5. Documentación Especializada

Crear archivos markdown específicos para documentar componentes clave del proyecto mejora significativamente el contexto disponible para Cursor.

Ejemplo: Database Structure - Supabase.md
   # Database Structure - Supabase.md

## Tables

### users
- id: uuid (primary key, generated by auth)
- email: text (unique, not null)
- name: text
- avatar_url: text
- created_at: timestamp with time zone (default: now())

### tasks
- id: uuid (primary key)
- title: text (not null)
- description: text
- due_date: timestamp with time zone
- priority: integer (1-3, default: 2)
- status: text (default: 'pending')
- user_id: uuid (foreign key to users.id)
- created_at: timestamp with time zone (default: now())
- updated_at: timestamp with time zone (default: now())

### notes
- id: uuid (primary key)
- content: text (not null)
- user_id: uuid (foreign key to users.id)
- task_id: uuid (foreign key to tasks.id, nullable)
- created_at: timestamp with time zone (default: now())
- updated_at: timestamp with time zone (default: now())

## RLS Policies

### users
- SELECT: authenticated user can only view their own record
- UPDATE: authenticated user can only update their own record

### tasks
- SELECT: authenticated user can only view their own tasks
- INSERT: authenticated user can only create tasks for themselves
- UPDATE: authenticated user can only update their own tasks
- DELETE: authenticated user can only delete their own tasks

### notes
- SELECT: authenticated user can only view their own notes
- INSERT: authenticated user can only create notes for themselves
- UPDATE: authenticated user can only update their own notes
- DELETE: authenticated user can only delete their own notes

## Indices
- tasks(user_id)
- tasks(due_date)
- notes(user_id)
- notes(task_id)

## Functions
- function_update_timestamp(): Actualiza el campo updated_at automáticamente

## Triggers
- update_tasks_timestamp: Actualiza tasks.updated_at cuando se modifica
- update_notes_timestamp: Actualiza notes.updated_at cuando se modifica

Otros ejemplos de archivos de documentación especializada:

  • DesignPrinciples.md - Guías de diseño y UX
  • APIEndpoints.md - Documentación de endpoints
  • Authentication.md - Flujo de autenticación

Para utilizar estos archivos, simplemente etiquétalos en tus prompts:

   Necesito actualizar el modelo de datos para añadir una nueva entidad "Proyectos".

Archivos relevantes:
- src/lib/db.js
- Database Structure - Supabase.md

6. Hablar vs. Escribir

Usar herramientas de dictado puede aumentar dramáticamente tu velocidad de comunicación con Cursor.

Comparación

Escribiendo (lento):

   Necesito crear un componente para mostrar un gráfico de líneas que visualice el progreso del usuario en completar tareas durante la semana. Debe usar la biblioteca recharts, mostrar los días de la semana en el eje X y el número de tareas completadas en el eje Y. Necesita ser responsivo y mostrar tooltips cuando el usuario pasa el cursor sobre los puntos de datos. Los colores deben coincidir con nuestro tema de la aplicación.

Hablando (rápido) con Whisper Flow:

   Necesitamos un componente de gráfico de progreso para el dashboard. Usamos recharts para esto. En el eje X ponemos los días de la semana, lunes a domingo. En el eje Y el número de tareas completadas cada día. Hay que hacer que sea responsivo, así que debe ajustarse bien tanto en móvil como en escritorio. Quiero tooltips cuando el usuario haga hover sobre los puntos de datos, mostrando el día exacto y número de tareas. Los colores deben seguir nuestra paleta principal: azul primario para la línea principal, verde para tareas completadas si añadimos esa métrica después. Necesitamos manejar el caso de que no haya datos también, mostrando un mensaje amigable. Y añade una leyenda en la parte inferior.
Herramienta recomendada

Whisper Flow es una herramienta gratuita que permite hablar tus prompts. La velocidad del habla (≈250 palabras/min) supera significativamente la velocidad de escritura promedio (≈120 palabras/min).

Consejo para el workshop

Realiza una demostración en vivo de Whisper Flow y pide a los participantes que comparen la experiencia de escribir vs. hablar un prompt complejo.

7. Comentarios en el Código

Los comentarios son cruciales cuando se trabaja con IA, proporcionando contexto que mejora la comprensión del código.

Ejemplo de código bien comentado
   /**
 * TaskPriorityManager - Gestiona la priorización automática de tareas
 * 
 * Este componente analiza las fechas de vencimiento, dependencias entre tareas
 * y patrones históricos del usuario para sugerir prioridades.
 * 
 * @param {Array} tasks - Lista de tareas a priorizar
 * @param {Object} userPreferences - Preferencias del usuario para la priorización
 * @returns {Array} - Lista de tareas con prioridades sugeridas
 */
function TaskPriorityManager({ tasks, userPreferences }) {
  // Ordenamos primero por fecha de vencimiento (las más próximas primero)
  // Esto establece una base inicial para la priorización
  const sortedByDueDate = [...tasks].sort((a, b) => {
    if (!a.dueDate) return 1;  // Sin fecha de vencimiento = baja prioridad
    if (!b.dueDate) return -1; // Sin fecha de vencimiento = baja prioridad
    return new Date(a.dueDate) - new Date(b.dueDate);
  });
  
  // Aplicamos factores de ajuste basados en preferencias del usuario
  // Por ejemplo, algunos usuarios priorizan tareas profesionales sobre personales
  const withUserPreferences = sortedByDueDate.map(task => {
    let priorityScore = getBasePriorityScore(task);
    
    // Ajustamos según categoría (trabajo, personal, etc.)
    if (userPreferences.categoryWeights[task.category]) {
      priorityScore *= userPreferences.categoryWeights[task.category];
    }
    
    // Ajustamos según historial de completado del usuario
    // Las tareas similares a las que el usuario suele completar rápido reciben boost
    const completionFactor = getHistoricalCompletionFactor(task, userPreferences);
    priorityScore *= completionFactor;
    
    return {
      ...task,
      suggestedPriority: calculateFinalPriority(priorityScore)
    };
  });
  
  // Ordenamos por puntuación final de prioridad
  return withUserPreferences.sort((a, b) => b.suggestedPriority - a.suggestedPriority);
}
}

Mejores prácticas:

  • Meta: 1 línea de comentario por cada 3-4 líneas de código
  • Documentar el "por qué" más que el "qué"
  • Explicar decisiones no obvias
  • Añadir JSDoc/docstrings para funciones
  • Mantener comentarios actualizados
Prompt para mejorar comentarios
   Revisa este código y añade comentarios detallados. Explica tu pensamiento en los comentarios, asegurándote de documentar todas las partes no obvias. Usa JSDoc para las funciones.
Importante

Los comentarios son cada vez más importantes a medida que la IA se encarga de más código. El futuro será etiquetar archivos y proporcionar contexto, y los comentarios serán la forma principal en que los humanos comuniquen la intención a los modelos.

8. Evitar Deuda Técnica

Es tentador dejar que la IA haga todo el trabajo, pero entender el código es esencial para evitar problemas a largo plazo.

Mal enfoque (acumulando deuda técnica)
   Implementa un sistema completo de autenticación con OAuth, manejo de tokens, renovación automática, autenticación de dos factores y sistema de permisos basado en roles. Usa la biblioteca más avanzada disponible.
Buen enfoque (implementación progresiva)
   Primero, implementemos la autenticación básica con email y contraseña usando Auth0. Quiero entender completamente cómo funciona antes de avanzar.

Una vez que tengamos eso funcionando, probado y documentado, podemos ver si necesitamos añadir OAuth para login social.
La trampa de la deuda técnica

Tu capacidad para aprovechar la IA está limitada por tu nivel de comprensión. Si permites que la IA implemente funcionalidades que no entiendes, eventualmente te encontrarás con problemas que no podrás resolver.

Para el workshop

Discute experiencias reales de acumulación de deuda técnica y cómo reconocer las señales de advertencia. Desarrolla un "radar interno" para detectar cuándo estás avanzando demasiado rápido sin entender el código.

9. Claude vs. Cursor

Utilizar diferentes herramientas para diferentes propósitos puede optimizar tu flujo de trabajo.

En Claude (como consultor)
   Estoy diseñando un sistema de recomendación para mi aplicación de productividad. Los usuarios tienen tareas con diferentes etiquetas, prioridades y fechas. ¿Cuál sería la mejor estrategia para recomendar qué tareas deberían completar primero? ¿Debería usar un enfoque basado en reglas o implementar un algoritmo de aprendizaje automático simple?
En Cursor (para implementación)
   Implementa un sistema de recomendación basado en reglas para ordenar las tareas según:
1. Fecha de vencimiento (más cercana primero)
2. Prioridad establecida por el usuario
3. Dependencias entre tareas

Archivos relevantes:
- src/lib/taskPrioritization.js
- src/components/TaskRecommendations.jsx

Estrategia recomendada:

  • Claude: Para consultoría, brainstorming, decisiones estratégicas y planificación
  • Cursor: Para implementación de código, debugging y cambios específicos
Beneficio

Esta separación ayuda a mantener sesiones de Cursor más enfocadas y evita que el contexto se sobrecargue. Claude puede mantenerse libre de la influencia directa del código y ofrecer una perspectiva más "limpia".

10. Nombrar Archivos Correctamente

Incluir la ruta completa al principio de los archivos ayuda a la IA a entender la estructura del proyecto.

Ejemplo
   // src/app/dashboard/components/TaskMetrics.jsx
import React from 'react';
import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts';

// Este componente muestra métricas de tareas completadas por categoría
// Se utiliza en el dashboard principal para dar una visión general del progreso
export default function TaskMetrics({ taskData }) {
  // ...
}
¿Por qué es importante?

Cursor puede "ver" la estructura de archivos, pero cuando copias código a Claude u otra herramienta, esta información se pierde. Incluir la ruta en un comentario al principio del archivo mantiene este contexto crucial.

Esta práctica es especialmente útil cuando:

  • Tienes múltiples archivos con nombres similares (como page.jsx)
  • Utilizas Claude u otros modelos fuera de Cursor
  • Necesitas que la IA entienda relaciones entre archivos

11. Compositor vs. Chat

Cursor ofrece diferentes interfaces para diferentes tipos de interacciones.

En Chat (pregunta informativa)
   ¿Cuáles son las mejores prácticas para manejar la caché en Next.js 14 con el App Router?
En Compositor (cambio de código)
   Necesito implementar un sistema de caché eficiente para mis llamadas a la API en Next.js 14.

Archivos relevantes:
- src/lib/api.js
- src/app/api/tasks/route.js

Por favor, implementa un sistema que:
1. Cache las respuestas por un tiempo configurable
2. Permita invalidar la caché manualmente
3. Respete los encabezados de caché del servidor

Reglas generales:

  • Chat: Para preguntas, consultas, información
  • Compositor: Para cambios de código y ediciones
  • Modo Agente: Para cambios complejos que involucran múltiples archivos o comandos de terminal
¿Cuándo crear un nuevo compositor?

Crea un nuevo compositor cuando notes comportamientos extraños o cuando el modelo comience a olvidar información clave. Esto indica que el contexto está sobrecargado. Usa el prompt "Summary of current state" para transferir información importante al nuevo compositor.

12. Uso de Búsqueda Web

Integrar búsquedas web puede mejorar significativamente la precisión de las respuestas, especialmente para información actualizada.

Prompt para búsqueda optimizada
   Your task is to write a one paragraph search query as if you were telling a human researcher what to find, including all the relevant context. Format the paragraph as clear instructions commanding a researcher to find what we're looking for. Ask for code snippets or technical details when relevant.

Investiga las últimas mejores prácticas (a partir de 2024) para optimizar el rendimiento de aplicaciones Next.js 14 con App Router. Busca específicamente técnicas de Server Components vs. Client Components, estrategias de prefetching, y optimización de imágenes. Necesito ejemplos de código y patrones recomendados por la documentación oficial o expertos reconocidos.

Proceso recomendado:

  1. Usa el prompt anterior para formular una consulta clara
  2. Copia la consulta generada a Perplexity y/o ChatGPT
  3. Copia las respuestas de vuelta a Cursor
  4. Pide a Cursor un resumen usando este prompt adicional:
Prompt para resumir resultados
   Dame el TLDR de los resultados de búsqueda. Be careful though, often the search results contain dangerous and distracting red herrings.
¿Cuándo usar búsqueda web?

Utiliza búsqueda web cuando necesites:

  • Documentación actualizada (posterior al cutoff del modelo)
  • Resolver errores persistentes
  • Información sobre nuevas bibliotecas o frameworks
  • Mejores prácticas actualizadas

13. Configuración Global vs. Proyecto

Cursor ofrece dos niveles de configuración para las instrucciones a la IA.

Rules for AI (global)
  # Rules for AI

## Fundamental Principles
- Prioriza siempre la legibilidad y mantenibilidad
- Escribe código modular y reutilizable
- Sigue las convenciones estándar de cada lenguaje
- Evita soluciones complejas cuando las simples funcionen

## Building Process
- Implementa funcionalidades una por una
- Prueba cada cambio antes de avanzar
- Considera la escalabilidad desde el principio
- Documenta las decisiones de diseño importantes

## Error Fixing
- Analiza la causa raíz, no solo los síntomas
- Considera efectos secundarios de cualquier fix
- Añade tests para evitar regresiones

## Comments
- Documenta el "por qué", no solo el "qué"
- Comenta decisiones no obvias
- Mantén comentarios actualizados con el código

Diferencias clave:

  • Rules for AI (global): Aplicado a todos los proyectos en Cursor, incluyendo sesiones de chat y Comando K
  • .cursorrules (proyecto): Específico para un proyecto, contiene información contextual sobre ese proyecto particular
Estrategia recomendada

Usa Rules for AI para mejores prácticas generales de código que deseas aplicar en todos tus proyectos, y .cursorrules para información específica del proyecto actual.

Acceso: Configuración > Rules for AI

14. Dividir Refactorizaciones Grandes

Las refactorizaciones complejas tienen más éxito cuando se dividen en pasos manejables.

Prompt para dividir tareas
   Necesito refactorizar nuestro sistema de manejo de estado que actualmente usa muchos componentes con estado local a una solución más centralizada con Context API o Redux.

Break this down into required steps. Only include truly necessary steps.
Respuesta
   Pasos necesarios para refactorizar el manejo de estado:

1. Analizar el estado actual: Identificar todos los componentes con estado local y mapear las dependencias entre ellos.

2. Diseñar la estructura de estado centralizada: Definir qué partes del estado deben moverse a Context/Redux y cuáles pueden permanecer locales.

3. Implementar los contextos/reducers: Crear la estructura básica para el estado global.

4. Migrar un grupo funcional a la vez: Empezar con un conjunto relacionado de componentes (ej. autenticación).

5. Actualizar los componentes: Refactorizar para consumir el estado global en lugar del local.

6. Pruebas: Verificar que cada grupo funcional mantiene su comportamiento después de la refactorización.
Beneficios

Esta técnica te permite:

  • Probar cada paso individualmente
  • Hacer commits incrementales
  • Detectar problemas tempranamente
  • Mantener el progreso aunque una parte sea problemática
Importante

Añadir "Only include truly necessary steps" evita que el modelo añada pasos opcionales o "nice-to-have" que podrían complicar innecesariamente la refactorización.

15. Roadmap.MD

Un archivo dedicado al roadmap del proyecto proporciona contexto crucial sobre la dirección y el estado actual.

Ejemplo de Roadmap.MD
   # Roadmap.MD

## Estado Actual (16 Marzo 2025)
- MVP lanzado con funcionalidades básicas de gestión de tareas
- Autenticación implementada con Auth0
- UI básica con componentes reutilizables
- Base de datos configurada en Supabase

## Próximas Prioridades (Q2 2025)
1. Implementar sistema de notificaciones en tiempo real
2. Añadir funcionalidad de notas (además de tareas)
3. Mejorar el dashboard con métricas y visualizaciones
4. Implementar funcionalidad de etiquetas y filtros avanzados

## Q3 2025
1. Añadir funcionalidades de colaboración
2. Integración con calendarios externos (Google, Outlook)
3. Apps móviles nativas (iOS/Android)

## Decisiones Técnicas Importantes
- Se decidió usar Next.js App Router sobre Pages Router para aprovechar los Server Components
- Supabase elegido sobre Firebase por mejor soporte de SQL y menor lock-in
- Implementación de UI con Tailwind en lugar de un sistema de componentes para mayor flexibilidad
- Decidimos NO implementar PWA en la primera versión para reducir complejidad

## Pruebas Anteriores
- La implementación inicial con GraphQL fue abandonada por complejidad excesiva
- El sistema de drag-and-drop con react-beautiful-dnd causó problemas de rendimiento

Beneficios:

  • Proporciona contexto sobre el estado actual del proyecto
  • Informa sobre prioridades y dirección futura
  • Documenta decisiones técnicas importantes
  • Registra enfoques que no funcionaron
Uso efectivo

Actualiza regularmente este archivo y etiquétalo en tus prompts cuando necesites que Cursor entienda el contexto más amplio del proyecto y sus objetivos.

16. Limitaciones de los Modelos

Entender las limitaciones de los modelos de IA es crucial para usarlos eficazmente.

Verificar knowledge cutoff
   ¿Cuál es tu knowledge cutoff? Answer in short.
Importante

Los modelos de IA tienen una fecha de corte de conocimiento. No pueden conocer información más reciente a menos que:

  • Les proporciones esa información directamente
  • Usen herramientas de búsqueda web externas
Buen enfoque para información reciente
   ¿Cuáles son las mejores prácticas para usar Server Actions en Next.js 14?

Nota: Sé que tu conocimiento tiene un límite temporal. Si no estás seguro de las últimas actualizaciones, por favor indícalo y yo verificaré la documentación oficial.
Mejores prácticas

Para tecnologías recientes o en rápida evolución:

  • Verifica la documentación oficial
  • Usa búsquedas web para obtener información actualizada
  • Proporciona enlaces o extractos de documentación cuando sea relevante

17. Instrucciones de Depuración

En lugar de limitarte a describir un error, pide a la IA instrucciones específicas para depurarlo.

Ejemplo de prompt "Tell me what to do"
   Estoy experimentando un error en mi aplicación Next.js donde las imágenes no se cargan correctamente. Recibo el error "Error: Failed to parse src "undefined" on `next/image`". Soy principiante en Next.js.

Tell me what to do para depurar este problema paso a paso. ¿Qué herramientas debo usar y qué información debo buscar para identificar la causa raíz?
Beneficios

Este enfoque:

  • Te enseña técnicas de depuración mientras resuelves el problema
  • Proporciona un plan sistemático en lugar de prueba y error
  • Funciona bien incluso para errores complejos donde la causa no es obvia
  • Obtiene información más específica para resolver el problema
Sé honesto sobre tu nivel de experiencia

Mencionar tu nivel de experiencia ayuda a la IA a ajustar sus instrucciones a tu conocimiento actual, evitando tanto explicaciones innecesariamente básicas como sugerencias demasiado avanzadas.

18. Enfoque MVP para Nuevas Funcionalidades

Resistir la tentación de implementar todas las características a la vez es clave para un desarrollo efectivo.

Ejemplo de priorización MVP
   Quiero implementar un sistema de comentarios en tareas que permita a los usuarios colaborar. He pensado en estas características:

- Comentarios en tiempo real
- Menciones de usuarios con @
- Formato de texto enriquecido
- Notificaciones por email
- Reacciones con emojis
- Hilos de respuestas
- Vista de historial de edición
- Archivos adjuntos
- Comentarios privados vs públicos

¿Cuál sería el MVP absolutamente esencial para lanzar esta función? ¿Qué debería priorizar primero?
Tentación del feature creep

La IA no te detendrá si le pides implementar demasiadas características a la vez. Necesitas ser disciplinado y centrarte en lo que realmente importa para el MVP.

Proceso de dos etapas

David recomienda un proceso de dos etapas:

  1. Brainstorming inicial: Enumera todas las ideas y características potenciales
  2. Reducción a lo esencial: Identifica el 20% que proporciona el 80% del valor

Después de algunas horas de desarrollo, revisa nuevamente para reducir aún más si es necesario.

19. Decisiones Importantes

No delegues decisiones estratégicas a la IA, mantén el control sobre la visión general del proyecto.

Mal enfoque (dejando decisiones estratégicas a la IA)
   ¿Qué arquitectura de base de datos debería usar para mi startup? Tengo usuarios, tareas, notas y proyectos. Implementa la mejor solución.
Buen enfoque (manteniendo control de decisiones estratégicas)
   He decidido usar una base de datos relacional (PostgreSQL) para mi aplicación de productividad porque necesito garantizar la integridad de los datos entre entidades relacionadas. 

Necesito diseñar las siguientes tablas: users, tasks, notes y projects. He pensado en estas relaciones:
- Un usuario puede tener muchas tareas y notas
- Una tarea puede pertenecer a un proyecto opcional
- Las notas pueden estar asociadas a una tarea opcional

Por favor, ayúdame a implementar este esquema específico, sugiriendo los campos necesarios y las restricciones de clave foránea apropiadas.

Regla general:

  • Tú: decisiones estratégicas, arquitectura, dirección del proyecto
  • IA: implementación, detalles técnicos, optimizaciones
Áreas para mantener control

Decisiones críticas que no deberías delegar completamente a la IA:

  • Arquitectura general del proyecto
  • Elección de tecnologías principales
  • Diseño de base de datos
  • Estrategia de UI/UX
  • Principios fundamentales de seguridad

Actividades Prácticas para el Workshop

Aquí tienes algunas actividades que puedes implementar durante el workshop para que los participantes practiquen estas técnicas.

1. Crear un archivo .curs.rules efectivo
  • Divide a los asistentes en grupos de 2-3 personas
  • Cada grupo crea un archivo .curs.rules para un proyecto hipotético (app de gestión de gastos, red social, etc.)
  • Después de 15 minutos, los grupos intercambian sus archivos
  • Discuten qué elementos son útiles y qué falta
2. Ejercicio de prompting
  • Proporciona un problema de código común (ej. "Implementa un formulario de registro con validación")
  • Cada participante escribe un prompt usando las técnicas aprendidas
  • Comparan resultados y discuten qué técnicas fueron más efectivas
3. Demostración de Whisper Flow
  • Realiza una demostración en vivo de cómo usar Whisper Flow
  • Los participantes prueban dictar un prompt complejo vs. escribirlo
  • Comparan tiempos y resultados
4. Evaluar y mejorar comentarios de código
  • Proporciona código con pocos comentarios
  • Los participantes piden a Cursor que mejore los comentarios
  • Discuten los resultados y qué información adicional ayudaría
5. Simulación de depuración
  • Presenta un error común en el código
  • Los participantes practican el prompt "tell me what to do"
  • Siguen las instrucciones de la IA para resolver el problema

Conclusión

Estas técnicas y estrategias representan más de 400 horas de experiencia práctica con Cursor. Implementarlas puede transformar radicalmente tu flujo de trabajo y productividad.

Recuerda

La efectividad de la IA está limitada por:

  • La calidad de tus prompts y el contexto que proporcionas
  • Tu comprensión del código y la tecnología subyacente
  • Tu capacidad para dirigir estratégicamente el proyecto

Considera estas técnicas como una inversión a largo plazo en tu flujo de trabajo. A medida que los modelos de IA sigan evolucionando, estas prácticas serán aún más valiosas.