Commit Graph

79 Commits

Author SHA1 Message Date
nmemmert 7b350d3683 Fix audio click at end of speech synthesis
Append trailing spaces so the audio session stays open briefly before
closing, preventing the hardware click/pop on webkit/macOS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:12:59 -04:00
nmemmert 01de7281a8 Fix Hebrew word picker showing verbose KJV definition instead of short gloss
Add shortHebrewGloss() helper that strips [idiom]/[phrase] prefixes and
takes the first word before any comma/semicolon/paren, matching the clean
one-word display Greek already had. Full kjv_def is preserved in
shortDefinition; englishGloss and the modal bold label now show one word.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:12:23 -04:00
nmemmert 145b840bf1 Fix Hebrew word lookup not populating English gloss field
The NT Strong's gloss file only contains G#### keys, so Hebrew lookups
always returned an empty englishGloss. Now falls back to short_definition
(kjv_def from the BDBT API) so Hebrew words match Greek behaviour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:05:35 -04:00
nmemmert c30405b42d Enhance Bible reader with interlinear audio, bookmarks, cross-refs, search, and font size
- Add 🔊 Speak buttons on Greek/Hebrew word cards in both the reader interlinear panel and study-side word entries (Web Speech API, he-IL / el-GR)
- Click verse number to expand inline interlinear panel with original script, transliteration, gloss, parsing, and Strong's number
- Verse bookmarking with 5 highlight colors, persisted to localStorage
- 🔗 Cross-Refs toggle fetches open-cross-ref dataset and shows amber reference chips per verse
- 🔍 In-chapter search filters verses live with yellow keyword highlights
- S/M/L/XL font size controls
- 📋 Copy verse button outputs formatted citation (Book Ch:V BSB — text)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 08:01:03 -04:00
nmemmert 405cf7218b Add chapter audio playback to Bible reader, auto-matching selected book/chapter 2026-06-15 08:32:15 -04:00
nmemmert 1733df7879 Fix missing verse text for poetic OT content (Psalms etc.) 2026-06-15 08:27:18 -04:00
nmemmert ce93b42b83 Merge pull request #16 from nmemmert/claude/bible-reader-feature-qn0pz6 2026-06-11 23:41:09 -04:00
Claude b3c266fa66 Add a read-only Bible reader page (BSB)
Adds a "Read Bible" button on the home screen that opens a simple
chapter browser using the existing helloao BSB API, with book/chapter
pickers and prev/next navigation, separate from study projects.

https://claude.ai/code/session_013GXQxSaTF6zeBsSYTeF3fN
2026-06-12 03:38:01 +00:00
nmemmert d1861ec5d9 Fix broken test suite and untrack runtime artifacts
- Bridge jsdom localStorage/sessionStorage over Node 22+'s experimental
  globals that vitest's jsdom environment doesn't override
- Update Greek lookup tests to mock the OpenScriptures Strong's
  dictionary instead of the retired bolls.life path
