Forums Feature Requests Thread

[Enhancement] Admin: actionable dashboard metrics with charts

Patrick Bass · May 24 · 23 · 1 Locked
[Deployed to Production]
🚀 OP May 24, 2026 7:52pm

Type: Enhancement

Priority: P1

Current state: The admin dashboard shows counts but not trends (growth rate, engagement rate, churn signals). No charts or graphs.

Proposed improvement: Add sparkline charts for member growth, post volume, and active users over 7/30/90 days. Highlight actionable signals: members who stopped posting, threads with no replies, report queue depth.


Patrick Bass
@mobieus

🚀 May 28, 2026 3:16pm

Status: Deployed in commit b1428980.

Implemented the full scope of the original request. The admin dashboard now has two new sections sitting between the headline stat-card row and the Quick actions grid:

Trends — last 90 days Three inline-SVG sparkline cards, no JS or chart library — rendered server-side as a single <path> per chart:

  • Member sign-ups — primary blue, totals + 30-day-vs-prior delta pill
  • Post volume — info blue, totals + today-vs-7-days-ago delta pill
  • Active users / day — success green, 90-day daily-active average

Each card links out to the matching admin surface (Users, Forums, /online). The deltas are colour-coded — green up-arrow when the trend is positive, red down when negative.

Needs attention Three actionable signals, each with a coloured left-border indicating severity:

  • Lapsed members — posted in the last 90 days but not the last 30 → link to /admin/users?lapsed=1 (filter to win-back targets)
  • Threads with no replies — created in the last 30 days with reply_count = 0 → link to /forums/new?filter=no-replies
  • Open reports — current depth + trend vs same window last week → links to /admin/moderation. Colour: warning if non-zero, danger via the same threshold the stat card already uses.

Under the hood

  • Controller adds one private helper dailySeries() that zero-fills a daily-aggregate result across the window so sparkline x-axes stay even regardless of zero-activity days.
  • Six new headline queries (signups/posts/active 90-day series + lapsed/orphan/reports-delta). Each one is a single COUNT or GROUP BY DATE() aggregate, so the dashboard's render cost stays bounded.
  • CSS is scoped to .dash-trends, .dash-trend-card, .dash-spark, .dash-signals, .dash-signal-card — built on semantic tokens (--color-primary, --color-success, --color-warning, --color-danger, --color-bg-input) so both light and dark themes render with correct contrast.

Live on support, fort-smith-live, and dev tenants. Locking thread.


Patrick Bass
@mobieus

Log in or register to reply to this thread.