Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision de3d24b1b5f65ddc12b43239cbde13c70c92dfe0)
+++ src/services/ActivityPubService.js	(revision ffa53cc6a9b4e745a21bddde2ecd0e463566def8)
@@ -386,4 +386,6 @@
   const actorUri = typeof act.actor === 'string' ? act.actor : (act.actor && act.actor.id);
   const resolveActor = async (uri) => ((verified && verified.id === uri) ? verified : await fetchActor(uri).catch(() => null));
+  // Activities from our OWN actors are already stored via ap_outbox — don't re-store.
+  const isLocalActor = !!(base && actorUri && actorUri.startsWith(`${base}/ap/users/`));
 
   // Inbound reply: a Create whose object replies to one of our notes (post OR comment).
@@ -391,5 +393,5 @@
     const o = act.object;
     const tgt = findThreadTarget(o.inReplyTo, base);
-    if (tgt && actorUri) {
+    if (tgt && actorUri && !isLocalActor) {
       const ai = actorInfo(await resolveActor(actorUri), actorUri);
       const html = HtmlSanitizerService.sanitize(o.content || '');
@@ -402,5 +404,5 @@
     const tgt = act.object;
     const pid = postIdFromNoteUrl(typeof tgt === 'string' ? tgt : (tgt && tgt.id), base);
-    if (pid && actorUri && localPostExists(pid)) {
+    if (pid && actorUri && !isLocalActor && localPostExists(pid)) {
       const ai = actorInfo(await resolveActor(actorUri), actorUri);
       iStmts().ins.run(type.toLowerCase(), pid, '', actorUri, ai.name, ai.handle, ai.url, ai.icon, null, null, null);
@@ -518,4 +520,6 @@
   if (parent.threadInbox) inboxes.add(parent.threadInbox); // post author's server (nesting)
   for (const f of fStmts().list.all(site.slug)) inboxes.add(f.shared_inbox || f.inbox);
+  inboxes.delete(`${me}/inbox`);       // never deliver to ourselves (already in ap_outbox)
+  inboxes.delete(`${base}/ap/inbox`);  // (our own shared inbox) → avoids a self-duplicate
   let delivered = 0;
   for (const inbox of [...inboxes].filter(Boolean)) {
