- transcriptor: restaurar await toFile() — sin él Whisper recibía una
Promise en vez del archivo y devolvía 400
- transcriptor: detectar MIME type real (m4a para Instagram, mp3 TikTok)
- analizar: normalizar duración (TikTok→ms, Instagram→s float) a entero
antes de guardar en Supabase y pasar a GPT-4o
- analizar/server: reemplazar .catch() en insert de error por try/catch —
el builder de Supabase no expone .catch() directamente; el TypeError
escapaba al outer catch y causaba FUNCTION_INVOCATION_FAILED en Vercel
- validador: fallback de último recurso en enums cuando GPT-4o devuelve
valor inválido (ej. "ninguno" para desarrollo_tipo)
Probado end-to-end: Instagram Reel → OK en 27s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Vistas y Likes son ahora obligatorios al analizar un video
- El generador ordena referencias por likes/vistas reales en lugar del score_virabilidad estimado por GPT-4o
- Agrega CLAUDE.md con guía de arquitectura y comandos
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Campo "Contexto del Video" en formulario de análisis (Paso 03)
→ se pasa a GPT-4o para enriquecer el análisis
- 4 nuevos campos de diagnóstico: fortalezas, debilidades,
sugerencias_mejora, hashtags_sugeridos (click para copiar)
- Vista de detalle: card de métricas sociales (vistas/likes/compartidos
con engagement rate calculado)
- Muestra contexto original ingresado por el usuario
- Migración SQL 07: 5 nuevas columnas en tabla guiones
- validador.js: 4 nuevos campos en schema Zod
- server.js + api/analizar.js: acepta y guarda contexto_video
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AnalysisListView: tabla con todos los análisis (exitosos y fallidos), filtros por estado/niche y paginación
- backend/server.js: parámetro ?todos=1 para devolver análisis incluyendo procesado_ok=false
- api.js: método listarTodos() que incluye el parámetro todos
- Router: /analysis ahora apunta a AnalysisListView en lugar de redirigir
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>