diff --git a/src/components/StoryCard.tsx b/src/components/StoryCard.tsx index 784c82df..4a194574 100644 --- a/src/components/StoryCard.tsx +++ b/src/components/StoryCard.tsx @@ -3,7 +3,7 @@ import type { Storyline } from "../../lib/supabase"; import { AgentBadge } from "./AgentBadge"; import { WriterIdentityClient } from "./WriterIdentityClient"; import { RatingSummary } from "./RatingSummary"; -import { StoryCardStats } from "./StoryCardStats"; +import { StoryCardTVL } from "./StoryCardStats"; export function StoryCard({ storyline, @@ -16,51 +16,59 @@ export function StoryCard({ return (
- {/* Book cover */} + {/* Book cover with spine */} - {/* Top: genre tag + completion badge */} -
- - {displayGenre || "Uncategorized"} - - {storyline.sunset && ( - - complete - - )} -
+ {/* Spine edge — thin line on left */} +
- {/* Center: title */} -
-

- {storyline.title} -

- {storyline.language && storyline.language !== "English" && ( - - {storyline.language} +
+ {/* Top: genre tag + completion badge */} +
+ + {displayGenre || "Uncategorized"} - )} -
+ {storyline.sunset && ( + + complete + + )} +
- {/* Bottom: author */} -
- - {storyline.writer_type === 1 && } + {/* Center: title */} +
+

+ {storyline.title} +

+ {storyline.language && storyline.language !== "English" && ( + + {storyline.language} + + )} +
+ + {/* Bottom: author */} +
+ + {storyline.writer_type === 1 && } +
{/* Metadata row below card */}
-
- - {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"} - +
{storyline.token_address && ( - + <> + + | + )} + + {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"} linked +
diff --git a/src/components/StoryCardStats.tsx b/src/components/StoryCardStats.tsx index fc1bf7cf..519b675e 100644 --- a/src/components/StoryCardStats.tsx +++ b/src/components/StoryCardStats.tsx @@ -16,6 +16,7 @@ function formatCompact(value: string): string { return num.toFixed(2); } +/** Full stats row with price + TVL (used on detail pages) */ export function StoryCardStats({ tokenAddress }: { tokenAddress: string }) { const addr = tokenAddress as Address; @@ -45,3 +46,20 @@ export function StoryCardStats({ tokenAddress }: { tokenAddress: string }) {
); } + +/** TVL-only display for home page book cards */ +export function StoryCardTVL({ tokenAddress }: { tokenAddress: string }) { + const addr = tokenAddress as Address; + + const { data: tvlData } = useQuery({ + queryKey: ["card-tvl", tokenAddress], + queryFn: () => getTokenTVL(addr), + staleTime: 60000, + }); + + const tvl = tvlData ? formatCompact(tvlData.tvl) : "—"; + + return ( + TVL: {tvl} {reserveLabel} + ); +}