From c90061733c4853c320ff63dd014440f8121fb2dd Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Thu, 16 Apr 2026 11:48:30 -0700 Subject: [PATCH] feat: listing detail page with trust score ring, signal breakdown, seller panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the Coming Soon placeholder. Clicking Details on any card opens a full trust breakdown view: - SVG score ring with composite score and colour-coded verdict label - Auto-generated verdict text (identifies worst signals in plain English) - Signal table with mini-bars: Feedback Volume/Ratio, Account Age, Price vs Market, Category History — pending state shown for unresolved - Red flag badges (hard vs soft) above the score ring - Photo carousel with prev/next controls and img-error skip - Seller panel (feedback count/ratio, account age, pending enrichment note) - Block seller inline form wired to POST /api/blocklist - Triple Red pulsing border easter egg carried over from card - Not-found state for direct URL access (store cleared on refresh) - Responsive: single-column layout on ≤640px - ListingCard: adds Details RouterLink to price column - search store: adds getListing(id) lookup helper --- web/src/components/ListingCard.vue | 17 + web/src/stores/search.ts | 5 + web/src/views/ListingView.vue | 835 +++++++++++++++++++++++++++-- 3 files changed, 827 insertions(+), 30 deletions(-) diff --git a/web/src/components/ListingCard.vue b/web/src/components/ListingCard.vue index 217d2bc..b84b009 100644 --- a/web/src/components/ListingCard.vue +++ b/web/src/components/ListingCard.vue @@ -174,6 +174,12 @@ market ~{{ formattedMarket }} + Details @@ -181,6 +187,7 @@