import { DEFAULT_COLOSSIANS_STUDY_SECTIONS } from './legacyColossiansData' import type { ColossiansStudySection as ColossiansStudySectionData } from './legacyColossiansData' export type ColossiansStudySection = ColossiansStudySectionData export type StudySection = ColossiansStudySectionData export interface StudyProgram { id: string slug: string title: string description: string bibleBook?: string homepageEyebrow?: string // Cover image for the study, used as the backdrop of the featured card on the homepage imageUrl?: string showOnHomepage?: boolean showNewTag?: boolean newTagLabel?: string // Which companion guide the study offers for download: '' = automatic (the guide of the series or // finished book linked to this study), 'none', 'primary', 'second', or 'book:' guideSource?: string // 'complete' = finished and self-paced (still open for enrollment). A study whose lessons // have all been released is treated as complete even if left as 'active'. status: 'active' | 'planned' | 'complete' // Which of the two concurrent release lanes this study airs in (A = primary series, B = second series) lane?: '' | 'A' | 'B' // When a planned study is expected to start (ISO) — shown as "Starts " on the hub startsAt?: string 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' | 'books' | 'recommended' imageUrl?: string description?: string amazonUrl?: string amazonLabel?: string appleBooksUrl?: string appleBooksLabel?: string tags?: string[] } export interface CustomBlock { id: string heading: string body: string page?: 'homepage' | 'start-here' | 'episodes' | 'downloads' | 'about' | 'contact' | 'questions' linkUrl?: string linkLabel?: string } export interface WhereToNextCard { id: string title: string description: string path: string } export interface RedirectRule { id: string path: string target: string statusCode: 301 | 302 } export interface PodcastFeaturedLink { id: string // Which series this highlight belongs to: Lane A (primary), Lane B (second), or general. // Missing = primary (older highlights were all about the one running series). lane?: 'primary' | 'second' | 'general' // When true the highlight stays hidden on the public site until its season + episode number // appear in the Spotify feed (the lane's season number is set on the Episode Workflow page). holdUntilReleased?: boolean title: string episodeNumber?: string summary: string url: string embedUrl?: string // Structured show notes fields showNotesSummary?: string showNotesThemes?: string[] showNotesScripture?: string[] showNotesQuotes?: string[] showNotesResources?: string[] // Legacy plain-text field — kept for backward compat with live data showNotes?: string discussionQuestions?: string[] } export interface Testimonial { id: string quote: string name: string source?: string } // A series' companion study guide (the main series' guide lives in the studyGuide* fields) export interface StudyGuide { title: string description?: string downloadUrl?: string amazonUrl?: string amazonLabel?: string appleBooksUrl?: string appleBooksLabel?: string } export interface SecondSeries { label: string title: string description: string imageUrl: string listenUrl: string listenBtnLabel: string studySlug?: string season?: number guide?: StudyGuide } export interface FinishedBook { id: string title: string description: string imageUrl: string season: number // The study that goes with this book, so the card can offer both "Listen" and "Study" studySlug?: string // Episode highlights that were featured while this series was playing, kept for its page highlights?: PodcastFeaturedLink[] // The series' companion study guide, kept so it stays available after the series ends guide?: StudyGuide downloadUrl?: string downloadQrUrl?: string } export interface ScheduledSeriesTransition { triggersAt: string // ISO datetime — server fires at or after this time (checks hourly) // New series card newTitle: string newDescription?: string newImageUrl?: string newSeason: number // Study that opens (planned → active) when this series launches; the ending series' study becomes Complete newStudySlug?: string // Companion guide for the incoming series (second series lane only; the main series uses the newStudyGuide* fields) newGuide?: StudyGuide // Start Here section (optional) newStartHereHeading?: string newStartHereIntro?: string newStartHereStep1Title?: string newStartHereStep1Body?: string newStartHereStep1Cta?: string newStartHereStep2Title?: string newStartHereStep2Body?: string newStartHereStep2Cta?: string newStartHereStep3Title?: string newStartHereStep3Body?: string newStartHereStep3Cta?: string // Companion Study Guide / Featured Download (optional) newStudyGuideTitle?: string newStudyGuideDescription?: string newStudyGuideDownloadUrl?: string newStudyGuideUrl?: string newStudyGuideAmazonButtonLabel?: string newStudyGuideAppleBooksUrl?: string newStudyGuideAppleBooksLabel?: string } export interface PodcastHost { id: string name: string role: string bio: string imageUrl: string // Removed hosts are archived, never deleted — kept out of public display but // preserved so past-episode credits and history stay intact. archived: boolean } export interface NuggetsShow { title: string tagline: string description: string podcastArtUrl: string rssFeedUrl: string spotifyUrl: string appleUrl: string hosts: PodcastHost[] } 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 ── podcastArtUrl: string 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 seriesStudySlug?: string seriesSeason?: number // Optional second concurrent series (Lane B). Same card as the primary series. secondSeries?: SecondSeries seriesDownloadsBtnLabel: string // ── Downloads ── studyGuideTitle: string studyGuideDescription: string studyGuideDownloadUrl: string studyGuideUrl: string studyGuideAmazonButtonLabel: string studyGuideAppleBooksUrl: string studyGuideAppleBooksLabel: string // ── Colossians Study ── studies: StudyProgram[] colossiansStudySections: ColossiansStudySection[] // ── Share ── shareHeading: string shareP: string shareQrImageUrl: 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 platformKofiUrl?: string platformKofiQrUrl?: 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 // ── Newsletter Welcome Email CTA labels ── welcomeEmailSpotifyBtnLabel: string welcomeEmailAppleBtnLabel: string welcomeEmailStartHereLinkLabel: string // ── Study Account Welcome Email ── studyWelcomeEmailSubject: string studyWelcomeEmailBody: string studyWelcomeEmailCtaLabel: string studyWelcomeEmailCtaPath: string studyWelcomeEmailSignoff: string // ── Study Account Deleted Email ── studyDeletedEmailSubject: string studyDeletedEmailBody: string studyDeletedEmailCtaLabel: string studyDeletedEmailCtaPath: string studyDeletedEmailSignoff: string // ── Study Lesson Reminder Email ── studyReminderEmailSubjectPrefix: string studyReminderEmailBody: string studyReminderEmailCtaLabel: string studyReminderEmailSignoff: string // ── Study Re-engagement Emails ── studyReengagementDays: string studyReengagementT1Subject: string studyReengagementT1Body: string studyReengagementT1Cta: string studyReengagementT2Subject: string studyReengagementT2Body: string studyReengagementT2Cta: string studyReengagementT3Subject: string studyReengagementT3Body: string studyReengagementT3Cta: string // ── Study Completion Certificate Email ── studyCertificateEmailSubject: string studyCertificateEmailBody: string studyCertificateEmailCtaLabel: string studyCertificateEmailSignoff: string // ── Study Weekly Lesson Digest Email ── studyWeeklyDigestEmailSubject: string studyWeeklyDigestEmailBody: string studyWeeklyDigestEmailSignoff: string // ── Email Change Confirmation ── emailChangeSubject: string emailChangeBody: string emailChangeCtaLabel: string // ── Verify Email Address (signup) ── emailVerifySubject: string emailVerifyBody: string emailVerifyCtaLabel: string // ── Password Reset ── passwordResetSubject: string passwordResetBody: string passwordResetCtaLabel: string // ── Password Changed Confirmation ── passwordChangedSubject: string passwordChangedBody: string // ── 2FA Email OTP ── twoFaOtpEmailSubject: string twoFaOtpEmailBody: string twoFaOtpEmailExpiry: string // ── Q&A Answered Notification ── qaAnsweredEmailSubject: string qaAnsweredEmailBody: string qaAnsweredEmailCtaLabel: string qaAnsweredEmailSignoff: string // ── Header ── headerFollowLabel: string // Ask for name and email before sending visitors to Amazon or Apple Books (default on) gateStoreLinks?: boolean // ── Cookie banner ── cookieBannerText: string // ── Arrays ── customLinks: CustomLink[] customBlocks: CustomBlock[] redirects: RedirectRule[] podcastFeaturedLinks: PodcastFeaturedLink[] seo: SeoSettings legal: LegalSettings // ── Episodes page ── episodesSeoIntro: string // ── Finished Books ── finishedBooks: FinishedBook[] // ── Scheduled Series Transition ── // All fields fire together at triggersAt. Start Here and Study Guide fields are optional — // omit them to leave those sections unchanged when the series transitions. scheduledSeriesTransition?: ScheduledSeriesTransition // Same, for the second series lane scheduledSecondSeriesTransition?: ScheduledSeriesTransition // ── Testimonials ── testimonials: Testimonial[] // ── Nuggets (sub-show) ── nuggets: NuggetsShow } export const DEFAULTS: SiteContent = { podcastArtUrl: '/images/podcast-art.jpeg', 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 Resources', 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', studyGuideAppleBooksUrl: '', studyGuideAppleBooksLabel: 'Get it on Apple Books', 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.', shareQrImageUrl: '/images/qr-code.jpg', 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: 'Resources', 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/', platformKofiUrl: 'https://ko-fi.com/versebyversewithnate', platformKofiQrUrl: '/images/kofi-qr.png', 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', welcomeEmailSpotifyBtnLabel: 'Listen on Spotify', welcomeEmailAppleBtnLabel: 'Apple Podcasts', welcomeEmailStartHereLinkLabel: 'Open Start Here page', studyWelcomeEmailSubject: 'Welcome to the Study Community', studyWelcomeEmailBody: 'Your student account is ready. Open your studies and continue learning, or manage your account details anytime.', studyWelcomeEmailCtaLabel: 'Open Studies', studyWelcomeEmailCtaPath: '/study', studyWelcomeEmailSignoff: 'Grace and peace,\nVerse by Verse with Nate', studyDeletedEmailSubject: 'Your study account was deleted', studyDeletedEmailBody: 'This confirms your study account and saved notes were deleted. If this was not you, please contact us immediately.', studyDeletedEmailCtaLabel: 'Create a New Account', studyDeletedEmailCtaPath: '/study/signup', studyDeletedEmailSignoff: 'Verse by Verse with Nate', studyReminderEmailSubjectPrefix: 'New lesson available:', studyReminderEmailBody: 'A new lesson has been unlocked in your study track. Open it below to continue where you left off.', studyReminderEmailCtaLabel: 'Open the Lesson', studyReminderEmailSignoff: 'Grace and peace,\nVerse by Verse with Nate', studyReengagementDays: '7,14,30', studyReengagementT1Subject: 'Your study is waiting for you', studyReengagementT1Body: "It's been a while — your progress is saved and your next lesson is ready whenever you are.", studyReengagementT1Cta: 'Continue Studying', studyReengagementT2Subject: "Don't lose your momentum", studyReengagementT2Body: "Every note and completed lesson is still right there. A little each day adds up — come back and continue.", studyReengagementT2Cta: 'Return to Your Study', studyReengagementT3Subject: 'Your progress is still here', studyReengagementT3Body: "Your study progress is still intact and waiting. There's no deadline — come back whenever you're ready.", studyReengagementT3Cta: 'Open Your Study', studyCertificateEmailSubject: 'Your certificate is ready', studyCertificateEmailBody: 'Congratulations — you have completed every lesson in this study. Your certificate is ready to view and share.', studyCertificateEmailCtaLabel: 'View Certificate', studyCertificateEmailSignoff: 'Grace and peace,\nVerse by Verse with Nate', studyWeeklyDigestEmailSubject: 'Your weekly study digest', studyWeeklyDigestEmailBody: 'Here are the lessons released this week in your study track. Open any to continue where you left off.', studyWeeklyDigestEmailSignoff: 'Grace and peace,\nVerse by Verse with Nate', emailChangeSubject: 'Confirm your new email address', emailChangeBody: 'Click the link below to confirm your new account email. If you did not request this change, ignore this message.', emailChangeCtaLabel: 'Confirm Email Change', emailVerifySubject: 'Verify your email address', emailVerifyBody: 'Please confirm this is your email address so we can keep your study account secure and deliver reminders you opt into.', emailVerifyCtaLabel: 'Verify Email Address', passwordResetSubject: 'Reset your password', passwordResetBody: 'We received a request to reset the password on your study account. Click below to choose a new password. This link expires in 1 hour.', passwordResetCtaLabel: 'Reset Password', passwordChangedSubject: 'Your password was changed', passwordChangedBody: 'This confirms the password on your study account was just changed. All other active sessions have been signed out. If this wasn’t you, please contact us right away.', twoFaOtpEmailSubject: 'Your sign-in code — Verse by Verse with Nate', twoFaOtpEmailBody: 'Your two-factor sign-in code is below. Enter it to complete sign-in.', twoFaOtpEmailExpiry: 'This code expires in 10 minutes. If you did not request this, you can ignore this message.', qaAnsweredEmailSubject: 'Your question has been answered — Verse by Verse with Nate', qaAnsweredEmailBody: 'Nate has answered your question on Verse by Verse with Nate.', qaAnsweredEmailCtaLabel: 'Read Full Answer →', qaAnsweredEmailSignoff: 'Grace and peace,\nNate', headerFollowLabel: 'Follow on Spotify', cookieBannerText: 'We use optional analytics cookies to better understand how people find and engage with this content. By accepting, you allow us to measure how you interact with the site — no personal data is sold or shared.', customLinks: [], customBlocks: [], 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: [], finishedBooks: [], testimonials: [], nuggets: { title: 'Verse By Verse: Nuggets', tagline: '', description: '', podcastArtUrl: '', rssFeedUrl: '', spotifyUrl: '', appleUrl: '', hosts: [], }, 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.', ], }, } // Highlights currently featured plus those archived onto finished books (so their detail pages keep working). export function getAllHighlights(content: Pick): PodcastFeaturedLink[] { return [ ...(content.podcastFeaturedLinks ?? []), ...(content.finishedBooks ?? []).flatMap(book => book.highlights ?? []), ] } export interface StudyGuideLink { // Page id under /downloads/ (primary-guide, second-guide, book-guide--) pageId: string title: string } // The companion guide a study offers, either chosen explicitly in admin or found through the // series / finished book that is linked to the study. export function getStudyGuideLink( content: Pick, study: Pick, ): StudyGuideLink | null { const source = study.guideSource ?? '' if (source === 'none') return null const primary = (): StudyGuideLink | null => content.studyGuideTitle && (content.studyGuideUrl || content.studyGuideDownloadUrl || content.studyGuideAppleBooksUrl) ? { pageId: 'primary-guide', title: content.studyGuideTitle } : null const second = (): StudyGuideLink | null => content.secondSeries?.guide?.title ? { pageId: 'second-guide', title: content.secondSeries.guide.title } : null const book = (id: string): StudyGuideLink | null => { const found = (content.finishedBooks ?? []).find(b => b.id === id) return found?.guide?.title ? { pageId: `book-guide--${found.id}`, title: found.guide.title } : null } if (source === 'primary') return primary() if (source === 'second') return second() if (source.startsWith('book:')) return book(source.slice('book:'.length)) if (content.seriesStudySlug && content.seriesStudySlug === study.slug) return primary() if (content.secondSeries?.studySlug && content.secondSeries.studySlug === study.slug) return second() const linkedBook = (content.finishedBooks ?? []).find(b => b.studySlug === study.slug && b.guide?.title) return linkedBook ? book(linkedBook.id) : null }