diff --git a/frontend/src/components/subscriptions/SourceActions.vue b/frontend/src/components/subscriptions/SourceActions.vue
new file mode 100644
index 0000000..94b2a02
--- /dev/null
+++ b/frontend/src/components/subscriptions/SourceActions.vue
@@ -0,0 +1,91 @@
+
+
+
+
+ mdi-play
+
+ Check now — fetch posts published since the last check
+
+
+
+ {{ running ? 'mdi-stop' : 'mdi-magnify-scan' }}
+
+ {{ running
+ ? (recovering ? 'Stop recovery' : 'Stop backfill')
+ : 'Backfill — one-time walk of the FULL post history until complete' }}
+
+
+
+
+
+
+ mdi-dots-vertical
+ More actions
+
+
+
+
+ Preview backfill
+
+ Count what a backfill would download — nothing is downloaded
+
+
+
+ Recover dropped near-duplicates
+
+ Re-fetch images previously dropped as near-dups and re-judge them
+ under the current similarity threshold
+
+
+
+
+ Remove source
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/components/subscriptions/SourceCard.vue b/frontend/src/components/subscriptions/SourceCard.vue
index 0e0617b..c8f5fb2 100644
--- a/frontend/src/components/subscriptions/SourceCard.vue
+++ b/frontend/src/components/subscriptions/SourceCard.vue
@@ -12,10 +12,19 @@
/>
- {{ source.url }}
+
Last {{ formatRelative(source.last_checked_at) }}
@@ -42,61 +51,20 @@
-
- mdi-play
- Check now
-
-
- {{ source.backfill_state === 'running' ? 'mdi-stop' : 'mdi-magnify-scan' }}
-
- {{ source.backfill_state === 'running'
- ? (source.backfill_bypass_seen ? 'Stop recovery' : 'Stop backfill')
- : 'Backfill full history' }}
-
-
-
- mdi-eye-outline
-
- Preview — count what a backfill would download (no download)
-
-
-
- mdi-backup-restore
-
- Recover — re-fetch dropped near-dups & re-evaluate under the current threshold
-
-
-
- mdi-pencil
- Edit
-
-
- mdi-close
- Remove
-
+