Index: src/assets/js/guardian2.js
===================================================================
--- src/assets/js/guardian2.js	(revision 0a686a01435223f44a4aab1f0ddbc04502aa2fd2)
+++ src/assets/js/guardian2.js	(revision 787e0d9e7941c4f9bbfcc32c7fab0921358e31c0)
@@ -192,5 +192,5 @@
       var card = el('div', 'g-card');
       var row = el('div', 'row');
-      row.appendChild(el('span', 'who grow', f.follower + '  →  @' + f.ward));
+      row.appendChild(el('span', 'who grow', f.follower + '  →  ' + f.ward));
       var ok = el('button', 'small', T.accept || 'Accept');
       ok.addEventListener('click', function () { answerFollow(f.id, 'approve', ok); });
Index: src/routes/guardian2.js
===================================================================
--- src/routes/guardian2.js	(revision 0a686a01435223f44a4aab1f0ddbc04502aa2fd2)
+++ src/routes/guardian2.js	(revision 787e0d9e7941c4f9bbfcc32c7fab0921358e31c0)
@@ -148,8 +148,9 @@
   if (!site) return res.status(404).json({ error: 'no_site' });
   const items = [];
+  const host = (() => { try { return new URL(process.env.PUBLIC_BASE_URL || '').host; } catch { return ''; } })();
   // Local wards (guardian co-located): read the pending follows directly.
   for (const wardSlug of wardSlugsOf(site)) {
     for (const f of Guardianship.follows.listForWard(wardSlug)) {
-      items.push({ id: f.id, ward: wardSlug, follower: f.follower_handle || f.follower_name || f.follower_uri, followerIcon: f.follower_icon, remote: false, created: f.created_at });
+      items.push({ id: f.id, ward: `@${wardSlug}@${host}`, follower: f.follower_handle || f.follower_name || f.follower_uri, followerIcon: f.follower_icon, remote: false, created: f.created_at });
     }
   }
