Problem: Bible translations are interpretive — every Greek or Hebrew word can be translated multiple ways. Readers who study the original languages want to explore alternative translations and build their own understanding of each word's meaning in context.
Solution: In the interlinear popup, users can click any Greek or Hebrew word to see all possible translations (glosses), then select the one they prefer. Their selections build up a personal "translation" of each verse, shown in a composed bar at the bottom of the popup.
Not included: Free-text input for custom glosses. Users choose from the available options (BSB glosses, Strong's meanings, KJV usage variants). This is selection, not authoring.
When viewing the interlinear popup for a verse, users can click individual word cards to expand them. The expanded view shows alternative translation options. Clicking an option selects it as the user's preferred gloss for that word.
User flow:
Composed translation bar:
Edge cases:
bsb_gloss field — heuristic extraction)sv_gloss for word alignment and meaningsNl for Dutch alternativesWord cards (collapsed):
Word cards (expanded):
Selection indicator:
word-card--selected CSS classComposed translation bar:
Component: InterlinearPopup.svelte — handles word display, expansion, and selection
Gloss sources:
bsb_gloss (primary), kjv_usage parsed alternatives, strongs_greek.meaningsextractShortGloss(definition, verseText), strongs_hebrew.meaningssv_gloss, meaningsNl (JSON array from strongs_greek.meanings_nl)Selection function: selectMeaning(word, gloss) — toggles the selection in local state, updates composed translation, persists to localStorage and optionally server
Composed translation: composeTranslation() in apps/web/src/lib/utils/popup.ts — builds sentence from selected glosses, falls back to BSB for unselected words
Tier: Pro+ (interlinear feature gate)
Files:
apps/web/src/lib/components/bible/InterlinearPopup.svelte — main UI and selection logicapps/web/src/lib/utils/popup.ts — composeTranslation(), buildGreekWordDisplays(), buildHebrewWordDisplays()apps/web/src/lib/utils/text.ts — extractGreekMeanings(), extractHebrewMeanings(), extractGreekGloss()apps/web/src/routes/api/interlinear/[bookId]/[chapter]/[verse]/+server.ts — word data APIapps/web/src/routes/api/interlinear/translations/[strongsNumber]/+server.ts — KJV usage variantsCurrent: DONE Milestone: v3 Priority: High — core of the Personal Translation Builder concept
History:
Dependencies: