diff --git a/admin-web/src/features/dashboard/DashboardPage.tsx b/admin-web/src/features/dashboard/DashboardPage.tsx index e4377d0..115f011 100644 --- a/admin-web/src/features/dashboard/DashboardPage.tsx +++ b/admin-web/src/features/dashboard/DashboardPage.tsx @@ -1,9 +1,7 @@ import { useMemo } from "react"; import { useQueries } from "@tanstack/react-query"; import { - Activity, ArrowUpRight, - FileClock, Network, TrendingUp, Shield, @@ -147,56 +145,21 @@ export function DashboardPage() {
Devices {summary.activeDeviceCount} - {summary.revokedDeviceCount} revoked + {formatBytes(summary.totalRX + summary.totalTX)} traffic
Gateways {summary.activeGatewayCount} {summary.gatewayHealth}
+
+ Policies + {summary.activePolicyCount} + {summary.servicePolicyCount} service-based +
-
- -
-
-

Identity coverage

-
- {summary.activeUserCount} -

{summary.adminUserCount} administrators currently active in the control plane.

-
- - -
-
-

Endpoint activity

-
- {summary.activeDeviceCount} -

{formatBytes(summary.totalRX + summary.totalTX)} total observed tunnel traffic.

-
- - -
-
-

Gateway posture

-
- {summary.gatewayHealth} -

{summary.activeGatewayCount} active gateway nodes enforcing policy.

-
- - -
-
-

Policy model

-
- {summary.activePolicyCount} -

- {summary.servicePolicyCount} service-based and {summary.fullTunnelPolicyCount} full-tunnel policies active. -

-
-
-
@@ -233,7 +196,7 @@ export function DashboardPage() {
{device.name} - {device.assigned_ip ?? "No VPN IP"} · {formatBytes(total)} + {device.owner_username || "unknown user"} · {device.assigned_ip ?? "No VPN IP"} · {formatBytes(total)}
@@ -263,7 +226,7 @@ export function DashboardPage() {
{device.name} - {device.assigned_ip ?? "No VPN IP"} · {device.platform} + {device.owner_username || "unknown user"} · {device.assigned_ip ?? "No VPN IP"} · {device.platform}
{formatBytes((device.rx_bytes ?? 0) + (device.tx_bytes ?? 0))} @@ -327,22 +290,6 @@ export function DashboardPage() {
- - -
-
-

Operations note

-

Gateway enforcement

-
-
- -
-
-

- Effective WireGuard peer state and nftables enforcement are generated from active policies, selected device profiles, - and service-level access rules. Use this dashboard to spot drift before it becomes an outage. -

-
); diff --git a/admin-web/src/styles/global.css b/admin-web/src/styles/global.css index 5c161fb..1872613 100644 --- a/admin-web/src/styles/global.css +++ b/admin-web/src/styles/global.css @@ -439,8 +439,8 @@ button { .dashboard-hero { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(320px, 0.9fr); - gap: 22px; - padding: 26px; + gap: 18px; + padding: 24px; background: radial-gradient(circle at top left, rgba(68, 230, 231, 0.1), transparent 32%), linear-gradient(180deg, rgba(18, 31, 67, 0.92), rgba(10, 18, 40, 0.92)); @@ -467,7 +467,7 @@ button { .dashboard-hero-metrics { display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } @@ -490,12 +490,6 @@ button { color: var(--muted); } -.dashboard-stats-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 18px; -} - .dashboard-stat-head, .dashboard-section-head { display: flex; @@ -504,7 +498,6 @@ button { gap: 14px; } -.dashboard-stat-icon, .dashboard-inline-icon { display: grid; place-items: center; @@ -516,12 +509,6 @@ button { background: rgba(8, 14, 30, 0.68); } -.dashboard-stat-support { - margin: 0; - color: var(--muted); - line-height: 1.5; -} - .dashboard-main-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -777,7 +764,6 @@ button { .dashboard-hero, .dashboard-main-grid, .dashboard-bottom-grid, - .dashboard-stats-grid, .dashboard-posture-grid, .dashboard-hero-metrics, .dashboard-traffic-summary {