From 5b91ee0f9f8937e095af2e518eae820ec36523a7 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 16:39:20 +0100 Subject: [PATCH 1/4] [#816] Unify storyline header: all content next to cover Merge Zone 1 and Zone 2 into one unified header. Cover + title + info + stats + CTA all in a single side-by-side flex layout. - Mobile: cover left (100px) + info/stats/CTA right (flex-row always) - Desktop: cover left (160px) + everything right - Removed border-b separation between hero and stats - Stats grid + AddPlotButton now inside the right column - Cover left-aligned on mobile (not centered) Fixes #816 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/story/[storylineId]/page.tsx | 224 +++++++++++++-------------- 1 file changed, 112 insertions(+), 112 deletions(-) diff --git a/src/app/story/[storylineId]/page.tsx b/src/app/story/[storylineId]/page.tsx index c197937f..e872812f 100644 --- a/src/app/story/[storylineId]/page.tsx +++ b/src/app/story/[storylineId]/page.tsx @@ -263,128 +263,128 @@ function StoryHeader({ : null; return ( - <> - {/* Zone 1: Hero — Cover + Identity */} -
-
- {/* Moleskine book cover */} -
+
+
+ {/* Moleskine book cover — left-aligned on all sizes */} +
+
-
-
- - {storyline.genre || "Uncategorized"} - -
-
- - {storyline.title} - -
-
- - {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"} - -
+ className="pointer-events-none absolute inset-y-[-1px] right-[16px] z-20 w-[5px] rounded-[2px]" + style={{ background: "rgba(139, 69, 19, 0.15)" }} + /> +
+ + {storyline.genre || "Uncategorized"} +
-
- - {/* Info panel */} -
-

- {storyline.title} -

-
- - +
+ + {storyline.title} +
-
-
- Writer - {truncateAddress(storyline.writer_address)}}> - - - {storyline.writer_type === 1 && } -
-
- Genre - - {storyline.genre || "Uncategorized"} - {storyline.language && storyline.language !== "English" && ( - · {storyline.language} - )} - -
+
+ + {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"} +
-
- - {/* Zone 2: Stats Card + Action */} - {priceInfo && ( -
-
- {/* Row 1 */} -
- -
-
-
{formatSupply(priceInfo.totalSupply)}
-
Supply Minted
-
-
- {storyline.sunset ? ( - <> -
{storyline.plot_count}
-
Complete
- - ) : storyline.has_deadline && storyline.last_plot_time ? ( - <> -
- -
-
Deadline
- - ) : ( - <> -
-
Deadline
- - )} -
- {/* Row 2 */} -
-
{formatPrice(priceInfo.pricePerToken)} {RESERVE_LABEL}
-
Token Price
-
-
-
{storyline.plot_count}
-
{storyline.plot_count === 1 ? "Plot" : "Plots"}
+ + {/* Right column: info + stats + CTA */} +
+ {/* Title */} +

+ {storyline.title} +

+ + {/* Rating + Views */} +
+ + +
+ + {/* Info rows */} +
+
+ Writer + {truncateAddress(storyline.writer_address)}}> + + + {storyline.writer_type === 1 && }
-
-
{createdDate ?? "—"}
-
Created
+
+ Genre + + {storyline.genre || "Uncategorized"} + {storyline.language && storyline.language !== "English" && ( + · {storyline.language} + )} +
+ + {/* Stats grid — inside right column */} + {priceInfo && ( +
+
+ +
+
+
{formatSupply(priceInfo.totalSupply)}
+
Supply Minted
+
+
+ {storyline.sunset ? ( + <> +
{storyline.plot_count}
+
Complete
+ + ) : storyline.has_deadline && storyline.last_plot_time ? ( + <> +
+ +
+
Deadline
+ + ) : ( + <> +
+
Deadline
+ + )} +
+
+
{formatPrice(priceInfo.pricePerToken)} {RESERVE_LABEL}
+
Token Price
+
+
+
{storyline.plot_count}
+
{storyline.plot_count === 1 ? "Plot" : "Plots"}
+
+
+
{createdDate ?? "—"}
+
Created
+
+
+ )} + + {/* CTA — in right column, auto-width */} +
- )} - - +
+
); } From 0c785000090918f216993ae42e0a7ce6be9c3dac Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 16:42:04 +0100 Subject: [PATCH 2/4] [#816] Make AddPlotButton auto-width instead of full-width Remove w-full from both active and disabled states. Use inline-block with px-6 padding so the button fits naturally in the right column instead of spanning full width. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/components/AddPlotButton.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/AddPlotButton.tsx b/src/components/AddPlotButton.tsx index 516bbb42..57ea496f 100644 --- a/src/components/AddPlotButton.tsx +++ b/src/components/AddPlotButton.tsx @@ -32,7 +32,7 @@ export function AddPlotButton({ if (expired) { return (
{sunset ? "Story complete" : "Deadline expired"} @@ -43,7 +43,7 @@ export function AddPlotButton({ return ( + Add a new Plot From b165e37e364e3a6b095be9500f3851bcc6c74ab1 Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 16:44:38 +0100 Subject: [PATCH 3/4] [#816] Move stats + CTA below cover+info row on mobile Stats grid and AddPlotButton now render outside the cover+info flex-row. On desktop, sm:pl-[176px] (160px cover + 16px gap) aligns them with the right column. On mobile, they span full width below the cover+info row. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/story/[storylineId]/page.tsx | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/app/story/[storylineId]/page.tsx b/src/app/story/[storylineId]/page.tsx index e872812f..e2ebc9c2 100644 --- a/src/app/story/[storylineId]/page.tsx +++ b/src/app/story/[storylineId]/page.tsx @@ -298,20 +298,15 @@ function StoryHeader({
- {/* Right column: info + stats + CTA */} + {/* Right column: info only */}
- {/* Title */}

{storyline.title}

- - {/* Rating + Views */}
- - {/* Info rows */}
Writer @@ -330,9 +325,13 @@ function StoryHeader({
+
+ - {/* Stats grid — inside right column */} - {priceInfo && ( + {/* Stats grid — below cover+info on mobile, aligned with right column on desktop */} + {priceInfo && ( +
+
Created
- )} - - {/* CTA — in right column, auto-width */} - +
+ )} + + {/* CTA — below stats, aligned with right column on desktop */} +
+
); From c3a10ab16d232ed9b08c18208a8184c1b6fbe22f Mon Sep 17 00:00:00 2001 From: Cho Young-Hwi Date: Fri, 3 Apr 2026 16:46:46 +0100 Subject: [PATCH 4/4] [#816] Fix duplicated grid wrapper, make disabled button auto-width Remove duplicated nested grid div in stats section. Fix disabled AddPlotButton state to use inline-block + px-6 matching active state. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/app/story/[storylineId]/page.tsx | 2 -- src/components/AddPlotButton.tsx | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/app/story/[storylineId]/page.tsx b/src/app/story/[storylineId]/page.tsx index e2ebc9c2..ddf81aec 100644 --- a/src/app/story/[storylineId]/page.tsx +++ b/src/app/story/[storylineId]/page.tsx @@ -332,7 +332,6 @@ function StoryHeader({ {priceInfo && (
-
{createdDate ?? "—"}
Created
-
)} diff --git a/src/components/AddPlotButton.tsx b/src/components/AddPlotButton.tsx index 57ea496f..3465ab00 100644 --- a/src/components/AddPlotButton.tsx +++ b/src/components/AddPlotButton.tsx @@ -32,7 +32,7 @@ export function AddPlotButton({ if (expired) { return (
{sunset ? "Story complete" : "Deadline expired"}