31 Commits

Author SHA1 Message Date
6fe118bc26 feat(frontend): rediseño completo de vistas y componentes UI
Actualiza todas las vistas principales (Dashboard, Analysis, Scripts, Generate),
barra lateral, topbar y agrega sistema de toasts con composable useToast.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 06:41:45 -05:00
6982f1d4d2 fix(db): corregir migración 09 — dropear vista y función antes de alterar columna
Postgres no permite alterar el tipo de una columna usada por una vista
o función. La migración ahora dropea vista_resumen_nichos y
buscar_guiones_similares, altera score_engagement a numeric(10,4)
y las recrea con el nuevo tipo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:06:33 -05:00
ccbb7deea4 fix(db): corregir numeric overflow en score_engagement
La columna numeric(6,4) solo admite hasta 99.9999. En videos virales
donde likes > vistas el trigger calcular_score_engagement produce un
valor >100 y Postgres lanza overflow. Se amplía a numeric(10,4).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 20:03:19 -05:00
d9ba114b84 fix(transcriptor): detectar formato de audio desde Content-Type antes de inferir por URL
El fallback a mp3 causaba que Whisper rechazara archivos mp4/m4a de
plataformas sociales cuya URL no tiene extensión reconocible. Ahora
se prioriza el header Content-Type de la respuesta HTTP, luego la
extensión de la URL, y el fallback final es mp4 en lugar de mp3.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 19:58:51 -05:00
48978d1752 feat(analysis): agregar campo conclusion_estrategica al análisis
Nuevo campo de síntesis de ~15 líneas que integra todos los datos del
análisis (narrativa, Cialdini, neuromarketing, copywriting, métricas) en
un veredicto estratégico accionable. Incluye migración 08 para Supabase
y visualización en AnalysisDetailView antes del patrón ganador.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 19:14:07 -05:00
5eaa95abf7 feat(scripts): agregar capacidad de eliminar guiones desde el panel
Añade endpoints DELETE para guiones y guiones_generados (Vercel + Express),
métodos en api.js y botón de papelera con confirmación en ScriptsView.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 15:34:04 -05:00
1953be2da0 fix(core): resolucion de multiples bugs criticos de backend y visuales 2026-04-01 11:20:48 -05:00
b11d57465e fix: resolver FUNCTION_INVOCATION_FAILED y pipeline de Instagram
- 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>
2026-04-01 10:57:49 -05:00
4aecbef343 fix: corregir FUNCTION_INVOCATION_FAILED y audio m4a de Instagram
- vercel.json: revertir maxDuration a 60s (300 rompe planes Hobby)
- transcriptor: detectar extensión real del audio (TikTok→mp3,
  Instagram→m4a) para enviar el MIME type correcto a Whisper;
  enviarlo como mp3 cuando es m4a causaba fallo de decodificación

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 10:23:01 -05:00
21cf1c16a5 fix: corregir 4 puntos de falla del pipeline de análisis
- validador: normaliza enums de GPT-4o (acentos, mayúsculas, aliases como
  "ninguno"→"ninguna", "shock"→"declaracion_shock") y coerce strings
  numéricos a enteros antes de validar con Zod
- transcriptor: reintentos automáticos (3 intentos, backoff 1.2s) para
  URLs de CDN inestables; mejor mensaje de error en transcripción vacía
