{% extends 'admin/custom_base.html' %} {% block body %} {# ── Inject all time-series data for JS ── #}
{# ── Page header ── #}
Analytics
{{ stats.total|int }} events  ·  {{ activity_rows|length }} activity sessions  ·  {{ growth.totals.players }} total players
{# ── Range toolbar ── #}
{# ── Tabs ── #}
{# ════════════════════════════════════ GROWTH ════════════════════════════════════ #}
{# KPI row 1 with trend indicators #}
{{ growth.totals.players }}
Total Players
All registered accounts
{{ growth.totals.active }}
Active Players
Not banned
{{ growth.totals.banned }}
Banned
Currently banned
{{ growth.totals.devs }}
Devs
{{ "{:,}".format(growth.totals.total_xp) }}
XP in Circulation
Earned across all players
{{ "{:,}".format(growth.totals.total_tokens) }}
Tokens in Circ.
Unspent balance total
{{ growth.totals.total_photos }}
Photos Taken
{{ growth.totals.total_chat }}
Chat Messages
{{ growth.totals.total_friends }}
Friendships
{{ "{:,}".format(growth.totals.total_unlocked) }}
Items Unlocked
{{ growth.totals.total_gifts }}
Gifts Distributed
{{ growth.totals.total_logins }}
Total Logins
{{ growth.totals.avg_level }}
Avg Level
{{ growth.totals.max_level }}
Max Level
{{ growth.totals.total_visits }}
Room Visits
{{ growth.totals.total_rooms }}
Custom Rooms
{{ growth.totals.consumables_held }}
Consumables
{{ growth.totals.total_bans }}
Total Bans
{{ growth.totals.total_admin_acts }}
Admin Actions
{{ growth.totals.gifts_opened }}
Gifts Opened
{# Cumulative player growth — Line #}
Cumulative Player Registrations
Total accounts over time — shows overall growth trajectory
{# Multi-series daily activity — Line #}
Daily Activity — All Channels
Logins, room visits, photos, and chat messages per day — normalized to their own peak
{# Daily registrations — Bar #}
New Registrations / Day
How many new players joined each day
{# Gifts per day — Bar #}
Gifts Distributed / Day
Reward boxes given out per day — reflects game activity
{# Items unlocked #}
Items Unlocked / Day
Cosmetic items earned through gameplay
{# Photos per day #}
Photos Taken / Day
In-game camera usage — proxy for social engagement
{# Distributions grid #}
Level Distribution
How players are spread across levels
Gift Rarity Distribution
What quality rewards are being given out
Platform Breakdown
Which platforms players log in from
{# Top players #}
Top Players by XP
{% for p in growth.top_players_xp %} {% endfor %}
#PlayerLevelXPTokensStatus
{{ loop.index }} {{ p.username }} {{ p.level }} {{ "{:,}".format(p.xp) }} {{ "{:,}".format(p.tokens) }} {% if p.developer %}Dev{% endif %}
Top Players by Token Balance
{% for p in growth.top_players_tokens %} {% endfor %}
#PlayerLevelTokensXP
{{ loop.index }} {{ p.username }} {{ p.level }} {{ "{:,}".format(p.tokens) }} {{ "{:,}".format(p.xp) }}
{# Admin activity + bans #} {% if growth.admin_by_day %}
Admin Actions & Bans / Day
Moderation activity over time — spikes may indicate incidents
{% endif %}
Admin Action Types
{% set at_max = (growth.admin_action_types | map(attribute='c') | list | max) if growth.admin_action_types else 1 %} {% for row in growth.admin_action_types %}
{{ row.action }}
{{ row.c }}
{% endfor %}
Ban & Unban History
{% set ban_map = {} %}{% set unban_map = {} %} {% for row in growth.bans_by_day %}{% if row.action == 'ban' %}{% set _ = ban_map.update({row.d: row.c}) %}{% else %}{% set _ = unban_map.update({row.d: row.c}) %}{% endif %}{% endfor %} {% for d in (ban_map.keys()|list + unban_map.keys()|list)|unique|sort %} {% endfor %}
DateBansUnbans
{{ d }} {{ ban_map.get(d, '—') }} {{ unban_map.get(d, '—') }}
{# /growth #} {# ════════════════════════════════════ OVERVIEW ════════════════════════════════════ #} {# /overview #} {# ════════════════════════════════════ PERFORMANCE ════════════════════════════════════ #} {# /performance #} {# ════════════════════════════════════ ECONOMY ════════════════════════════════════ #} {# /economy #} {# ════════════════════════════════════ SOCIAL & STABILITY ════════════════════════════════════ #} {# /social #} {# ════════════════════════════════════ RAW EVENTS ════════════════════════════════════ #} {# /raw #}
{# /an-wrap #}
Link copied!
{% endblock %}