Commit Graph

52 Commits

Author SHA1 Message Date
kennethreitz 6a2212d078 Restore validate_data.py script
Accidentally deleted in previous cleanup. Required by test_data_validation.py.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 10:49:47 -05:00
kennethreitz 5cc61774ba Add shallow commentary detection script
- Detects generic templated questions, boilerplate historical
  sections, missing Greek/Hebrew terms, short analysis, and
  templated patterns
- Found 1,911 verses with severe issues (3+ problems)
- All affected books are Pauline epistles
- Export list of problem verses to scripts/shallow_verses.txt

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 10:46:59 -05:00
kennethreitz 9c476e3582 Add shallow commentary detection script
Detects:
- Generic templated questions
- Boilerplate historical sections
- Missing Greek/Hebrew terms
- Short analysis sections
- Templated analysis patterns

Usage:
  python scripts/detect_shallow_commentary.py           # Full scan
  python scripts/detect_shallow_commentary.py --worst   # Only 3+ issues
  python scripts/detect_shallow_commentary.py --book romans

Found 1,911 severe cases (3+ issues) mostly in Romans, 1-2 Corinthians

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 10:45:27 -05:00
kennethreitz 818c702ef0 Clean up scripts 2025-12-09 10:26:20 -05:00
kennethreitz 6a49bce606 Complete Bible commentary - Joshua, Psalms, Zechariah, Amos, John, Malachi, Ezra, Mark, Jonah, SoS, Esther, Jeremiah, 3 John
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 09:29:48 -05:00
kennethreitz ed7e16d11a Clean up temp scripts 2025-12-09 08:25:40 -05:00
kennethreitz 05745fd3d0 Add Luke, Zephaniah, Joel gaps (64 verses) - batch 34 partial
Running total: ~5,200 verses this session

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 08:25:30 -05:00
kennethreitz e4df3148d5 Clean up temporary scripts 2025-12-09 05:12:44 -05:00
kennethreitz 2399f6504d Add Ezekiel, Numbers, Matthew, Judges, Isaiah, Ecclesiastes, Job gaps (~600 verses) - batch 33/100
Running total: ~5,142 verses this session

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 05:12:26 -05:00
kennethreitz 1666fb9996 Add Psalms 38, 78, 81, 94, 118-119, 137, 139, 144 (198 verses) - batch 28/100
Running total: ~3,533 verses

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 03:09:13 -05:00
kennethreitz 190c5d3921 Add John 8, 10, 13-16, Ezra 6-7 Gospel commentary (100 verses) - batch 11/100 2025-12-08 23:13:55 -05:00
kennethreitz dab9706743 Expand featured verses to 365 with daily devotionals
- Add 365 verses organized by monthly themes:
  - January: New Beginnings
  - February: Love
  - March: Growth/Spiritual Disciplines
  - April: Resurrection/Hope
  - May: Guidance
  - June: Faith/Trust
  - July: Freedom
  - August: Provision
  - September: Wisdom
  - October: Spiritual Warfare/Protection
  - November: Gratitude
  - December: Advent/Joy

- Each verse includes devotional with title, theme, opening,
  meditation, application, and prayer

- Update validation schema to include Devotional model with
  proper field validation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 14:17:58 -05:00
