{{ (currentAdmin.display_name || currentAdmin.email || '?').charAt(0).toUpperCase() }} {{ currentAdmin.display_name || currentAdmin.email }}

Dashboard

{{ metrics.users?.total || 0 }}
Users
{{ metrics.users?.active || 0 }} active
{{ metrics.categories?.total || 0 }}
Categories
{{ metrics.categories?.active || 0 }} active
{{ metrics.quizzes?.total || 0 }}
Quizzes
{{ metrics.quizzes?.active || 0 }} active
{{ metrics.objectives?.total || 0 }}
Objectives
{{ metrics.objectives?.active || 0 }} active
{{ metrics.puzzles?.total || 0 }}
Puzzles
{{ metrics.puzzles?.active || 0 }} active
{{ metrics.fillblanks?.total || 0 }}
Fill Blanks
{{ metrics.fillblanks?.active || 0 }} active
{{ metrics.timed_challenges?.total || 0 }}
Timed Challenges
{{ metrics.timed_challenges?.active || 0 }} active
{{ metrics.cmdbuilder?.total || 0 }}
Cmd Builder
{{ metrics.cmdbuilder?.active || 0 }} active
{{ metrics.bughunt?.total || 0 }}
Bug Hunt
{{ metrics.bughunt?.active || 0 }} active
{{ metrics.achievements?.total || 0 }}
Achievements
{{ metrics.achievements?.active || 0 }} active
{{ metrics.weakness?.users_at_risk || 0 }}
Utilisateurs à risque
catégorie en moyen/faible
{{ metrics.training?.active_sessions || 0 }}
Sessions Mode Formation actives
{{ metrics.training?.active_participants || 0 }} stagiaires
{{ metrics.recent_activity?.count_24h || 0 }}
Activité (24h)
{{ metrics.recent_activity?.accuracy_24h || 0 }}% accuracy
Leaderboard (Top 10)
#NameEmailScore
{{ idx + 1 }} {{ user.display_name }} {{ user.email }} {{ user.score }}
Quizzes by Category
{{ cat }}{{ count }}
No data
Quizzes by Difficulty
{{ diff }}{{ count }}
No data

Users

{{ dtTotal }} total
per page
Email Name Score Active AdminTrainerCreatedActions

Categories

per page
/
Name Description Active CreatedActions
{{ cat.name }} {{ cat.description }} {{ cat.active ? 'Active' : 'Inactive' }} {{ formatDate(cat.created_at) }}

No items found{{ dtSearch ? ' matching "' + dtSearch + '"' : '' }}

Domains (Districts)

per page
/
Order Slug Name Color Active Actions
{{ dom.order }} {{ dom.slug }} {{ dom.icon }} {{ dom.name }} {{ dom.color }} {{ dom.is_active ? 'Active' : 'Inactive' }}

No items found{{ dtSearch ? ' matching "' + dtSearch + '"' : '' }}

Objectives

per page
Title Category Difficulty Points EnabledActions
{{ obj.title }} {{ obj.category }} {{ obj.difficulty }} {{ obj.bonus_points }} {{ obj.enabled ? 'Active' : 'Inactive' }}

Quizzes

per page
Question Category Topic Difficulty TypeActiveActions
{{ quiz.question }} {{ quiz.category }} {{ quiz.topic }} {{ quiz.difficulty }} {{ quiz.type }} {{ quiz.active ? 'Active' : 'Inactive' }}

Maps

EmailObjectsCreatedActions
{{ map.email }} {{ countMapObjects(map) }} objects {{ formatDate(map.created_at) }}
{{ mapGridView.email }}
Aucun domaine — crée-les dans l'onglet Domains.
Les lots peints porteront ce district.
{{ (col - 1 + mapGridMinX) * 10 }}
{{ (rIdx + mapGridMinZ) * 10 }} {{ cell.category }}

Scenarios

per page
Title Category Difficulty Points InstructionsActiveActions
{{ sc.title }} {{ sc.category }} {{ sc.difficulty }} {{ sc.points }} {{ sc.instructions?.length || 0 }} steps {{ sc.active ? 'Active' : 'Inactive' }}

Puzzles

per page
Title Category Topic Difficulty BlocksActiveActions
{{ pz.title }} {{ pz.category }} {{ pz.topic }} {{ pz.difficulty }} {{ pz.commands?.length || 0 }} {{ pz.is_active ? 'Active' : 'Inactive' }}

Fill the Blank

per page
Title Category Topic Difficulty BlanksActiveActions
{{ fb.title }}
{{ fb.topic }}
{{ fb.category }} {{ fb.topic }} {{ fb.difficulty }} {{ fb.blanks?.length || 0 }} {{ fb.active ? 'Active' : 'Inactive' }}

Timed Challenges

per page
Title Category Difficulty TimeQuestionsActiveActions
{{ tc.title }} {{ tc.category }} {{ tc.difficulty }} {{ tc.time_limit_seconds }}s {{ tc.question_count }} {{ tc.active ? 'Active' : 'Inactive' }}

