Wrapped blocking file I/O and CPU-bound operations with
asyncio.to_thread() to prevent blocking the event loop:
- about.py: stats() and cross_references_index() now compute
in thread pool (extensive JSON loading and iteration)
- commentary.py: commentary_index() file I/O in thread pool
- misc.py: OG image fallback read_bytes() in thread pool
These routes perform heavy file I/O (reading 66+ JSON files,
iterating 31k verses) which would block all other requests
if run in the async context directly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pillow image generation is CPU-bound, so run it in thread pool
via asyncio.to_thread() to avoid blocking the event loop.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New og_image.py module generates custom 1200x630 social images
- Images include verse title, subtitle, verse text, and branding
- Caches generated images to disk for performance
- Routes: /og/verse/, /og/chapter/, /og/book/, /og/topic/, /og/story/, /og/guide/
- Updated templates: verse, chapter, book, topic, story, study guide
- Images use Georgia serif font matching site typography
- Cream background (#fffff8) and green accent (#4a7c59)
When shared on social media, pages now show custom preview images
with the actual verse text instead of the generic site image.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add BreadcrumbList JSON-LD schema to verse, chapter, book, topic,
study guide, and story detail pages for rich SERP breadcrumbs
- Add Book schema to book pages with chapter count and authorship
- Add Article schema to topic detail pages
- All key content pages now have proper structured data for search
engines to understand site hierarchy
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added missing mobile media query to make max-width elements
(description, verse text, intro text) expand to 100% on mobile,
preventing the zoomed-out 55% width issue.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The epigraph on the homepage now displays plain verse text without
the link_names filter, keeping the display cleaner.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removed 55% max-width constraints on page-header, breadcrumb, and
chapter-nav so they span the full width of the interlinear-page
container (90%).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added explicit [data-theme="dark"] styles for the word detail popup
which was showing a white background on dark theme.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Complete rewrite of all 104 verses with:
- Greek terms with transliterations throughout
- Special depth for Christ hymn (2:5-11) - kenosis theology
- Direct verse quotes in <strong> tags
- 2-3 paragraph analysis per verse
- Historical context (Roman colony, prison setting)
- Key themes: joy in suffering, pressing toward mark,
citizenship in heaven, contentment in Christ
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Complete rewrite of all 256 verses with:
- Greek terms with transliterations throughout
- Direct verse quotes in <strong> tags
- 2-3 paragraph analysis per verse
- Historical context (painful visit, super-apostles, collection)
- 3 verse-specific reflection questions
- Key themes: comfort in affliction, new covenant glory,
treasure in earthen vessels, reconciliation, grace in giving,
spiritual warfare, thorn in flesh, sufficient grace
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Remove invalid verse entries that exceeded actual Bible verse counts:
- 1 Chronicles 13:15-25 (11 entries) - chapter only has 14 verses
- 1 Chronicles 15:30-52 (23 entries) - chapter only has 29 verses
- Acts 12:28 (1 entry) - chapter only has 25 verses
- Ezra 3:14 (1 entry) - chapter only has 13 verses
This brings commentary from 31,138 to exactly 31,102 verses (100% coverage).
Also includes enhanced Romans commentary with deeper theological analysis,
Greek word studies, and improved reflection questions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- Added Greek terms with transliterations (ēgapēsa, emisēsa, kat' eklogēn prothesis)
- Explained Hebrew idiom of 'love/hate' as preferential choice
- Connected to Malachi 1:2-3 source and context
- Reformed theological perspective on unconditional election
- Historical context from Augustine through Reformation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Covers:
- Luke 13:7-25 (Fig tree, Sabbath healing, kingdom parables)
- Luke 16:12-28 (Stewardship, rich man/Lazarus)
- Luke 17:7-32 (Servants, lepers, Son of Man coming)
- Luke 20:1-37 (Authority, vineyard, taxes, resurrection)
- Luke 21:1-32 (Widow's mite, Olivet discourse)
- Luke 22:21-47 (Betrayal, Gethsemane)
- Malachi 1:1, 3:4-15, 4:1-4 (Tithing, day of LORD)
- Mark 8:1-5 (Feeding of 4000)
Running total: ~2,172 verses
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Covers:
- Luke 23:26-54 (Crucifixion and burial)
- Luke 24:4-51 (Resurrection and Emmaus)
- Luke 12:1-47 (Warnings, Rich Fool, watchfulness)
- Luke 10:1-15 (Seventy sent, woes on cities)
- Luke 6:1-45 (Sabbath, Sermon on Plain)
Running total: ~1,768 verses
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>