Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 0a7535630de8d7f1d893cbb685aa1a8512184e0d)
+++ src/services/ActivityPubService.js	(revision 7e66e7e955dc674abe19e21fbc479235484abaaf)
@@ -414,4 +414,15 @@
 }
 
+// Drop the leading @mention(s) a federated reply carries (the person being replied to),
+// so a comment reads "dope tekening ouwe" instead of "@jason@jasonhacky.nl dope …".
+// Keeps a leading <p> wrapper; handles mention <a> links and plain-text @user@domain.
+export function stripLeadingMentions(html) {
+  if (!html) return html;
+  let s = String(html);
+  s = s.replace(/^(\s*<p[^>]*>)?\s*(?:<a\b[^>]*>\s*@[^<]+<\/a>[  ]*)+/i, (m, p) => p || '');
+  s = s.replace(/^(\s*<p[^>]*>)?\s*(?:@[\w.-]+(?:@[\w.-]+)?[  ]+)+/i, (m, p) => p || '');
+  return s;
+}
+
 // View-ready threaded view of a post's fediverse activity (inbound replies +
 // our outbound replies, nested), plus like/boost counts.
@@ -434,5 +445,5 @@
       noteId: r.object_uri, parent: r.parent_uri || null, mine: false, id: r.id,
       actor_name: r.actor_name, actor_handle: r.actor_handle, actor_url: r.actor_url,
-      actor_icon: r.actor_icon, content: r.content, created_at: r.published || r.created_at,
+      actor_icon: r.actor_icon, content: stripLeadingMentions(r.content), created_at: r.published || r.created_at,
       acted_boost: !!r.acted_boost, acted_like: !!r.acted_like,
       children: [],
@@ -442,5 +453,5 @@
     nodes.push({
       noteId: baseClean ? `${baseClean}/ap/notes/${o.id}` : o.id, parent: o.in_reply_to || null,
-      mine: true, outboxId: o.id, content: o.content, created_at: o.created_at,
+      mine: true, outboxId: o.id, content: stripLeadingMentions(o.content), created_at: o.created_at,
       actor_name: siteName, actor_handle: siteHandle, actor_url: siteUrl, actor_icon: siteIcon,
       children: [],
@@ -998,5 +1009,6 @@
 // List a site's own outbound fediverse replies (for the manage/delete view).
 export function listOutbox(siteSlug) {
-  return db.prepare('SELECT id, content, to_handle, in_reply_to, created_at FROM ap_outbox WHERE site_slug = ? ORDER BY created_at DESC').all(siteSlug);
+  return db.prepare('SELECT id, content, to_handle, in_reply_to, created_at FROM ap_outbox WHERE site_slug = ? ORDER BY created_at DESC')
+    .all(siteSlug).map((r) => ({ ...r, content: stripLeadingMentions(r.content) }));
 }
 
@@ -1291,5 +1303,5 @@
     for (const r of rows) out.push({
       type: r.kind, name: r.actor_name, handle: r.actor_handle, url: r.actor_url,
-      content: r.content, post_slug: r.post_slug, post_title: r.post_title, created_at: r.created_at,
+      content: stripLeadingMentions(r.content), post_slug: r.post_slug, post_title: r.post_title, created_at: r.created_at,
     });
   } catch { /* ignore */ }