Achievements

per page
Icon Name Category ConditionRewardActiveActions
{{ ach.icon }} {{ ach.name }}
{{ ach.description }}
{{ ach.category }} {{ ach.condition_type }} ≥ {{ ach.condition_value }} {{ ach.points_reward || ach.reward_points || 0 }} pts {{ ach.active ? 'Active' : 'Inactive' }}

Command Builder

per page
Title Category Topic Difficulty Points ActiveActions
{{ cmd.title }}
{{ cmd.correct_command }}
{{ cmd.category }} {{ cmd.topic }} {{ cmd.difficulty }} {{ cmd.points }} {{ cmd.active ? 'Active' : 'Inactive' }}

Bug Hunt Exercises

per page
Title Category Topic Difficulty LanguagePointsActiveActions
{{ ex.title }} {{ ex.category }} {{ ex.topic }} {{ ex.difficulty }} {{ ex.language }} {{ ex.points }} {{ ex.active ? 'Active' : 'Inactive' }}

SQL Challenges

per page
Title Category Topic Difficulty DialectPointsActiveActions
{{ ch.title }} {{ ch.category }} {{ ch.topic }} {{ ch.difficulty }} {{ ch.dialect }} {{ ch.points }} {{ ch.active ? 'Active' : 'Inactive' }}

Python Challenges

per page
Title Category Topic Difficulty KindPointsActiveActions
{{ ch.title }} {{ ch.category }}{{ ch.topic }} {{ ch.difficulty }} {{ ch.kind }} {{ ch.points }} {{ ch.active ? 'Active' : 'Inactive' }}

Git Challenges

per page
Title Category Difficulty LevelStepsPointsActiveActions
{{ ch.title }} {{ ch.category }} {{ ch.difficulty }} {{ ch.level }} {{ (ch.steps || []).length }} {{ ch.points }} {{ ch.active ? 'Active' : 'Inactive' }}

User Activities

{{ count }}
{{ type }}
Time User Type Subject Category Difficulty Result Accuracy Score
{{ a.timestamp ? new Date(a.timestamp).toLocaleString() : '—' }} {{ a.email }} {{ a.activity_type }} {{ a.subject || '—' }} {{ a.category || '—' }} {{ a.difficulty || '—' }} ✅ Pass ❌ Fail {{ a.accuracy != null ? Math.round(a.accuracy * 100) + '%' : '—' }} {{ a.score != null ? a.score : '—' }}
No activities found.
🏆 Top Users by Score
#EmailScore
{{ i + 1 }}{{ u.email }}{{ u.score }}

Training Sessions

Training Subject Code Date Status Actions
{{ s.training_name }} {{ s.subject }} {{ s.session_code }} {{ s.training_date || '—' }} {{ s.status }}
No training sessions found.
{{ trainingDashboard.training_name }} {{ trainingDashboard.subject }} {{ trainingDashboard.status }}
Participant Email Challenges Accuracy Last activity
{{ p.display_name }} {{ p.user_id }} {{ p.session_challenges_completed }} {{ p.session_accuracy }}% {{ p.last_activity_at ? new Date(p.last_activity_at).toLocaleString() : '—' }}
No participants have joined yet.

Formations

Name Subject Chapters Status Created By Actions
{{ f.name }} {{ f.subject }} {{ f.chapters?.length || 0 }} {{ f.active ? 'Active' : 'Inactive' }} {{ f.created_by }}
No formations found. Create one to get started.

Game Settings

Changes take effect immediately for new sessions. Frontend values reload on next page load.
No settings found. Run python -m scripts.seed_settings to seed defaults.
{{ s.key }} {{ typeof s.value }}

{{ s.description }}

Current: {{ s.value }} Saved!

Skill Tree

Read-only — edit prerequisites via Objectives page
{{ skillTreeStats.completed }}
Objectives defined
{{ skillTreeStats.withPrereqs }}
With prerequisites
{{ skillTreeStats.maxDepth }}
Max depth
Title Category Difficulty Prerequisites Depth Status
{{ node.title }} {{ node.category }} {{ node.difficulty }} {{ p }} {{ node._depth }} Root Linked
No objectives found. Create objectives with prerequisites in the Objectives page.

Weekly Boss

{{ wbBoss.title }}

{{ wbBoss.description }}

{{ wbBoss.category }} {{ wbBoss.difficulty }} {{ wbBoss.reward_points }} pts {{ wbBoss.active ? 'Active' : 'Inactive' }} {{ wbBoss.question_count }} questions
Week: {{ wbBoss.week_key }}
No boss set for the current week.
Completions this week
#EmailScoreAccuracy
{{ i+1 }} {{ c.email }} {{ c.score }} {{ (c.accuracy * 100).toFixed(0) }}%
No completions yet