Problem: Readers often want to explore what Jesus taught about specific topics — prayer, forgiveness, money, faith. But these teachings are scattered across the four Gospels and hard to collect manually.
Solution: A theme browser that groups Bible verses by topic, with a special "Jesus' Teaching" section that filters to Gospel verses only (Matthew–John). Users can browse 13 themes and see all relevant verses organized by book.
Not included: Bible-wide themes spanning the entire Old and New Testament (that's a separate, partially-implemented feature). This focuses on what Jesus specifically taught.
A two-section theme browser: "Themes from Jesus' Teaching" (Gospel-filtered) and "Themes from the Whole Bible" (all books).
User flow:
/themes/themes/1?section=jesus13 Jesus themes: Prayer, Money & Possessions, The Kingdom of God, Love & Compassion, Hypocrisy & Religious Leaders, Faith & Doubt, Forgiveness, Outcasts & Sinners, Conflict & Opposition, Death & Resurrection, Children, The Law & Fulfillment, Sexuality
Edge cases:
?section=jesus filters to bookId 40-43 (Gospels only)List page:
Detail page:
var(--color-jesus-words))/read/[bookId]/[chapter]Data:
themes (id, name), verse_themes (theme_id, book_id, chapter, verse)verse_themes references verses by coordinates, not verse.idQueries (apps/web/src/lib/server/queries/themes.ts):
getThemesWithSections() — SQL with MAX(CASE WHEN book_id BETWEEN 40 AND 43 ...) to compute has_gospel and has_non_gospel flags per themegetThemeVerses(id) — joins verse_themes → verses, returns grouped by bookRoutes:
/themes — +page.server.ts calls getThemesWithSections()/themes/[id] — +page.server.ts calls getThemeVerses(id)?section=jesusi18n: getThemeName(englishName, lang) for Dutch theme names
Files:
apps/web/src/routes/(app)/themes/+page.svelte + +page.server.ts — listapps/web/src/routes/(app)/themes/[id]/+page.svelte + +page.server.ts — detailapps/web/src/lib/server/queries/themes.ts — queriesCurrent: DONE Milestone: v3 Priority: High — unique topical study feature
History:
verse_themes tableDependencies: