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}
+ );
+}