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
| Route | Purpose |
|---|---|
/sermons/funeral-prep | The 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:
- 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.
- 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 inSermonWizard.tsx). Free-tier honesty line: "Free account · 2 prep packs/month · no card."
- 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/subscribeis a secret-gated cross-property proxy and cannot be called from a browser form — the newsletter route writesemail_subscribersand syncs MailerLite viatagToGroup()). Form failure NEVER hides or breaks the content. Self-contained client component; no shared-component edits. - "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.
- 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.
- 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"), canonicalhttps://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.mdto 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/newsletterreturnsalreadySubscribed: 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 buildgreen, 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
ArticleandFAQPageJSON-LD blocks present; wizard CTA hrefs carry?scripture=. - Form POST verified against
/api/newslettercontract ({email, tag}→{ok: true}). - Before public promotion: MailerLite group for
funeral_prep_packcreated + mapped intagToGroup(), welcome email with the PDF wired, and founder has pastorally reviewed the hard-deaths section.