diff --git a/bot/lib/clientStats.ts b/bot/lib/clientStats.ts
index 88ed681..92cf657 100644
--- a/bot/lib/clientStats.ts
+++ b/bot/lib/clientStats.ts
@@ -28,6 +28,7 @@ export function getClientStats(): ClientStats {
ping: AuroraClient.ws.ping,
cachedUsers: AuroraClient.users.cache.size,
commandsRegistered: AuroraClient.commands.size,
+ commandsKnown: AuroraClient.knownCommands.size,
uptime: process.uptime(),
lastCommandTimestamp: AuroraClient.lastCommandTimestamp,
};
diff --git a/shared/modules/dashboard/dashboard.types.ts b/shared/modules/dashboard/dashboard.types.ts
index dc2d9c2..5549d4f 100644
--- a/shared/modules/dashboard/dashboard.types.ts
+++ b/shared/modules/dashboard/dashboard.types.ts
@@ -25,6 +25,8 @@ export const DashboardStatsSchema = z.object({
}),
commands: z.object({
total: z.number(),
+ active: z.number(),
+ disabled: z.number(),
changePercentFromLastMonth: z.number().optional(),
}),
ping: z.object({
@@ -53,6 +55,7 @@ export const ClientStatsSchema = z.object({
ping: z.number(),
cachedUsers: z.number(),
commandsRegistered: z.number(),
+ commandsKnown: z.number(),
uptime: z.number(),
lastCommandTimestamp: z.number().nullable(),
});
diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx
index 7f6612f..e330cac 100644
--- a/web/src/pages/Dashboard.tsx
+++ b/web/src/pages/Dashboard.tsx
@@ -2,6 +2,10 @@ import React from "react";
import { Link } from "react-router-dom";
import { useSocket } from "../hooks/use-socket";
import { Badge } from "../components/ui/badge";
+import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card";
+import { Skeleton } from "../components/ui/skeleton";
+import { Server, Users, Terminal, Activity } from "lucide-react";
+import { cn } from "../lib/utils";
export function Dashboard() {
const { isConnected, stats } = useSocket();
@@ -26,8 +30,8 @@ export function Dashboard() {
{/* Live Status Badge */}
{isConnected && (
@@ -51,15 +55,107 @@ export function Dashboard() {
- {/* Content Placeholder */}
-
-
-
Dashboard Overview
-
- Real-time connection status:
- {isConnected ? "Connected" : "Disconnected"}
-
-
+ {/* Dashboard Content */}
+
+
+ {/* Stats Grid */}
+
+
+
+ Total Servers
+
+
+
+ {stats ? (
+ <>
+ {stats.guilds.count.toLocaleString()}
+
+ {stats.guilds.changeFromLastMonth
+ ? `${stats.guilds.changeFromLastMonth > 0 ? '+' : ''}${stats.guilds.changeFromLastMonth} from last month`
+ : "Active Guilds"
+ }
+
+ >
+ ) : (
+
+
+
+
+ )}
+
+
+
+
+
+ Total Users
+
+
+
+ {stats ? (
+ <>
+ {stats.users.total.toLocaleString()}
+
+ {stats.users.active.toLocaleString()} active now
+
+ >
+ ) : (
+
+
+
+
+ )}
+
+
+
+
+
+ Commands
+
+
+
+ {stats ? (
+ <>
+ {stats.commands.total.toLocaleString()}
+
+ {stats.commands.active} active ยท {stats.commands.disabled} disabled
+
+ >
+ ) : (
+
+
+
+
+ )}
+
+
+
+
+
+ System Ping
+
+
+
+ {stats ? (
+ <>
+
+ {Math.round(stats.ping.avg)}ms
+
+
+ Average latency
+
+ >
+ ) : (
+
+
+
+
+ )}
+
+
diff --git a/web/src/server.ts b/web/src/server.ts
index 0e89989..7d726ae 100644
--- a/web/src/server.ts
+++ b/web/src/server.ts
@@ -388,6 +388,7 @@ export async function createWebServer(config: WebServerConfig = {}): Promise