{% extends "base.html" %} {% block title %}Admin Dashboard - {{ config.BBS_NAME }}{% endblock %} {% block content %}

Admin Dashboard

{% if update_banner %}
Update available: {{ update_banner.current }}{{ update_banner.available }} ({{ update_banner.size_mb }} MB)
Review & install
{% endif %} {% if whats_new %}
What's new in this build Updates
{{ whats_new | markdown | safe }}
{% endif %}

{{ stats.total_users }}

Total Users

{{ stats.active_users }}

Active (30d)

{{ stats.online_users }}

Online Now

{{ stats.total_posts }}

Total Posts

{{ stats.total_boards }}

Boards

{{ stats.total_messages }}

Bulletins

{{ stats.new_users_24h }}

New users (24h)

{{ stats.new_posts_24h }}

New posts (24h)

{{ stats.pending_files }}

Pending file uploads
Recent callers
    {% for c in recent_callers %}
  • {{ c.username if c.username else '?' }} {{ c.started_at.strftime('%m-%d %H:%M') }}
  • {% else %}
  • No callers logged.
  • {% endfor %}
System Info

Python: {{ system_info.python_version }}

Flask: {{ system_info.flask_version }}

Database: {{ system_info.db_type }}

{% if system_info.last_upgraded_at %}

Last upgraded: {{ system_info.last_upgraded_at }} ({{ system_info.last_upgraded_relative }})

{% endif %}
Online Users ({{ stats.online_users }})
{% if online_sessions %} {% for session in online_sessions %} {{ session.user.username }} {% endfor %} {% else %}

No users online

{% endif %}
{% if recent_events %}
Recent scheduled events Manage events
{% for ev in recent_events %} {% endfor %}
NameHandlerRanStatusDuration
{{ ev.name }} {{ ev.handler_key }} {{ ev.last_run_at.strftime('%Y-%m-%d %H:%M UTC') }} ({{ ev.relative_age }}) {% if ev.last_status == 'ok' %} ok {% elif ev.last_status == 'fail' %} fail {% else %} {{ ev.last_status or '?' }} {% endif %} {% if ev.last_duration_ms %}{{ ev.last_duration_ms }} ms{% else %}—{% endif %}
{% endif %}
Recent Registrations
{% for user in recent_users %} {% endfor %}
UsernameEmailJoined
{{ user.username }} {% if user.is_admin %}Admin{% endif %} {{ user.email }} {{ user.created_at.strftime('%Y-%m-%d') }}
Recent Logins
{% for user in recent_logins %} {% endfor %}
UsernameLast LoginCount
{{ user.username }} {{ user.last_login.strftime('%Y-%m-%d %H:%M') if user.last_login }} {{ user.login_count }}
{% endblock %}