Skip to main content

Acceptance Spec — Funeral Sermon Prep Pack landing page

Why (one paragraph)

"Psalm 23 funeral sermon" is the highest-urgency search a pastor ever makes, and it has effectively zero video or quality-content competition (strategy.md §3, §6). This page is the lead magnet that search lands on: a complete, immediately-useful funeral sermon prep guide for the three texts the church reaches for in grief — Psalm 23, John 14:1-6, 1 Thessalonians 4:13-18. It is an SEO play as much as an email-capture play, so the full content is on the page, ungated. The reader is a pastor in the hardest week of ministry — sometimes burying a child. Nothing on this page may be salesy.

Route

RoutePurpose
/sermons/funeral-prepThe page. On sermonwise.ai this is sermonwise.ai/funeral-prep via the existing hostname-rewrite middleware (block 0a in src/middleware.ts — no middleware change needed).

Static content model (no DB): typed data file src/data/prep-desk/funeral-prep-content.ts. Server component page, SSR — all prep content visible in view-source without JS.

Expected output — the page (Pastor Ruth-with-a-funeral-Thursday test)

A pastor landing from Google on Tuesday with a funeral Thursday sees, in order:

  1. Hero — tender, not promotional. Names the situation ("you have a funeral this week") in 2–3 sentences, HEAR voice. No product pitch in the hero. Dark navy/stone hero per design system.
  2. Three passage sections — Psalm 23 · John 14:1-6 · 1 Thessalonians 4:13-18. Each section contains, as structured, fully readable on-page content:
    • Why this text serves grief (not "why it's popular" — why it carries the weight)
    • A big idea — one preachable sentence
    • An outline — 3–4 points, each with verse anchors
    • One Show, Don't Tell scene — explicitly labeled "an imaginative retelling — a preaching move, not exegesis" (guardrail: never present invented detail as certain)
    • One pastoral caution — what not to do / not to say with this text at a casket
    • Wizard CTA — "Build your prep pack for this text" → /sermons/app/new?scripture=<passageRef> (the wizard reads ?scripture= — confirmed in SermonWizard.tsx). Free-tier honesty line: "Free account · 2 prep packs/month · no card."
  3. Email capture (enhancement, never a gate) — one inline form: "Get this guide as a printable PDF + the Tuesday Prep Pack email." POSTs { email, tag: 'funeral_prep_pack', source: 'sermonwise' } to /api/newsletter (the public browser endpoint; /api/mailerlite/subscribe is a secret-gated cross-property proxy and cannot be called from a browser form — the newsletter route writes email_subscribers and syncs MailerLite via tagToGroup()). Form failure NEVER hides or breaks the content. Self-contained client component; no shared-component edits.
  4. "When the death was hard" section — sudden loss, the death of a child, suicide. Extra-care notes, an explicit no-platitudes list, crisis-line pointers for the living (988 US / 9-8-8 Canada), and the AI-bridge framing turned pastoral: the pastor's presence matters more than the pastor's words. This section must read as one pastor to another, not as content marketing. Founder pastoral review required before promotion.
  5. FAQ — 4–5 real questions (sermon length, preaching for someone you didn't know, graveside vs. service, sermon vs. eulogy, what to say to the family beforehand). Answers honest and specific, no filler.
  6. Footer cross-links — Prep Desk index, @SermonPrepDesk channel, /sermons home. SermonNav + SermonFooter wrap the page.

Theological guardrails (hard requirements, from agent-brief.md)

  • No invented historical/textual facts. Imaginative retellings labeled, every time.
  • No "AI writes your sermon" language anywhere; preferred vocabulary only (prep, prep pack, companion).
  • Grace-forward; application as invitation, never burden. No tradition-bashing.
  • Never speculate on the eternal state of the deceased; never weaponize John 14:6 at a casket.
  • Suicide subsection: mercy-forward, follows the family's lead on naming the cause, no inquest, no condemnation, crisis resources for the living.

SEO / structured data (hard requirements)

  • generateMetadata: title targets the query class ("Funeral Sermon Prep — Psalm 23, John 14, 1 Thessalonians 4"), canonical https://sermonwise.ai/funeral-prep, indexable.
  • JSON-LD: Article + FAQPage (FAQ answers must match on-page text) + BreadcrumbList.
  • One-line entry added to the sermonwise host sitemap in src/app/sitemap.ts.
  • SSR — view-source contains the outlines and FAQ answers (no client-only rendering of prep content).

Non-goals (v1)

  • No PDF rendering (separate later task renders funeral-prep-pack.md to PDF; the email promise copy must stay honest until the PDF + welcome automation exist).
  • No MailerLite group creation, no DB writes, no Stripe, no emails sent as part of the build.
  • No edits to prep-desk pages or shared components (parallel agent owns those files).
  • No per-tradition variants.

Edge cases

  • Email API down/erroring → form shows a human error message with a mailto fallback; page content unaffected.
  • Duplicate signup → /api/newsletter returns alreadySubscribed: true; form treats it as success.
  • Page renders correctly on churchwiseai.com/sermons/funeral-prep AND sermonwise.ai/funeral-prep (same component, host rewrite).

Verification gate (evidence-or-nothing)

  • pnpm lint + pnpm build green, route present in build output.
  • View-source check (deployed or build output): contains "Psalm 23", an outline point, and an FAQ answer (SSR proof); both Article and FAQPage JSON-LD blocks present; wizard CTA hrefs carry ?scripture=.
  • Form POST verified against /api/newsletter contract ({email, tag}{ok: true}).
  • Before public promotion: MailerLite group for funeral_prep_pack created + mapped in tagToGroup(), welcome email with the PDF wired, and founder has pastorally reviewed the hard-deaths section.