b187b19f18
- Fix "Invalid Date" on student account page (memberSince guard) - Fix study community author showing full email instead of username - Add newsletter sign-up section to homepage (between PRISM and Current Series) - Add newsletter opt-in nudge to study enrollment flow - Redesign episodes page: latest episode featured card + per-episode Spotify embed - Add SEO description field to episodes page (visually hidden, admin-editable) - Expand default sitemap paths to include /about, /contact, /episodes, /resources, /study, /study/titus, /study/colossians - Add featured Q&A callout section to homepage - Add Q&A callout to study hub footer - Tag both untagged image assets in Asset Manager
442 lines
16 KiB
TypeScript
442 lines
16 KiB
TypeScript
import { DEFAULT_COLOSSIANS_STUDY_SECTIONS } from './colossiansStudyData'
|
|
import type { ColossiansStudySection as ColossiansStudySectionData } from './colossiansStudyData'
|
|
|
|
export type ColossiansStudySection = ColossiansStudySectionData
|
|
export type StudySection = ColossiansStudySectionData
|
|
|
|
export interface StudyProgram {
|
|
id: string
|
|
slug: string
|
|
title: string
|
|
description: string
|
|
homepageEyebrow?: string
|
|
showOnHomepage?: boolean
|
|
showNewTag?: boolean
|
|
newTagLabel?: string
|
|
status: 'active' | 'planned'
|
|
difficulty: 'beginner' | 'intermediate' | 'advanced'
|
|
estimatedHours: number
|
|
completionBadge: string
|
|
numberOfChapters: number
|
|
sections: StudySection[]
|
|
}
|
|
|
|
export interface CustomLink {
|
|
id: string
|
|
label: string
|
|
url: string
|
|
placement: 'platforms' | 'footer' | 'resources' | 'otherSites' | 'externalSites'
|
|
imageUrl?: string
|
|
description?: string
|
|
amazonUrl?: string
|
|
amazonLabel?: string
|
|
tags?: string[]
|
|
}
|
|
|
|
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 {
|
|
id: string
|
|
label: string
|
|
description?: string
|
|
url: string
|
|
amazonUrl?: string
|
|
amazonLabel?: string
|
|
}
|
|
|
|
export interface ArchivedSeriesNote {
|
|
id: string
|
|
heading: string
|
|
body: string
|
|
}
|
|
|
|
export interface ArchivedSeries {
|
|
id: string
|
|
label: string
|
|
title: string
|
|
description: string
|
|
imageUrl: string
|
|
listenUrl: string
|
|
studyGuideTitle: string
|
|
studyGuideDescription: string
|
|
studyGuideUrl: string
|
|
resourceLinks: ArchivedSeriesResourceLink[]
|
|
notes: ArchivedSeriesNote[]
|
|
episodeRange?: { from: number; to: number }
|
|
}
|
|
|
|
export interface RedirectRule {
|
|
id: string
|
|
path: string
|
|
target: string
|
|
statusCode: 301 | 302
|
|
}
|
|
|
|
export interface PodcastFeaturedLink {
|
|
id: string
|
|
title: string
|
|
episodeNumber?: string
|
|
summary: string
|
|
url: string
|
|
embedUrl?: string
|
|
showNotes?: string
|
|
discussionQuestions?: string[]
|
|
}
|
|
|
|
export interface SeoSettings {
|
|
title: string
|
|
description: string
|
|
ogTitle: string
|
|
ogDescription: string
|
|
ogImage: string
|
|
canonicalUrl: string
|
|
robotsPolicy: string
|
|
sitemapPaths: string[]
|
|
}
|
|
|
|
export interface LegalSettings {
|
|
privacyTitle: string
|
|
privacyBody: string[]
|
|
termsTitle: string
|
|
termsBody: string[]
|
|
}
|
|
|
|
export interface SiteContent {
|
|
// ── Hero ──
|
|
eyebrow: string
|
|
heroTagline: string
|
|
heroBtnSpotify: string
|
|
heroBtnEpisodes: string
|
|
heroBtnStartHere: string
|
|
// ── Start Here ──
|
|
startHereHeading: string
|
|
startHereIntro: string
|
|
startHereStep1Title: string
|
|
startHereStep1Body: string
|
|
startHereStep1Cta: string
|
|
startHereStep2Title: string
|
|
startHereStep2Body: string
|
|
startHereStep2Cta: string
|
|
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
|
|
studyGuideAmazonButtonLabel: string
|
|
// ── Colossians Study ──
|
|
studies: StudyProgram[]
|
|
colossiansStudySections: ColossiansStudySection[]
|
|
// ── Share ──
|
|
shareHeading: string
|
|
shareP: string
|
|
// ── PRISM Video ──
|
|
prismVideoUrl: string
|
|
prismEyebrow: string
|
|
prismHeading: string
|
|
prismIntro: string
|
|
prismPatternIntro: string
|
|
prismStep1: string
|
|
prismStep2: string
|
|
prismStep3: string
|
|
prismStep4: string
|
|
prismStep5: string
|
|
prismOutro: string
|
|
prismClosing: 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
|
|
// ── Welcome Email ──
|
|
welcomeEmailSubject: string
|
|
welcomeEmailGreetingPrefix: string
|
|
welcomeEmailIntro: string
|
|
welcomeEmailCurrentSeries: string
|
|
welcomeEmailStartHereTitle: string
|
|
welcomeEmailStartHereSummary: string
|
|
welcomeEmailStartHereUrl: string
|
|
welcomeEmailSpotifyUrl: string
|
|
welcomeEmailAppleUrl: string
|
|
welcomeEmailAmazonUrl: string
|
|
welcomeEmailWebsiteUrl: string
|
|
welcomeEmailImageUrl: string
|
|
welcomeEmailWhatToExpect1: string
|
|
welcomeEmailWhatToExpect2: string
|
|
welcomeEmailWhatToExpect3: string
|
|
welcomeEmailScripture: string
|
|
welcomeEmailScriptureRef: string
|
|
welcomeEmailSignoff: string
|
|
// ── Header ──
|
|
headerFollowLabel: string
|
|
// ── Cookie banner ──
|
|
cookieBannerText: string
|
|
// ── Arrays ──
|
|
customLinks: CustomLink[]
|
|
customBlocks: CustomBlock[]
|
|
archivedSeries: ArchivedSeries[]
|
|
redirects: RedirectRule[]
|
|
podcastFeaturedLinks: PodcastFeaturedLink[]
|
|
seo: SeoSettings
|
|
legal: LegalSettings
|
|
// ── Episodes page ──
|
|
episodesSeoIntro: string
|
|
}
|
|
|
|
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.',
|
|
startHereStep1Title: 'Step 1: Listen to 3 Starter Episodes',
|
|
startHereStep1Body:
|
|
'Start with the newest episode, one from the beginning of the current study, and one from the middle.',
|
|
startHereStep1Cta: 'Open Episodes',
|
|
startHereStep2Title: 'Step 2: Use Q&A to Go Deeper',
|
|
startHereStep2Body:
|
|
'Browse by topic or search key words to find concise biblical answers and related follow-up questions.',
|
|
startHereStep2Cta: 'Go to Q&A',
|
|
startHereStep3Title: 'Step 3: Ask Nate Directly',
|
|
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.',
|
|
aboutShowP2:
|
|
"Whether you're in the car, at the gym, or just looking for something to anchor your day, each episode is designed to feed your faith with solid, practical teaching.",
|
|
aboutNate:
|
|
"Nate Emmert is a husband, dad, and lifelong student of the Bible from Lynchburg, Va. He's not a pastor or a professor — just someone who fell in love with digging into Scripture and wanted to bring others along for the journey. He created Verse by Verse to make deep Bible study accessible to anyone, whether you've read the Bible your whole life or you're just getting started. No seminary required. No prior knowledge assumed. Just the Word, unpacked verse by verse.",
|
|
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.',
|
|
studyGuideDownloadUrl: '',
|
|
studyGuideUrl: 'https://a.co/d/01sG2tOJ',
|
|
studyGuideAmazonButtonLabel: 'Get it on Amazon',
|
|
studies: [
|
|
{
|
|
id: 'study-colossians',
|
|
slug: 'colossians',
|
|
title: 'Colossians: Rooted in Christ',
|
|
description: 'Walk through Colossians in guided lessons with commentary, Greek notes, and discussion prompts.',
|
|
homepageEyebrow: 'New Study',
|
|
showOnHomepage: true,
|
|
showNewTag: true,
|
|
newTagLabel: 'NEW',
|
|
status: 'active',
|
|
difficulty: 'intermediate',
|
|
estimatedHours: 12,
|
|
completionBadge: 'Colossians Completion',
|
|
numberOfChapters: 4,
|
|
sections: DEFAULT_COLOSSIANS_STUDY_SECTIONS,
|
|
},
|
|
{
|
|
id: 'study-titus',
|
|
slug: 'titus',
|
|
title: 'Titus: Sound Doctrine',
|
|
description: 'A full online class version of Titus with lesson-by-lesson notes and discussion.',
|
|
homepageEyebrow: 'Planned Study',
|
|
showOnHomepage: false,
|
|
showNewTag: false,
|
|
newTagLabel: 'NEW',
|
|
status: 'planned',
|
|
difficulty: 'beginner',
|
|
estimatedHours: 8,
|
|
completionBadge: 'Titus Completion',
|
|
numberOfChapters: 3,
|
|
sections: [],
|
|
},
|
|
],
|
|
colossiansStudySections: DEFAULT_COLOSSIANS_STUDY_SECTIONS,
|
|
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.',
|
|
prismVideoUrl: '/images/PRISM.mp4',
|
|
prismEyebrow: 'Featured Video',
|
|
prismHeading: 'PRISM',
|
|
prismIntro:
|
|
'What if every time you opened your Bible, you had a clear, repeatable method to actually dig in?',
|
|
prismPatternIntro:
|
|
'In this bonus episode, I walk you through P.R.I.S.M. — a five-step daily Bible study pattern designed to help you slow down, go deep, and let the Word do its work.',
|
|
prismStep1: 'P — Pray before you read',
|
|
prismStep2: 'R — Read slowly and observe',
|
|
prismStep3: 'I — Interpret with context',
|
|
prismStep4: 'S — Study and apply specifically',
|
|
prismStep5: 'M — Memorize one verse at a time',
|
|
prismOutro:
|
|
"Whether you're brand new to daily Bible reading or you've been at it for years, P.R.I.S.M. gives you a consistent framework for every passage, every day.",
|
|
prismClosing: "The goal isn't to get through the text - it's to let the text get through to you.",
|
|
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/',
|
|
welcomeEmailSubject: 'Welcome to Verse by Verse with Nate',
|
|
welcomeEmailGreetingPrefix: 'Glad you\'re here',
|
|
welcomeEmailIntro: 'Thanks for subscribing to Verse by Verse with Nate - a Bible teaching podcast where we slow down, dig into the text, and pull out the nuggets God has for us word by word.',
|
|
welcomeEmailCurrentSeries: 'Right now we\'re working through the book of Titus - a short letter packed with practical wisdom about grace, godliness, and what the Christian life looks like when it\'s rooted in sound doctrine.',
|
|
welcomeEmailStartHereTitle: 'Episode 1 - Introduction to Titus',
|
|
welcomeEmailStartHereSummary: 'Who wrote it, who received it, and why it still matters.',
|
|
welcomeEmailStartHereUrl: '/start-here',
|
|
welcomeEmailSpotifyUrl: '/spotify',
|
|
welcomeEmailAppleUrl: '/apple',
|
|
welcomeEmailAmazonUrl: '/amazon',
|
|
welcomeEmailWebsiteUrl: 'https://versebyversewithnate.us',
|
|
welcomeEmailImageUrl: '/images/podcast-art.jpeg',
|
|
welcomeEmailWhatToExpect1: 'Verse-by-verse teaching - we go slow and let the text speak for itself.',
|
|
welcomeEmailWhatToExpect2: 'Greek word studies - the kind that open up meaning without being a lecture.',
|
|
welcomeEmailWhatToExpect3: 'New episodes + study notes delivered right to your inbox.',
|
|
welcomeEmailScripture: 'For the grace of God has appeared, bringing salvation to all people.',
|
|
welcomeEmailScriptureRef: 'Titus 2:11 - BSB',
|
|
welcomeEmailSignoff: 'Grace and peace,\nNate',
|
|
headerFollowLabel: 'Follow on Spotify',
|
|
cookieBannerText: 'We use optional analytics cookies to measure visits and location trends for site improvement.',
|
|
customLinks: [],
|
|
customBlocks: [],
|
|
archivedSeries: [],
|
|
redirects: [
|
|
{
|
|
id: 'spotify',
|
|
path: '/spotify',
|
|
target: 'https://open.spotify.com/show/0Gq1TzoJOdReSZ1gYQi8Xl',
|
|
statusCode: 301,
|
|
},
|
|
{
|
|
id: 'apple',
|
|
path: '/apple',
|
|
target: 'https://podcasts.apple.com/search?term=Verse+by+Verse+with+Nate',
|
|
statusCode: 301,
|
|
},
|
|
{
|
|
id: 'amazon',
|
|
path: '/amazon',
|
|
target: 'https://music.amazon.com/podcasts/202322bf-db86-4e7d-9a6b-4db7cbccbccf/verse-by-verse-with-nate',
|
|
statusCode: 301,
|
|
},
|
|
],
|
|
podcastFeaturedLinks: [],
|
|
episodesSeoIntro: 'Verse by Verse with Nate is an expository Bible teaching podcast where we go through Scripture one verse at a time. Each episode digs into the text carefully and practically, helping you understand what the Bible says, what it means, and how to live it out. New episodes released regularly — subscribe on Spotify or your favorite podcast platform.',
|
|
seo: {
|
|
title: 'Verse by Verse with Nate',
|
|
description: "Verse by Verse with Nate explores Scripture one verse at a time with practical Bible teaching.",
|
|
ogTitle: 'Verse by Verse with Nate',
|
|
ogDescription: 'A Journey Through Scripture - verse by verse, nugget by nugget.',
|
|
ogImage: '/images/podcast-art.jpeg',
|
|
canonicalUrl: 'https://versebyversewithnate.us/',
|
|
robotsPolicy: 'index,follow',
|
|
sitemapPaths: ['/', '/start-here', '/questions', '/privacy', '/terms'],
|
|
},
|
|
legal: {
|
|
privacyTitle: 'Privacy Policy',
|
|
privacyBody: [
|
|
'We respect your privacy and collect limited data to operate and improve this site.',
|
|
'If you consent to analytics cookies, we may store masked IP-based location signals and returning visitor activity.',
|
|
'Contact form details are used only to respond to your message and ministry communication requests.',
|
|
],
|
|
termsTitle: 'Terms',
|
|
termsBody: [
|
|
'Content on this site is for informational and ministry purposes.',
|
|
'External links are provided for convenience and are subject to third-party policies.',
|
|
'By using this site, you agree to lawful use and respectful communication.',
|
|
],
|
|
},
|
|
}
|