diff --git a/hbd/server/templates/live.html b/hbd/server/templates/live.html
index 4db57f0..1b39b65 100644
--- a/hbd/server/templates/live.html
+++ b/hbd/server/templates/live.html
@@ -540,7 +540,7 @@
if (msg.service) html += '' + msg.service + '';
html += '' + msg.message + '';
html += '';
- msgs.insertAdjacentHTML("afterbegin", html);
+ msgs.insertAdjacentHTML(state.history ? "beforeend" : "afterbegin", html);
applyLogFilters();
}
cnt++;
diff --git a/hbd/server/ws.py b/hbd/server/ws.py
index d073479..f8f9d6c 100644
--- a/hbd/server/ws.py
+++ b/hbd/server/ws.py
@@ -85,13 +85,15 @@ async def handler(request):
except Exception as e:
logger.error("Error sending initial hosts: %s", e)
- # Send recent messages, filtered to hosts this user may see
+ # Send recent messages newest-first so the client can append them in
+ # display order without reordering on arrival (tagged history=True so
+ # the client knows to append rather than prepend).
if data.msgs:
try:
- for m in data.msgs:
+ for m in reversed(data.msgs):
host_name = m.get("host") if isinstance(m, dict) else None
if not host_name or _user_can_see_host(user, host_name):
- await ws.send_str(json.dumps({"type": "message", "data": m}))
+ await ws.send_str(json.dumps({"type": "message", "data": m, "history": True}))
except Exception as e:
logger.error("Error sending initial messages: %s", e)