Changelog
Sección titulada «Changelog»Historial de cambios importantes en la plataforma. Este documento ayuda al equipo a entender qué se ha implementado y cuando.
Abril 2026
Sección titulada «Abril 2026»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/leaderboardmuestra 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.
Marzo 2026
Sección titulada «Marzo 2026»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.
2026-03-31: Lista de Deseos “Mis Cosas”
Sección titulada «2026-03-31: Lista de Deseos “Mis Cosas”»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
#C400E1y cian#10C8FFreemplazando 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.
Exportar mis datos
Sección titulada «Exportar mis datos»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.
Eliminar mi cuenta
Sección titulada «Eliminar mi cuenta»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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»- Los planes
monthly-subscription,annual-subscriptionycredits-10ahora 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_IDyPAYMENTS_CREDITS_10_PLAN_IDpasan a ser opcionales en.env.server - El checkout hace fallback al env var si la DB no tiene el
stripePriceIdaún - La página
/pricingahora incluye un banner al final con enlace a los planes de equipos (/teams)
¿Qué necesita hacer el administrador?
Sección titulada «¿Qué necesita hacer el administrador?»- Ejecutar
wasp db seed seedPricingPlanspara migrar automáticamente los Price IDs del.enva la DB - Verificar en
/admin/pricingque todos los planes activos tienen el ícono ✅ verde en la columna Stripe - Los Price IDs del
.env.serverpueden 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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»- 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
¿A quién afecta?
Sección titulada «¿A quién afecta?»- 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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»- 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
2026-03-18: Soporte de Azure Blob Storage
Sección titulada «2026-03-18: Soporte de Azure Blob Storage»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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»- 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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»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
¿Por qué es importante?
Sección titulada «¿Por qué es importante?»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.
¿Qué debo hacer?
Sección titulada «¿Qué debo hacer?»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.
2026-03-16: Optimización SEO Completa 🔍
Sección titulada «2026-03-16: Optimización SEO Completa 🔍»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.
¿Qué cambió?
Sección titulada «¿Qué cambió?»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
¿Por qué es importante?
Sección titulada «¿Por qué es importante?»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
Ejemplo
Sección titulada «Ejemplo»Antes:
Google: "TalentBricks - AI powered tools" (genérico)Sin imagen, sin información extraAhora:
Google: "Curso de Data Engineering - TalentBricks AI"⭐ 15 lecciones · 8 horas · $29.00Con imagen del curso y descripción específica¿Qué sigue?
Sección titulada «¿Qué sigue?»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:
- Conectar Google Search Console
- Enviar el sitemap.xml
- Monitorear keywords y posiciones
- 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.
¿Qué es?
Sección titulada «¿Qué es?»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.
Características Principales
Sección titulada «Características Principales»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:
- Neon PostgreSQL: Point-in-time recovery automático (snapshots cada hora)
- Backups S3: Backups diarios completos en S3
- S3 Versioning: Versionado de todos los archivos (videos, recursos)
- Cross-Region Replication (Opcional): Copia de seguridad en región diferente
¿Por qué es importante?
Sección titulada «¿Por qué es importante?»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
Tiempos de Recuperación
Sección titulada «Tiempos de Recuperación»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
Detalles Técnicos
Sección titulada «Detalles Técnicos»Archivos Creados:
app/src/server/jobs/backup.ts: Job automatizado de backupsDISASTER_RECOVERY.md: Runbook completo de recuperación ante desastresapp/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)
Testing y Monitoreo
Sección titulada «Testing y Monitoreo»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
Referencias
Sección titulada «Referencias»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.
¿Qué es?
Sección titulada «¿Qué es?»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.
Características Principales
Sección titulada «Características Principales»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
Detalles Técnicos
Sección titulada «Detalles Técnicos»Se crearon 2 nuevos archivos:
app/src/server/middleware/security.ts: Middleware de helmet.js con configuración CSP completaapp/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
Testing Recomendado
Sección titulada «Testing Recomendado»Para verificar los headers después del deployment:
- https://securityheaders.com - Análisis completo de security headers
- https://observatory.mozilla.org - Evaluación de seguridad Mozilla
- Verificar que Stripe checkout funciona correctamente con CSP
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.
¿Qué mejora?
Sección titulada «¿Qué mejora?»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.
Características Principales
Sección titulada «Características Principales»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
Detalles Técnicos
Sección titulada «Detalles Técnicos»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.
¿Qué es?
Sección titulada «¿Qué 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.
Características Principales
Sección titulada «Características Principales»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
Experiencia de Usuario
Sección titulada «Experiencia de Usuario»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
Mejoras Técnicas
Sección titulada «Mejoras Técnicas»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
Impacto
Sección titulada «Impacto»- 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.
¿Qué es?
Sección titulada «¿Qué es?»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.
Características Principales
Sección titulada «Características Principales»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
Modelos de Negocio Soportados
Sección titulada «Modelos de Negocio Soportados»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
Arquitectura Técnica
Sección titulada «Arquitectura Técnica»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)
Flujo de Usuario Freemium
Sección titulada «Flujo de Usuario Freemium»- Nuevo usuario se registra → Recibe 10 créditos
- Ve primera lección → Consume 1 crédito (quedan 9)
- Cuando llega a 2 créditos → Modal sugiere upgrade
- Al llegar a 0 créditos → Error 402, debe actualizar plan
- Compra suscripción → Acceso ilimitado, contador desaparece
Beneficios
Sección titulada «Beneficios»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
Seguridad y Validación
Sección titulada «Seguridad y Validación»- ✅ 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)
Métricas a Seguir
Sección titulada «Métricas a Seguir»- 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
Próximos Pasos
Sección titulada «Próximos Pasos»- 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.
Fase 1: Build & Type Check
Sección titulada «Fase 1: Build & Type Check»- 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é)
Fase 2: Tests E2E Críticos ⭐ NUEVO
Sección titulada «Fase 2: Tests E2E Críticos ⭐ NUEVO»- 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:
- Desarrollador crea PR hacia
main(solo si cambiaapp/**) - Job 1: Build + type check (~3 min)
- 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
- Comentarios automáticos en PR con resultados de ambos jobs
- 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:
- Guía de CI/CD - Configuración completa, troubleshooting, y costos
- Guía de Deployment - Ahora referencia el CI/CD
Febrero 2026
Sección titulada «Febrero 2026»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-produccionDocumentación nueva:
2026-02-27: Cambio Forzado de Contraseña
Sección titulada «2026-02-27: Cambio Forzado de Contraseña»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:
- Admin crea usuario o cambia contraseña desde panel admin
- Sistema marca automáticamente el campo
mustChangePassword = true - Usuario inicia sesión con la contraseña del admin
- Aparece modal que bloquea toda la interfaz
- Usuario ingresa contraseña actual y nueva contraseña (con confirmación)
- Sistema valida y actualiza la contraseña
- 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)
2026-02-27: Sistema de Íconos Unificado
Sección titulada «2026-02-27: Sistema de Íconos Unificado»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
darkModeInvertpara 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 IconifyBrandIcon- 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:
/teamscon página dedicada - Nuevo modelo de base de datos:
DemoRequestpara almacenar solicitudes - Nueva acción:
submitDemoRequestcon 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:
| Plan | Usuarios | Precio Mensual | Precio Anual |
|---|---|---|---|
| Team 10 | 10 | $199 | $1,910 |
| Team 50 | 50 | $749 | $7,190 |
| Team 100 | 100 | $1,399 | $13,430 |
| Enterprise | Ilimitado | Personalizado | Personalizado |
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:
createUserByAdmincon validación completa - Nuevo componente:
CreateUserDialogcon diseño similar aEditUserDialog - 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.tscon funciones de validación y generación de acciones predefinidas - 3 nuevos componentes helper:
SubscriptionStatusBadge,StatusTooltip,PresetActionCard - Componente refactorizado:
EditUserDialogcon nuevo diseño de sección de suscripciones - Operación mejorada:
updateUserByAdminvalida 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:
deleteUseryupdateUserByAdmin - 1 nuevo componente:
EditUserDialogcon validación completa usando Zod y React Hook Form - Componente actualizado:
DropdownEditDeleteahora funcional con lógica de edición/eliminación - Componente actualizado:
UsersTableahora incluyesubscriptionPlany pasa datos al dropdown - Query actualizada:
getPaginatedUsersahora incluye el camposubscriptionPlan - 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
getDownloadFileSignedURLque no verificaba autenticación ni ownership de archivos
Implementación técnica:
- 1 nuevo modelo en BD:
LessonResourcecon relación aLesson(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
2026-02-20: Sistema de Comentarios y Q&A
Sección titulada «2026-02-20: Sistema de Comentarios y Q&A»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:
CommentyCommentVote - 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:
wasp db seed seedDummyMessages2026-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.ts—console.logal crear/actualizar stats diarias,console.table({ dailyStats })analytics/providers/googleAnalyticsUtils.ts—console.table({ viewsFromYesterday, ... })analytics/providers/plausibleAnalyticsUtils.ts—console.tablecon datos de pageviews
Conservados (intencionales):
payment/stripe/webhook.ts—console.infosolo activo enNODE_ENV=development,console.erroren producciónpayment/stripe/webhook.ts—console.logde trazas de checkout (enrollment, promo codes, rewards)payment/polar/webhook.ts—console.infogateado 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
updateUserProfileya 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.ts—requireAdminahora usa función de aserción TypeScript con tipoAuthUserauth/LoginPage.tsx+SignupPage.tsx— bloquescatchcambiados aunknowncon narrowinginstanceof Erroradmin/dashboards/instructors/AdminInstructorsPage.tsx—handleEdittipado con interfazInstructorListItem; bloquescatchcorregidosclient/components/cookie-consent/Config.ts—window.dataLayerdeclarado comounknown[]
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/messagescon 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.
2026-02-14: Botón de Scroll hacia Arriba
Sección titulada «2026-02-14: Botón de Scroll hacia Arriba»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.
Qué Incluye
Sección titulada «Qué Incluye»- 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”)
Comportamiento
Sección titulada «Comportamiento»- 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)
Técnico
Sección titulada «Técnico»- Componente:
ScrollToTopButton.tsx(global enApp.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.
Colores Actualizados
Sección titulada «Colores Actualizados»| Color | Valor Hex | Uso |
|---|---|---|
| Magenta (Primario) | #C400E1 | CTAs principales, botones, enlaces, gradientes |
| Cyan (Secundario) | #10C8FF | Acentos, botones secundarios, highlights, badges |
Áreas Afectadas
Sección titulada «Áreas Afectadas»- 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
Impacto Visual
Sección titulada «Impacto Visual»- 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.
2026-02-13: Perfiles de Instructores
Sección titulada «2026-02-13: Perfiles de Instructores»Categoría: Feature / Instructores
Se implementó un sistema completo de perfiles de instructores, separando los instructores como entidades independientes de los usuarios.
Qué Incluye
Sección titulada «Qué Incluye»- 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
/instructorscon 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
Funcionalidad Admin
Sección titulada «Funcionalidad Admin»- Panel de gestión:
/admin/instructorspara 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
Datos de Seed
Sección titulada «Datos de Seed»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)
Actualización Landing Page
Sección titulada «Actualización Landing Page»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
Impacto
Sección titulada «Impacto»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.
Qué Incluye
Sección titulada «Qué Incluye»- 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
Funcionalidad Admin
Sección titulada «Funcionalidad Admin»- 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
Funcionalidad Estudiante
Sección titulada «Funcionalidad Estudiante»- 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
Base de Datos
Sección titulada «Base de Datos»Se agregaron 4 nuevos modelos:
Quiz: Almacena información del quizQuizQuestion: Preguntas del quizQuizAnswer: Respuestas posibles para cada preguntaQuizAttempt: Intentos de los usuarios con puntuación y respuestas
Ubicación
Sección titulada «Ubicación»- UI Estudiante:
/quiz/:quizId- Página para tomar quizzes - UI Admin:
/admin/courses/:courseId/quizzes- Gestión de quizzes - Operaciones:
app/src/admin/operations.tsyapp/src/courses/operations.ts - Componentes:
app/src/courses/components/Quiz*.tsx
Próximos Pasos
Sección titulada «Próximos Pasos»- 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
2026-02-11: Documentación de Pruebas E2E
Sección titulada «2026-02-11: Documentación de Pruebas E2E»Categoría: Documentación / Desarrollo
Se agregó documentación completa sobre cómo ejecutar y crear pruebas end-to-end (E2E) con Playwright.
Qué Incluye
Sección titulada «Qué Incluye»- 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
Ubicación
Sección titulada «Ubicación»- Documentación:
/guias/pruebas-e2e/en el blog - Cobertura: 244 pruebas en 12 archivos
- Áreas cubiertas: Autenticación, pagos, cursos, certificados, admin, navegación
Para Qué Sirve
Sección titulada «Para Qué Sirve»- 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.
Qué Incluye
Sección titulada «Qué Incluye»- Bootcamp completo: 8 lecciones (una por semana)
- Precio: $99.00 (bootcamp premium)
- Categoría: Databricks
- Nivel: Avanzado
- Primera lección gratis para preview
Contenido del Programa
Sección titulada «Contenido del Programa»- Semana 1: Fundamentos modernos de Data & AI
- Semana 2: Ingesta de datos a escala
- Semana 3: Delta Lake & gobernanza
- Semana 4: Analytics avanzado & performance
- Semana 5: ML en Databricks
- Semana 6: AI & LLMs en Databricks
- Semana 7: MLOps & producción
- Semana 8: Proyecto final & storytelling
Cada lección incluye objetivo de aprendizaje, temas principales, lab práctico y resultado esperado.
Cómo Verlo
Sección titulada «Cómo Verlo»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.
Problema Resuelto
Sección titulada «Problema Resuelto»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
Cambios Principales
Sección titulada «Cambios Principales»| Antes | Después |
|---|---|
| AccountPage solo mostraba info | AccountPage es un dashboard con stats y acciones rápidas |
| ProfilePage era redundante | ProfilePage redirige a Settings |
| SettingsPage tenía 4 tabs | SettingsPage tiene 3 tabs (sin Billing duplicado) |
| Tab “Account” confuso | Tab renombrado a “Security” |
Nueva Estructura
Sección titulada «Nueva Estructura»/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)Componente Nuevo
Sección titulada «Componente Nuevo»- 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.
2026-02-11: Navegación y Layout Mejorados
Sección titulada «2026-02-11: Navegación y Layout Mejorados»Categoría: UX/UI
Mejoras significativas en la navegación y consistencia de layouts.
Cambios Principales
Sección titulada «Cambios Principales»| Área | Mejora |
|---|---|
| Páginas de Cuenta | Nuevo layout unificado con sidebar de navegación |
| Admin Sidebar | Reorganizado en grupos: Content, Users, Settings |
| Cursos | Breadcrumbs en páginas de detalle |
| Mobile | Navegación de lecciones accesible con botón flotante |
| Footer | Eliminado enlace roto |
Componentes Nuevos
Sección titulada «Componentes Nuevos»- 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
Rutas Ahora Accesibles desde Admin
Sección titulada «Rutas Ahora Accesibles desde Admin»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.
Nuevas Secciones
Sección titulada «Nuevas Secciones»| Sección | Descripción |
|---|---|
| Hero con Stats | Estadísticas de cursos, estudiantes y horas de contenido |
| Cursos Destacados | Grid dinámico de cursos desde la base de datos |
| ¿Por qué TalentBricksAI? | 4 tarjetas con beneficios clave |
| Proyectos Capstone | Carrusel de proyectos de estudiantes |
| Instructores | 3 tarjetas con perfiles de instructores |
| Comparación de Precios | Tabla comparativa Individual vs Suscripción |
| CTA Final | Llamada a la acción para registro |
Mejoras
Sección titulada «Mejoras»- 6 testimoniales (antes 3) con mejor layout responsive
- Footer con redes sociales (LinkedIn, Twitter, YouTube, Discord)
- Componentes eliminados: ExamplesCarousel, HighlightedFeature, SpecializationAreas, FeaturesGrid
Técnico
Sección titulada «Técnico»- 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.
| Antes | Despué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.
Referidos
Sección titulada «Referidos»| Feature | descripción |
|---|---|
| código único | Cada usuario tiene un código de 8 caracteres |
| Tracking | Se registran clicks, signups y conversiones |
| Recompensa referidor | 20% descuento cuando amigo compra |
| Recompensa referido | 15% descuento en primera compra |
| Emails | Notificaciones automaticas de signups y conversiones |
Codigos Promo
Sección titulada «Codigos Promo»| Feature | descripción |
|---|---|
| Tipos | Porcentaje o monto fijo |
| Restricciones | Por curso, solo nuevos usuarios, minimo de compra |
| Limites | Fecha de expiracion, usos maximos |
| Banner | Promocion 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.
| Feature | descripción |
|---|---|
| Calificación | 1-5 estrellas |
| Título + Comentario | Texto libre |
| Editar/Eliminar | Solo propio reseñas |
| Estadísticas | Promedio y distribución en página de curso |
Restricción: Solo usuarios inscritos en el curso pueden dejar reseña.
2026-02-09: Perfiles de Usuario
Sección titulada «2026-02-09: Perfiles de Usuario»Categoría: Social
Los usuarios ahora tienen perfiles publicos o privados.
| Feature | descripción |
|---|---|
| Perfil propio | /account/profile |
| Perfil público | /profile/:username |
| Privacidad | Toggle para ocultar perfil |
| Contenido | Bio, avatar, redes sociales, cursos, certificados |
Campos nuevos en User:
showProfilePublic- Si el perfil es visibleshowInLeaderboards- 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.
| Tab | Contenido |
|---|---|
| Perfil | Avatar, nombre, bio, timezone, redes sociales |
| Preferencias | Notificaciones email, velocidad de video, autoplay |
| Cuenta | Email, cambio de contraseña (futuro) |
| Facturación | Gestión de suscripción |
Campos nuevos en User:
displayName,bio,avatarUrllinkedinUrl,githubUrl,twitterUrltimezone,emailNotificationsdefaultPlaybackSpeed,autoplayNextLesson
Enero-Febrero 2026 (MVP)
Sección titulada «Enero-Febrero 2026 (MVP)»Sistema Base Completado
Sección titulada «Sistema Base Completado»El MVP de TalentBricksAI fue completado con las siguientes features:
Infraestructura
Sección titulada «Infraestructura»| Componente | Estado |
|---|---|
| Base de datos | PostgreSQL + Prisma |
| Auth | Email/password con verificación |
| Pagos | Stripe (cursos individuales + suscripciones) |
| Videos | AWS S3 + CloudFront (URLs firmadas) |
| SendGrid (produccion) / Console (desarrollo) | |
| i18n | bilingüe ES/EN (TypeScript-first) |
Modelos de Datos
Sección titulada «Modelos de Datos»- 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
Paginas Principales
Sección titulada «Paginas Principales»| página | Ruta | descripción |
|---|---|---|
| Catalogo | /cursos | Lista de cursos publicados |
| Detalle | /curso/:slug | Info del curso, curriculum, resenas |
| Aprender | /curso/:slug/aprender | Video player con sidebar de lecciones |
| Mis Cursos | /mis-cursos | Cursos inscritos con progreso |
| Mi Progreso | /account/my-progress | Estadísticas y grafico semanal |
| Certificado | /certificado/:courseId | Ver/descargar certificado |
| Verificar | /verificar/:code | verificación pública de certificado |
Admin Dashboard
Sección titulada «Admin Dashboard»| página | descripción |
|---|---|
| Analytics | Revenue, usuarios, page views |
| Cursos | CRUD de cursos y lecciones |
| Inscripciones | Ver progreso de estudiantes |
| Usuarios | Gestión de usuarios |
| Promociones | Codigos promo y referidos |
Planes de Pago
Sección titulada «Planes de Pago»| Plan | Precio | Acceso |
|---|---|---|
| Curso Individual | $29-99 | Un curso, lifetime |
| Mensual | $19/mes | Todos los cursos |
| Anual | $149/ano | Todos los cursos (~35% descuento) |
Próximas Implementaciones
Sección titulada «Próximas Implementaciones»Ver Features Pendientes para el roadmap detallado de lo que viene.
Top 3 prioridades:
- Comentarios y Q&A en lecciones
- Transcripciones de video
- Sistema de badges/logros
Costos Operativos
Sección titulada «Costos Operativos»| Servicio | Costo Mensual |
|---|---|
| Fly.io (hosting) | ~$5-10 |
| AWS S3 + CloudFront | ~$5-15 |
| Stripe | 2.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.