- analizador: captura JSON.parse inválido con mensaje diagnóstico
- vercel.json: aumenta timeout de analizar a 300s y generar a 120s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-01 09:57:49 -05:00
14372b5b29 feat: usar métricas reales para ordenar referencias del generador
- 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>
2026-04-01 09:00:20 -05:00
a453b87c6c fix(backend): replace native File with toFile from openai SDK 2026-04-01 08:24:57 -05:00
6054ea051a fix(prod): sync serverless function logic with vector and numeric fixes 2026-03-31 18:59:14 -05:00
fe2b8f5131 fix: pgvector format, robust error handling & 5-minute API timeout 2026-03-31 18:58:38 -05:00
81d3ba537f fix: corregir iconos y placeholder en LoginView
- Cambia material-icons por material-symbols-outlined (fuente correcta)
- Reemplaza edit_note por movie_creation como icono del logo
- Elimina placeholder del campo email
- Botón visibility ahora muestra icono en lugar de texto crudo

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 08:58:52 -05:00
9dafed72eb feat: sistema de autenticación con login, logout y guard de rutas
- Agrega LoginView con formulario de acceso
- Agrega store de auth (Pinia) con estado isAuthenticated
- Protege todas las rutas con beforeEach, redirige a /login si no autenticado
- App.vue oculta nav/sidebar en rutas públicas
- TopAppBar incluye botón de cerrar sesión

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 08:31:40 -05:00
e4c2602686 feat: rediseño UI minimalista con tema oscuro
Migración completa del frontend: nuevo sistema de tokens semánticos (canvas, surface, ink, accent), tipografía Bricolage Grotesque + Outfit, paleta oscura coherente con badges de plataforma adaptados.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 20:51:29 -05:00
99e410e701 chore: eliminar SettingsView por completo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:19:00 -05:00
6225e16741 feat: ocultar vista de Configuración del menú de navegación
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 10:18:10 -05:00
ae8975bf5a feat: agregar filtro Generados en Biblioteca de Guiones
- Toggle Analizados/Generados en ScriptsView con carga dinámica
- Modal con guion completo al hacer clic en tarjeta generada
- Tarjetas adaptadas por tipo (métricas y campos distintos)
- Nuevo endpoint api/generados/[id].js para detalle por ID

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 09:52:08 -05:00
be69c0aa48 feat: contexto de video, análisis extendido y métricas sociales
- 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>
2026-03-29 21:44:24 -05:00
2fc4168301 feat: análisis extendido (10 campos nuevos) + generador de guiones con GPT-4o
Análisis extendido:
- Nuevos campos: apertura_exacta, cierre_exacto, tecnica_retencion, momento_pico_seg
- Copywriting: nivel_consciencia (Schwartz), objecion_principal, avatar_descripcion
- Replicabilidad: ingredientes_clave, replicabilidad, ratio_emocion_logica
- analizador.js: prompt extendido con metodología Schwartz + retención
- validador.js: schema Zod actualizado con 6 nuevos enums
- Migración SQL 05: ALTER TABLE + nuevos ENUMs + índices

Generador de guiones:
- generador.js: lib GPT-4o con temperatura 0.7 y contexto de patrones
- server.js: endpoints POST /api/generar, GET /api/generados, GET /api/generados/:id
- backend/api/generar.js + api/generar.js + api/generados.js: Vercel handlers
- Migración SQL 06: tabla guiones_generados con score_estimado, variantes, notas
- GenerateView.vue: formulario completo + preview del guion con copy al portapapeles
- SideNavBar: nueva entrada "Generar" con ícono auto_fix_high
- Router: ruta /generate → GenerateView
- api.js: api.generar() + api.generados.listar/obtener()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 20:52:25 -05:00
78e8e48759 fix: corregir routing de Vercel y validar variables de entorno de Supabase
- vercel.json: rewrite explícito para /api/* evita que el catch-all SPA intercepte las serverless functions
- supabase.js: lanza error claro si SUPABASE_URL o SUPABASE_SERVICE_ROLE_KEY no están definidas

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 19:30:46 -05:00
847676dd2e feat: agregar vista de Historial de Análisis con soporte de fallidos
- 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>
2026-03-29 12:27:39 -05:00
0b2d800b87 feat: agregar vistas de Guiones y Configuración
- ScriptsView: biblioteca de guiones con filtros por niche/plataforma, búsqueda y ordenamiento
- SettingsView: estado de conexiones, variables de entorno y pipeline de análisis
- Router: reemplaza placeholders DashboardView con las nuevas vistas; /analysis redirige a /scripts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 08:39:03 -05:00
0d10b2f54c feat: traducir interfaz completa al español 2026-03-28 16:19:55 -05:00
56407fcaa1 fix: node 24.x en root y backend package.json 2026-03-28 16:13:16 -05:00
1401744022 fix: update Node.js version to 24.x for Vercel 2026-03-28 16:11:42 -05:00
70cd746646 Merge: keep project README 2026-03-28 16:03:26 -05:00
7695dd0be6 Initial commit — Sistema Generador de Guiones V4.0
Pipeline completo: URL → Whisper → GPT-4o → pgvector → Supabase
Frontend Vue 3 + Tailwind, Backend Express + Vercel serverless functions
2026-03-28 16:02:59 -05:00
c3991ba876 Initial commit 2026-03-28 15:48:11 -05:00