{{-- Platform usage + performance reports (sysadmin). Stat tiles + small tables, styled to match the org-dashboard. No charts library. --}} @php($d = $this->getData()) @php($u = $d['usage']) @php($p = $d['performance']) @php($fmt = fn ($v) => is_null($v) ? '—' : number_format((int) $v))

Generated {{ $d['generatedAt']->format('D, d M Y H:i') }}

{{-- ════════════════════════════ USAGE ════════════════════════════ --}}

Usage

@php($tiles = [ ['Total users', $fmt($u['total_users']), null], ['Students', $fmt($u['total_students']), null], ['New signups (30d)', $fmt($u['new_signups_30d']), 'primary'], ['Active (7d)', $fmt($u['active_7d']), 'primary'], ['Active (30d)', $fmt($u['active_30d']), 'primary'], ['Answered (7d)', $fmt($u['answered_7d']), null], ['Answered (30d)', $fmt($u['answered_30d']), null], ['Tests (7d)', $fmt($u['tests_7d']), null], ['Tests (30d)', $fmt($u['tests_30d']), null], ]) @foreach ($tiles as [$label, $value, $tone])
{{ $label }} $tone === 'primary', 'text-gray-900 dark:text-white' => $tone === null, ])>{{ $value }}
@endforeach
{{-- Per-org seat utilisation --}}
Seat utilisation by organisation
@forelse ($u['orgs'] as $org) @empty @endforelse
Organisation Seats used Purchased Utilisation
{{ $org['name'] }} {{ number_format($org['used']) }} {{ number_format($org['bought']) }} $org['util_pct'] >= 90, 'text-success-600' => $org['util_pct'] < 90, ])>{{ $org['util_pct'] }}%
No organisations.
{{-- ═══════════════════════════ PERFORMANCE ═══════════════════════════ --}}

Performance — question bank health

@php($ptiles = [ ['Total questions', $fmt($p['total']), null], ['Public', $fmt($p['public']), 'primary'], ['Draft', $fmt($p['draft']), null], ['With images', $fmt($p['with_images']), null], ['Avg. correctness', is_null($p['avg_correct_pct']) ? '—' : $p['avg_correct_pct'] . '%', 'primary'], ]) @foreach ($ptiles as [$label, $value, $tone])
{{ $label }} $tone === 'primary', 'text-gray-900 dark:text-white' => $tone === null, ])>{{ $value }}
@endforeach
{{-- By QA status --}}
By QA status
@forelse ($p['by_qa'] as $status => $count) @empty @endforelse
{{ str_replace('_', ' ', $status) }} {{ number_format($count) }}
No QA data.
{{-- Maxile distribution (active students, 30d) --}}
Maxile distribution — active students (30d)
@forelse ($p['maxile_buckets'] as $band => $count) @empty @endforelse
{{ $band }} {{ number_format($count) }}
No active students.
{{-- 10 lowest-accuracy questions --}}
10 lowest-accuracy questions (min. 5 attempts)
@forelse ($p['lowest'] as $q) @empty @endforelse
Question Skill Attempts Accuracy
@if (! empty($q['url'])) #{{ $q['id'] }} @else #{{ $q['id'] }} @endif {{ $q['skill'] ?? '—' }} {{ number_format($q['attempts']) }} $q['accuracy'] < 40, 'text-gray-900 dark:text-white' => $q['accuracy'] >= 40, ])>{{ $q['accuracy'] }}%
No questions with enough attempts.