Hold episode highlights until the episode is in the Spotify feed; auto-fill study lesson audio from the feed by season + episode; v2.19.0
Publish Container / build (push) Successful in 16m16s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 5.5 committed 2026-10-12 11:47:22 -04:00
1 parent 69d445013a
commit 77bce2ae0c
11 files changed
+127 -17

No files matched your search

+19 -1
View File
@@ -2762,6 +2762,7 @@ const [dashboardNow, setDashboardNow] = useState(() => new Date())
{
id: Date.now().toString(36),
lane: 'primary' as const,
holdUntilReleased: true,
title: '',
episodeNumber: '',
summary: '',
@@ -2778,7 +2779,7 @@ const [dashboardNow, setDashboardNow] = useState(() => new Date())
}))
}
function updatePodcastLink(id: string, field: keyof PodcastFeaturedLink, value: string) {
function updatePodcastLink(id: string, field: keyof PodcastFeaturedLink, value: string | boolean) {
setForm(f => ({
...f,
podcastFeaturedLinks: (f.podcastFeaturedLinks ?? []).map(link => link.id === id ? { ...link, [field]: value } : link),
@@ -5151,6 +5152,22 @@ const [dashboardNow, setDashboardNow] = useState(() => new Date())
</select>
<p className="admin-field-help">Groups this highlight under its series on the Episodes page. When a series ends, its highlights move onto that book&apos;s Finished Books page. General highlights stay.</p>
</div>
{activeHighlight.lane !== 'general' && (
<div className="admin-field">
<label htmlFor={`podcast-hold-${activeHighlight.id}`}>
<input
id={`podcast-hold-${activeHighlight.id}`}
type="checkbox"
checked={activeHighlight.holdUntilReleased === true}
onChange={e => updatePodcastLink(activeHighlight.id, 'holdUntilReleased', e.target.checked)}
/>{' '}
Publish when the episode is released on Spotify
</label>
<p className="admin-field-help">
Hidden on the site until this lane&apos;s season number and the episode number below appear in your Spotify feed (checked every few minutes). Needs an episode number. Set each lane&apos;s season number on the Episode Workflow page.
</p>
</div>
)}
<div className="admin-field">
<label htmlFor={`podcast-ep-${activeHighlight.id}`}>Episode Number</label>
<input id={`podcast-ep-${activeHighlight.id}`} type="text" placeholder="e.g. 42" value={activeHighlight.episodeNumber ?? ''} onChange={e => updatePodcastLink(activeHighlight.id, 'episodeNumber', e.target.value)} />
@@ -6185,6 +6202,7 @@ const [dashboardNow, setDashboardNow] = useState(() => new Date())
<option value={activeLesson.audioEmbedUrl}>{activeLesson.audioEmbedUrl}</option>
)}
</select>
<p className="admin-field-help">Leave this as &quot;No audio&quot; to fill it in automatically: once this lane&apos;s season number and the Episode # below appear in your Spotify feed, the lesson uses that episode&apos;s audio.</p>
</div>
<div className="admin-field">
<label htmlFor={`sl-released-${activeLesson.id}`}>Release Date (optional)</label>
+3
View File
@@ -71,6 +71,9 @@ export interface PodcastFeaturedLink {
// 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