Author SHA1 Message Date
ffaerber 1b6c05d5c0 Merge pull request '@senior: List all homelab services' (#12) from ai/issue-11 into main
build-and-push / build-and-push (push) Successful in 26s
Reviewed-on: #12
2026-07-30 13:30:42 +02:00
senior 19bc3cf991 Address @qa review on PR #12 (issue #11)
- index.html: replace Image() probe with fetch(no-cors) + AbortController
  timeout. fetch resolves for any network response (incl. 4xx/5xx) so
  resolve -> 'up', reject/timeout -> 'down'. Fixes the bug where 401/404
  services were marked green.
- services.json: add Homepage service under 'dev' (was missing; the
  homepage is one of the public homelab services). Now 21 services.
- services.json: fix ethereum category icon (' Ξ' -> 'Ξ') leading space.
- .gitignore (new): ignore /.playwright-mcp/ and services-page.png.
- git rm --cached the three stray dev artifacts so they leave the repo.
2026-07-28 19:06:57 +00:00
senior 3f6a6ac8d2 @senior: issue #11 2026-07-28 18:58:36 +00:00
3 changed files with 16 additions and 8 deletions
+6
View File
@@ -0,0 +1,6 @@
# Playwright MCP scratch files (local browser sessions)
/.playwright-mcp/
# Local screenshots from manual testing
services-page.png
*.screenshot.png
+8 -7
View File
@@ -81,13 +81,14 @@
done = true; done = true;
setStatusDot(dot, state); setStatusDot(dot, state);
} }
var img = new Image(); var controller = window.AbortController ? new AbortController() : null;
img.onload = function () { settle("up"); }; var timeout = setTimeout(function () {
img.onerror = function () { settle("up"); }; if (controller) controller.abort();
img.onloadstart = function () {}; settle("down");
var timeout = setTimeout(function () { settle("down"); }, 6000); }, 6000);
img.src = url + "?_probe=" + Date.now(); fetch(url, { mode: "no-cors", cache: "no-store", redirect: "follow", signal: controller ? controller.signal : undefined })
window.addEventListener("beforeunload", function () { clearTimeout(timeout); }); .then(function () { clearTimeout(timeout); settle("up"); })
.catch(function () { clearTimeout(timeout); settle("down"); });
} }
fetch(src) fetch(src)
+2 -1
View File
@@ -39,7 +39,7 @@
{ {
"name": "ethereum", "name": "ethereum",
"label": "Ethereum", "label": "Ethereum",
"icon": " Ξ", "icon": "Ξ",
"services": [ "services": [
{ "name": "Mainnet Geth", "url": "https://mainnet.ffaerber.duckdns.org", "desc": "Ethereum mainnet execution client (RPC).", "icon": "⛓️" }, { "name": "Mainnet Geth", "url": "https://mainnet.ffaerber.duckdns.org", "desc": "Ethereum mainnet execution client (RPC).", "icon": "⛓️" },
{ "name": "Mainnet Beacon", "url": "https://beacon.ffaerber.duckdns.org", "desc": "Lighthouse consensus / beacon node.", "icon": "🗼" }, { "name": "Mainnet Beacon", "url": "https://beacon.ffaerber.duckdns.org", "desc": "Lighthouse consensus / beacon node.", "icon": "🗼" },
@@ -66,6 +66,7 @@
"label": "Dev platform", "label": "Dev platform",
"icon": "🛠️", "icon": "🛠️",
"services": [ "services": [
{ "name": "Homepage", "url": "https://homepage.ffaerber.duckdns.org", "desc": "This page — the homelab services index you are looking at.", "icon": "🏠" },
{ "name": "Gitea", "url": "https://git.ffaerber.duckdns.org", "desc": "Self-hosted Git and CI for all ffaerber repos.", "icon": "🔧" } { "name": "Gitea", "url": "https://git.ffaerber.duckdns.org", "desc": "Self-hosted Git and CI for all ffaerber repos.", "icon": "🔧" }
] ]
} }