{% extends 'base.html' %} {% block extra_css %} {% endblock %} {% block content %}

Admin Console

Institution-wide overview, generation health and exam management.

{{ stats.failed_total }} Failed New Exam
Console Exams Users Subjects Topics Reference Papers
Users

{{ stats.total_users }}

{{ stats.active_users }} active
Exams

{{ stats.total_exams }}

{{ stats.completed }} completed
Success rate

{{ stats.success_rate }}%

of finished generations
Failed / stuck

{{ stats.failed }}

{{ stats.in_progress }} in progress
Revenue

{{ '{:,.0f}'.format(stats.revenue) }}

KES · completed payments
Generation activity (14 days)
Status breakdown
KCSE vs CBC
Top subjects
{% if chart.subjects %} {% set top = chart.subjects[0].count %} {% for s in chart.subjects %}
{{ s.name }}{{ s.count }}
{% endfor %} {% else %}

No exams yet.

{% endif %}
Failed & stuck generations {% if triage %}
{% endif %}
{% if triage %} {% for item in triage %}
{{ item.exam.title }}
{{ item.exam.creator.username if item.exam.creator else 'Unknown' }} · {{ item.exam.exam_mode|upper }} · {{ item.exam.status }} · {{ item.exam.created_at.strftime('%Y-%m-%d %H:%M') if item.exam.created_at else '' }}
{% if item.error %}
{{ item.error }}
{% endif %}
{% endfor %} {% else %}

No failed or stuck generations. All clear.

{% endif %}
Recent usersManage
{% for u in users %} {% endfor %}
UserPlanStatus
{{ u.username }}
{{ u.email }}
{{ u.subscription_type|title }} {{ 'Active' if u.is_active else 'Inactive' }}
Recent examsManage
{% for e in exams %} {% endfor %}
TitleUserStatus
{{ e.title[:34] }}{% if e.title|length > 34 %}…{% endif %} {{ e.creator.username if e.creator else '—' }} {{ e.status }}
{% endblock %} {% block extra_js %} {% endblock %}