Ce plan vise à augmenter l'engagement utilisateur ("time spent on app") en intégrant des mécaniques de jeu, de la rétroaction sensorielle ("Juice") et des systèmes de progression à long terme.
- Base solide : Les quiz fonctionnent, les stats sont claires.
- Feedback immédiat : On sait tout de suite si on a bon ou faux.
- Collection : Les badges existent (mais sont statiques).
- Manque de "Juice" (Feedback Visuel/Haptique) : L'interaction est trop "sèche". Il manque le plaisir viscéral d'appuyer sur un bouton et de réussir.
- Solution : Vibrations, animations de réussite, sons.
- Progression bornée : Une fois les 6 badges obtenus, il n'y a plus de but.
- Solution : Système d'XP infini et Niveaux.
- Manque de Rétention (Habitude) : Rien ne pousse à revenir demain spécifiquement.
- Solution : Challenge Quotidien (seedé par la date).
- Identité : L'utilisateur est anonyme et n'a pas de sentiment d'évolution personnelle.
- Solution : Titres/Rangs basés sur le niveau (ex: "Junior", "Senior", "Architect").
Objectif : Rendre chaque clic satisfaisant.
- Haptics (Vibrations) :
- Utiliser
navigator.vibrate()pour le feedback. - Vibration légère au clic.
- Double vibration rapide pour une bonne réponse.
- Vibration lourde pour une erreur.
- Utiliser
- Feedback Visuel "Crunchy" :
- Secousse de l'écran (screen shake) léger sur erreur.
- Particules/Confetti localisés sur le bouton de la bonne réponse.
- Effets Sonores (Optionnel mais recommandé) :
- Sons courts et satisfaisants pour : succès, erreur, niveau supérieur.
- Toggle "Mute" dans les réglages.
Objectif : Donner une raison de jouer 1000 fois.
- Système d'XP :
- Calculer l'XP par question (Facile=10xp, Moyen=20xp, Difficile=30xp).
- Bonus de combo (suite de bonnes réponses).
- Niveaux & Courbe de progression :
- Formule de niveau (ex:
XP = Level^2 * 100). - Affichage du niveau et barre d'XP dans le Header.
- Formule de niveau (ex:
- Rangs / Titres :
- Associer des titres aux paliers de niveaux (Lvl 1: "Stagiaire", Lvl 10: "Développeur Junior", ..., Lvl 100: "Dieu du Code").
Objectif : Créer une boucle d'habitude quotidienne.
- Challenge Quotidien :
- Générer un quiz unique par jour (même seed pour tout le monde basé sur
YYYY-MM-DD). - Bonus d'XP x2 pour ce quiz.
- Badge spécial "Daily Streak".
- Générer un quiz unique par jour (même seed pour tout le monde basé sur
- Protection de Série (Streak Freeze) :
- Permettre "d'acheter" un gel de série avec de l'XP ou une monnaie virtuelle pour ne pas perdre son streak en cas d'oubli.
Objectif : Renforcer l'appartenance.
- Profil Utilisateur :
- Page profil montrant l'avatar (généré ou choisi), le titre, et les stats détaillées.
- Thèmes Visuels :
- Débloquer des thèmes (Dark, Cyberpunk, Retro) avec les niveaux.
Dans src/logic/gamification.ts :
export const XP_TABLE = {
EASY: 10,
MEDIUM: 20,
HARD: 30,
COMBO_MULTIPLIER: 1.5 // x1.5 si combo > 3
};
export function calculateLevel(totalXp: number): number {
return Math.floor(Math.sqrt(totalXp / 100)) + 1;
}
export function getTitleForLevel(level: number): string {
if (level < 5) return "Script Kiddie";
if (level < 10) return "Hello Worlder";
if (level < 20) return "Junior Dev";
// ...
return "Tech Lead";
}Dans useStatsStore.ts :
// À la fin d'un quiz
function processQuizRewards(session: QuizSession) {
const baseXp = calculateBaseXp(session);
const comboBonus = calculateComboBonus(session);
const totalGain = baseXp + comboBonus;
userProfile.value.xp += totalGain;
// Check level up
const newLevel = calculateLevel(userProfile.value.xp);
if (newLevel > userProfile.value.level) {
// Trigger Level Up Modal!
}
}