From d6a9d70b9ead85eaf20f77d383cc1294137006a6 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Fri, 18 Sep 2026 06:50:21 -0700 Subject: [PATCH] feat(homepage): add talk tile with its commissioned mark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit talk has served on nh3-dev since 2026-09-08 with no dashboard presence. nh3-dev is not a Docker-stack host and is absent from docker.yaml, so label auto-discovery cannot reach it — this is a manual services.yaml entry in Apps, beside the Booth and WhereTF which are there for the same reason. siteMonitor points straight at the app: talk.nh3.phasefinal.com:8092 now presents the Let's Encrypt *.nh3.phasefinal.com wildcard (valid to 2026-12-06), so no cert or port special-casing is needed. Icon is copied into the images mount rather than hot-linked from the booth, which is scratch space. Document the two traps that cost time here: Homepage v2 serves nothing but custom.css/custom.js out of the config dir, and Next.js fixes its public/ route manifest at container start, so a newly added image 404s until the container is restarted. --- CLAUDE.md | 8 ++++++++ stacks/homepage/conf/services.yaml | 9 +++++++++ stacks/homepage/images/talk.svg | 1 + 3 files changed, 18 insertions(+) create mode 100644 stacks/homepage/images/talk.svg diff --git a/CLAUDE.md b/CLAUDE.md index f47621e..8787e36 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -223,6 +223,14 @@ Observed and standardized across servers: tabs right now. Labels only apply at container **creation**, so a label edit needs `docker compose up -d `, not `restart`. + **Custom icons go in `stacks/homepage/images/` (→ `/app/public/images`, + served at `/images/`), NOT in the config dir.** Homepage v2 serves only + `custom.css` / `custom.js` out of `/app/config`, so `conf/icons/foo.svg` 404s + even though the file is plainly there in the container. ⚠ **And Next.js builds + its `public/` route manifest at container START** — a file dropped into the + mounted images dir 404s until you `docker restart homepage`, while files that + predate the start serve fine. That asymmetry reads exactly like a bad mount or + a permissions problem and is neither. Reference it as `icon: /images/`. - **Healthchecks** on services that expose HTTP ## Servers diff --git a/stacks/homepage/conf/services.yaml b/stacks/homepage/conf/services.yaml index 7b2c967..dc4d351 100644 --- a/stacks/homepage/conf/services.yaml +++ b/stacks/homepage/conf/services.yaml @@ -27,6 +27,15 @@ icon: mdi-filmstrip siteMonitor: http://10.100.10.50:8090/healthz description: Media drop + upload-for-pickup + the standing agent link board — nh3-dev, 24h TTL except kept boards + # Manual entry — talk is a Docker stack on nh3-dev, which is NOT one of the + # hosts in docker.yaml, so Homepage cannot discover it from labels. + # Icon: commissioned mark, copied into the images mount (see CLAUDE.md note + # about restarting Homepage after adding a file there). + - talk: + href: https://talk.nh3.phasefinal.com:8092/ + icon: /images/talk.svg + siteMonitor: https://talk.nh3.phasefinal.com:8092/ + description: TTS chat surface — type or speak, a fleet voice answers # Manual entry — WhereTF is a user-level systemd service on nh3-dev (Bun, # like the Booth), so Homepage can't auto-discover it. - WhereTF: diff --git a/stacks/homepage/images/talk.svg b/stacks/homepage/images/talk.svg new file mode 100644 index 0000000..3fc8314 --- /dev/null +++ b/stacks/homepage/images/talk.svg @@ -0,0 +1 @@ +