home: spaces list goes by name — addresses off the rows (#1099)
URLs come off the saved-spaces rows (active and archived): spaces go by name, and the address survives only as a hover tooltip on named rows to tell twin-named spaces apart. Unnamed spaces still label themselves with their host, and search still matches hosts (filterServers is unchanged). The delete flow keeps showing the host — precision matters there.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
3 files changed,
+12
−13
changelog/2026-07-18-home-list-names-only.md+1 −0home/web/pages/index.html+4 −5home/web/static/home.js+7 −8
diff --git a/changelog/2026-07-18-home-list-names-only.md b/changelog/2026-07-18-home-list-names-only.md| new file mode 100644 |
| index 0000000..beae0e3 |
| --- /dev/null |
| +++ b/changelog/2026-07-18-home-list-names-only.md |
| @@ -0,0 +1 @@ |
| +🤖 Your spaces list on Eleven home now goes by names alone — web addresses stay out of sight. (On a computer, hovering a name still whispers its address, in case two spaces share one.) |
diff --git a/home/web/pages/index.html b/home/web/pages/index.html| index 6b27dc9..846e714 100644 |
| --- a/home/web/pages/index.html |
| +++ b/home/web/pages/index.html |
| @@ -303,7 +303,7 @@ |
| .archived-open:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } |
| @media (prefers-reduced-motion: reduce) { .archived-open { transition: none; } } |
| - /* Archive list rows: name/url + Unarchive + Delete pills. Quiet, non-draggable. */ |
| + /* Archive list rows: name + Unarchive + Delete pills. Quiet, non-draggable. */ |
| ul.servers.archived li { gap: 6px; } |
| ul.servers.archived li .name { font-weight: 600; line-height: 1.25; color: var(--ink); } |
| ul.servers.archived li .srv-main { text-align: left; } |
| @@ -339,13 +339,12 @@ |
| /* No separator lines: the hover wash (below) is the interactive cue, and the |
| lifted row + the gap it leaves carry the structure while dragging. */ |
| } |
| - /* Tight line-heights so a name+url row reads as one compact block, not two |
| - airy lines (the card body sets 1.5, which is too loose for a list). */ |
| + /* Tight line-heights so a row's name + meta lines read as one compact block, |
| + not airy lines (the card body sets 1.5, which is too loose for a list). */ |
| .srv-main { flex: 1; display: flex; flex-direction: column; min-width: 0; } |
| ul.servers li a.name { font-weight: 600; line-height: 1.25; color: var(--ink); text-decoration: none; } |
| ul.servers li a.name:hover { text-decoration: underline; } |
| - ul.servers li .url { color: var(--muted); font-size: .8rem; line-height: 1.3; overflow-wrap: anywhere; } |
| - /* The storage meter's reading, under the url — quieter still. */ |
| + /* The storage meter's reading, under the name — quieter still. */ |
| ul.servers li .srv-usage { color: var(--muted); opacity: .75; font-size: .72rem; line-height: 1.3; } |
| /* Star toggle: a quiet outline star that fills gold when on. */ |
| .star { |
diff --git a/home/web/static/home.js b/home/web/static/home.js| index 7179b7e..f4db267 100644 |
| --- a/home/web/static/home.js |
| +++ b/home/web/static/home.js |
| @@ -509,10 +509,11 @@ function serverRow(s, sortable) { |
| // straight back here; restore.js reuses this tab's unlocked home session. |
| name.href = spaceRestoreURL(s.url); |
| name.textContent = labelOf(s); |
| - const url = document.createElement("span"); |
| - url.className = "url"; |
| - url.textContent = s.url; |
| - main.append(name, url); |
| + // Spaces go by name here — the address stays off the row. It survives as a |
| + // hover tooltip, which also tells twin-named spaces apart. (Unnamed spaces |
| + // already show their host as the label, so the tooltip would just repeat it.) |
| + if (s.name) name.title = hostOf(s.url); |
| + main.append(name); |
| // Billing state, for spaces this account created (the provisioner's ledger): |
| // upgraded rows carry a quiet Supporter badge; free ones offer Upgrade. |
| @@ -1273,10 +1274,8 @@ function archiveRow(s) { |
| const name = document.createElement("span"); // plain text — archived spaces stay quiet |
| name.className = "name"; |
| name.textContent = labelOf(s); |
| - const url = document.createElement("span"); |
| - url.className = "url"; |
| - url.textContent = s.url; |
| - main.append(name, url); |
| + if (s.name) name.title = hostOf(s.url); |
| + main.append(name); |
| const unarch = document.createElement("button"); |
| unarch.type = "button"; |