- Set window theme to dark to match website's dark mode
- Update loading screen and About dialog to use dark colors
- Disable analytics in desktop app via DISABLE_ANALYTICS env var
- Remove About menu item and dialog (was placeholder)
- Clean up unused imports and constants
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Make PIL import conditional in og_image.py for builds without Pillow
- Update OG image routes to fall back to default image when PIL unavailable
- Update Tauri to find and use bundled PyInstaller executable
- Use transparent titlebar for full-width modern appearance
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Features:
- Loading screen with spinner while FastAPI server starts
- Full native macOS menu bar with:
- Navigate menu: Home, Books, Search, Verse of the Day, Random
- Study menu: Study Guides, Topics, Stories, Strong's, Interlinear, Reading Plans
- View menu: Back, Forward, Reload, Fullscreen
- Standard Edit, Window, Help menus
- About dialog with version info and description
- Keyboard shortcuts for common navigation (Cmd+K search, etc.)
- Version updated to 0.1.0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Start FastAPI server before Tauri initializes
- Wait for health check to pass before creating window
- Create window programmatically with External URL
- Try uv first, fall back to python3
- Remove window config from tauri.conf.json (now in code)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace pip with uv pip in Makefile.desktop and bundle script
- Add First-Time Setup section to DESKTOP.md with Rust installation
- Update requirements to mention uv package manager
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduces a complete Tauri v2 project structure for building a native
macOS desktop application. The app runs FastAPI as a sidecar process
on port 31102 (number of KJV verses) and renders the existing web UI
in a native WebKit webview.
Key additions:
- src-tauri/: Complete Tauri configuration and Rust source
- Desktop entry point (kjvstudy_org/desktop.py)
- PyInstaller bundling script for Python sidecar
- Desktop-specific pyproject.toml without WeasyPrint
- App icons for macOS (.icns) and Windows (.ico)
- Makefile.desktop with build targets
- Comprehensive DESKTOP.md documentation
WeasyPrint is intentionally excluded from the desktop build to avoid
native library bundling complexity. PDF buttons are automatically
hidden when WeasyPrint is unavailable (existing graceful degradation).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>