App.jsx reduced from ~6,500 to ~3,900 lines by extracting each route into its
own page component (AdminPage, AuthPage, HomePage, ImportPage, ReaderPage,
SettingsPage, SetupPage, StudyPage). State and handlers are shared via
AppContext (React Context API); AppRouter handles routing at module level.
Also adds a network-first service worker (public/sw.js) that caches the last-
fetched Bible chapter data from bible.helloao.org and bolls.life so the app
stays usable when those APIs are temporarily unreachable.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a collapsible Interlinear section beneath the Scripture text
(stacked and split layouts) showing each original-language word with
its BSB gloss, transliteration, parsing, and Strong's number on hover.
Data is generated offline from the Berean Standard Bible translation
tables via scripts/build-interlinear.mjs into per-book JSON files.
Adds public/nt-strongs-gloss.json (100 KB) — the most-common per-word
English gloss for each Strong's number, computed from the macula-greek
SBLGNT dataset. This replaces the fragile kjv_def comma-parsing approach:
grace now shows "grace" not "acceptable", God shows "God" not "X exceeding",
will shows "will" not "desire", etc.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The previous implementation fetched SBLGNT from bible.helloao.org using
the wrong translation ID and an API that returns raw text strings, not
per-word Strong's data — so it always silently returned nothing.
Now uses a bundled NT Strong's concordance (public/nt-strongs-concordance.json,
~908 KB) derived from the Clear-Bible macula-greek SBLGNT dataset. This maps
each verse (book/chapter/verse) to the exact Strong's numbers that appear in it,
making the suggest feature accurate and offline-capable after first load.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>