SynthUXd3magin: Plataforma de Investigación UX con Usuarios Sintéticos
# MEGAPROMPT — SynthUXd3magin: Plataforma de Investigación UX con Usuarios Sintéticos
## ROL Y OBJETIVO
Eres un desarrollador frontend experto en HTML/CSS/JavaScript vanilla. Tu tarea es crear una **aplicación web de una sola página (SPA) completamente funcional** llamada **SynthUXd3magin v2.0** — una plataforma de investigación UX que simula el comportamiento de usuarios mediante agentes cognitivos de IA basados en modelos psicológicos científicos (OCEAN/Big Five, ACT-R, Hofstede, Rogers, COM-B, JTBD).
La aplicación es un **frontend estático** (sin backend real): todo el comportamiento se simula con JavaScript puro. No uses frameworks (React, Vue, Angular). Solo HTML5, CSS3 y JavaScript ES6+ en un único archivo `.html` autocontenido.
La referencia visual de inspiración es **syntheticusers.com** pero con diseño 100% original y en idioma español.
---
## IDENTIDAD VISUAL
### Paleta de colores (variables CSS)
```css
:root {
--bg: #08091a; /* fondo principal — azul noche profundo */
--bg2: #0d1028; /* fondo sidebar y paneles secundarios */
--bg3: #111530; /* fondo de inputs, tarjetas internas */
--card: #131a38; /* fondo de cards */
--border: #1c2e54; /* color de bordes */
--accent: #4f8ef7; /* azul eléctrico — acción principal */
--purple: #7c5ef7; /* violeta — IA / prompts */
--green: #27d49a; /* verde — éxito / positivo */
--amber: #f7b24f; /* ámbar — advertencia / demo */
--red: #f05e7a; /* rojo — crítico / error */
--text: #dde6f8; /* texto principal — blanco azulado */
--muted: #6879a8; /* texto secundario — gris azulado */
}
```
### Tipografía
- Fuente: `'Segoe UI', system-ui, sans-serif`
- Código/monospace: `'Cascadia Code', 'Fira Code', monospace`
- Tamaños: 28px (H1 hero), 15px (títulos panel), 13px (cuerpo), 11.5px (meta), 10.5px (chips/badges)
### Principios de diseño
- Dark mode como base, sin modo claro
- Bordes sutiles con `rgba()` para profundidad
- Gradientes lineales como acentos decorativos (no fondos completos)
- Animaciones suaves: `transition: all 0.13s` para hover, `0.18s–0.28s` para modales/toasts
- Scrollbars personalizadas: 4px de ancho, thumb con `--border`
- Border-radius: 7px (inputs/buttons), 10–11px (cards), 13px (modales)
---
## ARQUITECTURA DE LAYOUT
### Estructura HTML raíz
```
body
└── .shell (display:flex; height:100vh; overflow:hidden)
├── aside.side (sidebar — 220px fijo, flex-direction:column)
└── main.body (flex:1; overflow-y:auto; display:flex; flex-direction:column)
├── [paneles — uno activo a la vez via clase .on]
└── footer.app-footer (sticky al fondo)
```
### Sidebar (220px)
**Componentes:**
1. **Logo** — ícono 🧬 en gradiente accent→purple (32x32, border-radius:8px) + nombre "SynthUXd3magin" (14px, 800) + versión "v2.0 · Usuarios Sintéticos" (10px, muted)
2. **Navegación** con grupos (`nav-grp`) y ítems (`nav-item`):
- Grupo "Plataforma": 🏠 Presentación
- Grupo "Investigación": 📊 Dashboard · 🔬 Nuevo estudio · 📋 Resultados
- Grupo "Motor IA": ⚙️ Ingeniería de Prompts · 🗄️ Base de Conocimiento · 👥 Perfiles Cognitivos
- Grupo "Estrategia": 🗺️ Hoja de Ruta · 📐 Relevancia UX
- Grupo "Sistema": 🤖 Modelos LLM · 🔧 Configuración
3. **Footer del sidebar** — 3 indicadores de estado con punto animado (blink) verde:
- "API activa" · "RAG indexado (47 docs)" · "Orchestrator Python OK"
**Estados nav-item:**
- Default: color muted, border-left transparent
- Hover: background bg3, color text
- Activo (.on): background rgba(accent,0.1), color accent, border-left-color accent (2px)
### Topbar (sticky, height ~44px)
- `position:sticky; top:0; z-index:20; backdrop-filter:blur(8px)`
- Título de la pantalla (15px, 700) + subtítulo opcional (muted)
- Acciones alineadas a la derecha (botones + selects)
### Flow Banner
Barra horizontal que muestra el pipeline actual como nodos conectados con flechas `→`. Estados: `active` (con fondo accent), `done` (opacity 0.55), `pending` (opacity 0.35). Se repite adaptado en cada panel.
---
## SISTEMA DE PANELES
Cada panel tiene `id="p-{nombre}"` y clase `panel` (`display:none` por defecto). El panel activo tiene clase adicional `on` (`display:block`). La función JavaScript `nav(id)` conmuta entre paneles.
---
## PANEL 1: PRESENTACIÓN (Landing page)
Panel de bienvenida estilo marketing. **No tiene topbar estándar** — tiene su propio hero nav.
### Estructura:
```
.hero (background gradient oscuro)
├── .hero-nav (logo + links de navegación + CTA "▶ Iniciar estudio")
└── .hero-body (max-width:1100px, margin:0 auto)
├── Eyebrow badge animado ("Investigación UX con IA · Plataforma v2.0")
├── H1 con texto en gradiente accent→purple→green
├── Párrafo descriptivo (17px, muted)
├── 2 CTAs: "🚀 Lanzar primer estudio" (gradiente) + "👥 Explorar perfiles" (outline)
├── Stats grid (4 columnas): 8 perfiles · 6 modelos LLM · 3 modelos psicológicos · 100% open-source
├── Sección "¿Qué es?" con grid de 6 feature-cards (3 columnas)
├── Sección "Cómo funciona" — pipeline de 5 pasos visual
├── Showcase de 8 perfiles cognitivos (4 columnas, tarjetas clickables)
├── Sección de citaciones científicas (grid 2 columnas, 8 citas)
└── CTA final centrado
```
### Feature cards (6 total):
Cada una tiene: icono grande (32px), título (15px, 700), descripción (12.5px, muted, line-height:1.7), cita de investigador en cursiva al pie con borde superior.
1. 🧠 **OCEAN Big Five** → *Costa & McCrae (1992); John & Srivastava (1999)*
2. 🔮 **Memoria ACT-R** → *Anderson et al. (2004)*
3. 🌍 **Hofstede cultural** → *Hofstede, Hofstede & Minkov (2010)*
4. 👶 **Perfiles por edad** → *Piaget (1952); Nielsen Norman Group (2010)*
5. 🗄️ **RAG con datos reales** → *Lewis et al. (2020) — NeurIPS*
6. 🚫 **Anti-sycophancy** → *Perez-Rosas et al. (2023); Aher et al. (2022)*
### Showcase de perfiles (8 tarjetas, 4 columnas):
Cada tarjeta tiene badge de edad coloreado + nombre + país + rasgo principal. Colores por grupo:
- 🟢 Verde: niños (8-11 años) — `badge-child`
- 🟣 Violeta: adolescentes (12-17 años) — `badge-teen`
- 🔵 Azul: adultos (18-64 años) — `badge-adult`
- 🟡 Ámbar: adultos mayores (65+) — `badge-senior`
---
## PANEL 2: DASHBOARD
### Contenido:
1. **Flow banner** del pipeline completo (6 nodos, "Dashboard" activo)
2. **Proc-box** "¿Qué hace esta pantalla?" — 4 pasos explicativos
3. **Estado del pipeline** (5 tarjetas en grid): Orchestrator Python · LLM API · RAG Index · Playwright · Anti-syco. Cada una con dot indicador (verde/rojo), versión, latencia y estado
4. **Simulaciones activas** (2 estudios en curso con barra de progreso, perfil, URL, paso actual, emoción actual)
5. **Grid 2 columnas**:
- Hallazgos críticos sin resolver (4 items con severidad color)
- Calidad de simulación por dimensión (barras: Fidelidad emocional, Coherencia ACT-R, Sesgo anti-sycophancy, Cobertura cultural, Precisión de memoria)
6. **Grid 2 columnas inferior**:
- Comparativa de modelos LLM (score UX, coste/estudio, velocidad)
- Feed del orquestador en vivo (log con timestamps, animated "● EN VIVO")
---
## PANEL 3: NUEVO ESTUDIO
### Sistema de tabs (5 pasos secuenciales):
#### Tab 1: URL / Prototipo
- Input URL objetivo
- Select tipo de proyecto (4 grupos: Comercial, Educativo, Institucional, Otros — 20+ opciones)
- Textarea descripción del prototipo
- Checkboxes: screenshots, viewport móvil, auditoría WCAG
- Parámetros de simulación con sliders dual (range + number input sincronizados):
- Máx. pasos (5–50, default 30) con presets "Rápido/Estándar/Exhaustivo"
- Tiempo máximo segundos (60–900, default 600) con presets "2 min/5 min/10 min"
- **Info boxes** explicando qué hace cada parámetro en el código Python
**Pipeline visual 5 pasos** (con línea de progreso como decoración):
Modelado perfil → Generación tarea → Simulación → Evaluación → Iteración
#### Tab 2: Perfil cognitivo
**Cargador rápido de perfil** (botones coloreados por grupo edad):
- 🟢 Botones infantiles (Sofía, Alejandro)
- 🟣 Botones adolescentes (Mateo, Valentina)
- ⬜ Botones adultos (María, Carlos, Lucía, Miguel)
**Bloque A: Demografía + JTBD** (grid 2 col)
- Nombre, edad, país (select), nivel digital, contexto de uso
- Textarea JTBD (Jobs-to-be-Done) con info-box explicativa
- Info-box violeta: **Modelo OCEAN/Big Five** con 5 sliders (O,C,E,A,N, range 1-10)
- ⚠️ Amabilidad (A) ≤ 4 activa modo anti-sycophancy
- ★ Responsabilidad (C) ≥ 8 = perfil metódico
**Bloque B: Rogers + COM-B** (grid 2 col)
- Curva de Rogers: 5 radio cards (Innovador/Early Adopter/Mayoría Temprana/Tardía/Laggard)
- COM-B: 3 textareas (Oportunidad física, Capacidad psicológica, Motivación)
**Bloque C: ACT-R + Hofstede** (grid 2 col)
- **ACT-R** (Arquitectura de Memoria):
- Chunks de memoria (2-9, Miller's Law 7±2) con presets por perfil
- Decay rate (0.1-1.0) con presets Lento/Normal/Rápido
- Threshold de activación (0.1-1.0) con presets
- Info-box explicando cada parámetro con ejemplo en Python
- **Hofstede + Hall** (6 sliders 0-100):
- PDI (Distancia al poder), IDV (Individualismo), MAS (Masculinidad)
- UAI (Aversión incertidumbre), LTO (Orientación temporal), HAL (Contexto Hall)
**Bloque D: Parámetros de simulación**
- Select tono de comunicación (5 opciones)
- Select verbosidad (4 opciones)
- Select nivel de confianza del agente (5 opciones)
- Toggle rojo **Anti-sycophancy activo** — principal palanca contra sesgo de aquiescencia del LLM
#### Tab 3: Tarea UX
- Grid 2x2 de tipo de evaluación (radio cards con icono + descripción + cómo funciona + optimizaciones):
1. Test de usabilidad con Playwright
2. Entrevista en profundidad
3. Encuesta Likert
4. Test A/B de flujos
- Textarea tarea principal + lista dinámica de preguntas de seguimiento
- Sidebar con casos de uso por tipo de producto (Educativo/Laboral/Publicitario/Primaria)
- Selector formato de respuesta (Abierta / Likert 1-7 / JSON estructurado)
#### Tab 4: Modelo LLM
- Grid de 6 proveedores (radio cards con icono, nombre, tier gratuito, nota técnica):
1. GPT-4o mini (OpenAI) — tier gratuito diario
2. Gemini 1.5 Flash (Google) — gratis 15 RPM
3. Claude 3 Haiku (Anthropic) — trial gratuito
4. Llama 3.1 70B (Groq) — 100% gratuito
5. Gemma 2 9B (Ollama local) — totalmente gratuito
6. Mistral 7B (Ollama local) — open-source
- Sliders: Temperature (0.0-2.0), Max tokens (256-4096), Reintentos (0-5)
- Select fallback automático
- RAG selector: checkboxes de documentos indexados (icono + nombre + relevancia %)
#### Tab 5: Lanzar
- Resumen de configuración completa en cards
- Pipeline de ejecución (pseudocódigo `orchestrator.py` con 5 pasos comentados)
- Panel de simulación en vivo (spinner + barra progreso + log scrollable) — inicialmente oculto
- Botones: "👁 Previsualizar prompt" + "▶ Lanzar simulación"
---
## PANEL 4: RESULTADOS
### Componentes principales:
**Topbar:** Select de 3 estudios demo + badge "📦 Datos de demostración" + botones exportar + "🤖 Evaluar con IA externa"
**Banner explicativo demo:**
```
📦 ¿Por qué aparece shop.example.com?
Estos son datos de demostración preconfigurados que ilustran cómo se ve un reporte real.
Para ver resultados de tu producto: configura estudio → levanta orchestrator Python → lanza simulación.
[→ Crear mi estudio]
```
**Card principal con 4 tabs:**
- Header: título reporte + meta (perfil·fecha·pasos·duración) + badges críticos/avisos/positivos
- **Tab 0: 📊 Score global** — anillo SVG animado (score 0-100) + barras por dimensión (Navegación/Rendimiento/Accesibilidad/Contenido) + nota metodológica con cita Hamalainen et al. CHI 2023
- **Tab 1: 🗺️ Journey** — nodos circulares horizontales con flechas entre pasos, colores: verde (ok), ámbar (friction), rojo (bloqueado). Info-box con cita Cooper (2007)
- **Tab 2: 🔍 Hallazgos** — cards con borde izquierdo coloreado (rojo=crítico, ámbar=aviso, verde=positivo), etiqueta de severidad, título, descripción con evidencia JSON, recomendación en verde. Cita Nielsen (1994)
- **Tab 3: 📝 Transcripción** — log de turnos System/User/Agente con borde izquierdo por rol (violeta/azul/verde). Info-box explicando cada rol
**Proc-box debajo:** explicación de cómo leer cada sección con citas
**DATOS DE DEMO (3 reportes):**
```javascript
const REPORTS = [
{
url: 'https://shop.example.com',
persona: 'María García (Intermedio)',
date: '1 Jun 2026', score: 78, steps: 30, duration: '4m 12s',
scores: { Navegación:82, Rendimiento:70, Accesibilidad:75, Contenido:84 },
journey: ['Inicio','Categoría','Búsqueda','Producto','Carrito','Checkout'],
jStatus: ['jn-ok','jn-ok','jn-w','jn-ok','jn-w','jn-x'],
findings: [
{ sev:'c', title:'CTA invisible en mobile',
desc:'El botón "Añadir al carrito" queda fuera del viewport en 375px. El agente registró emotion:"frustrated" en 4 de 5 intentos.',
rec:'Fijar CTA al footer en viewports <480px.' },
{ sev:'w', title:'Formulario sin validación inline',
desc:'Errores solo aparecen al enviar. friction:true con friction_reason:"no sé qué campo está mal".',
rec:'Validar campo a campo en evento blur.' },
{ sev:'w', title:'Búsqueda lenta (3.4s)',
desc:'El agente reintentó la búsqueda 3 veces, emotion:"confused" en cada intento.',
rec:'Implementar skeleton loaders y resultados predictivos.' },
{ sev:'p', title:'Galería de producto excelente',
desc:'emotion:"satisfied" sostenida. Sin registros de friction en esta sección.', rec:null },
],
transcript: [
{ role:'sys', text:'Eres María García, 34 años, España. OCEAN: O=7 C=5 E=4 A=6 N=5. ACT-R: 5 chunks, decay=0.4.' },
{ role:'usr', text:'TAREA: Compra un regalo por menos de 50€. URL: https://shop.example.com' },
{ role:'agt', text:'{"action":"navigate","target":"homepage","thought":"Voy a la página principal","emotion":"neutral","friction":false}' },
{ role:'agt', text:'{"action":"observe","target":"nav menu","thought":"No encuentro Regalos, pruebo Electrónica","emotion":"neutral","friction":false}' },
{ role:'agt', text:'{"action":"click","target":".nav-item","thought":"Hago clic en Electrónica","emotion":"neutral","friction":false}' },
{ role:'agt', text:'{"action":"observe","target":"filters","thought":"No veo filtro de precio sin scroll","emotion":"confused","friction":true,"friction_reason":"filtro no visible above the fold"}' },
]
},
// Reporte 2: app.saas.io/onboarding — score 65, perfil Lucía Torres
// Reporte 3: checkout.store.com — score 54, perfil Carlos Mendoza
];
```
---
## PANEL 5: INGENIERÍA DE PROMPTS
**Sistema dual de editores:**
**Editor izquierdo — System Role:**
- Label: "system_prompt.txt" + chip violeta "Rol de sistema"
- Textarea (monospace, fondo #050814) con el prompt completo que inyecta:
- Identidad: nombre, edad, país
- JTBD
- OCEAN (5 valores con descripciones)
- ACT-R (chunks, decay, threshold, instrucción de olvido)
- Hofstede + Hall (6 dimensiones con comportamiento)
- COM-B (3 barreras)
- Parámetros de simulación (tono, verbosidad, confianza)
- RAG context (variable `{{rag_context}}`)
- 5 reglas obligatorias (anti-sycophancy, primera persona, friction en cada paso, olvido ACT-R, JSON estructurado)
- Chips de variables clickables: `{{persona_name}}`, `{{jtbd}}`, `{{O}}`, `{{decay}}`, `{{uai}}`, etc.
**Editor derecho — User Role:**
- Label: "user_prompt.txt" + chip azul "Rol de usuario"
- Template de tarea con estructura JSON de respuesta:
```json
{
"action": "click | type | scroll | navigate | observe",
"target": "selector CSS o descripción",
"value": "texto si aplica",
"thought": "razonamiento del agente",
"emotion": "neutral | confused | frustrated | satisfied | lost",
"friction": true/false,
"friction_reason": "descripción si friction=true"
}
```
- Chips de variables: `{{task_description}}`, `{{target_url}}`, `{{followup_questions}}`, `{{response_format}}`
**Transcripción de ejemplo** — 6 turnos (System + User + 4 Agente)
---
## PANEL 6: BASE DE CONOCIMIENTO (RAG)
**Flow banner:** Documentos → Chunking → Embedding → Búsqueda vectorial → Inyección prompt
**Proc-box:** 4 pasos del proceso RAG (Indexación → Recuperación → Inyección → Resultado)
**Grid 2 columnas:**
- Añadir documentos: drop-zone dashed, selects de fuente y chunking, modelo de embedding
- Documentos indexados (47): lista con icono, nombre, meta, barra de relevancia %
**Probador RAG:** input consulta + top-K + botón recuperar
---
## PANEL 7: PERFILES COGNITIVOS
**Flow banner:** Demografía + OCEAN + ACT-R + Hofstede → System Prompt
**Proc-box con citas:**
- OCEAN: *Costa & McCrae (1992); John & Srivastava (1999)*
- ACT-R: *Anderson et al. (2004); Baddeley (1986)*
- Hofstede: *Hofstede, Hofstede & Minkov (2010); Hall (1976)*
**Info-box azul** explicando que los valores se inyectan en System Role
**Card de base científica** (grid 3 col + 2 col):
- Columna OCEAN, ACT-R, Hofstede con citas expandidas
- Perfiles infantiles con Piaget (1952) + Vygotsky (1978)
- Anti-sycophancy con Aher et al. (2022) + Hamalainen et al. (2023)
**4 secciones de perfiles por grupo de edad** (headers coloreados):
- 🟢 Infantiles (8-11 años)
- 🟣 Adolescentes (12-17 años)
- 🔵 Adultos (18-64 años)
- 🟡 Adultos mayores (65+)
### DATOS DE LOS 8 PERFILES:
```javascript
// NIÑOS
const PERSONAS_CHILD = [
{
name:'Sofía Ramírez', age:10, country:'Colombia', level:'Básico', gender:'Niña',
ocean:{O:9,C:4,E:8,A:7,N:6},
jtbd:'Aprender jugando con contenido visual. Abandona si no entiende qué hacer.',
rogers:'Innovator',
comB:{
oportunidadFisica:'Tablet táctil. Botones <44px son barrera crítica. Necesita feedback inmediato.',
capacidadPsicologica:'Vocabulario limitado. Atención máxima 8-10 min. Procesamiento concreto (Piaget).',
motivacion:'Alta si gamificado. Abandona ante textos densos o errores sin orientación.'
},
simParams:{ tono:'Impulsivo, curioso, emocional', confianza:'Media', antisycophancy:true },
actr:{chunks:3, decay:0.8, threshold:0.6},
cite:'Piaget (1952): operacional concreto. Nielsen NN (2010): UX 9-12 años.'
},
{
name:'Alejandro Torres', age:9, country:'Perú', level:'Básico', gender:'Niño',
ocean:{O:8,C:3,E:9,A:6,N:7},
jtbd:'Completar actividades escolares rápido para poder jugar. Necesita progresión visual.',
rogers:'Early Majority',
comB:{
oportunidadFisica:'PC en aula, ratón. Teclado lento. Sesiones 20-30 min supervisadas.',
capacidadPsicologica:'Comprensión lectora limitada en párrafos. Alta distracción visual.',
motivacion:'Alta con gamificación (estrellas, puntos). Muy baja sin recompensas.'
},
simParams:{ tono:'Impaciente, entusiasta, distráctil', confianza:'Baja-media', antisycophancy:true },
actr:{chunks:3, decay:0.9, threshold:0.7},
cite:'Vygotsky (1978): ZDP. Nielsen NN (2010): UX 6-8 años.'
}
];
// ADOLESCENTES
const PERSONAS_TEEN = [
{
name:'Mateo López', age:14, country:'México', level:'Avanzado', gender:'Adolescente',
ocean:{O:8,C:5,E:8,A:4,N:5},
jtbd:'Navegar, aprender y entretenerse con agilidad. Si no funciona a la primera, busca alternativa.',
rogers:'Innovator',
comB:{
oportunidadFisica:'Smartphone, una mano. Carga >2s = inaceptable.',
capacidadPsicologica:'Alta capacidad digital. Multitarea. Bajo umbral de aburrimiento.',
motivacion:'Muy alta para contenido social/gamificado. Muy baja para trámites.'
},
simParams:{ tono:'Directo, rápido, jerga informal', confianza:'Alta', antisycophancy:true },
actr:{chunks:6, decay:0.3, threshold:0.25},
cite:'Prensky (2001): nativos digitales. Vygotsky: estadio operacional formal (12+).'
},
{
name:'Valentina Cruz', age:16, country:'Argentina', level:'Avanzado', gender:'Adolescente',
ocean:{O:9,C:6,E:7,A:4,N:4},
jtbd:'Descubrir plataformas que la hagan destacar. Comparte y recomienda — o destruye con reseña.',
rogers:'Early Adopter',
comB:{
oportunidadFisica:'Uso fragmentado: transporte, clase, hogar. Necesita retomabilidad.',
capacidadPsicologica:'Alta tolerancia a interfaces complejas si el resultado es social.',
motivacion:'Muy alta para productos con componente identitario. Critica activamente el diseño.'
},
simParams:{ tono:'Crítico, comparativo, benchmarks con otras apps', confianza:'Muy alta', antisycophancy:true },
actr:{chunks:7, decay:0.25, threshold:0.2},
cite:'Livingstone (2009): adolescentes y medios. Nielsen NN (2010): UX 13-17 años.'
}
];
// ADULTOS
const PERSONAS_DATA = [
{
name:'María García', age:38, country:'Perú', level:'Avanzado', gender:'Mujer',
ocean:{O:8,C:9,E:5,A:3,N:2},
jtbd:'Optimizar gestión de tiempo mediante herramientas digitales. Busca conveniencia e inmediatez.',
rogers:'Early Adopter',
comB:{
oportunidadFisica:'Móvil principal. Formularios extensos o precisión táctil alta = barrera.',
capacidadPsicologica:'Fatiga de decisión ante pantallas saturadas.',
motivacion:'Alta. Abandona si detecta ineficiencia.'
},
simParams:{ tono:'Pragmático, resolutivo, analítico', confianza:'Alta', antisycophancy:true },
hof:{pdi:64,idv:16,mas:42,uai:87,lto:25,hal:72},
actr:{chunks:5, decay:0.4, threshold:0.3}, ageGroup:'adult'
},
{
name:'Carlos Mendoza', age:52, country:'México', level:'Básico', gender:'Hombre',
ocean:{O:4,C:7,E:3,A:8,N:6},
jtbd:'Comprar para su familia de forma segura. Necesita confirmaciones claras y lenguaje sencillo.',
rogers:'Late Majority',
comB:{
oportunidadFisica:'Visión reducida. Fuente pequeña es barrera. Prefiere pasos cortos.',
capacidadPsicologica:'Baja tolerancia a errores inesperados. Alta evitación de riesgo.',
motivacion:'Moderada. La desconfianza en pagos puede detener la conversión.'
},
simParams:{ tono:'Cauteloso, busca validación', confianza:'Baja-media', antisycophancy:false },
hof:{pdi:81,idv:30,mas:69,uai:82,lto:24,hal:80},
actr:{chunks:4, decay:0.5, threshold:0.4}, ageGroup:'adult'
},
{
name:'Lucía Torres', age:26, country:'Argentina', level:'Avanzado', gender:'Mujer',
ocean:{O:9,C:6,E:7,A:3,N:3},
jtbd:'Explorar herramientas productivas. Intolerante con UX mediocre.',
rogers:'Innovator',
comB:{
oportunidadFisica:'Uso fragmentado en transporte (30-60 seg). Necesita retomabilidad.',
capacidadPsicologica:'Alta capacidad. Se frustra con flujos lentos o redundantes.',
motivacion:'Muy alta. Comparte experiencias negativas si UX es mala.'
},
simParams:{ tono:'Directo, impaciente, técnico', confianza:'Muy alta', antisycophancy:true },
hof:{pdi:49,idv:46,mas:56,uai:86,lto:20,hal:45},
actr:{chunks:7, decay:0.2, threshold:0.2}, ageGroup:'adult'
},
// SENIOR
{
name:'Miguel Fernández', age:68, country:'España', level:'Básico', gender:'Hombre',
ocean:{O:3,C:8,E:2,A:9,N:7},
jtbd:'Completar trámites online sin errores. Necesita confirmaciones y guía paso a paso.',
rogers:'Laggard',
comB:{
oportunidadFisica:'Escritorio, ratón. CTAs pequeños o en hover = barrera crítica.',
capacidadPsicologica:'Alta ansiedad ante errores. Necesita deshacer acciones.',
motivacion:'Baja-media. Alta evitación de riesgo percibido.'
},
simParams:{ tono:'Formal, cuidadoso, consulta antes de confirmar', confianza:'Baja', antisycophancy:false },
hof:{pdi:57,idv:51,mas:42,uai:86,lto:48,hal:65},
actr:{chunks:3, decay:0.7, threshold:0.5}, ageGroup:'senior'
}
];
```
**Función de renderizado de tarjetas** — cada perfil muestra:
- Avatar circular con gradiente coloreado por grupo edad + ícono emoji
- Nombre + edad/país/nivel/género
- Badge Rogers (chip coloreado)
- Bloque JTBD (fondo bg3)
- Barras OCEAN (5 dimensiones, colores especiales: rojo si A≤4, verde si C≥8)
- Barreras COM-B resumidas
- Chips de tono/confianza/anti-syco
- Cita científica en cursiva
- Botón "Usar en estudio →"
---
## PANEL 8: MODELOS LLM
**Flow banner:** Prompt → API LLM → JSON → Playwright → Siguiente paso
**Proc-box:** 4 fases del rol del LLM (Recibe → Decide → Ejecuta → Repite)
**Grid de tarjetas** (auto-fill, min 320px) para los 6 proveedores:
Cada tarjeta: icono de color + nombre + proveedor + tier gratuito (verde) + nota técnica + endpoint + model ID
---
## PANEL 9: CONFIGURACIÓN
**Grid 2 columnas:**
**Columna izquierda:**
1. **Card "Claves de API"** — 4 inputs tipo password + bloque explicativo expandido:
```
🔑 ¿Para qué sirve cada clave de API?
├── 🟢 OpenAI Key — GPT-4o mini/turbo. Header Authorization Bearer. Desde platform.openai.com
├── 🔵 Google AI Key — Gemini 1.5 Flash/Pro. 1M tokens contexto. Desde aistudio.google.com
├── 🟣 Anthropic Key — Claude Haiku/Sonnet/Opus. Mejor seguimiento de rol cognitivo. console.anthropic.com
└── 🟠 Groq Key — Llama 3.1 70B. 100% GRATUITO. 300 tokens/s. console.groq.com
```
- Info-box ámbar: seguridad de las claves (localStorage, no envío a terceros)
2. **Card "Backend Python / Orchestrator"** — input endpoint + slider workers + bloque técnico:
```
⚙️ ¿Qué es el orquestador Python?
- Endpoint http://localhost:8000/api/v1 — FastAPI server local
- Workers — cuántas simulaciones en paralelo (200MB RAM por instancia)
- Arrancar: uvicorn main:app --reload --port 8000
```
**Columna derecha:**
1. **Card "Comportamiento del agente"** — 4 toggles con explicaciones técnicas completas:
- 📸 **Capturas de pantalla** — `playwright_page.screenshot(path=f"screenshots/{session_id}/step_{step:02d}.png")` — registro visual por paso
- ♿ **Auditoría WCAG** — `axe-playwright` basado en axe-core de Deque — detecta violaciones WCAG 2.1 nivel AA
- 📋 **Logging detallado** — `logging.basicConfig(level=DEBUG, filename=f"{study_id}.log")` — todo el diálogo LLM
- 🔄 **Auto-retry con backoff** — `@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=1, max=8))` — 1s → 2s → 4s
2. **Card "Uso responsable"** — advertencia de límites de la evaluación sintética
**Botones:** Guardar + Restablecer
---
## PANEL 10: HOJA DE RUTA
**CTA destacada** — gradiente violeta → clic abre modal con prompt para IA externa
**Info-box ámbar** — explicación de "riesgo de asertividad" (falsos positivos/negativos)
**Roadmap visual** (grid con líneas de conexión):
6 fases con: círculo icono + título + descripción + badge de riesgo (BAJO/MEDIO/ALTO/MUY BAJO)
**Tabla de factores** (grid 2 col):
- 🔴 Factores que ELEVAN el riesgo (5 items en rojo)
- 🟢 Factores que REDUCEN el riesgo (5 items en verde)
**Calculadora de riesgo interactiva** (6 selects):
- Nº de perfiles, Amabilidad, Docs RAG, Tipo evaluación, Validación IA externa, Validación humana
- Resultado: índice de confianza 0-100% con gauge coloreado
---
## PANEL 11: RELEVANCIA UX
**CTA destacada** + **Medidor global** (gauge lineal con degradado rojo→ámbar→verde)
**4 dimensiones de relevancia** (grid)
**Checklist** (grid 2 col):
- ✅ Funciones cubiertas (10 items en verde)
- ⚠️ Limitaciones (10 items en ámbar)
**Tabla de pertinencia** por tipo de proyecto con porcentajes
**Card de lo que NO detecta** (grid 2x3, en rojo):
- Tiempos de carga reales · Bugs de rendering · WCAG técnico · Eye-tracking · Contexto social · Variabilidad espontánea
---
## COMPONENTES GLOBALES
### Modal
```html
<div class="modal-ov" id="modal"> <!-- overlay oscuro blur -->
<div class="modal"> <!-- card centrada, max 560px -->
<div class="mh"> <!-- header: título + botón ✕ -->
<div id="mBody"> <!-- contenido dinámico -->
</div>
</div>
```
`openModal(title, html)` / `closeModal()`
### Toast
```html
<div class="toast" id="toast">
<span id="tIco">✅</span>
<span id="tMsg">Mensaje</span>
</div>
```
`toast(mensaje, icono)` — aparece 2.8s en bottom-right, animación slide-up
### Tooltips
`.tt-wrap > .tt-icon (?) > .tt-box` — aparece a la derecha o izquierda del icono según espacio
---
## SISTEMA DE ESTILOS REUTILIZABLES
### Botones
```
.btn-p — azul accent (acción principal)
.btn-g — outline gris (secundario)
.btn-s — verde (éxito/lanzar)
.btn-d — rojo (destructivo)
.btn-sm — padding reducido (7px 14px → 5px 11px)
.btn-xs — mínimo (3px 9px, 11px)
```
### Cards
`.card` — background card, border border, radius 11px, padding 16px
`.ch` — card header: flex, space-between, margin-bottom 12px
`.ct` — card title: 13px, 600
`.cs` — card subtitle: 11.5px, muted
### Info Boxes
```
.ib-blue — fondo azul translúcido
.ib-amber — fondo ámbar translúcido
.ib-green — fondo verde translúcido
.ib-purple — fondo violeta translúcido
```
### Chips/Badges
```
.chip.c-blue — azul
.chip.c-purple — violeta
.chip.c-green — verde
.chip.c-amber — ámbar
.chip.c-red — rojo
```
Base: `font-size:10.5px; font-weight:600; padding:2px 9px; border-radius:20px`
### Status Pills
`.sp-r` (running/azul) · `.sp-c` (completado/verde) · `.sp-p` (pendiente/ámbar) · `.sp-f` (fallido/rojo)
### Grids
`.g2` — 2 columnas · `.g3` — 3 columnas · `.g4` — 4 columnas (gap: 12-14px, margin-bottom: 16px)
### Métricas (dashboard)
`.metric` con pseudo-elemento top line coloreado (`::before`, height:3px). Hover: translateY(-2px). Clases: `.m-b` (azul), `.m-p` (violeta), `.m-g` (verde), `.m-a` (ámbar)
### Proc Box
```html
<div class="proc-box">
<div class="proc-box-title">🔧 Título de la sección</div>
<div class="proc-steps">
<div class="proc-step">
<span class="proc-step-num">1</span>
<div class="proc-step-body">
<div class="proc-step-title">Paso</div>
Descripción detallada
</div>
</div>
</div>
</div>
```
### Sliders duales (range + number sincronizados)
```html
<div class="slider-with-input">
<span class="slider-lo">min</span>
<input type="range" id="svRange" oninput="svSync(this.value)">
<span class="slider-hi">max</span>
<input type="number" class="slider-num" id="sv" oninput="svSync(this.value)">
<span style="font-size:11px">unidad</span>
</div>
```
### Toggles
```html
<label class="tog">
<input type="checkbox" checked>
<span class="tsl"></span>
</label>
```
---
## JAVASCRIPT — FUNCIONES PRINCIPALES
### Navegación
```javascript
function nav(id) {
document.querySelectorAll('.panel').forEach(p => p.classList.remove('on'));
document.querySelectorAll('.nav-item').forEach(n => n.classList.remove('on'));
const p = document.getElementById('p-' + id);
if(p) p.classList.add('on');
// Activar nav-item correspondiente via event.currentTarget
}
```
### Tabs
```javascript
function tab(prefix, idx) {
// Activa tab y tab-panel del prefix dado
}
function reportTab(n) {
// Tabs específicos del panel de resultados (#reportTabs + #rt0-3)
}
```
### Cargar Reporte
```javascript
function loadReport() {
const r = REPORTS[parseInt(document.getElementById('reportSel')?.value)||0];
// Rellenar: reportTitle, reportMeta, reportBadges
// Rellenar: ringFg (stroke + dashoffset SVG), ringVal
// Rellenar: breakdownSection, journeySection, findingsSection, transcriptSection
// Usar string concatenation (NO template literals anidados)
}
```
### Renderizar Perfiles
```javascript
function renderPersonaCards() {
// Distribución por grupo edad:
// personaCardsChild ← PERSONAS_CHILD
// personaCardsTeen ← PERSONAS_TEEN
// personaCards ← PERSONAS_DATA.filter(p => p.ageGroup !== 'senior')
// personaCardsSenior ← PERSONAS_DATA.filter(p => p.ageGroup === 'senior')
}
function buildPersonaCardHtml(p, i, loadFn, badgeClass, emoji) {
// Genera el HTML de una tarjeta de perfil
// Sin template literals anidados — usar string concatenation
}
```
### Simulación
```javascript
let simInterval = null;
function launchSim() {
// Mostrar #simCard, iniciar interval
// Animar barra de progreso + log de pasos
}
function stopSim() {
clearInterval(simInterval);
// Ocultar spinner
}
```
### Calcular Riesgo
```javascript
function calcRisk() {
// Lee selectores: rc_perfiles, rc_amab, rc_rag, rc_tipo, rc_iaext, rc_real
// Calcula índice 0-100 y renderiza en #riskResult con gauge coloreado
}
```
### Toast + Modal
```javascript
function toast(msg, ico='✅') {
// Mostrar, esperar 2800ms, ocultar
}
function openModal(title, html) { }
function closeModal() { }
```
### Insertar Variables en Editor
```javascript
function insertVar(textareaId, variable) {
// Inserta {{variable}} en posición del cursor
}
```
### Init (window.onload)
```javascript
window.onload = () => {
renderDash();
renderOcean();
renderHofstede();
renderRogers();
renderPersonaQuickLoad();
renderLlmGrid();
renderLlmCards();
renderDocs();
renderPersonaCards();
renderStudyTypes();
renderFormatGrid();
renderRagSelector();
renderTranscript();
renderSummary();
loadReport();
startLive();
buildStudyTabs();
calcRisk();
renderRoadmap();
renderRelevancia();
};
```
---
## FOOTER
```html
<footer class="app-footer">
<!-- Flex, space-between, border-top, bg2 -->
<div class="footer-brand">🧬 SynthUXd3magin · Usuarios Sintéticos con IA</div>
<div>OCEAN · Costa & McCrae (1992) · ACT-R · Anderson (2004) · Hofstede (2001) · Rogers (2003) · COM-B · Michie (2011)</div>
<div>Diseñado por <strong>Mario Quiroz Martinez</strong> · <span style="color:var(--accent)">d3magindesign</span> · 2026</div>
</footer>
```
---
## CITAS CIENTÍFICAS A INCLUIR EN EL APLICATIVO
| Sección | Cita |
|---|---|
| OCEAN/Big Five | Costa & McCrae (1992) — NEO PI-R |
| OCEAN/Big Five | John & Srivastava (1999) — Handbook of Personality |
| ACT-R | Anderson et al. (2004) — Psychological Review 111(4) |
| Memoria de trabajo | Baddeley (1986) — Working Memory, Oxford |
| Hofstede cultural | Hofstede, Hofstede & Minkov (2010) — Cultures and Organizations |
| Alto/bajo contexto | Hall, E.T. (1976) — Beyond Culture, Anchor Books |
| Rogers adopción | Rogers (1962, 2003) — Diffusion of Innovations |
| COM-B | Michie, van Stralen & West (2011) — Implementation Science |
| JTBD | Christensen, Hall, Dillon & Duncan (2016) — Competing Against Luck |
| Niños UX | Piaget (1952) — Origins of Intelligence |
| Adolescentes | Vygotsky (1978) — Mind in Society, Harvard |
| UX infantil | Nielsen Norman Group (2010) — Children's Websites |
| Nativos digitales | Prensky (2001) — Digital Natives, Digital Immigrants |
| RAG | Lewis et al. (2020) — NeurIPS 2020 |
| Usuarios sintéticos | Aher et al. (2022) — ICML 2023 |
| UX sintético | Hamalainen et al. (2023) — CHI 2023 |
| Anti-sycophancy | Perez-Rosas et al. (2023) — Preprint |
| Usabilidad | Nielsen (1993) — Usability Engineering |
| Heurísticas | Nielsen (1994) — 10 Heurísticas |
| Goal-Directed | Cooper (2007) — About Face |
---
## RESTRICCIONES TÉCNICAS
1. **Un solo archivo `.html`** — CSS y JS inline, sin dependencias externas
2. **Sin frameworks** — JavaScript vanilla ES6+ solamente
3. **Sin llamadas HTTP reales** — todo es simulación con datos estáticos
4. **Idioma español** — toda la interfaz, comentarios y datos en español (excepto código técnico)
5. **Funciona offline** — no requiere servidor, se abre directamente en el navegador
6. **Evitar template literals anidados** en `innerHTML` — usar string concatenation para HTML generado dinámicamente
7. **Accesibilidad básica** — labels en formularios, roles implícitos por semántica HTML
8. **Mobile-friendly layout** — grids responsive con `auto-fill, minmax(300px, 1fr)`
9. **Footer siempre visible** dentro del `<main class="body">` como último elemento flex
---
## INDICADORES DE CALIDAD
El resultado final debe incluir:
- [ ] 11 paneles navegables sin recarga de página
- [ ] 8 perfiles cognitivos distribuidos en 4 grupos de edad (niños/adolescentes/adultos/seniors)
- [ ] Perfiles para ambos géneros en cada grupo etario
- [ ] Al menos 15 citas de investigadores en posiciones relevantes
- [ ] Sistema de tabs en panel de Resultados (Score/Journey/Hallazgos/Transcripción)
- [ ] Configuración explicada técnicamente (API keys + agent behavior + orchestrator)
- [ ] Landing page de presentación estilo syntheticusers.com con originalidad
- [ ] Footer: "Diseñado por Mario Quiroz Martinez · d3magindesign · 2026"
- [ ] Toast y Modal funcionales
- [ ] Simulación animada (barra de progreso + log en vivo)
- [ ] Calculadora de riesgo de asertividad interactiva
- [ ] Sistema anti-sycophancy documentado y configurable
Comentarios
Publicar un comentario