diff --git a/serverAppConfigs-docs/Infrastructure/Homepage.md b/serverAppConfigs-docs/Infrastructure/Homepage.md index ed1216c..4762a25 100644 --- a/serverAppConfigs-docs/Infrastructure/Homepage.md +++ b/serverAppConfigs-docs/Infrastructure/Homepage.md @@ -28,11 +28,12 @@ descriptions and a `docs` link to `/docs#models`. **Sections + WIP split (2026-09-21):** both pages now group their panels under section headings rendered by shared `renderSection()`/`renderPanel()` -components in `app.js`. The user page orders **AI, Web Apps, Media Library -Apps**; the admin page orders **Media Library Apps, Observability, AI, -Infrastructure**. The WIP badge split into **WIP: OPEN** (work in progress) -and **WIP: CLOSED** (work finished by decision — e.g. a card that is -deliberately unprobeable) via the `wip` value (`"open"` / `"closed"`). +components in `app.js`. The user page orders **Web Apps, Media Library +Apps, AI, Work in progress** (the three not-open-yet apps moved under their +own heading, below AI, on 2026-11-04); the admin page orders **Media Library +Apps, Observability, AI, Infrastructure**. The WIP badge split into **WIP: +OPEN** (work in progress) and **WIP: CLOSED** (work finished by decision — e.g. +a card that is deliberately unprobeable) via the `wip` value. Tautulli (Plex statistics, `192.168.0.235:8181`) joined the admin page's Media Library Apps section. @@ -314,9 +315,10 @@ flowchart TD ## Service classification **User services** (root page), in section order: -- **AI** — OpenWebUI, and the three LLM fleet cards (frank-dragoon, frank-archon, frank-zealot — status + docs link, no Open link). - **Web Apps** — SearXNG, Gitea, Copyparty, Marreta. -- **Media Library Apps** — Calibre-Web, RomM, Plex, Jellyfin, Seerr, Audiobookshelf (moved up from the admin page 2026-11-03, once Authentik SSO made it a household app). +- **Media Library Apps** — Plex, Jellyfin, Audiobookshelf (moved up from the admin page 2026-11-03, once Authentik SSO made it a household app). +- **AI** — OpenWebUI, and the three LLM fleet cards (frank-dragoon, frank-archon, frank-zealot — status + docs link, no Open link); their model table renders under this heading. +- **Work in progress** — Calibre-Web, RomM, Seerr. WIP badge, no Open link, no household account yet: the ask-Frank door. See the docs page's *Three doors that are not open to the household yet*. **Admin services** (`/admin/`), in section order: - **Media Library Apps** — the *arr stack (Prowlarr, Sonarr, Radarr, Lidarr, Readarr), qBittorrent, and Tautulli — live on FrankBook-Pro and Dankserver, operator-only: no vhosts (Tautulli included), direct IP:port access only. See [[FrankBook-Pro]]. @@ -432,15 +434,15 @@ agent knowledge base (`~/.pi/agent/docs/caddy/caddyfile.md`). - `category` — `user` or `admin`. Selects the page. - `section` — the heading the panel renders under. Must be one of the page's - `SECTION_ORDER` entries (user: AI, Web Apps, Media Library Apps; admin: - Media Library Apps, Observability, AI, Infrastructure), or the panel is - silently dropped from the page. + `SECTION_ORDER` entries (user: Web Apps, Media Library Apps, AI, Work in + progress; admin: Media Library Apps, Observability, AI, Infrastructure), or + the panel is silently dropped from the page. - `url` — the "Open" link (the Caddy site). - `docs` — the per-service docs page (`/docs//`). - `probe` — the backend `host:port` the checker probes. - `method` — `tcp` or `http`. The probe type for this service (Q10). -- `wip` — `false`, or `"open"` / `"closed"`. When set, the badge shows - **WIP: OPEN** or **WIP: CLOSED** and the checker skips the probe. +- `wip` — `false`, or `"open"` / `"closed"` / `"down"`. When set, the badge shows + **WIP: OPEN** / **WIP: CLOSED** / **WIP: DOWN** and the checker skips the probe. **A card must be probeable from the monitor's host, or it must be `wip`.** The checker runs on Dankclaw, so its reach is: that host's own loopback, its own diff --git a/shared/homepage/app.js b/shared/homepage/app.js index 5795b05..f0d1ffd 100644 --- a/shared/homepage/app.js +++ b/shared/homepage/app.js @@ -10,7 +10,7 @@ const CATEGORY = window.location.pathname.indexOf('/admin') !== -1 ? 'admin' : ' // same renderSection()/renderPanel() below. SECTION_ORDER fixes each page's // section order; a section with no services renders nothing. const SECTION_ORDER = { - user: ['Web Apps', 'Media Library Apps', 'AI'], + user: ['Web Apps', 'Media Library Apps', 'AI', 'Work in progress'], admin: ['Media Library Apps', 'Observability', 'AI', 'Infrastructure'], }; diff --git a/shared/homepage/services.json b/shared/homepage/services.json index de8dbcd..e7a4ebc 100644 --- a/shared/homepage/services.json +++ b/shared/homepage/services.json @@ -57,8 +57,8 @@ { "name": "Calibre-Web", "category": "user", - "section": "Media Library Apps", - "description": "E-book library. Work in progress: not open to family users yet.", + "section": "Work in progress", + "description": "E-book library. Not open to family users yet — ask Frank.", "url": "", "docs": "", "probe": "192.168.0.235:8083", @@ -70,8 +70,8 @@ { "name": "RomM", "category": "user", - "section": "Media Library Apps", - "description": "ROM and emulator library. Work in progress: not open to family users yet.", + "section": "Work in progress", + "description": "ROM and emulator library. Not open to family users yet — ask Frank.", "url": "", "docs": "", "probe": "192.168.0.235:8085", @@ -122,8 +122,8 @@ { "name": "Seerr", "category": "user", - "section": "Media Library Apps", - "description": "Download requests. Work in progress: not open to family users yet.", + "section": "Work in progress", + "description": "Download requests. Not open to family users yet — ask Frank.", "url": "", "docs": "", "probe": "127.0.0.1:5055", diff --git a/tests/homepage_config.bats b/tests/homepage_config.bats index f1838a1..c80ffb2 100644 --- a/tests/homepage_config.bats +++ b/tests/homepage_config.bats @@ -37,7 +37,7 @@ PY import json, sys data = json.load(open(sys.argv[1])) allowed = { - "user": {"AI", "Web Apps", "Media Library Apps"}, + "user": {"AI", "Web Apps", "Media Library Apps", "Work in progress"}, "admin": {"Media Library Apps", "Observability", "AI", "Infrastructure"}, } for svc in data: diff --git a/tests/homepage_pages.bats b/tests/homepage_pages.bats index 6e58d39..1f01fd9 100644 --- a/tests/homepage_pages.bats +++ b/tests/homepage_pages.bats @@ -41,8 +41,8 @@ setup() { grep -q "repeat(auto-fill" "$BASE/style.css" } -@test "the user page keeps the AI section at the bottom" { - grep -q "user: \['Web Apps', 'Media Library Apps', 'AI'\]" "$BASE/app.js" +@test "the user page puts the Work in progress section last, below AI" { + grep -q "user: \['Web Apps', 'Media Library Apps', 'AI', 'Work in progress'\]" "$BASE/app.js" } @test "WIP badges distinguish open from closed work" {