- Update migrateChunk no-op test for backfilled fields
- Match en-dash verse range labels in chunk creation test
- Untrack .api.log/.api.pid and gitignore them

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:40:44 -04:00
nmemmert c0ceb68faa Avoid side effect in state updater for audio chapter advance
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:28:12 -04:00
nmemmert 9a3ed73d20 Fix BSB audio player not advancing past first chapter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:22:23 -04:00
nmemmert 0f08721b48 Add BSB full-book audio player card to home page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 16:15:28 -04:00
nmemmert 603c3bcbf2 Fix commentary JSON parse error for chapters without coverage 2026-06-11 14:45:47 -04:00
nmemmert bb92095ba4 Add word-by-word Greek/Hebrew interlinear under Scripture panel
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.
2026-06-11 14:29:24 -04:00
nmemmert 6c4658e244 Apply brand kit colors and fonts to DOCX export
Use antique gold accent, rich black text, Cormorant Garamond
headings, and Lora body text. Remove fill backgrounds, keeping
only the gold left-border scripture callout and section divider.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 09:18:05 -04:00
nmemmert c41916b3ce Improve DOCX export styling and include missing fields
- Add background notes, tags, and final script to the export
- Use shaded section labels, accent color, and a callout-style scripture box
- Switch accent color from indigo to teal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 09:14:15 -04:00
nmemmert 6fb3bfbd82 Suggest existing tags when tagging chunks
Shows quick-add chips and a datalist of tags already used elsewhere
in this project or across all projects.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 09:04:30 -04:00
nmemmert 3e84ea37be Add DOCX upload to populate Final Script from a document
Uses mammoth to extract raw text from an uploaded .docx file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 08:59:31 -04:00
nmemmert e59bc25ed0 Add chunk tagging, persisted Split View prefs, sticky tab bar, and Strong's hover badges
- Tag chunks with topics; aggregate into project index and add a Home page tag filter
- Persist studyLayout/activeStudyTab in localStorage
- Make the Split View tab bar sticky while scrolling
- Show a hoverable Strong's number badge with gloss on each word study card

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 08:51:23 -04:00
nmemmert 65039d44a5 Show expandable definitions in word study suggestion list
Lets users preview a word's full Strong's definition before
deciding whether to add it.
2026-06-11 08:37:45 -04:00
nmemmert 5d0cc2934f Add 2-pane split study layout with tabbed reference panels
Scripture stays pinned in a sticky left column while Notes,
Cross-Refs, Word Study, Commentary, and Script become tabs in
the right column. Toggle via "Split View" / "Stacked View".
2026-06-11 08:33:52 -04:00
nmemmert 6f1a311ba9 Add commentary panel and smart cross-reference suggestions with hover preview
Adds a Commentary section (HelloAO commentaries) and a "Suggest from
passage" cross-reference feature using the open-cross-ref dataset, with
hover popups that show the referenced verse text.
2026-06-11 08:27:32 -04:00
nmemmert f95d5670ae Stop tracking SQLite database files
Local DB state shouldn't be versioned; only code, migrations, and schema belong in git.
2026-06-10 11:01:32 -04:00
nmemmert faf9ba9e2e Make episode info, general notes, and final script per-chunk fields
Each chunk is unique, so these fields no longer share a single project-level value.
2026-06-10 10:56:54 -04:00
nmemmert 91b01c3117 Revert restart.sh systemd auto-restart, keep dev setup.sh workflow 2026-06-10 09:35:28 -04:00
nmemmert b40f03846d fix install 2026-06-10 09:29:54 -04:00
nmemmert 33107cf7af install fix 2026-06-10 09:23:36 -04:00
nmemmert 7bfbe826a0 BIG UPGRADE 2026-06-10 09:12:47 -04:00
nmemmert caa781d039 Fix missing verses and add cross-chapter chunk spanning 2026-06-01 15:56:14 -04:00
nmemmert 587eedd192 Add typed and bulk chunk range entry 2026-06-01 15:47:54 -04:00
nmemmert e3b14fb25b Merge branch 'claude/greek-suggest-cross-device-sync' 2026-06-01 15:38:16 -04:00
nmemmert 7eadb8500b Add OT books and separate Greek/Hebrew lookup 2026-06-01 15:38:11 -04:00
nmemmert c378f85d1b Suggestions 2026-06-01 11:33:06 -04:00
nmemmert be62be0aa6 Merge pull request #15 from nmemmert/claude/greek-suggest-cross-device-sync
Fix sync: consistent lastEdited timestamp + persistent error + retry …
2026-05-28 15:00:41 -04:00
nmemmert 81a05bc145 Fix sync: consistent lastEdited timestamp + persistent error + retry button
Three bugs fixed:

1. lastEdited mismatch: saveProjectToStorage stamped Date.now() in
   localStorage but saveRemoteProject sent the React state's stale
   lastEdited — server and localStorage had different timestamps, so
   the "Pull latest" stale detection on a second device never fired.
   Fix: stamp lastEdited once before both calls so they're identical.

2. saveProjectToStorage now returns the stamped object so callers don't
   have to re-compute the timestamp.

3. Sync errors were auto-clearing after 2.5s making failures invisible.
   Now the "⚠ Sync failed" badge stays visible until the next successful
   sync, and a Retry button lets you force a re-push without making an edit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 14:59:29 -04:00
