fix(homepage): pin UltraSeedbox to one tab, dedupe Uptime Kuma, size columns to members

UltraSeedbox had no layout: entry, and Homepage renders an untabbed group on
every tab — eight full-width bookmark bars repeated four times. Pinned to Main
with a row layout.

Uptime Kuma rendered twice: a manual services.yaml block under Monitoring plus
homepage.group=Apps on the container. Dropped the manual block, moved the
label to Monitoring, added homepage.siteMonitor. Adopted the previously
unmanaged uptimekuma stack into stacks/ so the label is version-controlled.

Column counts declared more columns than groups had members, leaving the last
row of several groups mostly empty. Columns now track member counts.

Also records an UNRESOLVED regression: since the container was recreated the
client render has lost its tab bar, wallpaper and i18n. Ruled out the config
changes (committed pre-cleanup config reproduces it) and v2.0.0 (v1.13.2
reproduces it). Server HTML still carries the tab markup, so the loss is
client-side. Details in the stack README.
This commit is contained in:
vh
2026-08-18 19:12:02 -07:00
parent 084ad924f0
commit 9d92c4bd21
5 changed files with 214 additions and 18 deletions
+11 -9
View File
@@ -7,15 +7,17 @@
# their own groups through the providers in docker.yaml, so most app
# entries don't need to appear here.
- Monitoring:
# Beszel, Dozzle, Backrest arrive here via Docker label auto-discovery
# (homepage.group=Monitoring on their compose files). Do not re-add them
# manually — they'll double up in the UI.
- Uptime Kuma:
href: http://10.0.50.45:3001
icon: mdi-check-network
siteMonitor: http://10.0.50.45:3001
description: Uptime monitor (esh-docker-vm)
# The Monitoring group is fully Docker-auto-discovered — Beszel, Dozzle,
# Backrest and Uptime Kuma all carry homepage.group=Monitoring on their
# compose files. There is deliberately no manual block here.
#
# Uptime Kuma used to be listed manually here AND labelled
# homepage.group=Apps on its container, so it rendered twice — once in
# Monitoring without its widget, once in Apps with it. Fixed 2026-08-18 by
# deleting the manual entry and moving the container's label to Monitoring
# (stacks/uptimekuma/). This is the exact failure the warning below
# describes; it survived the 2026-08-17 audit because a duplicate reads as
# two plausible cards rather than as an error.
- Apps:
# Manual entry — the Booth is a user-level systemd service on nh3-dev
+33 -9
View File
@@ -44,19 +44,30 @@ useEqualHeights: true
# AI - Image & Media image/video generation + pipelines
# AI - Dormant stopped stacks (rollback seats, retired auditions)
#
# Row counts target ~4-per-row so dense groups (Apps, Service Networking)
# read as a grid instead of an endless column.
# COLUMN COUNTS ARE NOT A STYLE CHOICE — they are the member count.
# `columns: N` lays the group out N-per-row and leaves the remainder of the
# last row as dead space. A 1-member group at columns:4 renders one card and
# three empty cells, which is what made this dashboard look ragged before
# 2026-08-18. Rule: set columns to the member count, or to the divisor that
# leaves the smallest remainder. Re-check when a group gains or loses a
# service — `GET /api/services` prints the live per-group counts.
#
# EVERY GROUP NEEDS A `tab:` — including bookmark groups. A group with no tab
# assignment renders on ALL FOUR TABS. That is how UltraSeedbox ended up
# repeated at the bottom of every tab (fixed 2026-08-18); it is Homepage
# behaviour, not a bug, and it will happen again to the next group added
# without a tab.
layout:
Notes:
icon: mdi-note-text-outline
tab: Main
style: row
columns: 4
columns: 1
News:
icon: mdi-rss
tab: Main
style: row
columns: 4
columns: 2
Monitoring:
icon: mdi-chart-line
tab: Main
@@ -67,14 +78,27 @@ layout:
tab: Main
style: row
columns: 4
# 2 wide, not 3 — Plex and Jellyfin carry stat-block widgets that get
# squeezed to unreadable at 4-across, and 4 members / 3 columns orphaned
# Jellyfin onto a row of its own.
Media:
icon: mdi-play-box-multiple
tab: Main
style: row
columns: 3
columns: 2
Games:
icon: mdi-gamepad-square
tab: Main
style: row
columns: 1
# Bookmarks. Listed here for the tab pin above all else — without it this
# group appears on every tab. `style: row` also turns the eight entries
# from full-width stacked bars into a compact grid.
UltraSeedbox:
icon: mdi-download-network
tab: Main
style: row
columns: 4
# --- AI tab: the inference fleet, ordered core-models -> support -> apps ---
AI - Inference:
icon: mdi-brain
@@ -90,12 +114,12 @@ layout:
icon: mdi-router-network
tab: AI
style: row
columns: 3
columns: 4
AI - Speech (TTS):
icon: mdi-account-voice
tab: AI
style: row
columns: 3
columns: 4
AI - Audio Tools:
icon: mdi-waveform
tab: AI
@@ -123,12 +147,12 @@ layout:
icon: si-proxmox
tab: Infrastructure
style: row
columns: 4
columns: 3
Infra - IRV:
icon: mdi-brain
tab: Infrastructure
style: row
columns: 4
columns: 2
Infra - ESH:
icon: si-proxmox
tab: Infrastructure