+
+
Admin Preview
-
Draft preview unavailable
-
Sign into admin and save a draft first.
-
Back to Admin
+
Draft preview unavailable
+
Sign into admin and save a draft first.
+
Back to Admin
)
}
- if (previewView === 'start-here') return
- if (previewView === 'about') return
- if (previewView === 'contact') return
- if (previewView === 'current-series' || previewView === 'episode-highlights') {
- return
+ // Admin sends views like "about:bio" or "podcast:highlights"; match on the section prefix
+ // so every admin section previews the public page it edits.
+ const section = previewView.split(':')[0]
+ const view = previewView
+ if (section === 'start-here') return
+ if (section === 'about') return
+ if (section === 'contact') return
+ if (view === 'podcast:finished-books' || view === 'books') return
+ if (section === 'podcast') return
+ if (section === 'nuggets') return
+ if (view === 'downloads' || view === 'recommended-resources' || view === 'custom-links') return
+ if (view === 'colossians-study') return
} />
+ if (view === 'questions') return
+ if (view === 'newsletter-archive' || view === 'broadcast') return
+ if (view === 'legal') {
+ return
}
return
}
@@ -3896,10 +3902,10 @@ export default function App() {
} />
} />
} />
-
} />
-
} />
-
} />
-
} />
+
} />
+
} />
+
} />
+
} />
} />
} />
} />
@@ -3907,6 +3913,7 @@ export default function App() {
path="/privacy"
element={(
@@ -3916,19 +3923,20 @@ export default function App() {
path="/terms"
element={(
)}
/>
-
} />
+
} />
>
)
}
-function NotFoundPage() {
+function NotFoundPage({ content }: { content: SiteContent }) {
const location = useLocation()
const [showForm, setShowForm] = useState(false)
const [form, setForm] = useState({
@@ -3968,24 +3976,19 @@ function NotFoundPage() {
}
return (
-
-
-
-
404
-
Page Not Found
-
- The path {location.pathname}{' '}
- doesn't exist — it may have moved or been removed.
+
+ 404
+ Page not found
+
+ {location.pathname} doesn’t exist. It may have moved or been removed.
-
-
← Back to Home
-
Browse Episodes
+
+ Episodes Listen to the podcast
+ Bible studies Lessons and quizzes
+ Q&A Questions and answers
+ Resources Downloads and guides
+
← Back to home
{submitStatus !== 'sent' ? (
<>
@@ -4055,8 +4058,7 @@ function NotFoundPage() {
Thanks! Nate will look into it.
)}
-
-
+
)
}
diff --git a/src/studyPages.tsx b/src/studyPages.tsx
index c8e27ff..07daf5f 100644
--- a/src/studyPages.tsx
+++ b/src/studyPages.tsx
@@ -1501,8 +1501,9 @@ export function StudyResetPasswordPage() {
}, [token, newPassword, confirmPassword])
return (
-
-
+
+
+
Free Student Account
Reset Your Password
@@ -1549,6 +1550,7 @@ export function StudyResetPasswordPage() {
Back to Sign In
+
)
}
@@ -1574,18 +1576,15 @@ export function StudyVerifyEmailPage() {
}, [token])
return (
-
-
+
+
+
+ {status === 'ok' &&
✓ }
Free Student Account
-
Verify Your Email
+
{status === 'ok' ? 'Email Verified' : status === 'error' ? 'Verification Problem' : 'Verifying Your Email'}
- {status === 'checking' &&
Verifying…
}
- {status === 'ok' && (
- <>
-
Your email address is verified.
-
Thanks for confirming — you're all set.
- >
- )}
+ {status === 'checking' &&
Checking your link…
}
+ {status === 'ok' &&
Your email address is verified. You’re all set.
}
{status === 'error' &&
{message}
}
@@ -1593,6 +1592,7 @@ export function StudyVerifyEmailPage() {
Back to Studies
+
)
}
@@ -1660,12 +1660,16 @@ export function ColossiansStudyIndexPage({ content }: Props) {
if (!study) {
return (
-
-
-
Study Hub
-
Study not found
-
The study you requested is not available yet.
-
Back to Studies
+
+
+
+
Study Hub
+
Study not found
+
The study you requested is not available yet.
+
+ Back to Studies
+
+
)
@@ -1707,108 +1711,89 @@ export function ColossiansStudyIndexPage({ content }: Props) {
const studyGuide = getStudyGuideLink(content, study)
+ const pct = sections.length > 0 ? Math.round((completedCount / sections.length) * 100) : 0
+
return (
-
-
-
-
Online Bible Class
-
{study.title}
-
{study.description}
-
- {releasedSections.length} of {sections.length} lessons available
- Text + commentary + discussion
- Student notes enabled
- {isSelfPaced && Finished study — go at your own pace }
-
- {allLessonsDone && (
-
🎉 You've completed this study. Your lessons, notes and certificate are yours to keep.
- )}
- {enrolled && !progressLoading && sections.length > 0 && (
-
-
- Your progress
- {completedCount} of {sections.length} lessons completed
-
-
+
+
+
+
+
Online Bible Class
+
{study.title}
+
{study.description}
+
+ {releasedSections.length} of {sections.length} lessons available
+ Commentary + discussion
+ Personal notes
+ {isSelfPaced && Self-paced }
- )}
-
- {enrolled && resumeSection &&
{allLessonsDone ? 'Review Lessons' : hasStarted ? 'Resume Where You Left Off' : 'Start Class'}}
- {!auth.authenticated &&
Sign In to Enroll}
- {auth.authenticated && !enrolled && (
-
- {enrolling ? 'Enrolling...' : 'Enroll in This Study'}
-
- )}
- {studyGuide && (studyGuide.downloadUrl
- ?
📄 Download Study Guide
- :
📄 Get the Study Guide)}
- {allLessonsDone &&
🏅 My Certificate}
- {enrolled &&
My Notes}
- {enrolled && studyStatus !== 'planned' &&
Community}
- {auth.authenticated &&
My Account}
+
+ {enrolled && resumeSection &&
{allLessonsDone ? 'Review lessons' : hasStarted ? 'Resume where you left off' : 'Start class'}}
+ {!auth.authenticated &&
Sign in to enroll}
+ {auth.authenticated && !enrolled && (
+
+ {enrolling ? 'Enrolling…' : 'Enroll in this study'}
+
+ )}
+ {enrolled &&
My notes}
+ {enrolled && studyStatus !== 'planned' &&
Community}
+ {studyGuide && (studyGuide.downloadUrl
+ ?
Study guide
+ :
Study guide)}
+ {allLessonsDone &&
My certificate}
+
+ {enrollMessage &&
{enrollMessage}
}
- {enrollMessage &&
{enrollMessage}
}
+
+ {enrolled && !progressLoading && sections.length > 0 && (
+
+ )}
{auth.checked && auth.authenticated && !enrolled && (
-
-
-
-
-
Enrollment Required
-
Enroll before entering lessons
-
You must enroll in this study before opening lessons or notes.
-
-
- {enrolling ? 'Enrolling...' : `Enroll in ${study.title}`}
-
-
-
-
-
+
+ Enroll to open the lessons.
+ Enrollment is free and lets you save notes and track progress.
+
+ {enrolling ? 'Enrolling…' : `Enroll in ${study.title}`}
+
)}
{sections.length === 0 && (
-
-
-
-
-
Planned
-
Lessons are being prepared
-
Use the admin Studies editor to add section lessons and publish when ready.
-
-
-
+
+ Lessons are being prepared.
+ Check back soon.
)}
{sections.length > 0 && (
-
+
-
-
Course Lessons
-
{study.title}
-
{chaptersWithLessons.map(({ chapter }) => {
const chapterSections = sections.filter(item => item.chapter === chapter)
const chapterDone = chapterSections.filter(item => studyProgress.completedSectionIds.includes(item.id)).length
return (
-
-
- Chapter {chapter}
+
+
+ Chapter {chapter}
{enrolled && !progressLoading
? `${chapterDone} of ${chapterSections.length} completed`
: `${chapterSections.length} ${chapterSections.length === 1 ? 'lesson' : 'lessons'}`}
-
+
{chapterSections.map(section => {
const sectionIdx = sections.indexOf(section)
const lessonNumber = sectionIdx + 1
@@ -1819,34 +1804,30 @@ export function ColossiansStudyIndexPage({ content }: Props) {
const completed = studyProgress.completedSectionIds.includes(section.id)
const lockedByProgress = enrolled && !isSelfPaced && !coming && sectionIdx > 0 && !prevCompleted && !completed
const isDisabled = coming || !enrolled || lockedByProgress
+ const done = completed && enrolled
return (
-
isDisabled && e.preventDefault()}>
-
-
-
Lesson {lessonNumber}
+
isDisabled && e.preventDefault()}
+ >
+
{done ? '✓' : lessonNumber}
+
+
+
{section.title}
{isNew &&
New }
{coming &&
Coming {getReleaseDateDisplay(section)} }
{!coming && !enrolled &&
Enroll to open }
{lockedByProgress &&
Finish the previous lesson first }
- {enrolled && !lockedByProgress && completed && (
-
-
-
-
-
- Completed
-
- )}
-
{section.title}
-
{section.summary}
-
-
-
{section.reference}
-
Focus question
-
{getPrimaryQuestion(section)}
+ {section.reference &&
{section.reference}
}
+ {section.summary &&
{section.summary}
}
+
Focus: {getPrimaryQuestion(section)}
+ {!isDisabled &&
→ }
)
})}
@@ -2208,12 +2189,14 @@ export function ColossiansStudySectionPage({ content }: Props) {
if (!study || !section) {
return (
-
-
+
+
+
Study Hub
Section not found
The section you requested is not available yet.
-
Back to Studies
+
Back to Studies
+
)
@@ -2222,12 +2205,14 @@ export function ColossiansStudySectionPage({ content }: Props) {
if (!sectionIsReleased) {
const releaseDateDisplay = getReleaseDateDisplay(section)
return (
-
-
+
+
+
{study.title}
Lesson Coming Soon
{releaseDateDisplay ? `This lesson will be available on ${releaseDateDisplay}.` : 'This lesson will be available soon.'}
-
Back to Lessons
+
Back to Lessons
+
)
@@ -2235,11 +2220,13 @@ export function ColossiansStudySectionPage({ content }: Props) {
if (!auth.checked) {
return (
-
-
+
+
+
{study.title}
Loading lesson...
+
)
}
@@ -2320,17 +2307,24 @@ export function ColossiansStudySectionPage({ content }: Props) {
-
-
Back to {study.title}
-
Lesson {lessonNumber} of {sections.length}
- {sections.length > 0 && (
-
-
+
{lessonAudioEmbedUrl && (
@@ -2544,6 +2538,31 @@ export function ColossiansStudySectionPage({ content }: Props) {
}
+
+
+ {previousSection ? (
+
+ ← Previous lesson
+ {previousSection.title}
+
+ ) : }
+ {nextSection && isSectionReleased(nextSection) && lessonCompleted ? (
+
+ Next lesson →
+ {nextSection.title}
+
+ ) : nextSection ? (
+
+ Next lesson
+ {!isSectionReleased(nextSection) ? `Available ${getReleaseDateDisplay(nextSection)}` : 'Complete this lesson to continue'}
+
+ ) : (
+
+ Finished
+ Back to all lessons →
+
+ )}
+
@@ -2760,12 +2779,14 @@ export function ColossiansStudyNotesPage({ content }: Props) {
if (!study) {
return (
-
-
+
+
+
Study Hub
Study not found
The study you requested is not available yet.
-
Back to Studies
+
Back to Studies
+
)
@@ -4133,12 +4154,14 @@ export function StudyQuizPage({ content }: Props) {
if (!study || !section) {
return (
-
-
+
+
+
Reflection Questions
Discussion questions not found
The reflection questions you requested are not available.
-
Back to Studies
+
Back to Studies
+
)
@@ -4150,20 +4173,24 @@ export function StudyQuizPage({ content }: Props) {
if (!auth.checked) {
return (
-
- Loading reflection questions...
+
+
+
Loading reflection questions...
+
)
}
if (!auth.authenticated) {
return (
-
-
+
+
+
Reflection Questions
Sign In Required
You need to sign in before you can view and save your discussion answers.
-
Sign In
+
Sign In
+
)
@@ -4171,12 +4198,14 @@ export function StudyQuizPage({ content }: Props) {
if (!isEnrolled) {
return (
-
-
+
+
+
Reflection Questions
Enroll to Access Reflection Questions
Please enroll in {study.title} to open the reflection questions for this lesson.
-
Go to Study
+
Go to Study
+
)
@@ -4312,20 +4341,24 @@ export function StudyDiscussionHubPage({ content }: Props) {
if (!auth.checked) {
return (
-
-
+
+
)
}
if (!auth.authenticated) {
return (
-
-
-
Study Discussion
-
Sign In Required
-
Create a free student account to see and join the conversation with other students.
-
Sign In
+
+
+
+
Study Discussion
+
Sign In Required
+
Create a free student account to see and join the conversation with other students.
+
+ Create Account or Sign In
+
+
)
@@ -4344,22 +4377,16 @@ export function StudyDiscussionHubPage({ content }: Props) {
{openDiscussionStudies.length === 0 ? (
There are no studies open for discussion yet. Check back when the next one starts.
) : (
-
+
{openDiscussionStudies.map(study => {
const enrolled = isEnrolledInStudy(auth, study.slug)
return (
-
-
-
{enrolled ? 'Enrolled' : 'Study track'}
-
{study.title}
-
{study.description || 'Join the discussion for this study track.'}
-
-
-
- {enrolled ? 'Open Discussion' : 'View Discussion'}
-
-
-
+
+
{enrolled ? 'Enrolled' : 'Open to all students'}
+
{study.title}
+
{study.description || 'Join the discussion for this study track.'}
+
{enrolled ? 'Open discussion →' : 'View discussion →'}
+
)
})}
@@ -4389,20 +4416,24 @@ export function StudyCommunityPage({ content }: Props) {
if (!auth.checked) {
return (
-
-
+
+
)
}
if (!auth.authenticated) {
return (
-
-
+
+
+
Study Discussion
Sign In Required
Create a free student account to see and join the conversation.
-
Sign In
+
Sign In
+
)