From 69e5f2c45c35ea84b752cfbb62639055b3be62ba Mon Sep 17 00:00:00 2001 From: gosangam Date: Sun, 14 Jun 2026 14:49:25 +0530 Subject: [PATCH] feat: add sb front matter --- app/(app)/books/sb/[canto]/page.tsx | 51 ++++++++++++++++++++++++++++- app/(app)/books/sb/page.tsx | 35 ++++++++++++++++++-- 2 files changed, 82 insertions(+), 4 deletions(-) diff --git a/app/(app)/books/sb/[canto]/page.tsx b/app/(app)/books/sb/[canto]/page.tsx index 0d663865..064656df 100644 --- a/app/(app)/books/sb/[canto]/page.tsx +++ b/app/(app)/books/sb/[canto]/page.tsx @@ -3,8 +3,9 @@ import Link from "next/link"; import { PageHeader } from "@/components/layout/page-header"; import { notFound } from "next/navigation"; import { Card, CardContent } from "@/components/ui/card"; +import { FindInPage } from "@/components/layout/find-in-page"; import { ExtractedVerseCount } from "../../extracted-verse-count"; -import { getBookMeta } from "@/lib/api"; +import { getBookMeta, getProseChapter } from "@/lib/api"; import { buildOgMeta } from "@/lib/og"; import { BOOK_NAMES } from "@/lib/constants"; @@ -15,6 +16,11 @@ export async function generateMetadata({ }): Promise { const { canto } = await params; const title = BOOK_NAMES["sb"] || "Śrīmad-Bhāgavatam"; + // A non-numeric segment (preface, introduction) is front matter. + if (isNaN(parseInt(canto))) { + const segment = await getProseChapter("sb", 0, canto); + if (segment) return buildOgMeta({ title, detail: segment.title }); + } return buildOgMeta({ title, detail: `Canto ${canto}` }); } @@ -38,6 +44,49 @@ export default async function CantoPage({ }) { const { canto } = await params; const cantoNum = parseInt(canto); + + // Front matter — a non-numeric param (preface, introduction) resolves to a + // prose intro-segment. + if (isNaN(cantoNum)) { + const segment = await getProseChapter("sb", 0, canto); + if (!segment) notFound(); + + return ( +
+ + + ← Śrīmad-Bhāgavatam + +
+

+ {segment.title} +

+ +
+
+ +
+ + +
+ {segment.paragraphs.map((paragraph, i) => ( +
+ ))} +
+ + +
+
+ ); + } + const meta = await getBookMeta("sb"); if (!meta) notFound(); diff --git a/app/(app)/books/sb/page.tsx b/app/(app)/books/sb/page.tsx index 97b5da3b..2af70734 100644 --- a/app/(app)/books/sb/page.tsx +++ b/app/(app)/books/sb/page.tsx @@ -4,7 +4,7 @@ import { PageHeader } from "@/components/layout/page-header"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { ExtractedVerseCount } from "../extracted-verse-count"; -import { getBookMeta } from "@/lib/api"; +import { getBookMeta, getProseChapters } from "@/lib/api"; import { ogForBook } from "@/lib/og"; import { notFound } from "next/navigation"; @@ -26,7 +26,10 @@ type CantoInfo = { }; export default async function SbPage() { - const meta = await getBookMeta("sb"); + const [meta, introSegments] = await Promise.all([ + getBookMeta("sb"), + getProseChapters("sb", 0, "intro-segment"), + ]); if (!meta) notFound(); const intro = meta as { @@ -51,7 +54,33 @@ export default async function SbPage() {

{intro.author}

-
+
+ {introSegments.length > 0 && ( +
+

+ Front Matter +

+ + +
    + {introSegments.map((seg) => ( +
  • + +

    + {seg.title} +

    + +
  • + ))} +
+
+
+
+ )} +