diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/AlertHub.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/AlertHub.cs
new file mode 100644
index 0000000..541496a
--- /dev/null
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/AlertHub.cs
@@ -0,0 +1,9 @@
+using Microsoft.AspNetCore.SignalR;
+
+namespace ZB.MOM.WW.OtOpcUa.AdminUI.Hubs;
+
+/// Browser-facing alert / toast push channel. Bridge wiring staged for F16.
+public sealed class AlertHub : Hub
+{
+ public const string Endpoint = "/hubs/alerts";
+}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs
new file mode 100644
index 0000000..7e23051
--- /dev/null
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/FleetStatusHub.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.SignalR;
+using ZB.MOM.WW.OtOpcUa.Commons.Messages.Fleet;
+
+namespace ZB.MOM.WW.OtOpcUa.AdminUI.Hubs;
+
+///
+/// Browser-facing fleet-status push channel. Subscribers receive
+/// snapshots whenever the admin-role FleetStatusBroadcaster publishes a diff.
+///
+/// Server-side bridge from FleetStatusBroadcaster.broadcast → IHubContext<FleetStatusHub>
+/// is staged for follow-up F16. For now the hub is a passive channel; SignalR clients connect
+/// and stay idle until the bridge lands.
+///
+public sealed class FleetStatusHub : Hub
+{
+ public const string Endpoint = "/hubs/fleet-status";
+ public const string MethodName = "fleetStatusChanged";
+}
diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/HubRouteBuilderExtensions.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/HubRouteBuilderExtensions.cs
new file mode 100644
index 0000000..95e1a5a
--- /dev/null
+++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Hubs/HubRouteBuilderExtensions.cs
@@ -0,0 +1,14 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Routing;
+
+namespace ZB.MOM.WW.OtOpcUa.AdminUI.Hubs;
+
+public static class HubRouteBuilderExtensions
+{
+ public static IEndpointRouteBuilder MapOtOpcUaHubs(this IEndpointRouteBuilder app)
+ {
+ app.MapHub(FleetStatusHub.Endpoint);
+ app.MapHub(AlertHub.Endpoint);
+ return app;
+ }
+}