Modèle
TenantGamificationConfig (XP rules, level thresholds, features)
└── CourseGamificationConfig (override per-course)
UserGamificationProfile (totalXp, currentLevel, currentStreakDays, coins)
├── XpLog (chaque XP earned avec source)
├── UserBadge[]
├── ContestParticipant[]
└── RewardRedemption[]
Moteur XP
XP gagné par activité. Config dans xpRules JSON :
{
"lessonComplete": 50,
"quizPass": 30,
"quizPassFirstTry": 50,
"assignmentSubmit": 40,
"forumPostCreate": 10,
"forumReplyCreate": 5,
"chatTutorMessage": 2,
"liveClassJoin": 20,
"dailyLogin": 5,
"streakBonus": [
{ "days": 7, "bonus": 100 },
{ "days": 30, "bonus": 500 }
]
}
handleGamificationEvent() intégré dans 7 routes (lesson complete, quiz, chat tutor, forum post/reply, live class join, assignment submit).
Niveaux
Seuils configurables (défaut : niveau N = 100 × N²) :
Niveau 1 : 0 XP
Niveau 2 : 100 XP
Niveau 3 : 400 XP
Niveau 4 : 900 XP
Niveau 5 : 1600 XP
...
Le passage de niveau déclenche l'événement level_up (automatisation) + notification push (mobile). L'événement badge_earned est émis lorsqu'un badge est attribué.
Badges
11 types de critères avec logique booléenne AND/OR :
| Critère | Déclencheur |
|---|---|
| lesson_count | N leçons complétées |
| module_count | N modules complétés |
| course_count | N cours complétés |
| xp_threshold | XP >= N |
| streak_days | streak de N jours |
| mastery_avg | moyenne de mastery >= X |
| quiz_perfect_count | N quiz à 100 % |
| forum_post_count | N posts dans le forum |
| study_minutes | N minutes étudiées |
| badge_collection | ensemble de badges obtenu |
| compound | règles AND/OR imbriquées |
Critères composés (AND/OR, profondeur max 3) :
{
"logic": "AND",
"rules": [
{ "type": "quiz_perfect_count", "value": 3 },
{
"logic": "OR",
"rules": [
{ "type": "streak_days", "value": 7 },
{ "type": "mastery_avg", "value": 0.9 }
]
}
]
}
Les badges manuels utilisent criteriaType=manual et peuvent être attribués par des enseignants/admins autorisés ; manual n'est pas un type de critère automatique.
Open Badges 3.0
L'obtention d'un badge crée un UserBadge avec une page publique :
/badges/verify/[userBadgeId](sans authentification)/api/badges/verify/[userBadgeId]retourne du JSON-LD compatible Open Badges 3.0 (modèle de données W3C VC)- Schema.org
EducationalOccupationalCredentialpour la découverte sur Google/LinkedIn - Authenticité vérifiée par l'URL/API publique + enregistrement de la plateforme. Signature/proof cryptographique et bouton natif LinkedIn non encore implémentés (roadmap) ; partage manuel via URL
Leaderboards
Redis ZSET (sorted sets) pour les performances :
ZADD leaderboard:tenant:{tenantId}:scope:course:{courseId}:window:weekly {xp} {userId}
ZADD leaderboard:tenant:{tenantId}:scope:class:{classId}:window:alltime {xp} {userId}
Portées : course, class_group. Fenêtres : alltime, weekly, monthly.
Mode anonyme : l'apprenant apparaît comme « Apprenant #42 » (config par tenant).
Contests
Cycle de vie : draft → active → ended (cron auto-start/end).
7 métriques :
- xp_earned (XP total sur la période)
- lessons_completed
- quizzes_passed
- avg_quiz_score
- study_minutes
- forum_posts
- badges_earned
Configurable : portée (course/class/tenant), date début/fin, prix (rewards).
Rewards shop
Catalogue de récompenses virtuelles. L'apprenant dépense des coins (accumulés via XP) :
- certificate_template — diplôme stylisé
- profile_customization — avatar/bordure
- badge_special — badge unique
- virtual_item — sticker, couleur de pseudo, etc.
Rachat atomique (anti-race condition). Remboursement automatique si l'admin refuse.
Agent IA de gamification
L'admin peut créer/gérer la gamification via chat :
"Crée 5 badges pour mon cours de Mathématiques en mettant l'accent sur
la régularité (streaks) et la maîtrise (>= 80% de réussite). Bonus
pour les apprenants qui aident dans le forum."
19 outils (CRUD badges/contests/rewards, config XP, analytics, attribution manuelle). Boucle tool_use max 15 itérations.
Le Gamification Agent (IA) permet de creer badges, contests et rewards via chat.
Rapports parentaux
Gamification intégrée dans packages/core/src/monitoring/advanced-reports.ts :
- StudentReport inclut XP, niveau, badges récents, streak
- Le portail parents affiche une section « Réussites » avec grille de badges + compteur de streak
- Le rapport LLM mentionne les réussites : « Marie a complété 3 cours et obtenu 5 badges ce mois-ci »