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) {
