Skip to main content

Analytics

Descripción​

Dashboard de análisis y monitoreo del ecosistema Vibra. Presenta 4 cards de tendencia (total actividades, participantes, registros emocionales, cursos activos) y 5 gráficas interactivas construidas con Recharts. Filtro global por curso y selector de período.

Componentes​

ComponenteRutaPropósito
AnalyticsDashboardcomponents/analytics/analytics-dashboard.tsxDashboard principal con layout de grid
ActivitiesByMonthChartcomponents/analytics/activities-by-month-chart.tsxGráfico de barras: actividades por mes
EmotionsDistributionChartcomponents/analytics/emotions-distribution-chart.tsxGráfico de pastel: distribución de emociones
EmotionsEvolutionChartcomponents/analytics/emotions-evolution-chart.tsxGráfico de líneas: evolución temporal
CourseProgressChartcomponents/analytics/course-progress-chart.tsxGráfico de barras horizontal: progreso por curso
ParticipantRankingChartcomponents/analytics/participant-ranking-chart.tsxRanking visual top 10 participantes
CourseSelectorcomponents/analytics/course-selector.tsxDropdown con búsqueda para filtrar por curso

AnalyticsDashboard​

Layout en grid con:

Fila de filtros: CourseSelector + selector de período (desde FilterContext).

Cards de tendencia (grid 4 columnas):

CardFuente de datos
Total ActividadesgetCountAllActivities()
Total ParticipantesgetCountAllParticipants()
Registros EmocionalesgetEmotionDistribution() — suma de values
Cursos ActivosgetCourseProgress() — length del array

Cuadrícula de gráficas (2 columnas):

PosiciónGráficaTipo Recharts
Fila 1, Col 1ActivitiesByMonthChart<BarChart>
Fila 1, Col 2EmotionsDistributionChart<PieChart> con donut (innerRadius=60, outerRadius=90)
Fila 2, Col 1CourseProgressChart<BarChart layout="vertical">
Fila 2, Col 2ParticipantRankingChartLista rankeada (no Recharts)
Fila 3, FullEmotionsEvolutionChart<LineChart> (col-span-2)

Cada gráfica tiene botón de expandir (ícono de expandir) que abre la gráfica en una tab independiente.

ActivitiesByMonthChart​

Gráfico de barras que muestra actividades completadas por mes. Datos desde getActivitiesByMonth(year, courseId). Eje X con nombres de meses abreviados (Ene, Feb... Dic). Tooltip con valores. Barras color gris #6b7280 con bordes redondeados radius={[4,4,0,0]}.

EmotionsDistributionChart​

Gráfico de donut con distribución de emociones registradas. Datos desde getEmotionDistribution(startDate, endDate, courseId). 10 colores predefinidos. Labels con nombre y porcentaje. Incluye <Legend>.

EmotionsEvolutionChart​

Gráfico de líneas que muestra evolución de registros emocionales en el tiempo. Datos desde getEmotionEvolution(days, startDate, endDate, courseId). Eje X formateado como día/mes. Tooltip con formato de fecha. Línea continua con dots en cada punto.

CourseProgressChart​

Gráfico de barras horizontal que muestra porcentaje de participantes que han completado al menos una actividad por curso. Datos desde getCourseProgress(). Eje X con dominio 0-100 y unidad %. Usa 5 colores progresivos (rojo → amarillo → verde → azul → púrpura).

ParticipantRankingChart​

Ranking visual del top 10 participantes (no usa gráfico Recharts, es lista HTML). Datos desde GET /api/participants/leaderboard?limit=10. Cada entrada muestra:

  • Posición (#1 oro, #2 plata, #3 bronce, #4+ gris)
  • Avatar (imagen o inicial)
  • Nickname
  • Badge de nivel con color (bronce, plata, oro, platino, diamante)
  • Puntos totales

CourseSelector​

Dropdown con input de búsqueda para filtrar analytics por curso. Datos desde getSimpleCourseList(). Opción "Todos los cursos" por defecto. Cierra al hacer clic fuera.

Filtros​

FiltroFuenteUso
CursoCourseSelectorcourseId → todas las gráficas
AñoFilterContext (yearFilter)ActivitiesByMonthChart
Fecha inicioFilterContext (dateInitFilter)EmotionsDistributionChart, EmotionsEvolutionChart
Fecha finFilterContext (dateEndFilter)EmotionsDistributionChart, EmotionsEvolutionChart

Dependencias​

  • recharts — BarChart, PieChart, LineChart, ResponsiveContainer
  • @/registry/new-york/ui/card — shadcn card wrapper