diff --git a/hive-c0re/assets/index.html b/hive-c0re/assets/index.html
index 605e347..25fdbd5 100644
--- a/hive-c0re/assets/index.html
+++ b/hive-c0re/assets/index.html
@@ -3,6 +3,7 @@
hyperhive // h1ve-c0re
+
diff --git a/hive-c0re/src/dashboard.rs b/hive-c0re/src/dashboard.rs
index 599251c..f7f9aba 100644
--- a/hive-c0re/src/dashboard.rs
+++ b/hive-c0re/src/dashboard.rs
@@ -41,6 +41,7 @@ pub async fn serve(port: u16, coord: Arc) -> Result<()> {
.route("/", get(serve_index))
.route("/static/dashboard.css", get(serve_css))
.route("/static/app.js", get(serve_app_js))
+ .route("/favicon.svg", get(serve_favicon))
.route("/api/state", get(api_state))
.route("/approve/{id}", post(post_approve))
.route("/deny/{id}", post(post_deny))
@@ -140,6 +141,16 @@ async fn serve_app_js() -> impl IntoResponse {
)
}
+/// Dashboard favicon — the hyperhive mark. Static: the dashboard
+/// represents the whole hive, so it always uses the project logo
+/// (per-agent pages serve their own configurable `/icon` instead).
+async fn serve_favicon() -> impl IntoResponse {
+ (
+ [("content-type", "image/svg+xml")],
+ include_str!("../../branding/hyperhive.svg"),
+ )
+}
+
async fn serve_shared_js() -> impl IntoResponse {
(
[("content-type", "application/javascript")],