From 00f990f8b0d440633b81f724604e9add70f5fd3c Mon Sep 17 00:00:00 2001
From: marvin
-
+
Why Site Gateway · diff --git a/ROADMAP.md b/ROADMAP.md index 2014e23..31d1658 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -142,3 +142,5 @@ Roughly in priority order: `v0.16.6` fixes the real cause of the System tab's Scheduled jobs section always showing "No scheduled jobs reported.": the dashboard API nests job data under `dashboard.system.jobs`, but the System tab was reading `dashboard.jobs` — one level too shallow, so it was always undefined regardless of what the server returned. Also fixes the Docker socket status tile rendering wider than the `BACKUP_PASSWORD` tile above it — it wasn't wrapped in the same `.health-grid` container, so it spanned the full panel width instead of matching the two-column tile layout used everywhere else on the System tab. `v0.16.7` fixes the real cause of the System tab visibly blinking in and out on every page reload: unlike every other Administration tab (Users, Groups, Gateway defaults, Audit log, Backup & restore, Logs & Retention, Danger Zone — all static HTML present from the first paint), System and API Access were built entirely by JavaScript after the initial data fetch completed, so there was a real window on every reload where every other tab was already visible and these two genuinely were not there yet. Confirmed via a screenshot taken mid-reload showing exactly that. Fix: gave System and API Access the same static tab-button-and-panel shell every other tab already has, so they're present immediately; their content still fills in a moment later via JavaScript, same as every other tab already does. Also reworked the Scheduled Jobs section to match the Storage section's card styling (health-tile grid instead of a plain list) and added last-run timestamps where the server tracks them (scheduled backups, log pruning, public IP checks, configuration drift checks). + +`v0.16.8` reworks the System tab's Integrations section: the `BACKUP_PASSWORD` and Docker socket status tiles now share a single two-column grid and sit side by side, instead of each occupying its own separate grid and leaving an empty column next to it. Dropped the redundant "Docker container selection" heading text since the tile's own "Docker socket" label already says the same thing. Moved the Sync section's "Resync now" button out of the panel heading row and into its own row below the status text, matching the layout every other actioned section (like Reload & Restart) already uses, instead of crowding the button into the title row. Also added real last-run tracking for the two jobs that previously always showed "No run recorded yet": Upstream checks and Access-log import now record a timestamp every time their interval actually runs. diff --git a/package.json b/package.json index 5492f29..8baed02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "site-gateway", - "version": "0.16.7", + "version": "0.16.8", "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 61fc3b1..37ee795 100644 --- a/src/public/features.js +++ b/src/public/features.js @@ -446,16 +446,24 @@ async function renderBackupHistory() { // saved value, so the integration can never be switched on without its prerequisite. function renderDockerPanel() { if (state.user?.role !== "administrator") return; - const panel = document.querySelector('[data-admin-panel="system"] .system-integrations'); if (!panel) return; + const scope = document.querySelector('[data-admin-panel="system"]'); if (!scope) return; + const envStatus = scope.querySelector("#system-env-status"), integrations = scope.querySelector(".system-integrations"); + if (!envStatus || !integrations) return; const socketMounted = state.config?.docker?.socketMounted === true; const enabled = socketMounted && (state.settings?.dockerIntegration?.enabled === true || state.config?.docker?.enabled === true); - let section = panel.querySelector(".docker-integration-section"); - if (!section) { - section = document.createElement("div"); - section.className = "docker-integration-section"; - section.innerHTML = '
Docker container selection
What\u2019s configured, what\u2019s running, and what this deployment can do. Nothing here is customizable except the Docker toggle below and the action buttons \u2014 everything else is status.
Environment
Environment
Gateway
Gateway
Operations
Storage
Build