kennethreitz 34b7e16bea Fix poetry loader and validation for "all" chapters
- Add pytest-xdist to dev dependencies for parallel test execution
- Handle "all" string value in is_poetry_chapter() for fully poetic books
- Update PoetryBookData model to accept "all" or list of ints
- Expand valid poetry books list to include all Bible books with poetic sections

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 20:25:03 -05:00
kennethreitz c28376e761 Add Pydantic schema for poetry_formatting.json
Validates:
- books dict contains only valid poetry books
- poetry_chapters are sorted and unique
- stanza_breaks have valid chapter keys with sorted verse lists

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:44:47 -05:00
kennethreitz 45881e9852 Remove script for adding commentary to 1 Chronicles 2025-12-04 10:48:18 -05:00
kennethreitz 0800e9de94 Support space-separated verse references (e.g., 'Rev 22 20')
- Update VerseReference.from_string to parse 'Book Chapter Verse' format
- Update is_verse_reference regex to match space format
- Add book name normalization to parse_verse_reference
- Update quick lookup JS to handle space format

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 09:17:52 -05:00
kennethreitz 4b36f9ed77 Add Red Letter Edition page showing words of Christ
- New /red-letter route with filterable, paginated verse list
- Stats showing total verses, full/partial breakdown
- Red letter text rendering with highlighting
- Keyboard navigation support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 09:10:33 -05:00
kennethreitz ccf72259f1 Add links to resource examples in README
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 09:05:41 -05:00
kennethreitz f4c2b70f6e Improve README with comprehensive feature documentation
Streamlined structure, added AI commentary, Strong's Concordance details,
family tree explorer, PDF export, accessibility features, and API docs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 09:03:56 -05:00
kennethreitz c5484934c1 Complete top verses commentary coverage (100%) and add CLI tool
- Add commentary for remaining 63 top verses across 22 books
- Create scripts/commentary_cli.py for managing commentary
- Update .claude/agents/commentary-generator.md with improved instructions
- Remove deprecated one-off scripts and temp files
- Clean up verse_commentary.json (now using per-book files)

Books updated: 1 John, 1 Peter, Daniel, Deuteronomy, Ecclesiastes,
Esther, Ezekiel, Hebrews, Isaiah, Jeremiah, Job, Joshua, Luke,
Malachi, Mark, Micah, Proverbs, Psalms, Ruth, Zechariah, Zephaniah

