Acceptance Spec — Sermon Prep Desk section
Why (one paragraph)
Every @SermonPrepDesk YouTube episode promises "the full prep pack, free, at SermonWise.ai" but the link lands on the homepage. This section gives each episode a canonical companion page: the episode's prep content as indexable text + the video embed + a tradition-aware CTA into the product. It is the SEO landing surface for "Matthew 13 sermon outline"-class queries and the conversion bridge of the hub-and-spoke funnel (strategy.md §6).
Routes
| Route | Purpose |
|---|---|
/sermons/prep-desk | Index: all episodes, newest Sunday first. On sermonwise.ai this is sermonwise.ai/prep-desk. |
/sermons/prep-desk/[slug] | One page per episode, e.g. /sermons/prep-desk/matthew-13-the-sower |
Static content model (no DB): typed data file(s) in the repo (follow existing editorial-content convention if one exists, else src/content/prep-desk/episodes.ts). Adding an episode = adding one object + redeploying.
Episode content model
slug, episodeNumber, passageRef ("Matthew 13:1-9, 18-23"), title, servesSunday (date + lectionary label "Proper 10A"), youtubeVideoId (OPTIONAL — page must render cleanly without it), bigIdea, lensLines {classic, pastoral, edgy}, titleClinic {safe, fresh, edgy}, showDontTell (labeled imaginative retelling), detailYouMissed, dosAndDonts {dont, do}, pathToJesus, outline {bigIdea, points[{text, verses?}]}, discussionQuestion.
Episode 1 ships with the section, content drawn verbatim from knowledge/marketing/sermonwise-youtube/hub-scripts-batch1.md (Episode 1 — The Sower).
Expected output — episode page (Pastor Ruth test)
A pastor landing from Google or the video description sees, in order:
- Header block: passage ref + "Serves Sunday, July 12, 2026 (Proper 10A)" + H1 title. Brand-consistent with the rest of /sermons.
- Video embed (lazy iframe, 16:9) — ONLY when
youtubeVideoIdis set; no broken/empty player otherwise. - The prep content as structured sections with the show's segment names as H2s: The Text's Big Idea · LensLines™ · Show, Don't Tell (labeled: "an imaginative retelling — a preaching move, not exegesis") · The Detail You Missed · Sermon Title Clinic · Do's & Don'ts · Walk the Path to Jesus · The Outline. All readable as plain text (SSR — view-source shows the content).
- Primary CTA (appears after Outline and once mid-page): "Get the full prep pack for YOUR tradition — free" → wizard entry URL, passage prefilled if the wizard supports a query param (recon will confirm; otherwise plain wizard URL). Free-tier honesty: "Free account · 2 prep packs/month · no card."
- Discussion prompt mirroring the episode's pinned comment, linking to the YouTube comments when videoId exists.
- Footer cross-links: the Prep Desk index · the YouTube channel (
https://www.youtube.com/@SermonPrepDesk) · /sermons/community.
Expected output — index page
Hero ("The Sermon Prep Desk — weekly sermon prep for working preachers, in video and in text"), channel link, then episode cards (passage, title, Sunday served, watch/read links). Sorted by servesSunday descending.
SEO / structured data (hard requirements)
generateMetadataper episode: title"<passageRef> Sermon Prep — <title> | SermonWise", description from bigIdea, canonical URL on the sermonwise.ai host.- JSON-LD:
Articlealways;VideoObjectonly when videoId set. - Pages added to the sermons sitemap.
- SSR/ISR — content visible to bots without JS (no client-only rendering of the prep text).
Non-goals (v1)
- No email-capture form (Tuesday list doesn't exist yet — leave a clearly marked component seam, not a dead form).
- No DB writes, no migrations, no per-tradition page variants (that's the separate programmatic-pages workstream, launch plan §2.2).
- No comments/community features on these pages.
Edge cases
- Episode without videoId → page valid, no player, no VideoObject schema, CTA unaffected.
- Unknown slug → 404 (Next notFound()).
- Index with 1 episode must not look broken/empty.
Verification gate (evidence-or-nothing)
pnpm build+ lint green.- Deployed-URL check (Vercel preview or prod): both routes return 200; episode page view-source contains "LensLines" and outline point text (SSR proof); CTA href resolves; no console errors on load.
- Playwright or scripted fetch evidence attached to the PR.