+
+
+ Jail Distribution
+
+
+
+
+
+
+
{/* ------------------------------------------------------------------ */}
{/* Ban list section */}
{/* ------------------------------------------------------------------ */}
diff --git a/frontend/src/types/ban.ts b/frontend/src/types/ban.ts
index 7062d11..4a1d51e 100644
--- a/frontend/src/types/ban.ts
+++ b/frontend/src/types/ban.ts
@@ -110,3 +110,31 @@ export interface BanTrendResponse {
/** Human-readable bucket size label, e.g. `"1h"`, `"6h"`, `"1d"`, `"7d"`. */
bucket_size: string;
}
+
+// ---------------------------------------------------------------------------
+// Bans by jail
+// ---------------------------------------------------------------------------
+
+/**
+ * A single jail entry in the bans-by-jail aggregation.
+ *
+ * Mirrors `JailBanCount` from `backend/app/models/ban.py`.
+ */
+export interface JailBanCount {
+ /** Jail name. */
+ jail: string;
+ /** Number of bans recorded in this jail for the selected window. */
+ count: number;
+}
+
+/**
+ * Response from `GET /api/dashboard/bans/by-jail`.
+ *
+ * Mirrors `BansByJailResponse` from `backend/app/models/ban.py`.
+ */
+export interface BansByJailResponse {
+ /** Jails ordered by ban count descending. */
+ jails: JailBanCount[];
+ /** Total ban count in the selected window. */
+ total: number;
+}