eleven / messenger Public

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>
Paul Campbell d7fad5c322924ec5a2e3f711d3a2efd785bda083 parent 4fccb44
3 files changed, +12 −13
  • changelog/2026-07-18-home-list-names-only.md +1 −0
  • home/web/pages/index.html +4 −5
  • home/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";