Index: src/routes/circle.js
===================================================================
--- src/routes/circle.js	(revision 682d50402b538f249bed5b329a1b7f78be26b8bf)
+++ src/routes/circle.js	(revision 6224462ba081c001ea5cbd496e2465f52fedf411)
@@ -30,5 +30,5 @@
 
   const rows = db.prepare(`
-    SELECT p.id, p.published, p.title, p.summary, p.media_json,
+    SELECT p.id, p.published, p.title, p.summary, p.media_json, p.tags,
            a.name AS actor_name
     FROM remote_posts p
@@ -51,5 +51,5 @@
       created_at: r.published,
       type: 'post',
-      tags: '',
+      tags: r.tags || '',
       pinned: 0,
       status: 'published',
@@ -81,5 +81,5 @@
 
   const row = db.prepare(`
-    SELECT p.id, p.published, p.title, p.summary, p.url, p.media_json,
+    SELECT p.id, p.published, p.title, p.summary, p.url, p.media_json, p.tags,
            a.name AS actor_name, a.url AS actor_url, a.avatar AS actor_avatar
     FROM remote_posts p
@@ -100,4 +100,6 @@
     sourceAvatar: safeUrl(row.actor_avatar),
     originalUrl: safeUrl(row.url),
+    tags: (row.tags || '').split(',').map((t) => t.trim()).filter(Boolean),
+    sourceTagBase: safeUrl(row.actor_url) ? safeUrl(row.actor_url).replace(/\/+$/, '') : null,
   };
 
