From b56aeab7529415e7f30fbb5397099589d24c7d74 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Wed, 1 Apr 2026 18:00:32 +0100 Subject: [PATCH 1/2] =?UTF-8?q?[#731]=20Reader=20tab=20v6=20=E2=80=94=20Mo?= =?UTF-8?q?leskine=20holdings=20layout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename Portfolio tab to Reader (display only) - PORTFOLIO title outside bordered box - TOKEN HOLDINGS section title - Each holding: Moleskine book left + stats right (flex-col sm:flex-row) - Book shows genre + title matching Writer tab / home page design - Stats: value + change, balance, price, entry, traded - Donations + Trades sections unchanged Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/profile/[address]/page.tsx | 104 ++++++++++++++++++----------- 1 file changed, 65 insertions(+), 39 deletions(-) diff --git a/src/app/profile/[address]/page.tsx b/src/app/profile/[address]/page.tsx index 834a3841..b1abce34 100644 --- a/src/app/profile/[address]/page.tsx +++ b/src/app/profile/[address]/page.tsx @@ -170,7 +170,7 @@ export default function ProfilePage() { : "text-muted hover:text-foreground" }`} > - {t === "stories" ? "Writer" : t === "portfolio" ? "Portfolio" : "Activity"} + {t === "stories" ? "Writer" : t === "portfolio" ? "Reader" : "Activity"} ))} @@ -1356,10 +1356,11 @@ function PortfolioTab({ address, isOwnProfile }: { address: string; isOwnProfile return (
- {/* Portfolio summary — structured grid */} + {/* Portfolio summary */} {hasHoldings && ( + <> +

Portfolio

-

Portfolio

Value:{" "} @@ -1380,54 +1381,79 @@ function PortfolioTab({ address, isOwnProfile }: { address: string; isOwnProfile )}
+ )} - {/* Token holdings — structured cards */} - {hasHoldings && holdings!.map((h) => ( + {/* Token holdings */} + {hasHoldings && ( + <> +

Token Holdings

+ {holdings!.map((h) => (
- {/* Title + genre */} -
+ {/* Moleskine book (left) + Info (right) */} +
- {h.storyline.title} +
+
+
+ + {h.storyline.genre || "Uncategorized"} + +
+
+ + {h.storyline.title} + +
+
- {h.storyline.genre && ( - {h.storyline.genre} - )} -
- {/* Stats */} -
-
- Value:{" "} - {formatPrice(formatUnits(h.value, h.reserveDecimals))} {RESERVE_LABEL} - {plotUsd && ({formatUsdValue(Number(formatUnits(h.value, h.reserveDecimals)) * plotUsd)})} - {h.priceChange !== null && ( - = 0 ? "text-accent" : "text-error"}`}> - {h.priceChange >= 0 ? "+" : ""}{h.priceChange.toFixed(1)}% - - )} -
-
Balance: {formatPrice(formatUnits(h.balance, 18))} tokens
-
- Price:{" "} - {formatPrice(formatUnits(h.price, 18))} {RESERVE_LABEL} - {plotUsd != null && ({formatUsdValue(Number(formatUnits(h.price, 18)) * plotUsd)})} -
- {h.entryPrice !== null && h.entryPrice > 0 && ( +
- Entry:{" "} - {formatPrice(h.entryPrice)} {RESERVE_LABEL} - {plotUsd != null && ({formatUsdValue(h.entryPrice * plotUsd)})} + {formatPrice(formatUnits(h.value, h.reserveDecimals))} {RESERVE_LABEL} + {plotUsd && ({formatUsdValue(Number(formatUnits(h.value, h.reserveDecimals)) * plotUsd)})} + {h.priceChange !== null && ( + = 0 ? "text-accent" : "text-error"}`}> + {h.priceChange >= 0 ? "+" : ""}{h.priceChange.toFixed(1)}% + + )}
- )} - {h.lastTraded && ( -
Traded: {new Date(h.lastTraded).toLocaleDateString("en-US", { month: "short", day: "numeric" })}
- )} +
Balance: {formatPrice(formatUnits(h.balance, 18))} tokens
+
+ Price:{" "} + {formatPrice(formatUnits(h.price, 18))} {RESERVE_LABEL} + {plotUsd != null && ({formatUsdValue(Number(formatUnits(h.price, 18)) * plotUsd)})} +
+ {h.entryPrice !== null && h.entryPrice > 0 && ( +
+ Entry:{" "} + {formatPrice(h.entryPrice)} {RESERVE_LABEL} + {plotUsd != null && ({formatUsdValue(h.entryPrice * plotUsd)})} +
+ )} + {h.lastTraded && ( +
Traded: {new Date(h.lastTraded).toLocaleDateString("en-US", { month: "short", day: "numeric" })}
+ )} +
))} + + )} {/* Donations — structured card */} {(hasDonationsReceived || (isOwnProfile && hasDonationsGiven)) && ( From 5d8650c44cd0a8507c320f46b303214057c69989 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Wed, 1 Apr 2026 18:02:48 +0100 Subject: [PATCH 2/2] [#731] Fix T2a review: match Writer tab Moleskine book exactly Width 120px, text-[8px] genre, text-xs title, plot count at bottom, matching spine/border dimensions from Writer tab. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/profile/[address]/page.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/app/profile/[address]/page.tsx b/src/app/profile/[address]/page.tsx index b1abce34..c3b85763 100644 --- a/src/app/profile/[address]/page.tsx +++ b/src/app/profile/[address]/page.tsx @@ -1395,31 +1395,36 @@ function PortfolioTab({ address, isOwnProfile }: { address: string; isOwnProfile
-
- +
+ {h.storyline.genre || "Uncategorized"}
-
- +
+ {h.storyline.title}
+
+ + {h.storyline.plot_count} {h.storyline.plot_count === 1 ? "plot" : "plots"} + +