Index: src/middleware/render.js
===================================================================
--- src/middleware/render.js	(revision c6185fa8bf0039de95fa1be9afb9804d70c203af)
+++ src/middleware/render.js	(revision ef1853cad6f220d1c174ec46d96a43d9e5596693)
@@ -19,4 +19,5 @@
 import { getSetting, apEnabled } from '../services/SettingsService.js';
 import { isPremium as isPremiumInstance, premiumEnabled, premiumUnlocked } from '../services/PatreonService.js';
+import { emojiHtml, emojiName, parseQuote } from '../services/NoteRender.js';
 import ActivityPubService from '../services/ActivityPubService.js';
 import { imgProxyUrl } from '../services/ThumbnailService.js';
@@ -164,4 +165,9 @@
     formatDate,
     formatDateTime,
+    // Render the Shaer-native bits server-side so the web timeline matches the
+    // apps: FEP-9098 custom emojis in content/names, and the FEP-044f quote.
+    emojiHtml,   // (html, emoji_json) → HTML with :shortcode: as <img>
+    emojiName,   // (text, emoji_json) → escaped name with :shortcode: as <img>
+    noteQuote: parseQuote,   // (quote_json) → the resolved quoted-post object or null
     // Rewrite a local /media/<file> cover to its on-demand downscaled thumbnail
     // (crisp grid/list images). External URLs + already-thumb URLs pass through.
