- 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.
- Add services.json: hand-maintained source of truth with 20 public
homelab services across 7 categories (edge, observability, media,
downloads, ethereum, ai, dev), each with name/url/desc/icon.
- Rewrite index.html: Services section rendered client-side from
services.json with a tiny up/down status probe (green dot = up,
grey = down/unreachable; graceful fallback on CORS/offline).
Keep a small Projects section linking the GitHub orgs so the old
content is not lost.
- Add services grid + status dot styles to styles.css.
- Dockerfile: COPY services.json into the nginx html root.
- Bump tech-tag text color to --tag-fg (#8a929e dark / #57606a light) and
raise opacity to 0.95 so chips stay legible on the dark card background
- Give .section-lede display:block + max-width:60ch so the italic intro
reads as a lede paragraph rather than a stretched heading
- Add margin-block-start (0.5rem) to .card-story so the project name
doesn't crowd the story
- Add rel="noopener noreferrer" to all external GitHub links
(card-link, section-link, footer) for external-link hardening
- Section ordering already matches the issue spec; Ethereum infra has
only stakingtracker — confirmed no stale/duplicated entry
- index.html: clean static homepage (name + intro, links), light/dark mode
- Dockerfile: nginx:1.27-alpine serves the page on :80 with a healthcheck
- .gitea/workflows/build.yml: on push to main, build and push the image to
git.ffaerber.duckdns.org/ffaerber/homepage (tags :latest and :sha)