diff --git a/components/dashboard/PostCards.tsx b/components/dashboard/PostCards.tsx
index 17ee5b3..810231a 100644
--- a/components/dashboard/PostCards.tsx
+++ b/components/dashboard/PostCards.tsx
@@ -129,47 +129,82 @@ const PostRow = memo(function PostRow({ post, selected, onClick }: PostRowProps)
·
·
-
- {post.sentiment}
-
+ {aiScored ? (
+
+ {post.sentiment}
+
+ ) : (
+
+ off-topic · not crypto
+
+ )}
-
- {expanded ? post.text : (post.text.slice(0, 180) + (post.text.length > 180 ? '…' : ''))}
+
+ {expanded
+ ? post.text
+ : (post.text.slice(0, aiScored ? 180 : 90) + (post.text.length > (aiScored ? 180 : 90) ? '…' : ''))}
-
- {/* Target asset chip for actionable signals */}
- {post.target_asset && (post.signal === 'buy' || post.signal === 'short') && (
+ {aiScored ? (
+ <>
+
+ {/* Target asset chip for actionable signals */}
+ {post.target_asset && (post.signal === 'buy' || post.signal === 'short') && (
+
+ {post.target_asset}
+ {post.expected_move_pct ? ` +${post.expected_move_pct}%` : ''}
+
+ )}
+
+ {impact ? (
+ <>
+ 1h peak
+ = 0 ? 'up' : 'down'}`}>
+ {impact.m1h == null ? '…' : fmtPct(impact.m1h)}
+
+ >
+ ) : (
+ no data
+ )}
+
+
+ AI
+
+ {post.ai_confidence}%
+
+
+ >
+ ) : (
+ // Noise post: no signal, no AI score. Show a single muted SKIPPED
+ // tag instead of HOLD pill + empty AI metric, so the row reads as
+ // "ignore this" at a glance.
- {post.target_asset}
- {post.expected_move_pct ? ` +${post.expected_move_pct}%` : ''}
+ skipped
)}
-
- {impact ? (
- <>
- 1h peak
- = 0 ? 'up' : 'down'}`}>
- {impact.m1h == null ? '…' : fmtPct(impact.m1h)}
-
- >
- ) : (
- no data
- )}
-
-
- AI
-
- {aiScored ? `${post.ai_confidence}%` : '—'}
-
-