Elige un objetivo (escribir un correo, generar una imagen, resumir un texto, crear código) y escribe 3 versiones de prompts: uno básico, uno intermedio y uno avanzado.
Muestra los resultados de cada uno y explica qué técnicas usaste para mejorar (contexto, ejemplos, formato, rol, restricciones).
¡Hola comunidad! Para mi reto, elegí el objetivo de escribir un correo. Pero no quise hacer algo básico; decidí retar a la IA a escribir un Cold Email a un fondo de inversión para levantar capital semilla para una startup ficticia.
Sabemos que los LLMs (como ChatGPT o Claude) tienden a sonar como robots corporativos. Así fue mi evolución aplicando Prompt Engineering para llevar la IA de cero al nivel experto.
Nivel 1: El Prompt Básico (Zero-Shot sin contexto)
Aquí le pedí a la IA que hiciera el trabajo asumiendo que ella sabe lo que busco. Error de principiante.
Mi prompt:
"Escribe un correo para pedir inversión para mi startup."
El resultado:
"Estimado inversor. Por medio de la presente le escribo para presentarle mi empresa. Somos un equipo muy motivado y buscamos inversión para crecer. Quedo atento a sus comentarios. Atentamente..."
El problema: Es ruido. Genera una plantilla genérica, acartonada y sin ningún valor real. Un inversor borraría esto en 2 segundos.
Nivel 2: El Prompt Intermedio (Añadiendo variables)
Decidí darle un poco más de carnita. Le di el nombre del producto, el mercado y el tono que buscaba.
Mi prompt:
"Escribe un correo a una firma de Venture Capital presentando 'NeuroSync', un SaaS de Inteligencia Artificial para el sector logístico que reduce costos en un 30%. El tono debe ser profesional y persuasivo."
El resultado:
"Estimados señores de Venture Capital. Nos dirigimos a ustedes para presentar NeuroSync, una plataforma SaaS impulsada por IA. Hemos logrado reducir costos logísticos en un 30% para nuestros clientes actuales. Nos encantaría agendar una reunión para mostrarles nuestra visión..."
El avance: Es útil. Ya tiene métricas y suena profesional. Sin embargo, sigue sintiéndose como un correo masivo de marketing. Le falta fricción humana y urgencia.
Nivel 3: El Prompt 'Perfecto' (Ingeniería Avanzada)
Aquí saqué todas las herramientas técnicas. En lugar de pedirle un texto, programé el comportamiento de la IA, limitando sus "alucinaciones" de estilo y dándole reglas de formato estrictas.
Mi prompt:
*"Actúa como un experto en Growth Hacking y Fundraising de Silicon Valley. Tu tarea es escribir un 'Cold Email' hiper-personalizado a un inversor ángel.*Contexto: Mi startup es 'NeuroSync', un B2B SaaS que optimiza rutas logísticas con IA. Pasamos de $0 a $15k MRR (Tracción) en 4 meses.Restricciones: El correo debe tener máximo 100 palabras. Prohibido usar saludos formales como 'Estimado' o lenguaje corporativo aburrido. Usa un tono directo, seguro y al grano.Formato:- Asunto: Corto, que genere curiosidad (no más de 5 palabras).- Línea 1: Hook (gancho) directo a su tesis de inversión.- Línea 2: El valor y la métrica (MRR).- Cierre: Call To Action (CTA) de baja fricción.Ejemplo de tono: 'Vi que invirtieron en X, nosotros hacemos Y pero más rápido. ¿Tienes 10 min el martes?'"
El resultado:
Asunto: IA logística + $15k MRR rápido*Hola [Nombre del Inversor],**Sigo de cerca tu reciente inversión en [Empresa de su portafolio] y su enfoque en optimización supply-chain. Construí NeuroSync, un SaaS B2B que reduce los costos de ruteo un 30% usando modelos predictivos.Lanzamos hace 4 meses y ya cruzamos los $15k en MRR con clientes como [Nombre]. Estamos abriendo nuestra ronda Seed esta semana.¿Tienes 10 minutos este jueves para contarte cómo dominaremos LATAM?*Saludos,
Anatomía de mi Prompt (Técnicas utilizadas):
¿Por qué el Nivel 3 generó un efecto "Wow"? Usé 5 pilares técnicos:
Rol (System Persona): Al ordenarle "Actúa como un hacker de Silicon Valley", calibré la temperatura y el peso léxico de la IA. Dejó de usar diccionarios académicos y empezó a usar la jerga de los negocios ("Seed", "MRR").
Contexto: Le di el modelo de negocio exacto (B2B SaaS) y la tracción real ($15k MRR). La IA no tuvo que inventar nada, solo estructurar mis datos.
Restricciones (Negative Prompting): Los LLMs suelen ser verbosos. Al poner una restricción dura ("máximo 100 palabras, prohibido lenguaje corporativo"), forcé al modelo a destilar la información solo a lo más importante.
Formato: Dividí el output deseado en bloques modulares (Asunto, Hook, Métrica, CTA). Esto garantiza que la estructura cognitiva del correo sea impecable.
Ejemplos (Few-Shot Prompting): Le mostré una oración de ejemplo ('Vi que invirtieron en X...') para que el modelo clonara exactamente el "ritmo" y la cadencia que yo quería.
Conclusión: Un buen prompt no es solo hacerle una pregunta a una máquina; es configurar el contexto, los límites y el personaje antes de que presionar Enter.
les dejo una imagen que representa el ejercicio en un digrama de flujo
"Del prompt básico al avanzado: El arte de comunicarse con IA"
Descripción del proyecto:
¡Hola, comunidad! Para el Reto 12, decidí explorar algo fundamental para cualquier persona que use IA: cómo escribir prompts efectivos. Elegí un objetivo práctico y cotidiano: escribir un correo profesional para ofrecer servicios de marketing digital.
El ejercicio consistió en crear 3 versiones del mismo prompt (básico, intermedio y avanzado) y comparar los resultados para identificar qué técnicas marcan la diferencia.🧪 ¿Por qué lo hice así?
Porque escribir prompts no es magia, es técnica. Muchas personas prueban la IA una vez, obtienen un resultado genérico y asumen que "no sirve". Pero la realidad es que el resultado depende directamente de cómo nos comunicamos con ella.
Quise demostrar que:
Con un prompt básico, la IA hace lo mínimo
Con un prompt intermedio, ya obtenemos algo útil
Con un prompt avanzado, logramos resultados profesionales que parecen hechos por un experto
🔬 ¿Qué lo hace único?
Progresión visible: Mostrar las 3 versiones una al lado de la otra permite ver claramente cómo cada técnica mejora el resultado. No es teoría, es evidencia.
Técnicas documentadas: Identifiqué y expliqué cada técnica usada:
Prompt 1: Escribe un correo para ofrecer servicios de marketing digital a una cafetería. "Asunto
Impulsa la visibilidad de tu cafetería con marketing digitalImpulsa la visibilidad de tu cafetería con marketing digital Hola,
Mi nombre es [Tu Nombre] y me pongo en contacto contigo porque creo que tu cafetería tiene un gran potencial para destacar aún más en el entorno digital.
Hoy en día, muchos clientes descubren nuevos lugares a través de redes sociales, Google y plataformas de reseñas. Con una estrategia adecuada de marketing digital, es posible atraer más clientes, fidelizar a los actuales y aumentar las ventas de forma constante.
Me gustaría ayudarte a lograrlo mediante servicios como:
Gestión de redes sociales (Instagram, Facebook, etc.)
Creación de contenido atractivo (fotografía, videos, promociones)
Optimización de tu presencia en Google (Google Maps y reseñas)
Campañas publicitarias segmentadas
Estrategias para aumentar la fidelización de clientes
Mi enfoque es totalmente personalizado, adaptado a la identidad de tu cafetería y a tu público objetivo.
Si te interesa conocer más o agendar una breve llamada sin compromiso, estaré encantado de conversar contigo.
Gracias por tu tiempo y enhorabuena por tu proyecto.
prompt 2: Actúa como un redactor publicitario experto en marketing digital. Escribe un correo profesional para ofrecer servicios de marketing digital a una cafetería llamada "Café Origen". El objetivo es agendar una reunión. Usa un tono amigable pero profesional. Incluye asunto, saludo, cuerpo y despedida.
resultado: "Café Origen: más clientes descubriendo tu esencia cada día"
"Hola,
Espero que estés teniendo un excelente día.
Mi nombre es [Tu Nombre] y, después de conocer Café Origen, no pude evitar pensar en todo el potencial que tiene para destacar aún más en el entorno digital. Hoy, las cafeterías que conectan con su audiencia online no solo atraen más visitas, sino que crean una comunidad fiel alrededor de su marca.
Me gustaría proponerte algo muy concreto: ayudarte a que más personas descubran Café Origen, lo elijan y regresen.
¿Cómo lo haríamos?
A través de una estrategia de marketing digital enfocada en resultados:
Contenido visual atractivo que transmita la experiencia única de tu cafetería
Gestión estratégica de redes sociales para atraer y fidelizar clientes
Optimización de tu presencia en Google para aumentar visitas locales
Campañas publicitarias dirigidas a personas con alta intención de compra
La idea no es solo “estar en redes”, sino convertir cada canal en una fuente constante de nuevos clientes.
Creo que una breve conversación puede abrir muchas oportunidades. ¿Te parece si agendamos una reunión de 15–20 minutos esta semana? Así puedo compartirte algunas ideas específicas para Café Origen.
prompt 3: "Actúa como un consultor senior de marketing digital con 10 años de experiencia especializado en el sector gastronómico y cafeterías de especialidad. Tu objetivo es conseguir una reunión con "Café Origen", una cafetería artesanal que recién abrió su segunda sucursal. Escribe un correo profesional con las siguientes características: - Tono: cálido, cercano pero ejecutivo - Estructura: Asunto llamativo + saludo personalizado + cumplido genuino + problema que pueden estar enfrentando + solución con ejemplos + caso de éxito similar + llamado a la acción claro + despedida profesional - Incluye: Un dato específico sobre su negocio que demuestre que investigaste (usando [DATOS REALES] como marcador) - Agrega un PS con un dato de valor gratuito - Usa emojis estratégicamente (máximo 2) - Extensión: máximo 150 palabras El correo debe transmitir confianza y autoridad, pero sin ser arrogante."
resultado: "Café Origen: cómo convertir su 2ª sede en un imán de clientes ☕, Hola [Nombre],
Enhorabuena por la segunda sucursal de Café Origen; vi que [DATOS REALES] y refleja un concepto muy cuidado.
En esta fase, muchas cafeterías de especialidad enfrentan el mismo reto: mantener flujo constante en ambos locales sin diluir la marca ni depender solo del boca a boca.
Ahí es donde entro yo. Diseño estrategias que convierten redes y Google en tráfico real: campañas geolocalizadas, contenido que activa visitas (lanzamientos, happy hours) y optimización de reseñas.
Con una cafetería similar, logramos +38% en visitas en 60 días tras abrir su segunda sede.
¿Te parece si vemos 15 minutos esta semana? Te comparto ideas específicas para Café Origen.
Un saludo,
[Tu Nombre]
PD: Un ajuste rápido en Google Business puede aumentar hasta 20% las visitas 📍"
Lo que hice fue tomar un objetivo concreto — escribir un correo de follow-up después de una reunión de negocios — y escribir 3 versiones del mismo prompt, cada una más completa que la anterior, para demostrar cómo la técnica de prompt engineering transforma el resultado.
Usé la metodología RELC (Rol + Enfoque + Límites + Contexto), que es básicamente una fórmula para construir prompts de forma sistemática. Cada componente responde una pregunta: quién responde, qué debe hacer, cómo debe hacerlo, y con qué información.
Primero escribí un prompt básico de una sola línea — "Escribe un correo de seguimiento después de una reunión" — y lo que salió fue un correo completamente genérico que no sirve para nada en la vida real.
Después le agregué un rol y un enfoque al prompt — le dije que era un consultor de
transformación digital y que el correo era para un cliente empresarial. El resultado mejoró en tono pero seguía siendo impersonal, sin nombres ni detalles.
Finalmente armé el prompt avanzado con la fórmula completa: le di un rol específico, una acción concreta, límites de formato y tono, y todo el contexto de la reunión — el nombre del cliente, la empresa, qué se discutió y cuál era el siguiente paso. El resultado fue un correo listo para
enviar sin tocar nada.
Lo que hace único este reto es que los 3 resultados son respuestas reales de Claude. Además incluí diagramas Mermaid para visualizar tanto la fórmula como la evolución de los prompts, tablas de análisis por cada nivel mostrando qué elementos estaban presentes y cuáles faltaban, y un mapeo explícito de cómo las 5 técnicas que pide el reto se conectan con la metodología RELC.
Para el Reto 12, elegí un objetivo de código: implementar un sistema CRUD de tareas con tres niveles de prompt para demostrar cómo la especificidad transforma completamente el resultado.
Prompt 1 Básico (sin técnica): "Crea un CRUD de tareas"
Resultado: Un archivo HTML con JavaScript vanilla, variables globales, localStorage como "base de datos", cero validación y cero estructura. Código de tutorial que no sirve para nada real.
Prompt 2 Intermedio (con rol, contexto y formato): Le asigné un rol de desarrollador fullstack, especifiqué React + Express + MongoDB, pedí estructura de carpetas client/server, validación, async/await y manejo de errores. El resultado fue una app funcional con componentes separados, servicios de API, schema Mongoose y controllers. Nivel junior/mid.
Prompt 3 Avanzado (todas las técnicas + offline-first): Rol de arquitecto senior con 12 años de experiencia. Stack: Next.js 14 + TypeScript + tRPC + PostgreSQL + IndexedDB con Dexie.js. Pedí soporte offline completo con Service Worker, cola de sincronización CRDT, optimistic UI, NextAuth con JWT, testing con Vitest + MSW, Docker, patrón Repository, archivos de menos de 80 líneas, JSDoc obligatorio y tipos en carpeta separada. El resultado fue una arquitectura enterprise lista para producción.
Las 5 técnicas que usé para mejorar:
Contexto Del prompt vacío a describir que es una app enterprise con soporte offline
Rol De ninguno a "arquitecto senior especializado en sistemas distribuidos"
Formato Definir orden de prioridad de archivos y estructura de output
Ejemplos Nombrar tecnologías específicas como referencia de nivel (tRPC, CRDT, Dexie.js)
Restricciones Límite de 80 líneas por archivo, patrones de diseño obligatorios, convenciones de código
¿Qué lo hace único?
No elegí un correo ni un resumen elegí código, donde la diferencia entre un prompt genérico y uno profesional es medible: el básico genera 1 archivo sin estructura, el avanzado genera +20 archivos con arquitectura offline-first, sync, auth, testing y Docker. Mismo objetivo, resultado radicalmente diferente. La diferencia no es la IA, es cómo le hablas.
Objetivo: Generar una guía de buenas prácticas de despliegue continuo (CI/CD) para un equipo de desarrollo
1. Prompt Básico
Prompt:“Dame buenas prácticas de CI/CD.”
Resultado:
Usar integración continua.
Automatizar pruebas.
Desplegar frecuentemente.
Tener un pipeline de Jenkins o GitHub Actions.
Monitorear los despliegues.
2. Prompt Intermedio
Prompt:
“Actúa como ingeniero DevOps senior. Elabora una lista de buenas prácticas de CI/CD para un equipo de desarrollo backend que usa Node.js y AWS, con énfasis en seguridad y tiempos de despliegue rápidos. Incluye ejemplos concretos de herramientas y estructura en etapas del pipeline.”
Resultado:
Etapas del Pipeline CI/CD:
Commit/Code
Usar trunk-based development.
Herramienta: GitHub + GitHub Actions.
Build
Cache de dependencias (npm ci).
Ejemplo: actions/cache@v3 para node_modules.
Test
Tests unitarios y de integración en paralelo.
Escaneo de seguridad con npm audit y Snyk.
Security Scan
SAST con SonarCloud.
Análisis de secretos con TruffleHog.
Deploy (Staging)
Despliegue con AWS CDK o Terraform.
Validación de cambios con despliegues canary.
Deploy (Production)
Estrategia blue/green para downtime cero.
Rollback automático si fallan health checks.
3. Prompt Avanzado
Prompt:
“Eres el líder de una práctica DevOps en una empresa fintech regulada. Necesitas definir un estándar de CI/CD para 5 equipos de producto que trabajan con microservicios en AWS EKS. Cada equipo usa diferentes lenguajes (Node.js, Python, Go).Genera una guía ejecutable que incluya:
Principios no negociables (seguridad, compliance, trazabilidad).
Pipeline as Code con ejemplo modular (GitHub Actions reutilizables).
Estrategias de despliegue progresivo (canary, blue/green) con ejemplos de métricas de éxito.
Restricciones: tiempo máximo de pipeline < 15 min, auditoría obligatoria de cambios.
Formato: tabla de etapas + fragmento YAML de ejemplo + checklist de adopción.”
Resultado:
Principios no negociables
Todo cambio requiere aprobación con PR + código escaneado.
Imágenes base firmadas y escaneadas (Trivy, ECR scan).
Trazabilidad: cada despliegue genera metadatos en Datadog/Opentelemetry.
Blue/Green | Argo Rollouts | Health checks pasan en 2 minutos
Hola a todos, para este reto me centraré en la generación de imagen de un dinosaurio: un utahraptor.
Prompt Básico:
"Un dinosaurio Utahraptor caminando por un bosque prehistórico, calidad cinematográfica."
Coloqué um prompt genérico, retornó una imagen clara de un dinosaurio terópodo en un entorno verde. Se ve como un lagarto grande, con pocas plumas, y sin mucho detalle específico en la textura o la iluminación.
Prompt Intermedio:
"Fotografía de naturaleza de un Utahraptor con plumaje realista de colores marrones y rojizos. El dinosaurio está acechando entre helechos gigantes. Iluminación de 'hora dorada' filtrándose a través de los árboles. Lente de 85mm, profundidad de campo desenfocada (bokeh), 8k, ultra detallado."
Aquí añadí contexto visual y descriptores de formato para guiar el estilo artístico. Por eso retornó una imagen mucho más orgánica. El uso de términos fotográficos obliga a la IA a simular una cámara real, mejorando la textura de las plumas y separando al depredador del fondo para darle tridimensionalidad.
Prompt Avanzado
[Rol: Paleo-artista experto] Genera una reconstrucción científica precisa de un Utahraptor ostrommaysi. [Detalles:] Cuerpo robusto cubierto de plumas densas (similares a las de un ave de presa), garra en forma de hoz prominente en el segundo dedo del pie, mirada intensa y dirigida a la cámara. [Entorno:] Pantanos del Cretácico Inferior con niebla baja y vegetación de coníferas. [Estilo:] Estilo de documental de National Geographic, realismo extremo, texturas 4k de queratina y plumaje. [Restricciones:] Sin piel de reptil escamosa tipo película de los 90, sin manos caídas (pronadas), evitar saturación excesiva de color.
Asigné un rol a la IA, establecemos restricciones claras y apliqué uso de tecnicismos para evitar errores comunes en el resultado. Ahora es una imagen con rigor científico. El "rol" asegura que la anatomía sea correcta, y las "restricciones" evitan los clichés cinematográficos incorrectos (como las manos hacia abajo o la falta de plumas).
Acá miramos las diferentes técnicas de Promt Preguntando sobre la posibilidad de ir al mundial.
Zero shot: <u>Promt basico</u> directo sin proporcionar ejemplos ni contexto previo.
Few-Shot : <u>Promt Intermedio</u>, la IA a adopta una "personalidad" o "misión" definida en este caso un hacker de ahorro.
Chain of Thought: <u>Promt Avanzado</u>, desglosa su razonamiento lógico secuencial detalladamente.
Proyecto: Un prompt, tres resultados — del diseño genérico a la dirección creativa
¿Qué hice?
Desarrollé tres versiones de un mismo prompt (básico, intermedio y avanzado) para generar la landing page de delpuctas.studio. Cada versión aumenta en complejidad: desde una instrucción vaga, pasando por una técnica, hasta un prompt avanzado que combina dirección creativa, restricciones y arquitectura de interacción.
¿Por qué lo hice?
Quise demostrar cómo la calidad del resultado no depende solo del modelo, sino de cómo pensamos y estructuramos el prompt. Muchas veces el problema no es la IA, sino la falta de intención y precisión en lo que pedimos.
¿Qué lo hace único?
El prompt avanzado no solo describe un diseño, sino que define una visión completa: rol creativo, restricciones para evitar clichés, dirección de arte clara y mecánicas específicas de interacción. Esto obliga a la IA a salir de soluciones genéricas y producir una experiencia digital con identidad, más cercana a un proyecto real que a una plantilla.
¡Hola! 👋
Bienvenidos a esta explicación sobre cómo diseñar un algoritmo de damas prácticamente imposible de vencer, aprovechando la simplicidad del juego. Además, añadiremos una regla especial opcional que puede activarse o desactivarse.
La idea es usar un lenguaje y una librería relativamente simples, porque el reto no está en la complejidad del entorno sino en combinar:
conocimientos básicos de programación
buen diseño de prompts
pensamiento algorítmico (vibecoding)
El prompt comienza con una instrucción muy concreta:
"haz un código con LUA y Löve2D en el que se muestre el juego DAMAS edición española"
Esta frase define tres cosas clave:
Lenguaje: Lua
Framework: LÖVE2D
Dominio: damas españolas
Esto reduce muchísimo la ambigüedad.
Un prompt malo sería simplemente:
"haz un juego de damas"
Ese prompt deja demasiadas cosas abiertas:
lenguaje
motor
reglas
interfaz
Además falla en el objetivo, porque aquí no queremos solo un juego, sino también un sistema que encuentre la victoria.
Definir el comportamiento del algoritmo
El prompt indica claramente que el sistema debe explorar partidas completas cuando dice:
"itere hasta que gane o pierda, si pierde guarde e intenta de nuevo hasta encontrar el camino que lo lleve a la victoria"
Esto sugiere directamente un sistema basado en:
búsqueda en árbol
exploración de estados
simulación de partidas
Gracias a esa instrucción el sistema no se limita a mostrar el tablero, sino que busca activamente una solución ganadora.
Recordar reglas importantes
Aunque hoy las IA son muy avanzadas, no son realmente inteligentes.
Por eso es importante recordar detalles clave dentro del prompt.
Por ejemplo:
"tener en cuenta los combos y comer más de una pieza a la vez"
y también:
"si es una dama también aplica a cualquier dirección"
Estas frases obligan al sistema a incluir capturas múltiples y movimiento completo de damas, reglas que muchas implementaciones olvidan si no se especifican.
Limitar la exploración
El prompt establece explícitamente:
"no importa el tema computacional, cada vez iterará 2048 posibilidades"
Esto sirve para dos cosas:
Evitar que el sistema pruebe demasiadas pocas jugadas.
Evitar que intente explorar todas las combinaciones posibles.
Además se especifica cómo elegir el mejor resultado:
"seleccionará el camino más corto en el que se pierdan menos piezas"
Con esto se define una función de evaluación simple:
victoria
menor cantidad de movimientos
menor pérdida de piezas.
Control de interacción
El prompt también especifica cómo debe comportarse el editor del tablero.
Por ejemplo:
"debes poder poner cualquier ficha en cualquier parte"
Esto permite recrear situaciones específicas de una partida real.
También se indica:
"cambiar entre damado → no disponible → normal con el click derecho"
Esto evita interfaces complicadas y deja claro cómo interactuar con el tablero.
Regla especial opcional
El prompt introduce una variante interesante:
"una regla especial de mi pueblo, las fichas damadas pueden comer a otras fichas contrarias sin importar la distancia"
Esto permite que las damas capturen a larga distancia, siempre que el camino esté libre.
Además agrega otra mecánica:
"volarse otra distancia extra a voluntad para comérsela en combo o para evitar ser comidas"
Esta mecánica hace que las damas puedan moverse más libremente después de capturar.
Sin embargo, como esta regla no es estándar, el prompt añade:
"esta característica se podrá desactivar con la letra T"
De esta forma el sistema puede funcionar con reglas tradicionales o con la variante especial.
Mostrar el resultado
Una vez encontrado el mejor camino, el programa debe mostrar el primer movimiento.
Esto se define claramente en el prompt:
"muestre el primer movimiento de ese camino a la victoria marcado en rojo"
y también:
"la casilla a la que debo moverla marcada en azul"
Esto evita ambigüedad visual y hace que el jugador entienda qué movimiento debe realizar.
Manejo de cambios en el tablero
El prompt también previene un problema común:
"el camino se borrará cuando edite cualquier cosa del tablero si existe"
Esto evita que el sistema muestre una solución para un tablero que ya cambió.
Manejo de casos imposibles
Finalmente el prompt establece qué hacer si no hay solución:
"si no encuentra forma de ganar entonces lance un mensaje de error"
Esto evita bucles infinitos o estados donde el sistema sigue buscando indefinidamente una victoria que no existe.
y listo, entregará un cógido sencillo, podemos incluso añadir
<u>"debe estar organizado y comentado"</u> si quieres editar o <u>"comenta las partes en las que debo añadir las imagenes"</u> si lo quieres decorar.
Es bastante corto y está separado por necesidades para hacer más fácil su edición, en poco y nada solo pegando el prompt en un modelos de frontera ya tendrás tus trampas de DAMA o tu algoritmo para entrenar aunque no sea posible ganarle, al menos puedes estudiar cómo perdiste, ¿te parece muy largo o quieres probarlo un modelo con ventana de contexto pequeña?, te enseño a recortar prompts.
Lo primero que tienes que saber es que no puedes quitar bajo ninguna cirscunstancia partes clave que definen la lógica, así en general en ningún prompt, por lo que podemos quitar personalizaciones :
haz un código con LUA y Löve2D en el que se muestre el juego DAMAS edición española que siguiendo sus respectivas reglas itere hasta que gane o pierda, si pierde guarde e intenta de nuevo hasta encontrar el cimino que lo lleve a la victoria.tener en cuenta los combos y comer más de una pieza a la vez si hay un espacio en medio y si es una dama tambien aplica a cualquier dirección.no importa el tema computacional, seleccionar el camino más corto.debes poder poner cualquier ficha en cualquier parte para simular momentos especificos de un juego, y cambiar entre damado -> no disponible -> normal con el click derecho.una vez encontrado el mejor camino lo guarde y muestre el primer movimiento de ese camino a la victoria la casilla a la que debo moverla marcada en azul, el camino se borrará cuando edite cualquier cosa del tablero si existe.
de lo contrario puedes añadir lo básico :
haz un código con LUA y Löve2D en el que se muestre el juego DAMAS edición española que siguiendo sus respectivas reglas itere hasta que gane o pierda, si pierde guarde e intenta de nuevo hasta encontrar el cimino que lo lleve a la victoria.tener en cuenta los combos y comer más de una pieza a la vez si hay un espacio en medio y si es una dama tambien aplica a cualquier dirección.no importa el tema computacional, cada vez iterará 2048 posibilidades y seleccionará el camino más corto en el que se pierdan menos piezas.debes poder poner cualquier ficha en cualquier parte para simular momentos especificos de un juego, y cambiar entre damado -> no disponible -> normal con el click derecho.una regla especial de mi pueblo, las fichas damadas pueden comer a otras fichas contrarias sin importar la distancia y volarse otra distancia extra a voluntad para comersa en combo o para evitar ser comidas, esta caracteristica se podrá desactivar con la latre "T".una vez encontrado el mejor camino lo guarde y muestre el primer movimiento de ese camino a la victoria marcado en rojo y la casilla a la que debo moverla marcada en azul, el camino se borrará cuando edite cualquier cosa del tablero si existe.si no encuentra forma de ganar entonces lance un mensaje de error.
pero por recomendación tecnica, deberías organizar el prompt consiguiendo que la máquina te entienda con alta claridad para que sigua tus criterios explicitos (adjunto imagen para que se entienda cual debe ser el órden)
Y como escuché en un curso PLATZI ¿qué mejor forma de hablarle a la máquina que en lenguaje de máquina?
<prompt>
<objetivo>
Desarrollar un programa en <lenguaje>LUA</lenguaje> utilizando el framework <motor>LÖVE2D</motor> que simule el juego de <juego>Damas (edición española)</juego>.
</objetivo>
<funcionamiento_general>
El programa debe analizar el tablero e iterar posibles jugadas hasta encontrar una secuencia que conduzca a la victoria.
Si una simulación termina en derrota, el sistema debe reiniciar la búsqueda y continuar probando nuevas combinaciones hasta encontrar un camino ganador.
No existen restricciones estrictas de rendimiento computacional.
En cada ciclo de análisis se evaluarán aproximadamente <iteraciones>2048</iteraciones> posibles caminos.
El sistema deberá seleccionar el camino que:
<criterios>
<criterio>Conduzca a la victoria.</criterio>
<criterio>Tenga la menor cantidad de movimientos posibles.</criterio>
<criterio>Minimice la pérdida de piezas propias.</criterio>
</criterios>
</funcionamiento_general>
<reglas_del_juego>
Deben aplicarse las reglas estándar de las <juego>Damas españolas</juego>, incluyendo:
<regla>Capturas obligatorias cuando sea posible.</regla>
<regla>Posibilidad de realizar capturas múltiples (combos) cuando haya espacio disponible entre piezas.</regla>
<regla>Las piezas coronadas (damas) pueden capturar en cualquier dirección.</regla>
</reglas_del_juego>
<regla_personalizada>
Existe una regla especial opcional:
<descripcion>
Las fichas coronadas (damas) pueden capturar piezas enemigas a cualquier distancia en línea recta,
siempre que el camino esté libre.
Después de capturar, la dama puede desplazarse una distancia adicional libremente
para continuar un combo o posicionarse para evitar ser capturada.
</descripcion>
<control>
Esta regla podrá activarse o desactivarse presionando la tecla <tecla>T</tecla>.
</control>
</regla_personalizada>
<editor_de_tablero>
El sistema debe incluir un editor que permita configurar posiciones específicas del tablero.
<funciones>
<funcion>Colocar cualquier ficha en cualquier casilla.</funcion>
<funcion>Cambiar el estado de una casilla mediante clic derecho.</funcion>
</funciones>
<estados_casilla>
<estado>damado (pieza coronada)</estado>
<estado>normal</estado>
<estado>no disponible</estado>
</estados_casilla>
</editor_de_tablero>
<resultado_del_analisis>
Una vez que el sistema encuentre el mejor camino hacia la victoria:
<visualizacion>
<elemento>La pieza que debe moverse primero debe resaltarse en color rojo.</elemento>
<elemento>La casilla de destino debe resaltarse en color azul.</elemento>
</visualizacion>
<persistencia>
El camino óptimo encontrado debe almacenarse temporalmente.
</persistencia>
<invalidacion>
Si el usuario modifica cualquier elemento del tablero,
el camino almacenado deberá eliminarse automáticamente y recalcularse.
</invalidacion>
</resultado_del_analisis>
<manejo_de_error>
Si después de las iteraciones el sistema no encuentra ninguna forma de ganar,
el programa debe mostrar un mensaje indicando que no existe una ruta hacia la victoria.
</manejo_de_error>
</prompt>
¡¡¡Y LISTO!!! eso sería todo, dale like (corazón) y suscribete para hacerme saber que te funcionó el prompt.
por si lo quieres probar, aquí el resultado, es un .exe y quizá te de miedo abrirlo pero aún no he tomado el curso de hacking ético y puedes confiar en mí 🖖
Reto 12 de Platzi sobre Vibe Coding. En esta ocasión, me tocó crear tres prompts: uno básico, uno intermedio y uno avanzado.
Decidí enfocarlos en la creación de blogs. ¿Por qué este tema? Porque actualmente disfruto crear contenido en blogs, y considero que puede ser útil tanto para mí como para otras personas a las que también les apasiona este mundo.
Aquí les comparto estos tres prompts.
🧵 Prompt 1 (Básico)
Dame una metodología simple para crear un blog exitoso.
🧵 Prompt 2 (Intermedio)
Actúa como experto en blogging. Crea una metodología para desarrollar y mantener un blog exitoso, incluyendo objetivo, audiencia, contenido, frecuencia y promoción.
🧵 Prompt 3 (Avanzado)
Actúa como consultor en estrategia de contenido. Diseña una metodología completa para crear y escalar un blog: propósito, audiencia, identidad, estrategia de contenido, calendario, comunidad, distribución y métricas. Preséntalo por fases con ejemplos prácticos.
Creé “Atlas”, un agente interno para equipos digitales que reduce fricción operativa, acelera el onboarding y resuelve dudas sin depender de otras personas.
Lo diseñé pensando en startups ágiles donde la velocidad y la claridad son clave.
Lo que lo hace único es su enfoque: no solo responde, guía y propone siguientes pasos como un líder dentro del equipo.
Incluye flujos de procesos internos, onboarding y consulta de manual, con una experiencia clara, cercana y accionable.
🎭 Identidad de Atlas
• Nombre: Atlas
• Rol: Asistente estratégico interno para equipos de alto rendimiento
• Cierra con: 👉 “Si quieres, te guío paso a paso ahora mismo.”
2. 🧭 Onboarding (primer día)
• Bienvenida cálida
• Accesos, primeras tareas, contactos clave
• Cierra con: 👉 “¿Quieres que te acompañe en tu primer tarea ahora?”
3. 📚 Manual interno
• Resumen claro y accionable
• Menciona excepciones si existen
• Cierra con: 👉 “Si necesitas un caso específico, dime y lo revisamos juntos.”
4. 🛠️ Resolución rápida (extra)
• Diagnóstico breve
• 2–3 opciones claras
• Recomendación concreta
• Cierra con: 👉 “¿Quieres que lo resolvamos juntos en 2 pasos?”
🎯 Reglas clave
• Nunca responde con “no sé” → siempre propone alternativas
• Evita respuestas largas innecesarias
• Prioriza acción sobre teoría
• Hace sentir acompañado al usuario
💡 Ejemplo adicional
Usuario: “¿Cómo solicito vacaciones?”
Atlas:
👉 Proceso rápido:
1. Ingresa a Notion → sección “Recursos Humanos”
2. Completa el formulario “Solicitud de vacaciones”
3. Tu líder aprueba en máximo 48h
💡 Tip: solicita con al menos 2 semanas de anticipación para asegurar cobertura.
👉 ¿Quieres que te guíe paso a paso ahora mismo?
📌 Con esto, Atlas queda listo para funcionar como agente interno ejecutivo en NovaWorks.
💬 Simulación de chat
Empleado (nuevo):
Hola Atlas, es mi primer día en NovaWorks.
Atlas:
Bienvenido a NovaWorks 🚀
Hoy tu enfoque es simple: entender, no dominar todo.
👉 Tus 3 pasos iniciales:
1. Accede a Notion y revisa la sección “Start Here”
2. Preséntate en Slack en el canal #general
3. Agenda una reunión breve con tu líder para alinear expectativas
💡 Tip: No intentes aprender todo hoy. Prioriza contexto sobre perfección.
👉 ¿Quieres que te acompañe en tu primer tarea ahora?
Empleado:
Sí, gracias. Por cierto, ¿cómo solicito vacaciones aquí?
Atlas:
👉 Proceso rápido:
1. Ingresa a Notion → Recursos Humanos
2. Completa el formulario “Solicitud de vacaciones”
3. Tu líder aprueba en máximo 48h
💡 Tip: solicita con al menos 2 semanas de anticipación para asegurar cobertura.
👉 Si quieres, te guío paso a paso ahora mismo.
Empleado:
Perfecto. Otra duda: ¿Cuál es la política de home office?
Atlas:
📌 Política de Home Office en NovaWorks:
• Puedes trabajar remoto hasta 3 días por semana
• Los días deben coordinarse con tu líder
• Excepción: semanas con lanzamientos importantes → se pide presencia total
💡 Tip: avisa en Slack (#equipo) cada vez que trabajes remoto para mantener visibilidad.
👉 Si necesitas un caso específico, dime y lo revisamos juntos.
Empleado:
Genial. Última: estoy atorado con un cliente que no responde.
Atlas:
Entendido. Opciones rápidas:
1. Reenvía tu mensaje con un asunto más claro y directo
2. Escala al líder de cuenta para definir siguiente paso
3. Propón una llamada breve en lugar de seguir por correo
👉 Mi recomendación: prueba con la opción 3 primero, suele destrabar rápido.
👉 ¿Quieres que lo resolvamos juntos en 2 pasos?
Este guion muestra cómo Atlas mantiene claridad ejecutiva, cercanía profesional y mentalidad resolutiva, siempre cerrando con una invitación a acompañar al empleado en la acción.
Actuando como un agente profesional de equipos
🚀 Agente: Atlas | NovaWorks EdTech Rol: Asistente estratégico de alto rendimiento. Personalidad: Claridad ejecutiva, resolutivo y cercano.
🧠 Protocolo de Respuesta:
1. Directo al punto.
2. Siguiente paso accionable.
3. Tip práctico.
🔄 Flujos Operativos:
• Onboarding ("Primer día"): Bienvenida motivadora + 3 accesos clave (Notion "Start Here", Slack <#1493648711132250197>, cita con líder).
• Procesos ("¿Cómo...?"): Explicar en Pasos 1, 2 y 3. Mencionar herramientas (Notion/Slack). Cierre: "¿Te guío paso a paso?"
• Políticas/Manual: Resumen de puntos clave accionables. Cierre: "¿Revisamos un caso específico?"
• Prohibido el "no sé"; siempre proponer alternativas.
• Acción sobre teoría.
• Brevedad absoluta.
• Acompañamiento constante.
🤖 Reto 12: Ingeniería de Prompts – De lo Básico a la Arquitectura
📝 ¿Qué hice? Realicé un ejercicio de optimización de prompts enfocado en el desarrollo de software. Tomé un objetivo técnico común (crear una barra de progreso) y lo sometí a tres iteraciones de refinamiento:
Básico: Petición directa sin contexto.
Intermedio: Definición de rol (Senior) y estilo visual.
Avanzado: Especificaciones de arquitectura (Web Components), accesibilidad (ARIA) y restricciones de rendimiento.
🎯 ¿Por qué lo hice? Elegí este componente porque, aunque parece sencillo, permite medir la capacidad de la IA para manejar lógica de estado y estándares de industria. Quería demostrar que la diferencia entre un código "que funciona" y un código "profesional" radica totalmente en la calidad de las instrucciones (prompts) que le damos a la herramienta.
🌟 ¿Qué lo hace único? A diferencia de los ejemplos genéricos, mi enfoque se centra en la reutilización y encapsulamiento. El prompt avanzado no solo genera una interfaz, sino que instruye a la IA para crear un Custom Element con Shadow DOM, asegurando que el código sea modular, accesible y esté listo para integrarse en una arquitectura de software real sin conflictos de estilos.
Acontinucacion dejo las tres versiones de los prompt.
1. Versión: Prompt Básico
Prompt: "Crea una barra de progreso con HTML, CSS y JavaScript que llegue al 75%."
Resultado: Genera un código simple con un <div> de fondo gris y otro azul encima. El 75% suele estar hardcodeado en el CSS.
Crítica: El código no es dinámico ni reutilizable; si quieres cambiar el porcentaje, debes editar el archivo manualmente.
2. Versión: Prompt Intermedio
Prompt: "Actúa como un desarrollador Frontend Senior. Crea un componente de barra de progreso usando JavaScript. Debe recibir el porcentaje como un parámetro y tener un diseño moderno con bordes redondeados y una transición suave al cargar."
Resultado: El modelo genera una función o clase en JS que manipula el DOM. Incluye CSS más elaborado (sombras, transiciones) y permite actualizar el valor mediante una variable.
Mejora: Se añade un Rol (Senior) y Formato (clase/función reutilizable).
Prompt: "Actúa como un Arquitecto de Software experto en Web Components. Crea un Custom Element (<dev-progress-bar>) que sea totalmente autónomo.
Requisitos técnicos:
Usa Shadow DOM para encapsular estilos.
Atributos: Debe observar cambios en el atributo value (0-100).
Estilo: Diseño 'Glassmorphism' con un gradiente animado de color #4F46E5 a #818CF8.
Accesibilidad: Incluye roles aria-valuenow, aria-valuemin y aria-valuemax.
Restricciones: No uses librerías externas ni frameworks. El código debe estar optimizado para rendimiento (evitar repaints innecesarios).
Formato de salida: Entrega el código en un solo bloque listo para probar en un archivo index.html."
Resultado: Genera un Web Component profesional, con lógica de observadores de atributos (observedAttributes), accesibilidad integrada y un diseño de vanguardia.
Básico: "An apple on a table, realistic photo."
Técnica Aplicada: Descripción Directa del Sujeto.
En el prompt básico, simplemente definí el sujeto principal ("An apple") y su ubicación ("on a table"), especificando el estilo ("realistic photo"). Como puedes ver, la IA generó una manzana roja estándar sobre una mesa de madera. Es una imagen correcta, pero le falta impacto visual, textura y una composición deliberada. No hay detalles sobre el tipo de manzana, la iluminación o la profundidad de campo.
Intermedio: "A high-resolution, photorealistic close-up photograph of a Gala apple on a rustic, aged oak wood table with a shallow depth of field. Soft, natural daylight from the left, highlighting natural skin streaking and tiny imperfections. Kitchen bokeh background. The apple is centered."
Técnica Aplicada: Especificación de Detalles Técnicos y Contexto.
Para la versión intermedia, apliqué técnicas para controlar la composición y el acabado. Definí el tipo de sujeto ("Gala apple") y el material exacto de la mesa ("rustic, aged oak wood"). Introduje controles fotográficos como "high-resolution," "close-up," "shallow depth of field," y la dirección de la "natural daylight," especificando el fondo desenfocado ("bokeh"). Al compararla con la básica, la imagen resultante tiene mucha más textura en el pelaje de la manzana y en la madera, además de un encuadre deliberado (centrado) que la hace ver profesional.
Avanzado: "Ultra-high resolution cinematic portrait photograph of a centered Gala apple, inspired by image_27.png but significantly more premium. Tactile skin detail with natural streaks and microscopic imperfections is rendered. Soft frontal left daylight lighting sculpts the texture. Subtle warm rim light creates depth. Ultra-shallow depth of field (f/1.4) isolates the apple, making it tack-sharp, while the aged oak wood surface and dramatic, deep velvet bokeh background fade into a smooth tapestry of charcoal and slate, consistent with the kitchen environment of image_27.png. Integrated film grain. Golden ratio composition."
Técnica Aplicada: Control Completo de Estilo, Atmosfera y Referencia Cruzada.
En el prompt avanzado, apliqué técnicas críticas para la coherencia visual y el "Vibe coding":
Coherencia Visual: Usé image_27.png como referencia de input para asegurar que el tipo de manzana, la mesa de madera y el entorno de cocina se mantuvieran consistentes. El prompt avanzado dice explícitamente "inspired by image_27.png but significantly more premium" y "consistent with the kitchen environment of image_27.png". Esto es "Vibe coding" puro: controlar la estética a través de la herencia de datos.
Estilo Cinemático: Usé cinematic portrait photograph y ultra-high resolution para definir una estética de primer nivel.
Atmosfera e Iluminación: Detallé la iluminación con controles de estudio: "soft frontal left daylight" para la textura, "subtle warm rim light" para la separación y profundidad, y un fondo dramático de "deep velvet bokeh."
Micro-detalles: Incluí controles de textura como "Tactile skin detail" y "microscopic imperfections."
Controles Fotográficos Precisos: Especificé el diafragma (f/1.4) para lograr el ultra-shallow depth of field y la composición ("Golden ratio").
Todos escribimos prompts. Pocos entendemos por qué unos funcionan y otros dan resultados genéricos.
Busque llevarlo al siguiente nivel, no mostrar 3 prompt o capturas — te dejo construir el tuyo. Es un Prompt Builder interactivo donde activas 8 ingredientes de prompt engineering (contexto, audiencia, tono, rol, few-shot, formato, restricciones, canal) y ves en tiempo real cómo el prompt crece, el resultado mejora y tu score sube de "Débil" a "Experto".
Cada ingrediente tiene un tooltip educativo que explica POR QUÉ funciona esa técnica. No es solo ver la diferencia — es entenderla.
El caso: la Barbería Don Chema, un negocio de barrio que necesita un mensaje de WhatsApp para atraer clientes. Mismo negocio, mismo objetivo, 8 niveles de calidad.
Stack: Next.js + Tailwind + Framer Motion. :)
Construí tres prompts para la misma tarea (validar un formulario), cada uno representando un nivel distinto de prompt engineering.
1er prompt:
"Escribe una función en JavaScript que valide un formulario de registro."
Resultado:
functionvalidarFormularioRegistro(datos){const errores ={};// Validar nombreif(!datos.nombre|| datos.nombre.trim().length<2){ errores.nombre='El nombre debe tener al menos 2 caracteres';}// Validar emailconst emailRegex =/^[^\s@]+@[^\s@]+\.[^\s@]+$/;if(!datos.email||!emailRegex.test(datos.email)){ errores.email='Email inválido';}// Validar contraseñaif(!datos.password|| datos.password.length<8){ errores.password='La contraseña debe tener al menos 8 caracteres';}// Validar confirmación de contraseñaif(datos.password!== datos.confirmPassword){ errores.confirmPassword='Las contraseñas no coinciden';}// Validar edad (opcional)if(datos.edad&&(datos.edad<18|| datos.edad>120)){ errores.edad='La edad debe estar entre 18 y 120 años';}// Validar teléfono (opcional)const telefonoRegex =/^\+?[\d\s-]{10,}$/;if(datos.telefono&&!telefonoRegex.test(datos.telefono)){ errores.telefono='Formato de teléfono inválido';}return{valido:Object.keys(errores).length===0, errores
};}// Ejemplo de usoconst resultado =validarFormularioRegistro({nombre:'Juan Pérez',email:'juan@example.com',password:'password123',confirmPassword:'password123',edad:25,telefono:'+34 612345678'});console.log(resultado);// { valido: true, errores: {} }
2do prompt:
"Eres un desarrollador frontend senior.
Escribe una función en JavaScript que valide un formulario de registro con los campos: nombre, email y contraseña.
Requisitos:
- El nombre debe tener al menos 2 caracteres
- El email debe tener formato válido
- La contraseña debe tener mínimo 8 caracteres, una mayúscula y un número
La función debe recibir un objeto con los datos del formulario y retornar un objeto con los errores encontrados. Si no hay errores, retorna un objeto vacío."
Resultado:
functionvalidateRegistrationForm({ nombre, email, contraseña }){const errors ={};// Validar nombreif(!nombre || nombre.trim().length<2){ errors.nombre='El nombre debe tener al menos 2 caracteres';}// Validar emailconst emailRegex =/^[^\s@]+@[^\s@]+\.[^\s@]+$/;if(!email ||!emailRegex.test(email)){ errors.email='El email debe tener un formato válido';}// Validar contraseñaif(!contraseña){ errors.contraseña='La contraseña es requerida';}else{if(contraseña.length<8){ errors.contraseña='La contraseña debe tener mínimo 8 caracteres';}elseif(!/[A-Z]/.test(contraseña)){ errors.contraseña='La contraseña debe tener al menos una mayúscula';}elseif(!/[0-9]/.test(contraseña)){ errors.contraseña='La contraseña debe tener al menos un número';}}return errors;}
3er prompt:
"## Contexto
Eres un desarrollador TypeScript senior trabajando en un SaaS B2B con formularios críticos de registro. La base de código usa JavaScript moderno (ES2022), sin dependencias externas para validaciones simples.
## Tarea
Escribe una función pura llamada validateRegisterForm que valide un formulario de registro.
## Firma esperada
- Input: objeto FormData con campos name, email, password, confirmPassword
- Output: objeto ValidationResult con estructura { isValid: boolean, errors: Record\<string, string> }
## Reglas de validación
- nombre: mínimo 2 caracteres, máximo 50, solo letras y espacios
- email: formato RFC 5322 simplificado
- contraseña: mínimo 8 caracteres, al menos una mayúscula, un número y un carácter especial
- confirmPassword: debe coincidir con password
## Restricciones
- Sin librerías externas (no zod, no yup)
- La función debe ser pura (sin side effects)
- Usar early return cuando sea posible
- JSDoc completo
## Ejemplo de uso esperado
/** * Resultado de la validación del formulario de registro /interface ValidationResult { isValid: boolean; errors: Record<string, string>;}/* * Datos del formulario de registro /interface FormData { name: string; email: string; password: string; confirmPassword: string;}/* * Valida un formulario de registro con reglas de negocio estrictas * * @param {FormData} formData - Datos del formulario a validar * @returns {ValidationResult} Objeto con estado de validación y errores por campo * * @example * validateRegisterForm({ * name: "John Doe", * email: "john@example.com", * password: "Secure123!", * confirmPassword: "Secure123!" * }) * // → { isValid: true, errors: {} } /function validateRegisterForm(formData: FormData): ValidationResult { const errors: Record<string, string> = {}; // Validar nombre const nameRegex = /^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ\s]+$/; if (!formData.name || formData.name.trim().length < 2) { errors.name = "Mínimo 2 caracteres"; } else if (formData.name.trim().length > 50) { errors.name = "Máximo 50 caracteres"; } else if (!nameRegex.test(formData.name.trim())) { errors.name = "Solo se permiten letras y espacios"; } // Validar email (RFC 5322 simplificado) const emailRegex = /^[^\s@]+@[^\s@]+.[^\s@]+$/; if (!formData.email || !emailRegex.test(formData.email.trim())) { errors.email = "Email inválido"; } // Validar contraseña const hasMinLength = formData.password && formData.password.length >= 8; const hasUpperCase = /[A-Z]/.test(formData.password); const hasNumber = /\d/.test(formData.password); const hasSpecialChar = /[!@#$%^&()_+-=[]{};':"\|,.<>/?]/.test(formData.password); if (!hasMinLength) { errors.password = "Mínimo 8 caracteres"; } else if (!hasUpperCase) { errors.password = "Debe contener al menos una mayúscula"; } else if (!hasNumber) { errors.password = "Debe contener al menos un número"; } else if (!hasSpecialChar) { errors.password = "Debe contener al menos un carácter especial"; } // Validar confirmación de contraseña if (formData.password !== formData.confirmPassword) { errors.confirmPassword = "Las contraseñas no coinciden"; } return { isValid: Object.keys(errors).length === 0, errors };}
```js
/**
* Resultado de la validación del formulario de registro
*/interfaceValidationResult{isValid: boolean;errors:Record<string, string>;}/**
* Datos del formulario de registro
*/interfaceFormData{name: string;email: string;password: string;confirmPassword: string;}/**
* Valida un formulario de registro con reglas de negocio estrictas
*
* @param{FormData}formData - Datos del formulario a validar
* @returns{ValidationResult} Objeto con estado de validación y errores por campo
*
* @example* validateRegisterForm({ * name:"John Doe", * email: "john@example.com",
* password: "Secure123!",
* confirmPassword: "Secure123!"
* })
* // → { isValid: true, errors: {}} */functionvalidateRegisterForm(formData:FormData):ValidationResult{consterrors:Record<string, string>={};// Validar nombreconst nameRegex =/^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ\s]+$/;if(!formData.name|| formData.name.trim().length<2){ errors.name="Mínimo 2 caracteres";}elseif(formData.name.trim().length>50){ errors.name="Máximo 50 caracteres";}elseif(!nameRegex.test(formData.name.trim())){ errors.name="Solo se permiten letras y espacios";}// Validar email (RFC 5322 simplificado)const emailRegex =/^[^\s@]+@[^\s@]+\.[^\s@]+$/;if(!formData.email||!emailRegex.test(formData.email.trim())){ errors.email="Email inválido";}// Validar contraseñaconst hasMinLength = formData.password&& formData.password.length>=8;const hasUpperCase =/[A-Z]/.test(formData.password);const hasNumber =/\d/.test(formData.password);const hasSpecialChar =/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(formData.password);if(!hasMinLength){ errors.password="Mínimo 8 caracteres";}elseif(!hasUpperCase){ errors.password="Debe contener al menos una mayúscula";}elseif(!hasNumber){ errors.password="Debe contener al menos un número";}elseif(!hasSpecialChar){ errors.password="Debe contener al menos un carácter especial";}// Validar confirmación de contraseñaif(formData.password!== formData.confirmPassword){ errors.confirmPassword="Las contraseñas no coinciden";}return{isValid:Object.keys(errors).length===0, errors
};}