diff --git a/ROADMAP.md b/ROADMAP.md
index c4b07d9..15e0f1b 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -282,3 +282,5 @@ Roughly in priority order:
`v0.16.78` restores GitHub's half of the dual-publish pipeline without touching Gitea's: the earlier migration commits had rewritten `container.yml`'s registry login, tag, and publish steps to target only `git.us2plus2.com` using Gitea-only secrets, so every push to GitHub since then failed in ~30 seconds at "Sign in to Gitea Container Registry" with "Username and password required" -- GitHub's repo never had `REGISTRY_USERNAME`/`REGISTRY_TOKEN`. The login, tag-generation, and publish steps are now duplicated, one set per registry, each gated with `if: github.server_url == 'https://github.com'` (or `!=`) so the workflow self-selects which registry to sign into and push to depending on which host is actually running it -- Gitea Actions keeps using the existing `REGISTRY_USERNAME`/`REGISTRY_TOKEN` secrets against `git.us2plus2.com` exactly as before, GitHub Actions goes back to `ghcr.io` using `github.actor`/`GITHUB_TOKEN` as it did pre-migration. The shared build/scan steps (smoke-test image, SQLite check, Trivy install/scan) are unconditional and run identically on both. Also reverts the v0.16.75 smoke-test change: the Dashboard heading text is back to "Dashboard" now that the Gitea pipeline is confirmed working end to end.
`v0.16.79` is a smoke test for direct-push access: with the newly scoped `site-gateway-claude-push` tokens wired into both remotes (Gitea via a repository-scoped Gitea access token, GitHub via a fine-grained PAT limited to this one repo's Contents), this commit is pushed directly from the device shell rather than handed off as a script for manual execution -- the Dashboard heading briefly reads "Dashboard v3" to make the change visually obvious end to end, the same pattern used for the v0.16.75 Gitea-migration smoke test.
+
+`v0.16.80` is another smoke test for direct-push access, requested to reconfirm the pipeline after the Gitea CPU/bot-traffic investigation: the Dashboard heading reads "Dashboard v4" instead of "Dashboard v3," pushed directly from the device shell to both remotes as before.
diff --git a/package.json b/package.json
index a4c3319..d05c2fd 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "site-gateway",
- "version": "0.16.79",
+ "version": "0.16.80",
"private": true,
"description": "Site Gateway: simple self-hosted website publishing, reverse proxying, and automatic HTTPS.",
"type": "module",
diff --git a/src/public/app.js b/src/public/app.js
index 77b58cc..ef132b1 100644
--- a/src/public/app.js
+++ b/src/public/app.js
@@ -511,7 +511,7 @@ function render() {
const adminUsersActive = activeAdminTab === "users", adminGroupsActive = activeAdminTab === "groups", adminApiActive = activeAdminTab === "api";
$("#open-create").classList.toggle("hidden", !(management || adminUsersActive || adminGroupsActive || adminApiActive || ["streaming","redirects","access"].includes(state.view)) || !canManage()); $("#check-health").classList.toggle("hidden", state.view !== "certificates" || !canAdmin()); $("#refresh-logs").classList.toggle("hidden", state.view !== "logs");
if (overview) {
- $("#page-title").textContent = "Dashboard v3";
+ $("#page-title").textContent = "Dashboard v4";
$("#page-subtitle").textContent = "Health, activity, and system status at a glance.";
renderDashboard();
return;
diff --git a/src/public/index.html b/src/public/index.html
index 22aa989..32428db 100644
--- a/src/public/index.html
+++ b/src/public/index.html
@@ -11,7 +11,7 @@
-
+
-
+