diff --git a/README.md b/README.md
index 789f97a..b7acf61 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
-
+
Why Site Gateway · diff --git a/ROADMAP.md b/ROADMAP.md index 50026ee..ebac676 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -132,3 +132,5 @@ Roughly in priority order: - Ports 80 and 443 must not already be owned by another reverse proxy on the same host. - A Docker-socket-based container picker is opt-in only — socket access is root-equivalent on the host and should never be a default requirement. - Arbitrary Caddy snippets substantially increase support and security risk and stay an expert-only, size-limited, validated feature. + +`v0.16.3` fixes the System tab's real population and layout bugs reported after v0.16.2 went live. Root cause of the empty sections and the tab "flickering" on refresh: the System panel is created dynamically (like Groups, Audit log, and API Access) the first time `refresh()` runs after login, but the app's render order calls the tab-visibility toggle *before* that panel exists — so a brand-new panel is created already carrying the `hidden` class, and `renderSystemStatus()` was guarded to skip populating anything while its panel was hidden. Result: on first render nothing gets filled in, and only after the *next* periodic poll (once the panel exists and the visibility toggle can find and unhide it) does it get one more chance — which looked like the tab disappearing and reappearing. Fix: `renderSystemStatus()` now always populates its content regardless of the panel's current visibility, matching how every other dynamically-created admin panel (Groups, Retention, API Access) already behaves. Also added the missing spacing between the System tab's stacked `.dashboard-panel` cards (`[data-admin-panel="system"]>.dashboard-panel+.dashboard-panel{margin-top:18px}`) — the generic `.settings-panel` wrapper never had a gap rule for its children, so the cards were rendering edge-to-edge. diff --git a/package.json b/package.json index 7d23424..7ef7d46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "site-gateway", - "version": "0.16.2", + "version": "0.16.3", "private": true, "description": "Site Gateway: simple self-hosted website publishing, reverse proxying, and automatic HTTPS.", "type": "module", diff --git a/src/public/features.js b/src/public/features.js index 89703ed..578a0a6 100644 --- a/src/public/features.js +++ b/src/public/features.js @@ -568,7 +568,7 @@ function renderSystemPanel() { } async function renderSystemStatus(panel) { panel = panel || document.querySelector('[data-admin-panel="system"]'); - if (!panel || panel.classList.contains("hidden")) return; + if (!panel) return; const security = document.querySelector("#system-security"), storage = document.querySelector("#system-storage"), version = document.querySelector("#system-version"), jobs = document.querySelector("#system-jobs"), syncStatus = document.querySelector("#system-sync-status"), restartButton = document.querySelector("#system-restart"), diff --git a/src/public/index.html b/src/public/index.html index dbe8b28..d80b965 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -8,7 +8,7 @@