Add Finished Books feature with episode playlists
- New FinishedBook type in content.ts + finishedBooks[] field on SiteContent - RSS parser now extracts itunes:season into each episode object - /finished grid page and /finished/:id playlist page (filters episodes by season) - Episodes nav link replaced with dropdown: Current Series / Finished Books - Finished Books link added to footer - Admin: "End Current Series & Start New Book" wizard on Current Series tab - Admin: Finished Books management tab (add/edit/remove entries) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
a8f6024234
commit
2eb98b66d0
5 files changed
+576
-470
No files matched your search
+11
-31
@@ -47,35 +47,6 @@ export interface WhereToNextCard {
|
||||
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
|
||||
@@ -95,6 +66,14 @@ export interface PodcastFeaturedLink {
|
||||
discussionQuestions?: string[]
|
||||
}
|
||||
|
||||
export interface FinishedBook {
|
||||
id: string
|
||||
title: string
|
||||
description: string
|
||||
imageUrl: string
|
||||
season: number
|
||||
}
|
||||
|
||||
export interface SeoSettings {
|
||||
title: string
|
||||
description: string
|
||||
@@ -260,13 +239,14 @@ export interface SiteContent {
|
||||
// ── Arrays ──
|
||||
customLinks: CustomLink[]
|
||||
customBlocks: CustomBlock[]
|
||||
archivedSeries: ArchivedSeries[]
|
||||
redirects: RedirectRule[]
|
||||
podcastFeaturedLinks: PodcastFeaturedLink[]
|
||||
seo: SeoSettings
|
||||
legal: LegalSettings
|
||||
// ── Episodes page ──
|
||||
episodesSeoIntro: string
|
||||
// ── Finished Books ──
|
||||
finishedBooks: FinishedBook[]
|
||||
}
|
||||
|
||||
export const DEFAULTS: SiteContent = {
|
||||
@@ -445,7 +425,6 @@ export const DEFAULTS: SiteContent = {
|
||||
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: [],
|
||||
archivedSeries: [],
|
||||
redirects: [
|
||||
{
|
||||
id: 'spotify',
|
||||
@@ -467,6 +446,7 @@ export const DEFAULTS: SiteContent = {
|
||||
},
|
||||
],
|
||||
podcastFeaturedLinks: [],
|
||||
finishedBooks: [],
|
||||
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',
|
||||
|
||||
Reference in new issue
Block a user