Make all site content editable from admin; add per-page content blocks

This commit is contained in:
nmemmert
2026-05-05 16:17:23 -04:00
parent 79eb72635e
commit 7c02062663
11 changed files with 1762 additions and 2502 deletions
+96
View File
@@ -12,6 +12,14 @@ export interface CustomBlock {
id: string
heading: string
body: string
page?: 'homepage' | 'start-here' | 'episodes' | 'downloads' | 'about' | 'contact' | 'questions'
}
export interface WhereToNextCard {
id: string
title: string
description: string
path: string
}
export interface ArchivedSeriesResourceLink {
@@ -39,6 +47,7 @@ export interface ArchivedSeries {
studyGuideUrl: string
resourceLinks: ArchivedSeriesResourceLink[]
notes: ArchivedSeriesNote[]
episodeRange?: { from: number; to: number }
}
export interface RedirectRule {
@@ -78,8 +87,13 @@ export interface LegalSettings {
}
export interface SiteContent {
// ── Hero ──
eyebrow: string
heroTagline: string
heroBtnSpotify: string
heroBtnEpisodes: string
heroBtnStartHere: string
// ── Start Here ──
startHereHeading: string
startHereIntro: string
startHereStep1Title: string
@@ -91,24 +105,66 @@ export interface SiteContent {
startHereStep3Title: string
startHereStep3Body: string
startHereStep3Cta: string
// ── About ──
aboutEyebrow: string
aboutListenBtnLabel: string
aboutShowEyebrow: string
aboutShowHeading: string
aboutShowP1: string
aboutShowP2: string
aboutNate: string
aboutPhotoUrl: string
aboutVerseArtUrl: string
// ── Contact ──
contactPhotoUrl: string
contactEyebrow: string
contactHeading: string
contactName: string
contactRole: string
contactQuote: string
contactIntro: string
contactPoint1: string
contactPoint2: string
contactVerse: string
contactVerseRef: string
// ── Series ──
seriesLabel: string
seriesTitle: string
seriesDescription: string
seriesImageUrl: string
seriesListenUrl: string
seriesListenBtnLabel: string
seriesDownloadsBtnLabel: string
// ── Downloads ──
studyGuideTitle: string
studyGuideDescription: string
studyGuideDownloadUrl: string
studyGuideUrl: string
// ── Share ──
shareHeading: string
shareP: string
// ── Homepage navigation cards ──
whereToNextEyebrow: string
whereToNextHeading: string
whereToNextCards: WhereToNextCard[]
// ── Global / Footer ──
footerTitle: string
footerSubtitle: string
footerEmail: string
footerCopyright: string
footerPrivacyNote: string
// ── Platform URLs ──
platformSpotifyUrl: string
platformAppleUrl: string
platformYoutubeUrl: string
platformAmazonUrl: string
platformFacebookUrl: string
platformCreatorUrl: string
// ── Header ──
headerFollowLabel: string
// ── Cookie banner ──
cookieBannerText: string
// ── Arrays ──
customLinks: CustomLink[]
customBlocks: CustomBlock[]
archivedSeries: ArchivedSeries[]
@@ -121,6 +177,9 @@ export interface SiteContent {
export const DEFAULTS: SiteContent = {
eyebrow: 'A Journey Through Scripture',
heroTagline: "Exploring God's Word one verse at a time",
heroBtnSpotify: 'Listen on Spotify',
heroBtnEpisodes: 'Explore Episodes ↓',
heroBtnStartHere: 'New here? Start here →',
startHereHeading: 'New Here? Start Here',
startHereIntro:
'If this is your first visit, this path helps you get grounded quickly and make the most of the site.',
@@ -136,6 +195,9 @@ export const DEFAULTS: SiteContent = {
startHereStep3Body:
'Use the contact form to submit your Bible question for future Q&A or an upcoming episode.',
startHereStep3Cta: 'Submit a Question',
aboutEyebrow: 'About Nate',
aboutListenBtnLabel: 'Listen Now ↓',
aboutShowEyebrow: 'About the Show',
aboutShowHeading: 'Depth. Clarity. Application.',
aboutShowP1:
'Verse by Verse with Nate walks through Scripture passage by passage — unpacking the original context, drawing out the meaning, and connecting each verse to how we live today.',
@@ -146,12 +208,24 @@ export const DEFAULTS: SiteContent = {
aboutPhotoUrl: '/images/nate-photo.jpeg',
aboutVerseArtUrl: '/images/hebrews-4-12-verse-art.png',
contactPhotoUrl: '/images/nate-contact-photo.png',
contactEyebrow: 'Get in Touch',
contactHeading: 'Contact Nate',
contactName: 'Nate',
contactRole: 'Bible teacher · Lynchburg, VA',
contactQuote: 'I read every message - nothing blesses me more than hearing how God\'s Word is at work in your life.',
contactIntro: 'Ask a Bible question, share a testimony, or request a topic for a future episode.',
contactPoint1: 'I read every message personally',
contactPoint2: 'Response within 48 hours',
contactVerse: 'Your word is a lamp to my feet and a light to my path.',
contactVerseRef: 'Psalm 119:105',
seriesLabel: 'Now Playing',
seriesTitle: 'Study of Titus: Sound Doctrine',
seriesDescription:
"A deep-dive into Paul's letter to Titus — unpacking what it means to build a church and a life on sound doctrine.",
seriesImageUrl: '/images/titus-cover.png',
seriesListenUrl: '/spotify',
seriesListenBtnLabel: 'Listen to Series',
seriesDownloadsBtnLabel: 'View Downloads',
studyGuideTitle: 'Companion Study Guide',
studyGuideDescription:
'Go deeper in your study with the official Verse by Verse companion guide — now available on Amazon.',
@@ -159,6 +233,28 @@ export const DEFAULTS: SiteContent = {
studyGuideUrl: 'https://a.co/d/01sG2tOJ',
shareHeading: 'Help one more person hear the Word this week.',
shareP: 'Scan the QR code or text the show link to a friend who needs encouragement today.',
whereToNextEyebrow: 'Where to Next',
whereToNextHeading: 'Choose the page you need.',
whereToNextCards: [
{ id: 'episodes', title: 'Episodes', description: 'Listen to latest episodes and platform links.', path: '/episodes' },
{ id: 'downloads', title: 'Downloads', description: 'Main guide, extra downloads, and past study files.', path: '/resources' },
{ id: 'qa', title: 'Q&A', description: 'Browse Bible questions and approved answers.', path: '/questions' },
{ id: 'about', title: 'About', description: 'Learn about Nate and the mission of the show.', path: '/about' },
{ id: 'contact', title: 'Contact', description: 'Submit a Bible question, testimony, or topic.', path: '/contact' },
],
footerTitle: 'Verse by Verse with Nate',
footerSubtitle: 'A Journey Through Scripture',
footerEmail: 'hello@versebyversewithnate.us',
footerCopyright: '© 2026 Nate Emmert · Made with faith.',
footerPrivacyNote: 'Privacy: with consent, analytics may store masked IP-based location data (country/state/county/city) and returning visitor activity.',
platformSpotifyUrl: '/spotify',
platformAppleUrl: '/apple',
platformYoutubeUrl: 'https://www.youtube.com/@blackzebraem5558',
platformAmazonUrl: '/amazon',
platformFacebookUrl: 'https://facebook.com/versebyversewithnate',
platformCreatorUrl: 'https://creators.spotify.com/pod/profile/nmemmert/',
headerFollowLabel: 'Follow on Spotify',
cookieBannerText: 'We use optional analytics cookies to measure visits and location trends for site improvement.',
customLinks: [],
customBlocks: [],
archivedSeries: [],