Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision bfa6fa1e058aa9b3c2821d56a16842937aeed22a)
+++ src/services/ActivityPubService.js	(revision 17546afbe88ae2f5e44da391ca5d632030be956e)
@@ -26,5 +26,4 @@
 import EmbedResolver from './EmbedResolver.js';
 import Push from './PushService.js';
-import { getTenancy } from './SettingsService.js';
 import { t as i18nT } from './i18n.js';
 import Blocklist from './BlocklistService.js';
@@ -1418,8 +1417,8 @@
   for (const cb of cbs) { try { cb(); } catch { /* a waiter must never break the rest */ } }
 }
-// Hub-aware path prefix for a site's pages ('' in solo).
-function pushPrefix(slug) {
-  try { return getTenancy() === 'hub' ? `/user/${slug}` : ''; } catch { return ''; }
-}
+// Path prefix for a site's pages. One instance is one owner, so the site
+// lives at the root; kept as a function because the push URLs read like
+// `${pushPrefix(slug)}/messages` all over this file.
+function pushPrefix() { return ''; }
 // Notification language: the site's content language (fallback: instance default).
 function pushLang(slug) {
Index: src/services/SettingsService.js
===================================================================
--- src/services/SettingsService.js	(revision bfa6fa1e058aa9b3c2821d56a16842937aeed22a)
+++ src/services/SettingsService.js	(revision 17546afbe88ae2f5e44da391ca5d632030be956e)
@@ -1,11 +1,7 @@
-// Global app settings (key/value, cached). Primarily used for the tenancy mode.
+// Global app settings (key/value, cached).
 //
-//   tenancy = 'solo'   -> exactly one site (the primary/owner site)
-//   tenancy = 'circle' -> solo site that federates with other solo Klonkt sites
-//
-// HUB MODE IS REMOVED (2026-06-24): multi-artist-per-domain was dropped in favour
-// of solo + Cirkels. getTenancy() coerces any legacy 'hub' value to 'solo' so all
-// the old `tenancy === 'hub'` branches are unreachable; the hub code is being
-// deleted incrementally.
+// One instance is one owner (Robins besluit, 31-7-2026). The old tenancy modes
+// (hub = many artists on one domain, circle) are gone, code and all: the
+// branches were already unreachable and have now been deleted.
 //
 // The cache is updated immediately on setSetting, so a toggle in admin
@@ -39,14 +35,4 @@
 }
 
-export function getTenancy() {
-  // Tenancy is retired: 'hub' and 'circle' were both removed. Every site is
-  // 'solo'. Cirkels are now an ActivityPub feature (auto-boost), not a mode.
-  return 'solo';
-}
-
-export function setTenancy() {
-  setSetting('tenancy', 'solo');
-}
-
 // ActivityPub / fediverse federation. ON by default. '0' = off: the site does
 // not federate, /ap/* is gone, and the "from the fediverse" reactions disappear
