From 8cbf5893cc029bba5c4932c17351ed296b21ad84 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 09:30:13 +0100 Subject: [PATCH 1/2] [#786] Style Reader tab trades like Activity tab FeedRow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restyle HoldingRecentTrades with bordered card rows, color-coded Buy/Sell labels (green/red), USD amounts, date, and Basescan tx link — matching the Activity tab FeedRow pattern. Fixes #786 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/profile/[address]/page.tsx | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/app/profile/[address]/page.tsx b/src/app/profile/[address]/page.tsx index 2108efc5..f8338e02 100644 --- a/src/app/profile/[address]/page.tsx +++ b/src/app/profile/[address]/page.tsx @@ -1579,7 +1579,7 @@ function HoldingRecentTrades({ address, storylineId, plotUsd }: { address: strin if (!supabase) return []; const { data } = await supabase .from("trade_history") - .select("event_type, reserve_amount, block_timestamp") + .select("event_type, reserve_amount, block_timestamp, tx_hash") .eq("user_address", address) .eq("storyline_id", storylineId) .eq("contract_address", MCV2_BOND.toLowerCase()) @@ -1599,10 +1599,25 @@ function HoldingRecentTrades({ address, storylineId, plotUsd }: { address: strin const date = new Date(t.block_timestamp).toLocaleDateString("en-US", { month: "short", day: "numeric" }); const amount = plotUsd != null ? formatUsdValue(t.reserve_amount * plotUsd) : `${formatPrice(t.reserve_amount)} ${RESERVE_LABEL}`; return ( -
- {isBuy ? "Buy" : "Sell"} +
+ + {isBuy ? "Buy" : "Sell"} + {amount} - {date} + + {t.tx_hash && ( + + ↗ + + )}
); })} From 642b05af6133dd5e0043b47b11d0940eb374c907 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 09:33:51 +0100 Subject: [PATCH 2/2] [#786] Make trade date a clickable Basescan link Date + arrow now wrapped in a single anchor linking to the tx on Basescan. Falls back to plain
);