Why Site Gateway ·
diff --git a/ROADMAP.md b/ROADMAP.md
index 5800418..6d176b0 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -148,3 +148,5 @@ Roughly in priority order:
`v0.16.10` fixes a real storage leak: every log prune (scheduled or manual) takes a `pre-prune-.sqlite` safety snapshot into the backups folder, but these are not `.sgbackup` files — they never appeared in the Backup & Restore list and couldn't be deleted from there, so they accumulated indefinitely and silently inflated the System tab's Storage breakdown even after deleting every visible backup. Added automatic cleanup that keeps only the 3 most recent snapshots after each prune, plus a one-time cleanup on startup so existing accumulated snapshots are cleared out immediately after upgrading rather than waiting for the next prune to run.
`v0.16.11` merges the System tab's separate "Sync" and "Reload & restart" sections into one "Sync & control" panel, since the two were both short, related, single-button gateway-control sections that were falling out of line with the rest of the tab's panel widths on their own. Also adds a spacing rule so the merged panel's status line and description text don't sit flush against each other.
+
+`v0.16.12` fixes the Backup & Restore tab's "Backup history" section getting stuck on "Loading backup history…" indefinitely. Root cause: `renderBackupHistory()` is only invoked from the periodic `refresh()` cycle, and it bailed out before fetching whenever the Backups tab wasn't the currently active admin tab at that moment — but switching admin tabs only toggles CSS visibility, it never re-triggers a fetch. So if a refresh cycle landed while you were on a different tab, the placeholder text was left in place with no later refresh ever replacing it. Same bug class as v0.16.3's System-tab fix; resolved the same way, by always populating the section's content regardless of the panel's current visibility.
diff --git a/package.json b/package.json
index 705a8c0..57be152 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "site-gateway",
- "version": "0.16.11",
+ "version": "0.16.12",
"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 7a55a51..f29a569 100644
--- a/src/public/features.js
+++ b/src/public/features.js
@@ -429,7 +429,6 @@ async function renderBackupHistory() {
panel.append(section);
}
const list = section.querySelector("#backup-history-list");
- if (panel.classList.contains("hidden")) return;
try {
const events = await api("/api/backups/history");
list.innerHTML = events.length ? events.map(item => {
diff --git a/src/public/index.html b/src/public/index.html
index 34917f5..0016131 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -8,7 +8,7 @@
Site Gateway
-
+
-
+