Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 4838760bea2c166af5f7ad6643fc744e663c83fc)
+++ src/services/ActivityPubService.js	(revision d1075a16677d12c60b0d792c821a5baea451185d)
@@ -2949,6 +2949,13 @@
   // IS the notification.
   const quoteInboxes = [];
+  // EERST BAKKEN, dan pas linken zoeken (shaer-k3f, gevonden op het toestel):
+  // firstExternalUrl leest <a href>-ankers, en de web-editor bakt die er bij
+  // het opslaan al in -- maar een post uit de APP is platte tekst waarin de
+  // URL nog geen anker is. Zonder deze bak zag het C2S-pad dus nooit een link
+  // en kreeg een app-post nooit een kaart, terwijl de preview hem net wel
+  // beloofd had.
+  const gebakken = bakePostContent(post2.content || '');
   if (post2.quote_uri === undefined || post2.quote_uri === null) {
-    const q = await resolveOwnQuote(post2.content || '');
+    const q = await resolveOwnQuote(gebakken);
     if (q) {
       try { db.prepare('UPDATE posts SET quote_uri = ?, quote_actor = ? WHERE id = ?').run(q.uri, q.actor || null, post.id); } catch { /* ignore */ }
@@ -2968,5 +2975,5 @@
         if (qj) { db.prepare('UPDATE posts SET quote_json = ? WHERE id = ?').run(qj, post.id); post2 = { ...post2, quote_json: qj }; }
       } else {
-        const ej = await resolveExternalEmbed(post2.content || '');
+        const ej = await resolveExternalEmbed(gebakken);
         if (ej) { db.prepare('UPDATE posts SET embed_json = ? WHERE id = ?').run(ej, post.id); post2 = { ...post2, embed_json: ej }; }
       }
