Problema
En un campus Moodle con catálogo amplio, el alumno raramente descubre los cursos que de verdad encajan con sus intereses: navega por categorías, no por temática. La pregunta "¿qué curso hago ahora?" no tenía una respuesta guiada dentro de la propia plataforma, y los cursos recién publicados pasaban desapercibidos.
Solución
Diseñé e implementé desde cero el bloque block_course_recommender. El alumno marca sus intereses como badges y el bloque cruza esas etiquetas con las de cada curso mediante una consulta SQL con CTE que puntúa por número de coincidencias y prioriza lo más reciente. Las sugerencias llegan en tiempo real vía un servicio web externo de Moodle (AJAX), validado con sesskey y contexto, sin recargar la página. El front se resuelve con un módulo AMD (RequireJS + jQuery) y plantillas Mustache; el catálogo de etiquetas se cachea en MUC con TTL configurable para evitar consultas repetidas. Filtra cursos visibles con automatrícula y excluye aquellos en los que el alumno ya está inscrito. Añadí ajustes de administración (color, número de etiquetas, criterio de orden), provider de privacidad GDPR e i18n completo ES/EN.
Resultado
El bloque está publicado como release v2.0.0 estable, instalable como cualquier plugin Moodle. Aporta descubrimiento de cursos por afinidad dentro del propio campus, con sugerencias instantáneas, etiquetas configurables y JavaScript minificado con Grunt (~44% menos). Cumple las convenciones Moodle: cabecera GPL v3, PHPDoc, privacidad y bilingüismo, listo para distribución.