nmemmert 0b4bb46866 Merge pull request #14 from nmemmert/claude/greek-suggest-cross-device-sync
Add English word field to Greek word cards
2026-05-28 13:33:18 -04:00
nmemmert 1a0ade21a5 Add English word field to Greek word cards
- New englishGloss field on every word object (editable input, placeholder "e.g. grace")
- Populated automatically from the macula-greek gloss map on lookup and suggest
- Shows alongside Short definition in the card's second row

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 13:26:45 -04:00
nmemmert 7117f70e4b Merge pull request #13 from nmemmert/claude/greek-suggest-cross-device-sync
Use macula-greek English glosses in suggest modal instead of KJV kjv_def
2026-05-28 13:19:36 -04:00
nmemmert 537ea24eb3 Use macula-greek English glosses in suggest modal instead of KJV kjv_def
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>
2026-05-28 13:12:10 -04:00
nmemmert b6a277e16c Merge pull request #12 from nmemmert/claude/greek-suggest-cross-device-sync
Clean up English word display in suggest modal
2026-05-28 13:05:20 -04:00
nmemmert 64e77fb40e Clean up English word display in suggest modal
Strip Strong's X/+ notation prefixes and take the first meaningful
English word from the comma-separated kjv_def — so G2316 shows
"God" instead of "exceeding", G40 shows "holy" instead of "(most) holy
(one", etc. Falls back to the raw def if all segments are filtered.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 13:04:26 -04:00
nmemmert d5c9761584 Merge pull request #11 from nmemmert/claude/greek-suggest-cross-device-sync
Fix suggest modal: portal to body + English word first
2026-05-28 12:59:43 -04:00
nmemmert 93b58d8346 Fix suggest modal: portal to body + English word first
- Render modal via createPortal(…, document.body) so it's never clipped
  or offset by parent overflow/transform CSS — appears as a true centered
  overlay regardless of page scroll position
- Reorder word rows: English definition leads (bold), then Greek lexeme,
  transliteration, and Strong's number — makes it easy to recognise words
  without reading the Greek

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 12:59:04 -04:00
nmemmert 1ae39118c9 Merge pull request #10 from nmemmert/claude/greek-suggest-cross-device-sync
Replace auto-add with word picker modal for Greek suggest
2026-05-28 12:55:26 -04:00
nmemmert 236ad7fab7 Replace auto-add with word picker modal for Greek suggest
Instead of adding all passage words automatically, the suggest button now
opens a modal listing every Greek word from the verse range as checkboxes.
Content words (nouns, verbs, adjectives) are pre-checked; function words
(articles, prepositions, conjunctions, common pronouns) are pre-unchecked.
Select all / Select none shortcuts included. Words already in the chunk
are excluded from the list entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 12:54:15 -04:00
nmemmert 337006c72d Merge pull request #9 from nmemmert/claude/greek-suggest-cross-device-sync
Fix Greek suggest: use local macula-greek concordance instead of brok…
2026-05-28 12:47:15 -04:00
nmemmert cda93a68eb Fix Greek suggest: use local macula-greek concordance instead of broken API
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>
2026-05-28 12:44:40 -04:00
nmemmert 945ff15a4f Merge pull request #8 from nmemmert/claude/greek-suggest-cross-device-sync
Add passage-aware Greek word suggest and cross-device stale-project sync
2026-05-28 12:27:01 -04:00
nmemmert 53790437b3 Add passage-aware Greek word suggest and cross-device stale-project detection
- NT_BOOK_NUMBER map + suggestGreekWordsForChunk: fetches SBLGNT interlinear
  from bible.helloao.org, extracts Strong's numbers for the exact verse range,
  and auto-populates Greek word rows — fixes wrong/unrelated words from manual entry
- staleLocalProjects detection on startup: compares lastEdited timestamps so the
  app knows when the server has a newer version of a project you already have locally
- pullLatestFromServer + amber banner on home page for one-click sync pull

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 12:24:43 -04:00
nmemmert 8376a01178 fix bug 2026-05-28 08:38:25 -04:00