Total: 12,992 verse commentaries across 66 books

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 11:57:50 -05:00
kennethreitz b21d0cd50b Add commentary for top searched verses (Matthew, John, Psalms)
- Add 52 Matthew verses (Beatitudes, Lord's Prayer, Great Commission, etc.)
- Add 38 John verses (I am statements, Upper Room, High Priestly Prayer)
- Add 19 new Psalms verses (Psalm 1, 23, 27, 34, 37, 46, 91, 103, 119, 127, 133, 139)
- Add scripts/check_top_verses.py to track coverage of top 536 most-searched verses
- Add scripts/migrate_commentary.py to safely merge commentary into per-book files

Coverage improved: 61.8% of top verses now have commentary.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 11:23:50 -05:00
kennethreitz 713a1152b2 Add commentary for 4 highly-searched Bible verses
Added comprehensive commentary for famous verses across Gospels and Epistles:
- 1 John 4:18: Perfect love casteth out fear
- Hebrews 13:5: I will never leave thee nor forsake thee
- Luke 6:31: Golden Rule (do unto others)
- Mark 10:27: With God all things are possible

Each includes Greek word studies, historical context, theological depth,
and 5 reflection questions.

Coverage of top famous Bible verses now at 100% (43/43 verses)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 10:29:57 -05:00
kennethreitz 5759f65356 Add commentary for 6 highly-searched Proverbs verses
Added comprehensive commentary for famous Proverbs passages:
- Proverbs 16:18: Pride goeth before destruction
- Proverbs 18:21: Death and life in power of the tongue
- Proverbs 27:17: Iron sharpeneth iron (friendship)
- Proverbs 31:10: Who can find a virtuous woman
- Proverbs 31:25: Strength and honour are her clothing
- Proverbs 31:30: Woman that feareth the LORD (climax)

Each includes Hebrew word studies, historical context, and reflection questions.
Proverbs coverage: 13 chapters, 27 verses (up from 21 verses)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 10:15:44 -05:00
kennethreitz 60636c372d Add scripts for famous verse commentary generation
Added supporting scripts for generating commentary on highly-searched verses:
- Scripts to add Psalm 110 (Messianic), 95-96, 98 (worship), 145-150 (doxology)
- Script templates for adding missing famous individual verses
- JSON data files with commentary content

Note: These scripts were used to achieve 127/150 Psalms chapters (84.7% coverage)
with all major commonly-searched Psalms now having commentary.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 10:06:00 -05:00
kennethreitz 2b2e1faa7b Add commentary for 10 highly-searched Psalms (117→127 chapters, 84.7%)
Added comprehensive commentary for the most commonly googled Psalms:
- Psalm 110: Most quoted OT passage in NT (Messianic, Melchizedek priesthood)
- Psalms 95, 96, 98: Worship psalms (O come let us sing, new song)
- Psalms 145-150: Final doxology ending with "Let everything that hath breath praise the LORD"

All famous/commonly searched Psalms now have coverage:
✓ Psalm 23 (The Lord is my shepherd)
✓ Psalm 91 (He that dwelleth in the secret place)
✓ Psalm 110 (The LORD said unto my Lord)
✓ Psalms 95-98 (Worship and new song)
✓ Psalms 145-150 (Final doxology)

Coverage: 127/150 chapters (84.7%), only 23 chapters remaining

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:54:51 -05:00
kennethreitz c30525fc01 Fix Psalm 115:13 missing historical field - tests now pass
Added missing historical context for Psalm 115:13 covering:
- Post-exilic context and mockery from pagan nations
- Ancient Near Eastern social stratification
- Biblical theology of "fear of the LORD"

All verse commentary validation tests now passing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 09:47:36 -05:00
kennethreitz de035c57e5 Refactor cross-reference data handling to support directory structure and legacy file fallback 2025-11-30 22:55:45 -05:00
kennethreitz 2d7e9843b0 updates to data storage 2025-11-30 21:26:59 -05:00
kennethreitz 6d44f647fe Add 11 comprehensive study guides covering major topics
Added study guides:
- Foundational Studies: Baptism, Holy Communion
- Character & Living: Discipleship, Evangelism, Suffering & Persecution
- Biblical Themes: Parables of Jesus, Miracles of Jesus
- Doctrinal Studies: End Times & Eschatology, Spiritual Warfare, Spiritual Gifts, The Church

Each guide includes 8 detailed sections with verse references and comprehensive theological content.

Total study guides: 36 (up from 25)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 09:39:52 -05:00
kennethreitz d38ec3044c Add biblical commentary generation agent
- Create Claude Agent SDK agent for generating verse commentary
- Define quality standards matching existing commentary (1 Timothy 2:5)
- Include comprehensive specification document
- Agent generates JSON with analysis, historical context, and questions
- Reformed/evangelical theological perspective with original language analysis

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 12:58:12 -05:00
kennethreitz 4ec825669d Manually fix remaining 33 red letter verses
Fixed all remaining verses with complex narrative structures:
- 27 verses updated with correct spoken words only
- 6 verses removed (not Jesus speaking or too complex):
  • Mark 16:7 (angel speaking)
  • Luke 9:33 (Peter speaking)
  • Luke 13:23 (answer continues in v24)
  • Luke 15:17 (prodigal son speaking)
  • Luke 18:4 (unjust judge in parable)
  • John 21:15 (mixed dialog, too complex)

Examples of fixes:
- Matthew 16:8: "Which when Jesus perceived, he said unto them," → black
  Only "O ye of little faith..." → red
- John 8:10: "When Jesus had lifted up himself, and saw none but the woman, he said unto her," → black
  Only "Woman, where are those thine accusers?..." → red
- John 19:30: "When Jesus therefore had received the vinegar, he said," → black
  Only "It is finished:" → red
- Luke 22:52: Narrative intro → black, "Be ye come out..." → red

Total red letter fixes this session:
- 48 verses fixed automatically
- 33 verses fixed manually
- 81 verses total corrected ✓

Red letter edition is now accurate across all Gospels!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 02:31:05 -05:00
kennethreitz d56a2ea243 Fix red letter edition narrative text issue
Fixed 48 verses where narrative introductions (like "Jesus answered them,")
were incorrectly marked in red. Only Christ's actual spoken words should be red.

Automatically fixed verses including:
- John 8:34: "Jesus answered them," → now in black
- John 8:19, 8:49, 8:54: "Jesus answered," → now in black
- Matthew 11:25, 12:39, 15:3, 15:13, 17:22, 17:26, 21:30, 21:31, 25:12, 26:10
- Mark 12:29, Luke 4:4, John 5:17, 6:70, 7:16, 10:25, 10:32, 10:34, 13:8
- And 29 more verses across Matthew, Mark, Luke, and John

Added script: scripts/fix_red_letter_narrative.py
- Automatically extracts spoken words from narrative text
- Uses regex patterns to identify narrative introductions
- 48 verses fixed, 33 remaining for manual review

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 02:28:11 -05:00
kennethreitz 5d5fecf81a Add comprehensive commentary for top 100 Bible verses
Achieved 100% coverage of the top 100 most-read Bible verses through
parallel agent execution. Added 29+ new high-quality commentary entries.

Changes:
- Added Psalm commentary: 23:4, 18:2, 37:4, 55:22, 34:8, 56:3, 62:5-6,
  91:2, 103:2-3, and others
- Added Gospel commentary: Matthew 5:3-6, 5:16, 6:34, 7:8, 28:20
- Added Hebrews commentary: 12:1-2, 13:8
- Added Proverbs commentary: 4:23, 18:10
- Added Joshua commentary: 1:9, 24:15
- Added other key verses: John 8:32, 16:33, Isaiah 9:6

Each entry includes:
- Deep theological analysis (150-200+ words)
- Hebrew/Greek word studies with transliterations
- Historical and cultural context (100-150+ words)
- 5 thoughtful reflection questions
- Proper HTML formatting for web display

Total verse commentary entries: 12,000+

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 21:31:07 -05:00
kennethreitz 02f7f14a0f Add commentary for 24 high-priority verses via parallel agents
Used 12 parallel agents to systematically add comprehensive commentary for
top Bible verses missing substantive content.

Verses added:

Gospel & Salvation:
- Matthew 19:26 - With God all things are possible
- Luke 1:37 - Nothing shall be impossible with God

Comfort & Trust:
- Isaiah 40:31 - Renew their strength, mount up with wings as eagles
- Isaiah 41:10 - Fear not, for I am with thee
- Psalm 27:1 - The LORD is my light and salvation
- Psalm 37:4 - Delight thyself in the LORD
- Psalm 56:3 - What time I am afraid, I will trust in thee
- Psalm 103:12 - As far as east from west, removed our transgressions
- Psalm 118:24 - This is the day the LORD hath made
- Psalm 119:105 - Thy word is a lamp unto my feet
- Psalm 121:1-2 - I will lift up mine eyes unto the hills
- 1 Peter 5:7 - Casting all your care upon him

Guidance & Obedience:
- Proverbs 16:3 - Commit thy works unto the LORD
- Proverbs 22:6 - Train up a child in the way he should go
- Isaiah 26:3 - Thou wilt keep him in perfect peace
- Isaiah 53:6 - All we like sheep have gone astray

Prayer & Faith:
- Matthew 7:7 - Ask, seek, knock
- 1 Thessalonians 5:16-18 - Rejoice, pray, give thanks

Discipleship & Mission:
- Matthew 5:14 - Ye are the light of the world
- Matthew 22:37 - Greatest commandment (love God)
- Matthew 28:19 - Great Commission
- John 10:10 - I am come that they might have life abundantly
- John 14:27 - My peace I give unto you
- John 15:13 - Greater love hath no man than this

Total verses with commentary: 11,989 (up from 11,965)
Coverage of top 100 verses: 71% (71/100)

Each commentary includes deep theological analysis with original language
studies, historical/cultural context, and 5 reflection questions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 20:35:37 -05:00
kennethreitz 79f5ea890a Fix verse commentary validation and field names
- Update Pydantic model to match nested JSON structure (Book → Chapter → Verse)
- Rename field: historical_context → historical (11,950 entries)
- Remove unused application field
- Update VerseCommentary schema with nested VersesDict and ChaptersDict
- All 18 data validation tests now passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 20:08:03 -05:00
kennethreitz e3159c2713 Add utility script to list verses without commentary
Provides comprehensive statistics and filtering options:
- Shows overall stats: 31,102 verses, 11,917 with commentary (38.3%)
- Filter by book and/or chapter
- Show random verses without commentary
- Breakdown by book showing where commentary is needed

Usage examples:
  python scripts/list_unwritten_commentary.py --stats
  python scripts/list_unwritten_commentary.py --book John --chapter 3
  python scripts/list_unwritten_commentary.py --random 10

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 20:03:32 -05:00
kennethreitz 57f69d111a Remove wisdom literature commentary JSON file containing analyses, historical contexts, applications, and questions for Psalms 1 and 23. 2025-11-28 19:40:21 -05:00
kennethreitz 4f011a49ba Remove Bible PDF generation script
Removed the full Bible PDF generation script as it's no longer needed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:38:09 -05:00
kennethreitz 42999e4504 Add --limit parameter to PDF script and fix compound name linking
PDF Script:
- Added --limit N parameter to process only first N books (for testing)
- Added --output FILE parameter for custom output filename
- Updated help text and examples
- Example: --limit 1 --output genesis.pdf to test with just Genesis

Name Linking:
- Fixed compound names like "Sarai or Sarah" not linking properly
- Now splits names on " or " and creates separate mappings for each variant
- Both "Sarai" and "Sarah" in Bible text will link to same person entry
- Preserves full compound name as well for exact matches

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 19:25:27 -05:00
kennethreitz 549bde35f7 Add WeasyPrint availability check to Bible PDF script
Script now checks if WeasyPrint is available before attempting
to generate PDF and provides helpful installation instructions
if system libraries are missing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 16:41:29 -05:00
kennethreitz 72f1328b70 Convert Bible PDF to offline generation script
Removed the /bible/pdf endpoint (too resource-intensive for live requests)
and created a standalone script for offline PDF generation.

New script: scripts/generate_bible_pdf.py
- Generates complete KJV Bible PDF with all footnotes
- ~1000 pages with cross-references and word studies
- Progress tracking during generation
- Saves to kjv-complete-bible.pdf

Usage:
  uv run python scripts/generate_bible_pdf.py

This is more efficient - generate once, serve as static file if needed,
rather than regenerating on every request.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 16:38:17 -05:00
kennethreitz 0618c71b66 Add thoughtful descriptions to all cross-references
Generated concise 2-5 word descriptions for 120,314 cross-references
explaining the thematic or narrative connection between verse pairs.

Descriptions identify common themes like:
- Theological concepts (salvation, faith, grace, love, etc.)
- Shared references (Jesus, God, Moses, David, etc.)
- Narrative connections (prophecy, covenant, judgment, etc.)

Examples:
- Genesis 1:1 → Revelation 4:11: "Creation"
- John 3:16 → Romans 5:8: "Love"
- Isaiah 7:14 → Matthew 1:23: "Prophecy"

File size: 7.4M → 8.8M (+1.4M for descriptions)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 16:19:16 -05:00
kennethreitz 68864905cb Import Treasury of Scripture Knowledge cross-references
- Add 120,858 cross-references covering 24,900 verses (80% of Bible)
- Source: OpenBible.info TSK dataset
- Filtered to minimum 3 votes for quality
- Top 10 cross-references per verse (by vote count)
- Replaces previous dataset of 257 verses

Coverage increased from 0.8% to 80%

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 16:05:54 -05:00
kennethreitz f46f51b8f4 Fix red letter verses and add validation
- Fix 98 verses with narrative introductions (e.g., 'And he said unto them')
  Only the spoken words of Jesus are now marked, not narrative text
- Add JSON Schema for red_letter_verses.json validation
- Add RedLetterVerses Pydantic model to validate_data.py
- Add test_red_letter_verses_structure test
- Update data directory README with red letter section

Changes ensure accurate red letter edition rendering where only
Jesus' actual words appear in red, not narrative introductions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 15:26:03 -05:00
kennethreitz 0132efbfbc Add red letter statistics script
Created comprehensive statistics script for analyzing the red letter
edition data (words of Jesus Christ).

Features:
- Total verse counts (full vs partial)
- Breakdown by book with percentages
- Testament distribution (Gospels vs Acts/Revelation)
- Longest continuous discourses (e.g., Sermon on the Mount)
- Notable discourse references

Usage: uv run python scripts/red_letter_stats.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 15:11:24 -05:00
kennethreitz 54e3b932d4 Fix verse commentary validator to allow apostrophes and verse ranges
Updated the VerseCommentary validation regex pattern to support:
- Apostrophes in book names (e.g., "Solomon's Song")
- Verse ranges (e.g., "Genesis 1:4-5")

This brings the validator in line with other validators in the codebase
and fixes failing data validation tests.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 14:48:32 -05:00
kennethreitz 801c8b93f0 Add script to show verse commentary coverage
Create utility script to track progress on enhanced verse commentary.
Displays statistics about which verses have enhanced JSON commentary
and provides various reporting options.

Features:
- Summary view showing books and verse counts
- Book-specific detail view
- Complete verse listing
- Detailed statistics including field completeness

Usage examples:
  python scripts/show_commentary_coverage.py              # Summary
  python scripts/show_commentary_coverage.py --book Genesis
  python scripts/show_commentary_coverage.py --list       # All verses
  python scripts/show_commentary_coverage.py --stats      # Detailed stats

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 13:05:21 -05:00
kennethreitz 46268749b1 Add script to generate Open Graph image
Standalone Python script to regenerate og-image.png with consistent Tufte-style branding. Can be run anytime to update the social media preview image.

Usage: python3 scripts/generate-og-image.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 12:26:45 -05:00
kennethreitz 3493c43144 Fix verse sitemap generation - suppress WeasyPrint warnings
The sitemap-verses.xml file was contaminated with WeasyPrint import
warnings, causing "Document is empty" errors in Google Search Console.

Fixes:
- Suppress stdout/stderr during imports to prevent warnings in output
- Add error handling to sitemap-verses endpoint
- Regenerate clean sitemap-verses.xml (6.3MB, 31,102 verses)

The file now starts with proper XML declaration instead of error messages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 19:37:34 -05:00
kennethreitz e931dae83f Implement static verse sitemap for maximum SEO discoverability
Previously, verse URLs (31,102 pages) were excluded from the sitemap
to improve generation speed. This left SEO value on the table - Google
prioritizes URLs in sitemaps for crawling, and verse pages are 3-4
clicks deep, making discovery slow.

Solution: Static sitemap + sitemap index
-----------------------------------------
- Created generate_verse_sitemap.py to generate verse sitemap once
- Generated sitemap-verses.xml (6 MB, 31,102 verse URLs)
- Converted /sitemap.xml to a sitemap index
- Split into sitemap-main.xml (dynamic) and sitemap-verses.xml (static)

Benefits:
---------
- Zero runtime cost for verse sitemap (served as static file)
- Full SEO coverage of all 31k verse pages
- Google gets complete URL list immediately
- Main sitemap stays fast (no verse URL generation)
- CDN can cache verse sitemap indefinitely

Why this works:
---------------
Verse URLs are completely static - Genesis 1:1 will always be at the
same URL. The Bible hasn't changed in 2000+ years, so these URLs
never change. Generate once, commit to repo, infinite caching.

This trades "optimize build speed" for "optimize discoverability."
Build speed is a one-time cost; search rankings compound over time.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 19:22:39 -05:00