Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision ace5a9be6d36bf305442611b1c83308d50c9e6d2)
+++ src/services/ActivityPubService.js	(revision 00a2bcd8617f93a2973f568775d95c62cc15629e)
@@ -223,4 +223,9 @@
     body += `<p>🎵 ${lbl ? `<strong>${lbl}</strong> — ` : ''}<a href="${listenHref}">listen on ${esc(site.title || 'the site')}</a></p>`;
   }
+  // Klonkt renders post content with white-space:pre-wrap, so raw newlines ARE line
+  // breaks on the site. Mastodon (plain HTML) collapses whitespace and would drop them,
+  // so convert newlines to <br> for the federated copy (content already made with
+  // shift+enter uses <br> and has no \n → this is a no-op there).
+  body = body.replace(/\r?\n/g, '<br>');
   const seen = new Set();
   const attachment = urls.filter(Boolean)
