Ir al contenido

Historial de cambios importantes en la plataforma. Este documento ayuda al equipo a entender qué se ha implementado y cuando.


2026-04-02: Programa de Referidos — Gamificación (#105)

Sección titulada «2026-04-02: Programa de Referidos — Gamificación (#105)»

El sistema de referidos ahora incluye niveles, hitos y tabla de líderes:

  • Sistema de badges/niveles: Explorador → Bronce → Plata → Oro → Platino según conversiones acumuladas. El dashboard muestra tu nivel actual con barra de progreso al siguiente nivel.
  • Bonificaciones por hitos: Al alcanzar 1, 5, 10 o 25 conversiones se generan automáticamente recompensas fijas de $10, $25, $50 o $150.
  • Tabla de líderes pública: /referrals/leaderboard muestra el top 10 de referidores (opt-in) con su nivel y número de conversiones.
  • Tracking por canal: Los enlaces de compartir en Twitter, LinkedIn, WhatsApp y Email incluyen parámetro ?src= para distinguir la fuente del tráfico.

2026-04-02: B2B Organizaciones — Auto-enrollment completo (#104)

Sección titulada «2026-04-02: B2B Organizaciones — Auto-enrollment completo (#104)»

Las organizaciones ahora inscriben automáticamente a sus miembros en los cursos:

  • Al aceptar una invitación: el nuevo miembro queda inscrito de inmediato en todos los cursos asignados a la organización.
  • Al asignar un curso a la organización: todos los miembros existentes quedan inscritos automáticamente en ese curso.
  • No se generan matrículas duplicadas (idempotente).

2026-04-01: Documentación de recursos de lección (S3)

Sección titulada «2026-04-01: Documentación de recursos de lección (S3)»

Nueva guía para administradores sobre la gestión de recursos adjuntos a lecciones (PDFs, presentaciones, archivos de código, etc.):

  • Guía completa: Recursos de Lección (S3) — flujo de subida, estructura del bucket, descarga con URLs firmadas, límites de archivo y pasos paso a paso para el admin.
  • Sin cambios en la app: esta actualización es solo documentación de funcionalidad ya existente.

2026-04-01: Eliminación de YouTube como fuente de video

Sección titulada «2026-04-01: Eliminación de YouTube como fuente de video»

Los videos de las lecciones ahora se sirven exclusivamente desde almacenamiento S3/CloudFront. YouTube ha sido eliminado como fuente de video alternativa:

  • Solo almacenamiento: el panel de administración ahora muestra únicamente la opción de subir video (MP4, WebM o MOV hasta 5 GB). El tab “URL (YouTube)” ha sido eliminado.
  • Dev mejorado: los seeds de desarrollo usan videos públicos W3C MP4 directamente en storageVideoKey, sin depender de YouTube ni de credenciales S3.
  • Sin impacto visual: el reproductor de lecciones sigue funcionando igual para los estudiantes.

2026-03-31: Marcadores de Video y Notas de Lección (#99)

Sección titulada «2026-03-31: Marcadores de Video y Notas de Lección (#99)»

Los estudiantes inscritos ahora pueden marcar momentos importantes del video y tomar notas directamente en el reproductor:

  • Marcadores de video: guarda momentos del video con título y descripción opcional. Haz clic en el badge de tiempo para saltar al punto exacto.
  • Notas de lección: escribe notas de texto libre vinculadas a un instante del video. Se guardan automáticamente mientras escribes (debounce 1.5s).
  • Búsqueda de notas: filtra tus notas por contenido en tiempo real.
  • Edición in-place: edita o elimina marcadores y notas directamente desde la lista.
  • Disponible en escritorio y móvil: nuevas pestañas “Marcadores” y “Notas” en el sidebar de la página de aprendizaje.

2026-03-31: Vista Previa de Lecciones para Visitantes (#93)

Sección titulada «2026-03-31: Vista Previa de Lecciones para Visitantes (#93)»

Ahora cualquier persona puede ver las lecciones marcadas como “vista previa” sin necesidad de registrarse ni pagar:

  • Lecciones de muestra gratuitas: las primeras 2 lecciones de cada curso nuevo se marcan automáticamente como vista previa al crearlas.
  • Banner informativo: mientras se ve una lección de vista previa, aparece un banner verde con un botón directo a la página de inscripción.
  • Pantalla de bloqueo: al intentar ver una lección no disponible, se muestra una pantalla con icono de candado y botón “Desbloquear curso completo”.
  • Currículum clicable: en la página del curso, las lecciones con vista previa ahora son enlaces directos al reproductor.
  • Sin acceso si no hay previews: si un curso no tiene ninguna lección marcada como vista previa, el acceso sigue requiriendo inscripción.

2026-03-31: Dashboard de Estudiante Mejorado (#94)

Sección titulada «2026-03-31: Dashboard de Estudiante Mejorado (#94)»

El panel principal en /account ahora tiene más información de aprendizaje:

  • Gráfica de actividad semanal: visualiza las lecciones completadas en los últimos 7 días directamente en el dashboard.
  • Próximas lecciones: nueva tarjeta que muestra las siguientes lecciones pendientes de cada curso inscrito, con barra de progreso y botón “Continuar”.
  • Diseño de 3 columnas: la sección inferior ahora muestra “Mi Plan”, “Actividad reciente” y “Próximas lecciones” en una cuadrícula de 3 columnas.

2026-03-30: Filtros y Ordenación en el Catálogo de Cursos

Sección titulada «2026-03-30: Filtros y Ordenación en el Catálogo de Cursos»

El catálogo de cursos en /courses ahora tiene más opciones de búsqueda y organización:

  • Filtro por dificultad: botones para filtrar por Principiante, Intermedio o Avanzado.
  • Ordenar por: dropdown para ordenar los resultados por más recientes, más populares (por inscripciones), precio menor a mayor o precio mayor a menor.
  • Contador de resultados: muestra “Mostrando X de Y cursos” para que el usuario sepa cuántos resultados hay.
  • Bilingüe: todos los nuevos controles funcionan en español e inglés.

2026-03-31: Calendario de Planificación Admin

Sección titulada «2026-03-31: Calendario de Planificación Admin»

El calendario del panel de administración ahora es completamente funcional:

  • Mes actual por defecto: el calendario abre en el mes actual con la disposición de días correcta calculada dinámicamente.
  • Navegación entre meses: botones prev/next y botón “Hoy” para volver al mes actual.
  • Crear eventos: haz clic en cualquier día del calendario o en el botón ”+ Nuevo evento” para crear un evento. Los campos incluyen título, descripción, fechas de inicio/fin, tipo y color.
  • Tipos de eventos: General (azul), Lanzamiento de curso (verde), Fecha importante (rojo).
  • Colores personalizables: elige entre azul, verde, rojo, amarillo y morado.
  • Lanzamientos de cursos automáticos: los cursos con publicación programada aparecen automáticamente en el calendario en morado (solo lectura).
  • Editar y eliminar eventos: haz clic en cualquier chip de evento para editar o eliminar.
  • Vista móvil responsiva: cuadrícula compacta con lista de eventos del mes debajo.
  • Persistencia en base de datos: todos los eventos se guardan en la tabla CalendarEvent.

Los usuarios ya pueden guardar cursos para ver después:

  • Botón corazón en el catálogo: aparece al pasar el mouse sobre cualquier tarjeta de curso (usuarios logueados). Se llena en rojo al guardar y revierte instantáneamente si falla.
  • Botón en el detalle del curso: en la barra lateral, debajo del precio, con texto “Guardar para después” / “Guardado para después”.
  • Página /mis-cosas: lista de cursos guardados con thumbnail, categoría, nivel de dificultad, fecha en que se guardó y nota personal editable. Los cursos ya inscritos muestran “Ver curso”; los no inscritos muestran “Inscribirme ahora”.
  • Notas personales: campo de texto de hasta 500 caracteres por curso, editable inline con un clic en el ícono de lápiz.
  • Navegación: enlace “Mis Cosas” (ícono corazón) en el menú desplegable de usuario y en el menú lateral de cuenta.

2026-03-30: Flujo de Trabajo y Escala de Contenido (Issue #158 P3)

Sección titulada «2026-03-30: Flujo de Trabajo y Escala de Contenido (Issue #158 P3)»

Los administradores ahora tienen mayor control sobre el ciclo de vida de las lecciones:

  • Borradores de lecciones: cada lección puede marcarse como “Borrador” para ocultarla a los estudiantes sin eliminarla. Las lecciones en borrador muestran una insignia amarilla en el editor del curso.
  • Publicación programada de lecciones: similar a los cursos, ahora es posible programar una fecha/hora exacta para que una lección se publique automáticamente.
  • Importación CSV masiva: el diálogo de creación masiva ahora acepta archivos CSV (columnas: Título, Duración, Descripción) además del formato de texto existente. Incluye botón para cargar el archivo directamente.

2026-03-30: Analíticas y Reportes (Issue #158 P2)

Sección titulada «2026-03-30: Analíticas y Reportes (Issue #158 P2)»

Los administradores ahora tienen visibilidad del rendimiento de cursos y estudiantes:

  • Analíticas por curso (/admin/courses/:id/analytics): pestaña Lecciones muestra completaciones y tiempo promedio de visualización por lección; pestaña Quizzes muestra tasa de aprobación, puntuación promedio y las preguntas con mayor tasa de error.
  • Progreso del estudiante: en la tabla de inscripciones, el botón ojo abre un panel con el estado de completación y tiempo visto por cada lección.
  • Exportar CSV: botón “Exportar CSV” en la página de inscripciones descarga todos los registros visibles como archivo compatible con Excel.
  • Botón “Analíticas” agregado al encabezado del editor de curso para acceso rápido.

2026-03-30: Mejoras UX del Editor de Lecciones (Issue #158 P1)

Sección titulada «2026-03-30: Mejoras UX del Editor de Lecciones (Issue #158 P1)»

Los creadores de contenido admin tienen ahora un editor de lecciones más productivo:

  • Vista previa Markdown real: la pestaña “Vista previa” del campo de contenido ahora renderiza Markdown completo (encabezados, negrita, cursiva, código, tablas, links) en lugar de texto plano.
  • Vista previa de video al instante: el iframe de YouTube aparece mientras el admin escribe la URL, sin necesidad de hacer clic en “Guardar” primero.
  • Quizzes inline: en la tarjeta de Quizzes del editor de curso, el botón “Agregar Quiz” abre un panel lateral para crear un quiz básico (título, orden, lección vinculada, puntuación mínima) sin salir de la página. Los quizzes existentes se listan directamente en la tarjeta.
  • Duplicar lección: ya disponible con el botón de copia en cada lección.

2026-03-30: Panel de Moderación Admin (Issue #158)

Sección titulada «2026-03-30: Panel de Moderación Admin (Issue #158)»

Los administradores ahora cuentan con herramientas de moderación de contenido en el panel admin:

  • Moderación de comentarios (/admin/moderation/comments): tabla con todos los comentarios de la plataforma, con opción de eliminar (soft-delete) y filtros por curso y estado.
  • Moderación de reseñas (/admin/moderation/reviews): tabla con todas las reseñas, con opción de eliminar permanentemente y filtros por curso y calificación.
  • Sidebar actualizado: nuevo grupo “MODERACIÓN” con accesos directos a ambas secciones.
  • Comentarios eliminados se muestran tachados con badge “Eliminado” — las respuestas hijas se eliminan automáticamente junto con el comentario padre.

2026-03-30: Corrección de notificaciones de comentarios (Issue #72)

Sección titulada «2026-03-30: Corrección de notificaciones de comentarios (Issue #72)»

Se corrigió un problema menor en el sistema de notificaciones de comentarios:

  • Notificaciones de respuesta: ya no se envía un correo vacío cuando el usuario padre no tiene email registrado — la notificación se omite correctamente.
  • Cobertura de pruebas E2E: se agregó un nuevo test para verificar que el toggle de notificaciones por email en la configuración de cuenta persiste correctamente al activarlo y desactivarlo.

2026-03-27: Funciones de compartir certificados (Issue #82)

Sección titulada «2026-03-27: Funciones de compartir certificados (Issue #82)»

Los certificados ahora ofrecen más formas de compartir y mostrar tus logros:

  • Compartir en LinkedIn: botón “Agregar a LinkedIn” que pre-rellena nombre del curso y URL de verificación en el perfil de LinkedIn.
  • Compartir en Twitter/X: botón de compartir con texto y hashtag pre-configurados.
  • Descarga en PDF: nuevo botón junto al PNG existente que genera un PDF A4 en landscape.
  • Código de inserción (iframe): sección que genera y copia el código HTML para insertar el certificado en cualquier sitio web.
  • Galería pública en /certificates: página pública con los certificados más recientes de usuarios con perfil público, con enlace de verificación para cada uno.

2026-03-27: Branding consistente en emails transaccionales (Issue #71)

Sección titulada «2026-03-27: Branding consistente en emails transaccionales (Issue #71)»

Todos los correos enviados por la plataforma ahora utilizan el branding oficial de TalentBricks:

  • Diseño unificado en correos de verificación de email, recuperación de contraseña, invitaciones a equipos y emails del programa de referidos.
  • Colores de marca: morado #C400E1 y cian #10C8FF reemplazando el indigo genérico.
  • Header con gradiente y logo TalentBricks en todos los correos.
  • Contenido bilingüe (español + inglés) en correos de autenticación, ya que Wasp no expone el idioma del usuario en esas funciones.
  • Correos de referidos en español: los emails del programa de referidos/recompensas ahora están en español como idioma principal.

2026-03-26: Dashboard del Estudiante con Analytics de Progreso (Issue #94)

Sección titulada «2026-03-26: Dashboard del Estudiante con Analytics de Progreso (Issue #94)»

La página principal de tu cuenta (/account) ahora es un dashboard completo de aprendizaje:

  • 6 métricas de progreso: clases vistas, cursos iniciados, cursos completados, racha actual, horas de estudio y racha más larga.
  • Racha motivacional: cuando llevas 3 o más días consecutivos estudiando, aparece un banner “¡No rompas tu racha!” para mantenerte motivado.
  • Actividad reciente: feed con las últimas 6 lecciones completadas, mostrando el curso, el título de la lección y hace cuánto tiempo las completaste.

2026-03-26: Módulo de equipos v2 — Funcionalidad completa (Issue #170)

Sección titulada «2026-03-26: Módulo de equipos v2 — Funcionalidad completa (Issue #170)»

El panel de gestión de equipos B2B ahora tiene funcionalidad completa. Los propietarios pueden cancelar suscripciones desde facturación con diálogo de confirmación. Los miembros con rol MEMBER no ven botones de administración (invitar, asignar cursos, cambiar roles). Las invitaciones pendientes son visibles y reenviables para administradores. La página de aceptación muestra el nombre real de la organización y el rol asignado. Todas las acciones usan notificaciones toast. Tabla de miembros adaptada para mobile.


2026-03-24: Pipeline B2B — Notificaciones de demo y panel de administración (Issue #73)

Sección titulada «2026-03-24: Pipeline B2B — Notificaciones de demo y panel de administración (Issue #73)»

Cuando un prospecto llena el formulario de demo en /teams, el equipo de ventas ahora recibe un email automático con todos los datos del lead (empresa, contacto, email, teléfono, tamaño del equipo, mensaje) y un enlace directo al panel de administración.

El panel de solicitudes de demo en /admin/demo-requests permite gestionar el pipeline B2B completo: ver solicitudes pendientes vs. contactadas, marcar como contactado (con timestamp automático), y agregar notas internas de seguimiento por cada prospecto.

Para activar las notificaciones, configurar SALES_NOTIFICATION_EMAIL en .env.server.


2026-03-23: Sistema de créditos puro — Opción D (Issues #58 y #156)

Sección titulada «2026-03-23: Sistema de créditos puro — Opción D (Issues #58 y #156)»

El modelo de precios migra a economía de créditos pura ($1 = 100 créditos, 50 cr por lección). Las suscripciones ya no son simplemente “acceso ilimitado” — ahora se expresan como paquetes mensuales de créditos con rollover de hasta 3 meses.

Planes personales: 1,900 cr/mes (cap 5,700 cr). Créditos de pago único: $10 = 1,000 cr.

Equipos (B2B): El pool de créditos es compartido entre todos los miembros. El administrador puede ver el balance del pool en el panel de facturación del equipo. Los créditos se recargan automáticamente el 1ro de cada mes.

Emails de invitación: Al invitar a un nuevo miembro del equipo, el sistema ahora envía un email con el enlace de invitación (válido por 7 días).

Panel de facturación del equipo: Los botones “Actualizar Método de Pago” y “Actualizar Asientos” ahora están conectados a Stripe Customer Portal y la API de suscripciones respectivamente.


2026-03-24: Subida de videos a almacenamiento en la nube (Issue #124)

Sección titulada «2026-03-24: Subida de videos a almacenamiento en la nube (Issue #124)»

Los administradores ahora pueden subir videos directamente desde el panel de administración usando el proveedor de almacenamiento configurado (AWS S3 o Azure Blob). El formulario de lección permite subir archivos MP4/WebM/MOV hasta 5 GB. Los videos se sirven con URLs firmadas de corta duración.


2026-03-23: Security headers en el cliente (Issue #87)

Sección titulada «2026-03-23: Security headers en el cliente (Issue #87)»

El frontend ahora sirve todos los security headers requeridos: Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy y Strict-Transport-Security. La calificación del escáner de seguridad pasa de F a A. El cambio fue reemplazar el servidor estático gostatic (que no soporta headers) con nginx en el Dockerfile del cliente.


2026-03-23: Redis para rate limiting distribuido

Sección titulada «2026-03-23: Redis para rate limiting distribuido»

El sistema de rate limiting ahora soporta Redis como store distribuido. Cuando se configura REDIS_URL, los contadores de intentos se comparten entre todas las instancias del servidor — esencial para despliegues en producción con múltiples réplicas. Sin REDIS_URL, el sistema sigue funcionando con memoria local (sin cambios para desarrollo).


2026-03-23: Sesiones activas en la página de seguridad

Sección titulada «2026-03-23: Sesiones activas en la página de seguridad»

La pestaña de Seguridad en /account/security ahora muestra todas las sesiones abiertas en distintos dispositivos. Cada sesión muestra el tipo de dispositivo, fecha de inicio y última actividad. Los usuarios pueden revocar sesiones individuales o cerrar todas las sesiones de otros dispositivos con un clic. Si el usuario revoca su sesión actual, es redirigido al login automáticamente.


2026-03-23: Páginas de gestión de equipos ahora bilingües

Sección titulada «2026-03-23: Páginas de gestión de equipos ahora bilingües»

Las páginas de gestión de equipos ahora son completamente bilingües (español/inglés). Todos los textos en las páginas de organización — Panel, Miembros, Cursos, Analíticas, Facturación, Aceptar Invitación y Compra de Plan — ahora responden al selector de idioma. Los usuarios pueden alternar entre español e inglés y ver toda la interfaz traducida correctamente.


2026-03-22: Agregar método de pago en la página de plan

Sección titulada «2026-03-22: Agregar método de pago en la página de plan»

Usuarios sin suscripción activa ahora pueden guardar una tarjeta directamente desde /account/plan. El botón “Agregar método de pago” redirige a una página segura de Stripe donde se introducen los datos de la tarjeta sin costo. Al regresar, aparece un mensaje de confirmación y la tarjeta guardada se muestra en el panel de cuenta.

Los usuarios con suscripción activa siguen viendo el botón “Editar método de pago” del portal de Stripe como antes.


2026-03-22: Nueva sección de comparación en la landing page

Sección titulada «2026-03-22: Nueva sección de comparación en la landing page»

Categoría: Mejora — Marketing y conversión

La sección de precios de la landing page ha sido reemplazada por una comparación de valor: cursos gratuitos (YouTube, blogs, tutoriales dispersos) frente a TalentBricks. En lugar de mostrar precios, se destacan las ventajas concretas de la plataforma: contenido actualizado por expertos, ruta de aprendizaje estructurada, certificados verificables, comunidad activa, proyectos reales y mentoría personalizada.

El CTA lleva directamente a la página de cursos. Para ver los planes y precios, la página /pricing sigue siendo la referencia.

Corrección adicional: El plan anual en la página /pricing mostraba incorrectamente la etiqueta /mes en lugar de /año. Corregido.


2026-03-21: Exportar datos y eliminar cuenta (GDPR)

Sección titulada «2026-03-21: Exportar datos y eliminar cuenta (GDPR)»

Categoría: Nueva funcionalidad — Privacidad y GDPR

Los usuarios ahora pueden exportar una copia de todos sus datos personales y eliminar su cuenta directamente desde /account/security, sin necesidad de contactar al soporte.

El botón “Exportar mis datos” descarga un archivo .json con toda la información del usuario: perfil, preferencias, suscripción, inscripciones a cursos, progreso de lecciones, certificados, intentos de quizzes, reseñas, comentarios, archivos subidos, mensajes de soporte, códigos de referido, recompensas, y — si aplica — perfil de instructor y membresías de organizaciones.

Los datos sensibles (secreto 2FA, códigos de backup, IDs internos de Stripe) nunca se incluyen en el export.

El botón “Eliminar mi cuenta” (Zona de Peligro) abre un diálogo de confirmación donde el usuario debe escribir borrar-mi-cuenta (ES) / delete-my-account (EN) antes de poder confirmar. Todos los datos del usuario se eliminan permanentemente mediante cascade delete.


2026-03-20: Gestión de precios personales desde el Admin Panel

Sección titulada «2026-03-20: Gestión de precios personales desde el Admin Panel»

Categoría: Mejora — Administración de Pagos

Los Price IDs de Stripe para planes personales ya no necesitan estar en .env.server. Ahora se gestionan desde el Admin Panel igual que los planes de equipos.

  • Los planes monthly-subscription, annual-subscription y credits-10 ahora se sincronizan con Stripe directamente desde /admin/pricing → botón Sync con Stripe
  • El botón Sync es idempotente: si el Price ya existe y está activo en Stripe, no crea duplicados
  • Las variables PAYMENTS_MONTHLY_SUBSCRIPTION_PLAN_ID, PAYMENTS_ANNUAL_SUBSCRIPTION_PLAN_ID y PAYMENTS_CREDITS_10_PLAN_ID pasan a ser opcionales en .env.server
  • El checkout hace fallback al env var si la DB no tiene el stripePriceId aún
  • La página /pricing ahora incluye un banner al final con enlace a los planes de equipos (/teams)
  1. Ejecutar wasp db seed seedPricingPlans para migrar automáticamente los Price IDs del .env a la DB
  2. Verificar en /admin/pricing que todos los planes activos tienen el ícono ✅ verde en la columna Stripe
  3. Los Price IDs del .env.server pueden eliminarse una vez migrados

2026-03-20: Corrección de precios de equipos — toggle anual

Sección titulada «2026-03-20: Corrección de precios de equipos — toggle anual»

Categoría: Corrección de errores — Página de precios Teams

Se corrigieron dos bugs en la página /teams:

  • Crash solucionado: la página ya no falla al cargar los planes de equipos
  • Toggle funcional: al cambiar de Mensual a Anual, los precios se actualizan con los valores reales de la base de datos

Los planes anuales son registros separados en la DB. El administrador puede activarlos desde el panel de administración asignando el Price ID de Stripe correspondiente.


2026-03-18: Autenticación de Dos Factores (2FA)

Sección titulada «2026-03-18: Autenticación de Dos Factores (2FA)»

Categoría: Seguridad — Autenticación

Se implementó TOTP-based 2FA (Two-Factor Authentication) mediante app autenticadora (Google Authenticator, Authy, etc.) para proteger las cuentas de usuario contra robo de credenciales.

  • Los usuarios pueden activar 2FA desde Ajustes → Seguridad
  • Al activar: escanear código QR con una app autenticadora, confirmar con el primer código
  • Al iniciar sesión: modal bloqueante solicita el código TOTP si 2FA está activado
  • La verificación es válida durante 24 horas (no se solicita en cada página)
  • 8 códigos de respaldo generados al activar — pueden descargarse/copiarse
  • Desactivar 2FA requiere verificar con un código TOTP o código de respaldo
  • Todos los usuarios que activen voluntariamente 2FA en su cuenta
  • Funciona con los tres métodos de login: email/contraseña, Google y GitHub

2026-03-18: Rate Limiting en Endpoints de API

Sección titulada «2026-03-18: Rate Limiting en Endpoints de API»

Categoría: Seguridad — Infraestructura

Se implementó rate limiting en todos los endpoints críticos del servidor para proteger la plataforma contra ataques de fuerza bruta, spam de registros y abuso de la API.

  • Login limitado a 5 intentos por IP cada 15 minutos — protege contra ataques de fuerza bruta en cuentas de usuarios
  • Signup limitado a 3 registros por IP por hora — previene creación masiva de cuentas spam
  • Endpoints de pago limitados a 10 solicitudes por minuto — evita abuso de generación de sesiones de checkout
  • API general limitada a 100 solicitudes por 15 minutos — protección base para todas las operaciones
  • Respuestas incluyen headers X-RateLimit-* para que los clientes puedan gestionar sus propios reintentos
  • Mensajes de error en español cuando se supera el límite

Categoría: Infraestructura — Almacenamiento de Archivos

La plataforma ahora soporta Azure Blob Storage como alternativa a AWS S3 para el almacenamiento de archivos (uploads de usuarios y recursos de lecciones). La selección del proveedor se controla con una variable de entorno: STORAGE_PROVIDER=aws (defecto) o STORAGE_PROVIDER=azure.

  • Se puede configurar Azure Blob Storage con tres variables de entorno: AZURE_STORAGE_ACCOUNT_NAME, AZURE_STORAGE_ACCOUNT_KEY, AZURE_STORAGE_CONTAINER_NAME
  • Si no se configura STORAGE_PROVIDER, el comportamiento es idéntico al anterior (AWS S3)
  • La validación del servidor falla con error claro si faltan las variables del proveedor activo

2026-03-17: Modelo de Suscripción Exclusivo 🔒 NUEVO

Sección titulada «2026-03-17: Modelo de Suscripción Exclusivo 🔒 NUEVO»

Categoría: Pagos — Mejora del Sistema de Suscripciones

Ahora la plataforma garantiza que cada usuario tenga solo un tipo de suscripción - Personal O de Equipo, nunca ambas al mismo tiempo. Esto evita confusiones y conflictos de facturación.

Protección Automática:

  • ✅ No puedes comprar una suscripción personal si eres parte de un equipo
  • ✅ No puedes unirte a un equipo si tienes una suscripción personal activa
  • ✅ La página de precios se oculta automáticamente para miembros de equipos
  • ✅ Los propietarios y administradores de equipos tampoco pueden tener suscripciones personales

Experiencia de Usuario Mejorada:

  • ✅ Tu página “Mi Plan” ahora muestra la información de tu equipo si eres miembro
  • ✅ Mensajes claros cuando intentas hacer algo que no está permitido
  • ✅ Validación en múltiples niveles para máxima seguridad

Transiciones Simples:

  • ✅ Cancela tu suscripción personal → inmediatamente puedes unirte a un equipo
  • ✅ Deja tu equipo → inmediatamente puedes comprar una suscripción personal

Antes era técnicamente posible tener ambos tipos de suscripción, lo que causaba:

  • Cargos duplicados accidentales
  • Confusión sobre qué plan estaba activo
  • Problemas de facturación

Ahora el sistema previene estos conflictos automáticamente, garantizando una experiencia clara y sin sorpresas.

Si solo tienes una suscripción (personal O equipo): No necesitas hacer nada, todo sigue funcionando igual.

Si tienes ambas (muy raro): Contacta a soporte para resolver la situación. Esto solo afecta a usuarios de prueba.


Categoría: Marketing — Visibilidad en Buscadores

La plataforma ahora está optimizada para aparecer en Google y otros buscadores. Cada página tiene meta tags dinámicos, structured data, y ahora tenemos un sitemap.xml automático que ayuda a Google a indexar todos nuestros cursos.

Meta Tags Dinámicos:

  • ✅ Cada curso tiene su propio título y descripción en los resultados de búsqueda
  • ✅ Las páginas ahora aparecen correctamente cuando las compartes en redes sociales
  • ✅ Vista previa con imagen cuando compartes un link en WhatsApp, Twitter, LinkedIn

Sitemap Automático:

  • ✅ Google puede encontrar todos nuestros cursos automáticamente
  • ✅ Se actualiza solo cuando publicas/despublicas un curso
  • ✅ Incluye instructores y páginas importantes

Datos Estructurados (Rich Snippets):

  • ✅ Los cursos aparecen con información extra en Google (duración, nivel, precio)
  • ✅ FAQ aparece directamente en resultados de búsqueda
  • ✅ Mejor posicionamiento para búsquedas relacionadas a cursos

Para el Negocio:

  • 💰 Tráfico Orgánico Gratis: No necesitas pagar por cada visita, Google te envía usuarios gratis
  • 📈 Crecimiento Sostenible: El SEO mejora con el tiempo, mientras más cursos publiques
  • 🎯 Usuarios Calificados: Llegan personas buscando exactamente lo que ofreces

Para Estudiantes:

  • 🔍 Fácil de Encontrar: Pueden encontrarte buscando “curso data engineering español”
  • 👀 Vista Previa Clara: Saben qué esperar antes de hacer clic
  • 🔗 Links Bonitos: Cuando compartes un curso, se ve profesional

Antes:

Google: "TalentBricks - AI powered tools" (genérico)
Sin imagen, sin información extra

Ahora:

Google: "Curso de Data Engineering - TalentBricks AI"
⭐ 15 lecciones · 8 horas · $29.00
Con imagen del curso y descripción específica

En 30-60 días deberías empezar a ver:

  • Apariciones en Google para keywords relevantes
  • Tráfico orgánico creciendo
  • Mejor CTR en links compartidos

Próximos pasos recomendados:

  1. Conectar Google Search Console
  2. Enviar el sitemap.xml
  3. Monitorear keywords y posiciones
  4. Crear contenido de blog para SEO (opcional)

2026-03-16: Sistema de Backups Automáticos Implementado 💾

Sección titulada «2026-03-16: Sistema de Backups Automáticos Implementado 💾»

Categoría: Infraestructura — Protección de Datos

La plataforma ahora cuenta con un sistema robusto de backups automáticos que protege todos los datos de usuarios, cursos, certificados y progreso contra pérdidas accidentales o desastres.

Se ha implementado un sistema completo de respaldo automático que crea copias de seguridad diarias de la base de datos PostgreSQL y protege todos los archivos almacenados en S3 (videos, avatares, recursos) mediante versionado.

Backups Automáticos:

  • Backup Diario: Se ejecuta automáticamente cada día a las 2am UTC
  • Compresión Inteligente: Reduce el tamaño de backups en ~80% usando gzip
  • Almacenamiento S3: Guardados en AWS S3 con storage class optimizado para costos
  • Retención de 30 Días: Limpieza automática de backups antiguos
  • Protección de Archivos: S3 versioning habilitado para recuperar versiones previas

Protección Multi-Nivel:

  1. Neon PostgreSQL: Point-in-time recovery automático (snapshots cada hora)
  2. Backups S3: Backups diarios completos en S3
  3. S3 Versioning: Versionado de todos los archivos (videos, recursos)
  4. Cross-Region Replication (Opcional): Copia de seguridad en región diferente

Para Estudiantes:

  • Tu progreso de curso está protegido
  • Tus certificados no se perderán
  • Tus datos de perfil están seguros

Para la Plataforma:

  • Recuperación rápida ante cualquier problema
  • Protección contra eliminaciones accidentales
  • Cumplimiento con mejores prácticas de seguridad
  • Tranquilidad para continuar innovando

Si algo sale mal, podemos restaurar:

  • Base de Datos (Neon PITR): 10-15 minutos, pérdida máxima de 1 hora de datos
  • Base de Datos (Backup S3): 30-60 minutos, pérdida máxima de 24 horas
  • Archivos S3: 5-10 minutos por archivo

RTO (Recovery Time Objective): < 4 horas para restauración completa RPO (Recovery Point Objective): < 24 horas de pérdida de datos

Archivos Creados:

  • app/src/server/jobs/backup.ts: Job automatizado de backups
  • DISASTER_RECOVERY.md: Runbook completo de recuperación ante desastres
  • app/src/server/jobs/README.md: Documentación técnica del sistema

Tecnología:

  • PgBoss para scheduling de jobs
  • pg_dump para backups de PostgreSQL
  • AWS S3 STANDARD_IA para storage optimizado
  • Neon point-in-time recovery como backup principal

Costo Adicional: ~$0.50/mes para almacenamiento de backups (30 días de retención, ~3GB)

Procedimientos de Testing:

  • Restore test mensual documentado en DISASTER_RECOVERY.md
  • Verificación de integridad de datos post-restore
  • Documentación de tiempos reales de recuperación

Monitoreo:

  • Logs de cada ejecución del backup job
  • Alertas configurables vía Slack/email (opcional)
  • Verificación del estado del job en PgBoss

2026-03-16: Security Headers Implementados 🔒

Sección titulada «2026-03-16: Security Headers Implementados 🔒»

Categoría: Seguridad — Infraestructura

La aplicación ahora cuenta con security headers profesionales implementados globalmente, protegiendo contra ataques comunes como XSS, clickjacking, MIME sniffing y más.

Se ha implementado un middleware de seguridad global usando helmet.js que añade headers de seguridad esenciales a todas las respuestas HTTP de la aplicación, cumpliendo con las mejores prácticas de seguridad web modernas.

Headers de Seguridad Configurados:

  • Content Security Policy (CSP): Previene ataques XSS controlando qué recursos puede cargar el navegador
  • HTTP Strict Transport Security (HSTS): Fuerza conexiones HTTPS por 1 año, incluyendo subdominios
  • X-Frame-Options: DENY - Previene ataques de clickjacking bloqueando iframe embeds
  • X-Content-Type-Options: nosniff - Previene MIME sniffing malicioso
  • Referrer-Policy: strict-origin-when-cross-origin - Controla información de referrer
  • Permissions-Policy: Restringe acceso a características sensibles del navegador

Configuración CSP Compatible con:

  • Stripe checkout y APIs de pago
  • Google Analytics y Plausible
  • AWS S3 y CloudFront (videos y recursos)
  • Google y GitHub OAuth

Se crearon 2 nuevos archivos:

  • app/src/server/middleware/security.ts: Middleware de helmet.js con configuración CSP completa
  • app/src/server/setup.ts: Función global de configuración del servidor

El middleware se aplica globalmente vía server.setupFn en main.wasp, ejecutándose antes de todas las rutas.

Beneficios:

  • Protección contra XSS (Cross-Site Scripting)
  • Protección contra clickjacking
  • Protección contra MIME sniffing
  • Forzar HTTPS en producción
  • Controlar acceso a características del navegador
  • Cumplimiento con OWASP Security Headers

Para verificar los headers después del deployment:

2026-03-15: Optimización del Layout del Panel Admin ⭐

Sección titulada «2026-03-15: Optimización del Layout del Panel Admin ⭐»

Categoría: Producto — UX/UI

El panel de administración ahora aprovecha mejor el espacio de pantalla en monitores modernos, mostrando más información sin sacrificar la usabilidad.

El área de administración utiliza hasta 384px adicionales en pantallas de 1920px, permitiendo ver más datos en tablas y gráficos sin necesidad de hacer scroll horizontal. Los formularios se mantienen a un ancho cómodo para facilitar su lectura.

Mejoras Visuales:

  • Más espacio para datos: Tablas y dashboards aprovechan pantallas anchas (hasta 1920px)
  • Formularios cómodos: Los formularios se mantienen a 896px y se centran automáticamente
  • Espaciado consistente: Todas las páginas usan 24px de separación entre secciones
  • Responsive mejorado: Funciona perfectamente desde móvil hasta 4K

Páginas Optimizadas:

  • 📊 Dashboard Analytics - Gráficos más amplios
  • 👥 Gestión de Usuarios - Más columnas visibles
  • 📚 Lista de Cursos - Aprovecha ancho completo
  • 📝 Formularios - Centrados y con ancho óptimo para lectura

El layout principal (DefaultLayout) aumentó su ancho máximo de 1536px a 1920px, con padding optimizado. Cada página decide si usar el ancho completo (listas/tablas) o restringirlo (formularios) según el tipo de contenido.

Beneficios:

  • Mejor aprovechamiento del espacio en pantallas modernas
  • Menos scroll horizontal en tablas grandes
  • Aspecto más profesional y consistente
  • Los formularios siguen siendo fáciles de leer (no demasiado anchos)

2026-03-14: Panel de Administración Completamente Bilingüe (ES/EN)

Sección titulada «2026-03-14: Panel de Administración Completamente Bilingüe (ES/EN)»

Categoría: Producto — Internacionalización

Toda la sección de administración ahora soporta cambio dinámico de idioma entre Español e Inglés, mejorando la experiencia para equipos multilingües.

El panel completo de administración (/admin/*) ahora es 100% bilingüe, permitiendo a los administradores cambiar entre Español e Inglés con un solo clic, con todas las interfaces, mensajes, gráficos y formularios traducidos.

Secciones Traducidas:

  • Dashboard Analytics (/admin/dashboard)

    • 9 gráficos completamente traducidos (Revenue, User Growth, Top Courses, Engagement, etc.)
    • 4 tarjetas de métricas (Total Page Views, Revenue, Paying Users, Signups)
    • Tabla de Top Sources con datos de ejemplo
    • Pestañas Week/Month/Quarter traducidas
  • Gestión de Usuarios (/admin/users)

    • Tabla de usuarios con filtros traducidos
    • Diálogo de edición de usuarios completamente bilingüe
    • Estados de suscripción, roles y acciones en ambos idiomas
  • Gestión de Precios (/admin/pricing)

    • Formularios de creación y edición de planes
    • Estados de planes (Activo, Borrador, Archivado)
    • Validaciones y mensajes de error traducidos
  • Gestión de Cursos (/admin/courses)

    • Nuevo: Reordenamiento de lecciones con drag-and-drop
    • Formularios de edición completamente traducidos
    • Interfaz táctil optimizada para tablets
  • Gestión de Quizzes (/admin/courses/:id/quizzes)

    • Nuevo: Sidebar de navegación añadido
    • Listado y formularios de quizzes traducidos
    • Consistencia visual con resto del panel admin
  • Otras Secciones

    • Sidebar de navegación bilingüe
    • Promociones y referidos
    • Instructores
    • Enrollments
    • Mensajes

Cambio de Idioma:

  • Botón ES/EN en el header del panel admin
  • Cambio instantáneo sin recarga de página
  • Preferencia persistente entre sesiones

Consistencia:

  • Todos los textos, botones y mensajes traducidos
  • Sin strings hardcodeados en inglés o español
  • Formato de fechas y números localizados

Drag-and-Drop para Lecciones:

  • Biblioteca @dnd-kit implementada
  • Reordenamiento visual con feedback
  • Persistencia automática en base de datos
  • Soporte para teclado y mouse

Arquitectura i18n:

  • Sistema TypeScript personalizado (sin bibliotecas externas)
  • 73+ nuevas claves de traducción añadidas
  • Español como fuente de verdad, inglés AI-traducido
  • Fallback chain: locale actual → español → clave
  • Accesibilidad Global: Equipos en diferentes países pueden usar el panel en su idioma preferido
  • Productividad: Interfaz familiar reduce fricción para equipos hispanohablantes
  • Profesionalismo: Traducciones completas y consistentes en toda la plataforma
  • Escalabilidad: Sistema i18n robusto listo para agregar más idiomas

2026-03-02: Sistema de Precios Editables y Créditos Freemium ⭐ NUEVO

Sección titulada «2026-03-02: Sistema de Precios Editables y Créditos Freemium ⭐ NUEVO»

Categoría: Producto — Monetización

Implementación completa de sistema de gestión de precios dinámico con panel de administración, integración con Stripe, y modelo freemium con créditos.

Un sistema flexible que permite al equipo administrar precios, planes y promociones sin necesidad de redeployments, mientras ofrece a los nuevos usuarios 10 créditos gratuitos para probar la plataforma.

Para Administradores:

  • Panel de Gestión de Precios (/admin/pricing)
    • Vista general de todos los planes (Personal, Teams, Créditos)
    • Edición de precios en tiempo real
    • Control de estado (Borrador, Activo, Archivado, Oculto)
    • Historial completo de cambios con auditoría
  • Sincronización con Stripe
    • Botón one-click para crear productos y precios en Stripe
    • Validación automática antes de activar planes
  • Flexibilidad de Modelos
    • Suscripciones personales (mensual/anual)
    • Paquetes de créditos (one-time purchase)
    • Planes empresariales (display only, proceso manual)

Para Usuarios:

  • Sistema Freemium
    • 10 créditos gratuitos al registrarse
    • 1 crédito = 1 lección completada
    • Contador visible en navbar
    • Modal de upgrade cuando quedan ≤ 2 créditos
  • Planes Dinámicos
    • Precios actualizados instantáneamente
    • Badge “Mejor Oferta” configurable
    • Soporte multi-idioma (ES/EN)
  • Experiencia Mejorada
    • Estados de carga optimizados
    • Mensajes de error claros
    • Redirección automática al quedarse sin créditos

1. Planes Personales (suscripción):

  • Mensual: $19/mes - Acceso ilimitado
  • Anual: $190/año - Ahorra 35% (Mejor Oferta)

2. Paquetes de Créditos (one-time):

  • 10 Créditos: $9.99 - Para usuarios ocasionales

3. Planes Empresariales (display):

  • Team 10: $99/mes - 10 asientos
  • Team 50: $399/mes - 50 asientos (Mejor Oferta)
  • Team 100: $699/mes - 100 asientos
  • Enterprise: Precio personalizado - Ilimitado

Base de Datos:

+ PricingPlan (9 planes iniciales)
+ PricingPlanHistory (auditoría completa)
+ User.credits (sistema freemium)

Backend:

  • 8 nuevas operaciones (queries + actions)
  • Integración Stripe con lazy initialization
  • Soft deletes para grandfather pricing
  • Validación de créditos en progreso de lecciones

Frontend:

  • 2 páginas admin nuevas (Overview + Edit)
  • Componente CreditsCounter con estados visuales
  • Modal automático de upgrade
  • Integración en NavBar (desktop + mobile)
  1. Nuevo usuario se registra → Recibe 10 créditos
  2. Ve primera lección → Consume 1 crédito (quedan 9)
  3. Cuando llega a 2 créditos → Modal sugiere upgrade
  4. Al llegar a 0 créditos → Error 402, debe actualizar plan
  5. Compra suscripción → Acceso ilimitado, contador desaparece

Para el Negocio:

  • ✅ Cambios de precio sin downtime
  • ✅ A/B testing de precios facilitado
  • ✅ Promociones temporales simples
  • ✅ Auditoría completa de cambios
  • ✅ Conversión freemium → pago optimizada

Para Usuarios:

  • ✅ Probar antes de comprar (10 lecciones gratis)
  • ✅ Visibilidad clara de créditos restantes
  • ✅ Proceso de upgrade sin fricción
  • ✅ Precios siempre actualizados

Para Desarrollo:

  • ✅ No más hardcoded pricing
  • ✅ Menor riesgo en deploys
  • ✅ Testing más fácil
  • ✅ Backward compatible
  • ✅ Admin-only endpoints
  • ✅ Validación de precios (no negativos)
  • ✅ Soft deletes (no elimina planes con usuarios activos)
  • ✅ Verificación de Stripe antes de activar
  • ✅ Prevención de fraude (créditos server-side)
  • Tasa de conversión freemium → pago
  • Promedio de créditos usados antes de upgrade
  • % usuarios que agotan créditos vs abandonan
  • Tiempo promedio hasta primera compra
  • Fase 8: Traducciones auto-sync a archivos i18n
  • Fase 9: Soporte multi-currency (USD + COP)
  • Fase 10: Reset mensual de créditos para usuarios activos
  • Fase 11: Promociones temporales con fechas de validez

2026-03-02: Integración Continua (CI) con GitHub Actions - Fases 1 y 2

Sección titulada «2026-03-02: Integración Continua (CI) con GitHub Actions - Fases 1 y 2»

Categoría: DevOps — Automatización

Implementación completa de pipeline de CI con build verification y tests E2E automatizados.

  • Build Automático: Verifica que la aplicación compila correctamente en cada PR
  • Type Checking: Validación automática de tipos TypeScript
  • Format Checking: Verifica formato de código con Prettier
  • PR Comments: Comentarios automáticos con estado del build (✅ éxito / ❌ error)
  • Smart Caching: Caché de dependencias npm para builds más rápidos (~2-3 min con caché)
  • Tests Automatizados: Corre ~92 tests críticos en cada PR
  • Base de Datos de Testing: PostgreSQL temporal con seed automático
  • Flows Críticos Validados:
    • Autenticación (login/signup/logout)
    • Navegación y routing
    • Catálogo de cursos
    • Inscripciones y aprendizaje
  • Reportes de Tests: Se suben automáticamente si fallan
  • Logs del Servidor: Capturados para debugging
  • Tiempo Total: ~7-10 minutos por PR

Flujo de trabajo completo:

  1. Desarrollador crea PR hacia main (solo si cambia app/**)
  2. Job 1: Build + type check (~3 min)
  3. Job 2: Tests E2E críticos (~7 min)
    • Inicia base de datos PostgreSQL
    • Corre migraciones y seed
    • Inicia app en background
    • Ejecuta tests con Playwright
  4. Comentarios automáticos en PR con resultados de ambos jobs
  5. PRs deben pasar ambos checks antes de mergear

Optimizaciones de costos:

  • ✅ Solo corre en cambios de app/** (no docs/blog)
  • ✅ Cancela runs anteriores automáticamente
  • ✅ Solo 92 tests críticos (no todos los 362)
  • ✅ 2 workers paralelos en Playwright
  • ✅ Solo navegador Chromium (no Firefox/Safari)
  • Costo estimado: 300 min/mes (15% del límite gratuito de 2,000 min)

Beneficios:

  • ✅ Detecta errores de compilación antes de mergear
  • ✅ Previene que bugs lleguen a main
  • ✅ Valida flows críticos automáticamente
  • ✅ Feedback inmediato en PRs
  • ✅ Regressions atrapadas antes de producción
  • ✅ No requiere recordar correr tests manualmente

Próximos pasos:

  • Fase 3: Deploy automático a staging en merge a main
  • Fase 4: Deploy a producción con aprobación manual

Documentación:


2026-02-28: Validación de Variables de Entorno y Guías de Despliegue

Sección titulada «2026-02-28: Validación de Variables de Entorno y Guías de Despliegue»

Categoría: DevOps — Mejoras de Infraestructura

Nuevos sistemas de validación y documentación para prevenir errores de configuración en producción.

Características principales:

  • Validación en Startup: El servidor ahora valida todas las variables de entorno requeridas al iniciar

    • Variables categorizadas: REQUIRED (siempre), CONDITIONAL (según features), OPTIONAL
    • Mensajes de error claros con enlaces directos a documentación
    • Validación de formato para API keys (Stripe, SendGrid, AWS, etc.)
    • El servidor no inicia si falta configuración crítica
  • Guías de Despliegue:

    • Nueva guía completa para Railway.app (alternativa a Fly.io)
    • Checklist de producción con verificaciones pre y post-despliegue
    • Guía de migración entre plataformas (Fly.io ↔ Railway)
    • Procedimientos de rotación de secrets sin downtime
    • Guía de pruebas E2E para validación de variables de entorno

Beneficios:

  • Prevención de errores: Detecta configuración incompleta antes del despliegue
  • Tiempo de debugging reducido: Errores claros con instrucciones de solución
  • Flexibilidad de plataforma: Soporte para Fly.io y Railway.app
  • Seguridad mejorada: Guías para rotar secrets periódicamente

Ejemplo de error:

🚨 ENVIRONMENT VALIDATION FAILED
❌ STRIPE_API_KEY
Stripe API key for payment processing
Get it: https://dashboard.stripe.com/apikeys
📖 Complete reference: /operaciones/variables-entorno
🔧 Deployment checklist: /operaciones/checklist-produccion

Documentación nueva:


Categoría: Feature — Seguridad

Nuevo sistema de seguridad que obliga a los usuarios a cambiar su contraseña cuando es establecida o modificada por un administrador.

Características principales:

  • Modal de seguridad: Cuando un usuario debe cambiar su contraseña, aparece un modal que bloquea el acceso a la aplicación hasta completar el cambio
  • No se puede cerrar: El modal no tiene botón de cerrar, no responde a ESC ni a clicks fuera, asegurando que el usuario cambie su contraseña
  • Experiencia fluida: Después de cambiar la contraseña, el usuario permanece en la misma página donde estaba
  • Triggers automáticos:
    • Admin crea nuevo usuario con contraseña → Usuario debe cambiar contraseña en primer login
    • Admin cambia contraseña de usuario existente → Usuario debe cambiar contraseña en próximo login
    • Usuario cambia su propia contraseña → Flag se limpia automáticamente

Beneficios de seguridad:

  • Contraseñas únicas: Garantiza que los usuarios no mantengan contraseñas temporales establecidas por administradores
  • Mejores prácticas: Sigue estándares de seguridad corporativa donde las contraseñas administrativas deben ser temporales
  • Auditoría: Todas las operaciones se registran en los logs del servidor

Cómo funciona:

  1. Admin crea usuario o cambia contraseña desde panel admin
  2. Sistema marca automáticamente el campo mustChangePassword = true
  3. Usuario inicia sesión con la contraseña del admin
  4. Aparece modal que bloquea toda la interfaz
  5. Usuario ingresa contraseña actual y nueva contraseña (con confirmación)
  6. Sistema valida y actualiza la contraseña
  7. Modal desaparece automáticamente y usuario continúa usando la app

Validaciones incluidas:

  • Nueva contraseña mínimo 8 caracteres
  • Nueva contraseña debe ser diferente de la actual
  • Confirmación de contraseña debe coincidir
  • Contraseña actual debe ser correcta

Documentación completa: Ver guía de Force Password Change y Tests E2E


2026-02-27: Gestión de Cuenta y Admin — Cambio de Email y Contraseña

Sección titulada «2026-02-27: Gestión de Cuenta y Admin — Cambio de Email y Contraseña»

Categoría: Feature — Seguridad y Gestión de Cuenta

Los usuarios ahora pueden cambiar su email y contraseña directamente desde la configuración de su cuenta, sin necesidad de contactar al soporte. Los administradores también pueden cambiar el email y contraseña de cualquier usuario desde el panel de administración.

Características principales - Usuarios:

  • Cambio de contraseña: Los usuarios pueden actualizar su contraseña proporcionando la contraseña actual, nueva contraseña y confirmación
  • Cambio de email: Los usuarios pueden cambiar su dirección de email, requiriendo la contraseña actual para verificar su identidad
  • Validaciones de seguridad:
    • Verificación de contraseña actual antes de cualquier cambio
    • Nueva contraseña debe tener mínimo 8 caracteres
    • Nueva contraseña debe ser diferente de la actual
    • Validación de unicidad de email (no puede estar en uso)
    • Normalización de email a lowercase
  • UI mejorada: Formularios expandibles en la pestaña de Seguridad con indicadores de carga y mensajes de éxito/error
  • Experiencia del usuario:
    • Botones de mostrar/ocultar contraseña
    • Validación en tiempo real
    • Mensajes de éxito claros
    • Recarga automática después de cambiar email

Características principales - Administradores:

  • Cambio de contraseña por admin: Los administradores pueden establecer una nueva contraseña para cualquier usuario sin necesitar la contraseña actual
  • Cambio de email por admin: Los administradores pueden cambiar el email de cualquier usuario con actualización automática de autenticación
  • Campos opcionales: Ambos campos son opcionales en el formulario de edición de usuario
  • UI integrado: Los campos están integrados en el diálogo de edición de usuario existente
  • Logs de auditoría: Todas las acciones de cambio de email/contraseña por admin se registran en los logs del servidor

Impacto:

Los usuarios tienen mayor autonomía sobre su cuenta y no necesitan contactar al soporte para cambios básicos de seguridad. Los administradores pueden ayudar a usuarios que olvidan su contraseña o necesitan cambiar su email sin procesos complejos.

Ubicación:

  • Usuarios: Configuración de cuenta → Pestaña “Seguridad” (/account/settings)
  • Administradores: Panel de Admin → Usuarios → Editar usuario (/admin/users)

Categoría: Mejora — Infraestructura UI

Se reemplazaron todos los íconos SVG inline con componentes de librerías estándar para mejorar la mantenibilidad, reducir duplicación de código y estandarizar el soporte de modo oscuro.

Mejoras principales:

  • Íconos consistentes: Sistema unificado usando Lucide React (íconos de UI) e Iconify (logos de marca)
  • Mejor modo oscuro: Soporte estandarizado de dark mode con prop darkModeInvert para logos monocromos
  • Menos código: Eliminado código SVG inline duplicado en múltiples archivos
  • Mejor experiencia de desarrollo: Autocompletado TypeScript y documentación integrada
  • Menor tamaño de bundle: Eliminado código SVG duplicado, offset por Iconify tree-shaking

Íconos reemplazados:

  • Botones de login/registro OAuth (Google, GitHub)
  • Toggle de mostrar/ocultar contraseña en formularios
  • Logos de tecnologías en landing page (Prisma, OpenAI, Astro, Salesforce)

Componentes nuevos:

  • Icon - Wrapper genérico para íconos Iconify
  • BrandIcon - Wrapper especializado para logos de marca con soporte dark mode
  • Documentación completa en app/src/client/components/icons/README.md

Estrategia adoptada:

  • Lucide React (primario): Íconos de UI que ya están en uso en 65+ archivos existentes
  • Iconify (logos únicamente): Solo para logos de marca que no existen en Lucide React

Impacto visual:

Los usuarios no notarán cambios visuales, pero el código es más mantenible y el modo oscuro funciona de manera más consistente.


2026-02-26: Página de Aterrizaje para Empresas (/teams)

Sección titulada «2026-02-26: Página de Aterrizaje para Empresas (/teams)»

Categoría: Feature — Marketing B2B

Se lanzó una página de aterrizaje dedicada para clientes corporativos y empresas que buscan capacitar a sus equipos en Data Engineering e Inteligencia Artificial. Esta página posiciona a TalentBricks como una solución LMS especializada para organizaciones.

Características principales:

  • Propuesta de valor clara: 6 beneficios clave destacando el contenido especializado en español, ahorro del 33% vs competencia, y dashboard para managers
  • Casos de uso reales: 4 escenarios comunes (onboarding, upskilling, capacitación en IA, certificaciones)
  • Planes de precios: 4 niveles (Team 10/50/100 + Enterprise) con toggle mensual/anual y ahorro del 20%
  • Tabla comparativa: Comparación directa con Udemy Business y Coursera Enterprise mostrando ventajas
  • Formulario de demo: Captura de leads con companyName, contactName, email, teamSize, mensaje
  • Testimonios corporativos: 3 testimonios de empresas que usan la plataforma
  • FAQ empresarial: 6 preguntas frecuentes sobre facturación, SSO, planes, etc.

Detalles técnicos:

  • Nueva ruta: /teams con página dedicada
  • Nuevo modelo de base de datos: DemoRequest para almacenar solicitudes
  • Nueva acción: submitDemoRequest con validación de email y campos requeridos
  • 11 componentes nuevos en app/src/landing-page/teams/
  • Traducciones completas ES/EN en nuevo dominio i18n teams
  • Formulario con React Hook Form + Zod validation
  • Diseño responsivo con componentes ShadCN

Modelo de precios presentado:

PlanUsuariosPrecio MensualPrecio Anual
Team 1010$199$1,910
Team 5050$749$7,190
Team 100100$1,399$13,430
EnterpriseIlimitadoPersonalizadoPersonalizado

Próximos pasos:

Este lanzamiento es el primer paso hacia el modelo híbrido B2C/B2B. Las siguientes fases incluirán:

  • Fase 2: Implementación de multi-tenancy (Organizations, Teams)
  • Fase 3: Dashboard avanzado para managers
  • Fase 4: SSO/SAML, cursos privados, asignación masiva

Dónde encontrarlo:

  • URL: /teams (accesible públicamente)

2026-02-26: Creación de Usuarios desde Panel de Administración

Sección titulada «2026-02-26: Creación de Usuarios desde Panel de Administración»

Categoría: Feature — Panel de Administración

Los administradores ahora pueden crear nuevos usuarios directamente desde el panel de administración, con configuración completa de permisos y suscripciones.

Características principales:

  • Creación completa de usuarios: Los administradores pueden crear usuarios con email, username, contraseña, permisos de admin y estado de suscripción
  • Auto-verificación: Los usuarios creados por administradores están automáticamente verificados (no requieren verificación de email)
  • Validación integrada: Misma validación de estados de suscripción que la edición de usuarios
  • Acciones predefinidas: Botones para crear usuarios gratuitos o con suscripción activa
  • Modo avanzado: Control manual completo de todos los campos
  • Interfaz intuitiva: Formulario similar al de edición con validación en tiempo real
  • Seguridad: Contraseñas hasheadas automáticamente, validación de unicidad de email/username
  • Botón prominente: Nuevo botón “Crear Usuario” en la parte superior de la tabla de usuarios

Implementación técnica:

  • Nueva operación: createUserByAdmin con validación completa
  • Nuevo componente: CreateUserDialog con diseño similar a EditUserDialog
  • Usa funciones de autenticación de Wasp para crear usuario + identidad de auth
  • Traducciones completas en español e inglés
  • Registro de auditoría para todas las creaciones de usuarios

Dónde encontrarlo:

  • Admin: Panel de administración → Users (/admin/users) → Botón “Create User” en la esquina superior derecha

2026-02-26: Validación de Suscripciones en Gestión de Usuarios (Admin)

Sección titulada «2026-02-26: Validación de Suscripciones en Gestión de Usuarios (Admin)»

Categoría: Improvement — Panel de Administración

Se mejoró significativamente la experiencia de edición de usuarios en el panel de administración, agregando validación automática de estados de suscripción y acciones predefinidas para cambios comunes.

Mejoras principales:

  • Validación automática: El sistema ahora previene combinaciones inválidas de estado y plan de suscripción (por ejemplo, no se puede marcar “vencido” a un usuario sin plan)
  • Acciones predefinidas: Botones claros para acciones comunes como “Convertir a Usuario Gratuito”, “Cancelar al Finalizar Período”, “Marcar como Activa”, etc.
  • Modo avanzado: Para casos especiales, los administradores pueden activar el modo avanzado que permite control manual completo de estado y plan
  • Advertencias visuales: Badges con colores e íconos para identificar rápidamente el estado de suscripción (activo=verde, vencido=naranja, etc.)
  • Alertas de Stripe: Muestra una advertencia cuando el usuario está gestionado por Stripe, indicando que los cambios manuales pueden ser sobrescritos
  • Confirmación de acciones destructivas: Requiere confirmación explícita antes de eliminar suscripciones o convertir usuarios de pago a gratuitos
  • Validación en tiempo real: El formulario muestra errores de validación inmediatamente mientras el administrador escribe
  • Bypass de emergencia: Los administradores pueden usar el flag “Forzar Actualización” para casos excepcionales (con registro de auditoría)

Estados válidos de suscripción:

  • Usuario gratuito: sin estado ni plan
  • Activa: estado “active” con plan válido (monthly/annual/hobby/pro)
  • Cancelando: estado “cancel_at_period_end” manteniendo el plan actual
  • Vencida: estado “past_due” manteniendo el plan actual
  • Eliminada: estado “deleted” sin plan

Implementación técnica:

  • Nuevo módulo: subscriptionValidation.ts con funciones de validación y generación de acciones predefinidas
  • 3 nuevos componentes helper: SubscriptionStatusBadge, StatusTooltip, PresetActionCard
  • Componente refactorizado: EditUserDialog con nuevo diseño de sección de suscripciones
  • Operación mejorada: updateUserByAdmin valida combinaciones de estado/plan antes de actualizar
  • Traducciones completas en español e inglés para todas las nuevas funcionalidades
  • Logs de auditoría para cambios riesgosos y bypass de validación

Dónde encontrarlo:

  • Admin: Panel de administración → Users (/admin/users) → Editar usuario → Sección “Subscription Management”

2026-02-26: Gestión Completa de Usuarios (Admin)

Sección titulada «2026-02-26: Gestión Completa de Usuarios (Admin)»

Categoría: Feature — Panel de Administración

Se agregó funcionalidad completa de edición y eliminación de usuarios en el panel de administración, permitiendo a los administradores gestionar la base de usuarios de manera efectiva.

Características principales:

  • Editar usuarios: Los administradores pueden modificar email, username, estado de admin, y detalles de suscripción de cualquier usuario
  • Eliminar usuarios: Eliminación segura de usuarios con confirmación explícita. Previene que los admins se eliminen a sí mismos
  • Validación de datos: Verifica que email y username sean únicos antes de actualizar
  • Cascade delete: Al eliminar un usuario, se eliminan automáticamente todas sus inscripciones, progreso de lecciones, certificados y otros datos relacionados
  • Interfaz intuitiva: Menú desplegable de tres puntos en cada fila de usuario con opciones de editar y eliminar
  • Confirmación de eliminación: Dialog de alerta que muestra el nombre del usuario y advierte sobre la naturaleza permanente de la acción
  • Feedback visual: Toast notifications para éxito y errores
  • Actualización automática: La tabla de usuarios se refresca automáticamente después de editar o eliminar

Implementación técnica:

  • 2 nuevas operaciones: deleteUser y updateUserByAdmin
  • 1 nuevo componente: EditUserDialog con validación completa usando Zod y React Hook Form
  • Componente actualizado: DropdownEditDelete ahora funcional con lógica de edición/eliminación
  • Componente actualizado: UsersTable ahora incluye subscriptionPlan y pasa datos al dropdown
  • Query actualizada: getPaginatedUsers ahora incluye el campo subscriptionPlan
  • Permisos: Todas las operaciones verifican que el usuario sea administrador
  • Validación server-side de unicidad de email/username

Dónde encontrarlo:

  • Admin: Panel de administración → Users (/admin/users) → Menú de tres puntos en cada usuario

2026-02-20: Recursos Descargables para Lecciones

Sección titulada «2026-02-20: Recursos Descargables para Lecciones»

Categoría: Feature — Contenido Educativo

Se implementó un sistema completo de recursos descargables para enriquecer las lecciones con materiales complementarios (PDFs, slides, código fuente, documentos).

Características principales:

  • Upload de recursos por lección: Los instructores pueden subir múltiples archivos a cada lección desde el panel de administración
  • Tipos de archivo soportados: PDF, PowerPoint (.ppt/.pptx), Word (.doc/.docx), archivos comprimidos (ZIP, RAR, 7z), código fuente, imágenes
  • Tamaño máximo: 50MB por archivo (vs 5MB para archivos de usuario)
  • Tab de recursos en LearnPage: Nueva pestaña “Recursos” junto a Lecciones y Quizzes con vista de todos los archivos disponibles
  • Íconos por tipo de archivo: Visualización clara del tipo de recurso (PDF, ZIP, PowerPoint, código)
  • Tamaño formateado: Muestra el tamaño en KB/MB de forma legible
  • Control de acceso: Solo estudiantes inscritos pueden descargar recursos de lecciones protegidas
  • Lecciones preview: Los recursos de lecciones gratuitas son públicos
  • URLs firmadas: Links de descarga con expiración de 1 hora para mayor seguridad
  • Gestión completa: Editar título/descripción, reordenar, eliminar recursos

Mejora de seguridad incluida:

  • Fix crítico: Corregida vulnerabilidad en getDownloadFileSignedURL que no verificaba autenticación ni ownership de archivos

Implementación técnica:

  • 1 nuevo modelo en BD: LessonResource con relación a Lesson (cascade delete)
  • Almacenamiento S3: lessons/{lessonId}/resources/{uuid}.{ext}
  • 5 nuevas operaciones (2 queries, 3 actions admin)
  • 2 componentes UI React: ResourceList (estudiantes) + ResourceUploadSection (admin)
  • Utility: formatFileSize() para formatear bytes
  • Sistema de i18n completo (ES + EN)
  • Validación de tipos y tamaños de archivo
  • Upload directo a S3 con presigned URLs

Dónde encontrarlo:

  • Estudiantes: Tab “Recursos” en la página de aprendizaje de cada curso
  • Instructores/Admin: Sección “Recursos descargables” al editar una lección en /admin/courses/:id

Categoría: Feature — Engagement y Aprendizaje

Se implementó un sistema completo de preguntas y respuestas (Q&A) para las lecciones, permitiendo a los estudiantes hacer preguntas, responder dudas de otros, y votar las respuestas más útiles.

Características principales:

  • Comentarios con timestamps de video: Los estudiantes pueden hacer preguntas vinculadas a momentos específicos del video. Al hacer clic en el timestamp, el video salta a ese momento.
  • Respuestas anidadas (threads): Sistema de conversaciones con respuestas a respuestas, manteniendo el contexto de las discusiones.
  • Sistema de votos: Upvote/downvote para destacar las respuestas más útiles. Los comentarios con más votos aparecen primero.
  • Badges especiales:
    • Respuesta del Instructor: Los instructores pueden marcar sus respuestas como oficiales
    • Solución: El autor de una pregunta puede marcar qué respuesta resolvió su duda
  • Edición y moderación: Los usuarios pueden editar sus comentarios (15 min), eliminar (soft delete), y los admins tienen control total
  • Notificaciones por email: Avisos cuando alguien responde tu comentario, cuando el instructor responde, o cuando marcan tu respuesta como solución
  • Ordenamiento flexible: Por votos, más recientes, o soluciones primero

Implementación técnica:

  • 2 nuevos modelos en BD: Comment y CommentVote
  • Vínculo User-Instructor para permisos de instructor
  • 9 nuevas operaciones (3 queries, 6 actions)
  • 4 componentes UI React con ShadCN
  • Sistema de i18n completo (ES + EN)
  • Rate limiting (10 comments/hora, 50 votos/hora)
  • Integración con VideoPlayer para timestamp seeking

Dónde encontrarlo:

  • Tab “Q&A” en el LearnPage de cada lección
  • Semillas de prueba: wasp db seed seedDummyComments

2026-02-19: Datos Dummy para Mensajes de Admin

Sección titulada «2026-02-19: Datos Dummy para Mensajes de Admin»

Categoría: Desarrollo — Seed de datos

Se agregó el seed seedDummyMessages para poblar el panel de mensajes de admin con datos realistas durante el desarrollo.

Qué incluye:

  • 8 mensajes de contacto con contenido variado (bugs, preguntas, feedback, reembolsos)
  • 5 mensajes sin leer y 3 ya respondidos
  • Timestamps escalonados (desde hace 10 min hasta 2 días atrás)
  • Se incluye automáticamente en seedAllDummyData

Cómo usarlo:

Ventana de terminal
wasp db seed seedDummyMessages

2026-02-19: Limpieza de Console.log de Debug (Analytics)

Sección titulada «2026-02-19: Limpieza de Console.log de Debug (Analytics)»

Categoría: Técnico — Calidad de código

Se eliminaron declaraciones de debug que exponían datos internos en los logs del servidor.

Eliminados:

  • analytics/stats.tsconsole.log al crear/actualizar stats diarias, console.table({ dailyStats })
  • analytics/providers/googleAnalyticsUtils.tsconsole.table({ viewsFromYesterday, ... })
  • analytics/providers/plausibleAnalyticsUtils.tsconsole.table con datos de pageviews

Conservados (intencionales):

  • payment/stripe/webhook.tsconsole.info solo activo en NODE_ENV=development, console.error en producción
  • payment/stripe/webhook.tsconsole.log de trazas de checkout (enrollment, promo codes, rewards)
  • payment/polar/webhook.tsconsole.info gateado a development

2026-02-19: Página de Configuración de Admin (Funcional)

Sección titulada «2026-02-19: Página de Configuración de Admin (Funcional)»

Categoría: Admin — Feature completada

La página de configuración del admin ahora guarda datos reales en lugar de mostrar un alert("Not yet implemented").

Qué hay de nuevo:

  • Perfil editable: nombre para mostrar, biografía, zona horaria, y enlaces sociales (LinkedIn, GitHub, Twitter)
  • Datos en tiempo real: el formulario se pre-llena con los datos actuales del usuario admin
  • Feedback inmediato: toast de éxito o error al guardar
  • Email y username mostrados como campos de solo lectura (gestionados por el sistema de auth)
  • Conectado a la action updateUserProfile ya existente — sin cambios de esquema

2026-02-19: Mejoras de Type Safety (TypeScript)

Sección titulada «2026-02-19: Mejoras de Type Safety (TypeScript)»

Categoría: Técnico — Calidad de código

Se eliminaron usos de any en archivos de alto impacto para mejorar la detección de errores en tiempo de compilación.

Archivos mejorados:

  • admin/operations.tsrequireAdmin ahora usa función de aserción TypeScript con tipo AuthUser
  • auth/LoginPage.tsx + SignupPage.tsx — bloques catch cambiados a unknown con narrowing instanceof Error
  • admin/dashboards/instructors/AdminInstructorsPage.tsxhandleEdit tipado con interfaz InstructorListItem; bloques catch corregidos
  • client/components/cookie-consent/Config.tswindow.dataLayer declarado como unknown[]

2026-02-19: Panel de Mensajes de Contacto (Admin)

Sección titulada «2026-02-19: Panel de Mensajes de Contacto (Admin)»

Categoría: Admin — Feature nueva

El panel de administración ahora tiene una página de mensajes completamente funcional.

Qué hay de nuevo:

  • Página de mensajes en /admin/messages con lista de todos los mensajes de contacto enviados por usuarios
  • Vista de detalle al hacer clic en un mensaje — se abre un diálogo con el contenido completo
  • Marcar como leído automático — al abrir un mensaje, se marca como leído sin acción adicional
  • Filtro Todos / Sin leer — permite enfocarse solo en mensajes pendientes
  • Contador de no leídos en el botón del sidebar — ahora solo anima cuando realmente hay mensajes sin leer (corrección de bug)
  • Indicadores visuales — ícono de sobre cerrado (sin leer) o abierto (leído) en cada fila

Impacto: El equipo puede ahora responder a consultas de usuarios desde el panel admin sin necesidad de revisar la base de datos manualmente.


Categoría: UX/UI

Se agregó un botón flotante global para regresar al inicio de la página de forma rápida y suave.

  • Aparición inteligente: El botón se muestra automáticamente después de hacer scroll hacia abajo 300px
  • Animación suave: Transición fade-in/fade-out con slide-up de 300ms
  • Scroll suave: Al hacer click, la página regresa al inicio con animación smooth
  • Responsive: Posicionamiento adaptable (móvil: 16px, desktop: 24px desde bordes)
  • Accesible: Soporte de teclado completo y tooltips bilingües
  • Bilingual: Tooltips en español (“Volver arriba”) e inglés (“Scroll to top”)
  • Visibilidad: Aparece solo después de 300px de scroll
  • Posición: Esquina inferior derecha, sobre el contenido pero debajo de modals
  • Exclusiones: No aparece en admin dashboard ni páginas de login/signup
  • Performance: Scroll detection optimizado con throttling (50ms)
  • Componente: ScrollToTopButton.tsx (global en App.tsx)
  • Estilo: ShadCN Button outline variant con icono ChevronUp
  • Z-index: 40 (debajo de toasts/modals, arriba de contenido)
  • i18n keys: common.scrollToTop

Beneficio para usuarios: Navegación más rápida en páginas largas (landing page, documentación, catálogo de cursos) sin necesidad de hacer scroll manual.


2026-02-14: Actualización de Colores Corporativos

Sección titulada «2026-02-14: Actualización de Colores Corporativos»

Categoría: UI/UX / Branding

Actualización completa del esquema de colores de la plataforma para usar los colores oficiales de la marca TalentBricks.

ColorValor HexUso
Magenta (Primario)#C400E1CTAs principales, botones, enlaces, gradientes
Cyan (Secundario)#10C8FFAcentos, botones secundarios, highlights, badges
  • Variables CSS: Actualización de HSL en modo claro y oscuro (Main.css)
  • Autenticación: Botones de login/signup con nuevos colores de marca (auth-styles.css)
  • Gráficos: Charts de analytics y progreso con colores corporativos
  • Certificados: Bordes y acentos en certificados (magenta en claro, cyan en oscuro)
  • UI Components: Todos los componentes ShadCN heredan automáticamente los nuevos colores
  • Identidad de marca más fuerte: Los colores ahora coinciden con el logo y materiales de marketing
  • Mejor diferenciación: Colores únicos que destacan en el mercado de EdTech
  • Consistencia: Color scheme unificado en toda la plataforma (web, emails, certificados)

Beneficio para usuarios: Experiencia visual más cohesiva y profesional que refleja la identidad de marca de TalentBricks.


Categoría: Feature / Instructores

Se implementó un sistema completo de perfiles de instructores, separando los instructores como entidades independientes de los usuarios.

  • Modelo de Instructor: Nueva entidad en la base de datos con información completa del instructor
  • Perfiles públicos: Cada instructor tiene su propia página pública en /instructors/:slug
  • Directorio de instructores: Página /instructors con grid de todos los instructores
  • Información del instructor:
    • Nombre, título profesional, biografía
    • Foto de perfil (avatar)
    • Enlaces a redes sociales (LinkedIn, GitHub, Twitter)
    • Estadísticas (total de cursos, total de estudiantes)
    • Lista de cursos publicados
  • Integración con cursos:
    • Cards de cursos muestran al instructor
    • Páginas de detalle de curso incluyen sección del instructor
    • Links directos al perfil del instructor
  • Panel de gestión: /admin/instructors para crear, editar y eliminar instructores
  • Formulario completo: Nombre, slug, título, biografía, avatar, redes sociales
  • Generación automática de slug: El slug se genera automáticamente del nombre
  • Control de publicación: Toggle para publicar/ocultar instructores
  • Protección de eliminación: No se pueden eliminar instructores con cursos asociados
  • Vinculación con cursos: Al crear/editar cursos, se puede seleccionar el instructor

Se crearon 4 instructores de ejemplo basados en los cursos existentes:

  • Juan Díaz (Python, Data Engineering)
  • María García (Data Engineering)
  • Carlos Rodríguez (Machine Learning)
  • Ana Martínez (SQL)

La sección de instructores del landing page ahora usa datos dinámicos desde la base de datos en lugar de traducciones estáticas:

  • Query en tiempo real: Se usa useQuery(getAllInstructors) para obtener instructores publicados
  • Grid responsive: 4 columnas en desktop, 2 en tablet, 1 en móvil
  • Manejo de datos faltantes: Muestra emoji placeholder si no hay avatar, renderiza condicionalmente redes sociales
  • Performance: Los datos se cachean automáticamente con React Query
  • Actualización automática: Al agregar/editar instructores en admin, el landing se actualiza automáticamente

Este cambio permite destacar mejor a los instructores de la plataforma, proporcionando credibilidad y contexto a los estudiantes sobre quién está enseñando cada curso. La sincronización automática entre admin y landing page elimina la necesidad de actualizar traducciones manualmente.


2026-02-12: Sistema de Quizzes y Evaluaciones

Sección titulada «2026-02-12: Sistema de Quizzes y Evaluaciones»

Categoría: Feature / Cursos

Se implementó un sistema completo de quizzes y evaluaciones para los cursos en la plataforma.

  • Quizzes entre lecciones: Los administradores pueden crear quizzes vinculados a lecciones específicas
  • Exámenes finales: Opción para crear exámenes finales de curso
  • Múltiples intentos: Los estudiantes pueden tomar quizzes ilimitadamente para practicar
  • Preguntas de opción múltiple: Sistema flexible de preguntas con múltiples respuestas
  • Explicaciones: Opción de agregar explicaciones a cada pregunta
  • Límite de tiempo: Configuración opcional de tiempo límite por quiz
  • Puntuación y aprobación: Sistema de calificación automática con umbral de aprobación configurable
  • Historial de intentos: Los estudiantes pueden ver sus intentos previos y mejores puntuaciones
  • Responsive y dark mode: Interfaz adaptada a móviles y con soporte de modo oscuro
  • Gestión completa: Crear, editar y eliminar quizzes
  • Editor de preguntas: Agregar/editar preguntas con múltiples respuestas
  • Configuración: Puntuación mínima, tiempo límite, si es requerido o final
  • Estadísticas: Ver número de intentos por quiz
  • Integración con cursos: Acceso desde la página de edición de curso
  • Tomar quizzes: Interfaz intuitiva para responder preguntas
  • Navegación: Botones siguiente/anterior para navegar entre preguntas
  • Temporizador: Visualización de tiempo restante cuando hay límite
  • Resultados detallados: Ver puntuación, respuestas correctas/incorrectas, y explicaciones
  • Reintentar: Opción de volver a tomar el quiz para mejorar puntuación

Se agregaron 4 nuevos modelos:

  • Quiz: Almacena información del quiz
  • QuizQuestion: Preguntas del quiz
  • QuizAnswer: Respuestas posibles para cada pregunta
  • QuizAttempt: Intentos de los usuarios con puntuación y respuestas
  • UI Estudiante: /quiz/:quizId - Página para tomar quizzes
  • UI Admin: /admin/courses/:courseId/quizzes - Gestión de quizzes
  • Operaciones: app/src/admin/operations.ts y app/src/courses/operations.ts
  • Componentes: app/src/courses/components/Quiz*.tsx
  • Integración visual en la página de aprendizaje (LearnPage)
  • Editor avanzado de preguntas con drag & drop
  • Tipos de preguntas adicionales (verdadero/falso, rellenar espacios)
  • Exportación de resultados para análisis

Categoría: Documentación / Desarrollo

Se agregó documentación completa sobre cómo ejecutar y crear pruebas end-to-end (E2E) con Playwright.

  • Guía completa: Cómo ejecutar las 244 pruebas E2E existentes
  • Tutorial paso a paso: Cómo crear nuevas pruebas E2E desde cero
  • Mejores prácticas: Patrones comunes, debugging, y troubleshooting
  • Configuración: Requisitos previos, Stripe CLI, datos de prueba
  • CI/CD: Integración con GitHub Actions y pipelines
  • Documentación: /guias/pruebas-e2e/ en el blog
  • Cobertura: 244 pruebas en 12 archivos
  • Áreas cubiertas: Autenticación, pagos, cursos, certificados, admin, navegación
  • Ejecutar pruebas antes de deployar cambios
  • Verificar que nuevas features no rompan funcionalidad existente
  • Crear nuevas pruebas para features nuevos
  • Entender cómo funciona el sistema de pruebas E2E

2026-02-11: Bootcamp “Data & AI con Databricks”

Sección titulada «2026-02-11: Bootcamp “Data & AI con Databricks”»

Categoría: Cursos / Productos

Nuevo bootcamp intensivo de 7 semanas disponible para compra en el catálogo de cursos.

  • Bootcamp completo: 8 lecciones (una por semana)
  • Precio: $99.00 (bootcamp premium)
  • Categoría: Databricks
  • Nivel: Avanzado
  • Primera lección gratis para preview
  1. Semana 1: Fundamentos modernos de Data & AI
  2. Semana 2: Ingesta de datos a escala
  3. Semana 3: Delta Lake & gobernanza
  4. Semana 4: Analytics avanzado & performance
  5. Semana 5: ML en Databricks
  6. Semana 6: AI & LLMs en Databricks
  7. Semana 7: MLOps & producción
  8. Semana 8: Proyecto final & storytelling

Cada lección incluye objetivo de aprendizaje, temas principales, lab práctico y resultado esperado.

El bootcamp aparece en /courses como un curso más del catálogo. Los estudiantes pueden:

  • Ver la descripción completa
  • Acceder a la primera lección gratis
  • Comprarlo por $99
  • Recibir certificado al completar

Beneficio para usuarios: Nueva opción premium para profesionales que quieren dominar Databricks de forma intensiva y estructurada, con un programa completo de 7 semanas.


2026-02-11: Consolidación de Páginas de Cuenta

Sección titulada «2026-02-11: Consolidación de Páginas de Cuenta»

Categoría: UX/UI

Simplificación y reorganización de las páginas de cuenta para una experiencia más intuitiva.

Las páginas de cuenta estaban desconectadas y con información duplicada:

  • 6 páginas sin conexión lógica clara
  • Información repetida entre Account, Settings y Profile
  • Usuario confundido sobre dónde editar su información
AntesDespués
AccountPage solo mostraba infoAccountPage es un dashboard con stats y acciones rápidas
ProfilePage era redundanteProfilePage redirige a Settings
SettingsPage tenía 4 tabsSettingsPage tiene 3 tabs (sin Billing duplicado)
Tab “Account” confusoTab renombrado a “Security”
/account → Dashboard con resumen y acciones rápidas
/account/settings → Configuración (Perfil, Preferencias, Seguridad)
/account/my-plan → Mi Plan (facturación y suscripción)
/account/my-progress → Mi Progreso (estadísticas)
/account/referrals → Referidos
/account/profile → (Redirige a Settings)
  • StatCard: Componente reutilizable para mostrar estadísticas (extraído de MyProgressPage)

Beneficio para usuarios: Navegación clara con una sola fuente de verdad para cada tipo de información.


Categoría: UX/UI

Mejoras significativas en la navegación y consistencia de layouts.

ÁreaMejora
Páginas de CuentaNuevo layout unificado con sidebar de navegación
Admin SidebarReorganizado en grupos: Content, Users, Settings
CursosBreadcrumbs en páginas de detalle
MobileNavegación de lecciones accesible con botón flotante
FooterEliminado enlace roto
  • AccountLayout: Layout unificado para 6 páginas de cuenta
  • AccountSidebar: Navegación lateral entre páginas de cuenta
  • Breadcrumb: Migas de pan reutilizables
  • PageHeader: Encabezado de página consistente

El sidebar de admin ahora incluye acceso directo a:

  • /admin/courses - Gestión de cursos
  • /admin/enrollments - Inscripciones
  • /admin/messages - Mensajes de contacto

Beneficio para usuarios: Navegación más intuitiva y consistente en toda la aplicación.


2026-02-11: Rediseño Completo del Landing Page

Sección titulada «2026-02-11: Rediseño Completo del Landing Page»

Categoría: UI/UX

Rediseño completo del landing page inspirado en DataExpert.io con nuevas secciones y mejor experiencia de usuario.

SecciónDescripción
Hero con StatsEstadísticas de cursos, estudiantes y horas de contenido
Cursos DestacadosGrid dinámico de cursos desde la base de datos
¿Por qué TalentBricksAI?4 tarjetas con beneficios clave
Proyectos CapstoneCarrusel de proyectos de estudiantes
Instructores3 tarjetas con perfiles de instructores
Comparación de PreciosTabla comparativa Individual vs Suscripción
CTA FinalLlamada a la acción para registro
  • 6 testimoniales (antes 3) con mejor layout responsive
  • Footer con redes sociales (LinkedIn, Twitter, YouTube, Discord)
  • Componentes eliminados: ExamplesCarousel, HighlightedFeature, SpecializationAreas, FeaturesGrid
  • Nuevos componentes: HeroStats, WhyChooseUs, FeaturedCourses, CapstoneProjects, Instructors, PricingComparison, CTASection
  • Traducciones completas ES/EN para todas las secciones
  • Carrusel con ShadCN Carousel (embla-carousel-react)
  • Nueva página /components: Showcase de componentes preservados para uso futuro (ExamplesCarousel, FeaturesGrid, SpecializationAreas, ExampleHighlightedFeature)

Beneficio para usuarios: Landing page más atractivo, informativo y con mejor conversión.


2026-02-10: Certificados con Logo y Modo Oscuro

Sección titulada «2026-02-10: Certificados con Logo y Modo Oscuro»

Categoría: Mejora Visual

Los certificados digitales ahora incluyen el logo de TalentBricks y se adaptan automaticamente al tema claro/oscuro del usuario.

AntesDespués
Solo texto “TalentBricksAI”Logo real de la empresa
Un solo tema (oscuro)Tema claro y oscuro

Beneficio para usuarios: Certificados más profesionales y consistentes con su preferencia de tema.


2026-02-10: Páginas Legales (Privacidad y Términos)

Sección titulada «2026-02-10: Páginas Legales (Privacidad y Términos)»

Categoría: Compliance

Agregamos las páginas de Política de Privacidad y Términos de Servicio, cumpliendo con:

  • Colombia: Ley 1581 de 2012 (protección de datos)
  • USA: COPPA, CCPA, leyes de Delaware

Rutas:

  • /privacy - Política de Privacidad
  • /terms - Términos de Servicio

Beneficio: Cumplimiento legal para operar en Colombia y Estados Unidos.


2026-02-09: Sistema de Referidos y Codigos Promocionales

Sección titulada «2026-02-09: Sistema de Referidos y Codigos Promocionales»

Categoría: Marketing/Crecimiento

Sistema completo para adquirir usuarios a traves de referidos y promociones.

Featuredescripción
código únicoCada usuario tiene un código de 8 caracteres
TrackingSe registran clicks, signups y conversiones
Recompensa referidor20% descuento cuando amigo compra
Recompensa referido15% descuento en primera compra
EmailsNotificaciones automaticas de signups y conversiones
Featuredescripción
TiposPorcentaje o monto fijo
RestriccionesPor curso, solo nuevos usuarios, minimo de compra
LimitesFecha de expiracion, usos maximos
BannerPromocion visible en landing page

Panel Admin: Nueva sección /admin/promotions con 3 tabs:

  • Codigos Promo (CRUD)
  • Analytics de Referidos
  • Gestión de Recompensas

2026-02-09: Sistema de Reseñas y Calificaciones

Sección titulada «2026-02-09: Sistema de Reseñas y Calificaciones»

Categoría: Engagement

Los usuarios inscritos pueden dejar reseñas en cursos.

Featuredescripción
Calificación1-5 estrellas
Título + ComentarioTexto libre
Editar/EliminarSolo propio reseñas
EstadísticasPromedio y distribución en página de curso

Restricción: Solo usuarios inscritos en el curso pueden dejar reseña.


Categoría: Social

Los usuarios ahora tienen perfiles publicos o privados.

Featuredescripción
Perfil propio/account/profile
Perfil público/profile/:username
PrivacidadToggle para ocultar perfil
ContenidoBio, avatar, redes sociales, cursos, certificados

Campos nuevos en User:

  • showProfilePublic - Si el perfil es visible
  • showInLeaderboards - Si aparece en rankings

2026-02-09: página de configuración Rediseñada

Sección titulada «2026-02-09: página de configuración Rediseñada»

Categoría: UX

Nueva página de configuración con tabs organizadas.

TabContenido
PerfilAvatar, nombre, bio, timezone, redes sociales
PreferenciasNotificaciones email, velocidad de video, autoplay
CuentaEmail, cambio de contraseña (futuro)
FacturaciónGestión de suscripción

Campos nuevos en User:

  • displayName, bio, avatarUrl
  • linkedinUrl, githubUrl, twitterUrl
  • timezone, emailNotifications
  • defaultPlaybackSpeed, autoplayNextLesson

El MVP de TalentBricksAI fue completado con las siguientes features:

ComponenteEstado
Base de datosPostgreSQL + Prisma
AuthEmail/password con verificación
PagosStripe (cursos individuales + suscripciones)
VideosAWS S3 + CloudFront (URLs firmadas)
EmailSendGrid (produccion) / Console (desarrollo)
i18nbilingüe ES/EN (TypeScript-first)
  • Course - Cursos con título, descripción, precio, dificultad
  • Lesson - Lecciones con video, orden, duracion
  • Enrollment - Inscripciones de usuarios a cursos
  • LessonProgress - Progreso por leccion (segundos vistos, completado)
  • Certificate - Certificados con datos snapshot y QR
páginaRutadescripción
Catalogo/cursosLista de cursos publicados
Detalle/curso/:slugInfo del curso, curriculum, resenas
Aprender/curso/:slug/aprenderVideo player con sidebar de lecciones
Mis Cursos/mis-cursosCursos inscritos con progreso
Mi Progreso/account/my-progressEstadísticas y grafico semanal
Certificado/certificado/:courseIdVer/descargar certificado
Verificar/verificar/:codeverificación pública de certificado
páginadescripción
AnalyticsRevenue, usuarios, page views
CursosCRUD de cursos y lecciones
InscripcionesVer progreso de estudiantes
UsuariosGestión de usuarios
PromocionesCodigos promo y referidos
PlanPrecioAcceso
Curso Individual$29-99Un curso, lifetime
Mensual$19/mesTodos los cursos
Anual$149/anoTodos los cursos (~35% descuento)

Ver Features Pendientes para el roadmap detallado de lo que viene.

Top 3 prioridades:

  1. Comentarios y Q&A en lecciones
  2. Transcripciones de video
  3. Sistema de badges/logros

ServicioCosto Mensual
Fly.io (hosting)~$5-10
AWS S3 + CloudFront~$5-15
Stripe2.9% + $0.30/tx
SendGrid$0 (tier gratis)
Dominio~$1
Total~$10-25/mes

Más costos variables por almacenamiento de video y volumen de Pagos.