Commit Graph

175 Commits

Author SHA1 Message Date
kennethreitz 1a4f6150e4 Improve red letter edition to highlight only Christ's spoken words
Updated the red letter functionality to wrap only the specific words
Jesus spoke within each verse, rather than entire verses. This provides
more accurate red letter highlighting similar to traditional red letter Bibles.

Changes:
- Modified red_letter.py to search for and wrap only Christ's words
- Updated JSON structure to store actual quoted text
- Changed filter to handle both full verses and partial quotes
- Improved accuracy of red letter highlighting

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 15:00:41 -05:00
kennethreitz 099dc253e0 Add comprehensive Revelation commentary and red letter edition support
Expanded Revelation commentary from 45 to 335 verses (83% coverage),
providing detailed apocalyptic interpretation, Greek word studies, and
encouragement for persecuted believers. Also added red letter edition
support to highlight words of Christ throughout the Bible.

Revelation commentary additions:
- 290 new verses with comprehensive analysis
- All 22 chapters now have rich commentary coverage
- Apocalyptic imagery and symbolism explained
- First-century persecution context provided
- Multiple interpretive approaches acknowledged
- Christ-centered application for modern believers

Red letter edition features:
- Words of Christ highlighted in red in verse and chapter displays
- Complete database of Jesus' spoken words across all four Gospels
- Dark mode compatible color scheme
- Enhances readability and focus on Christ's teachings

Total verse commentary database now contains 14,827 verses across
all 66 books of the Bible with theological depth, practical application,
and reflection questions.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 14:58:19 -05:00
kennethreitz b7b584d9ea Remove orphaned commentary routes and sitemap entries
Converted orphaned commentary pages to 301 redirects:
- /book/{book}/commentary → /book/{book}
- /commentary/{book}/{chapter} → /book/{book}/chapter/{chapter}

Removed commentary URLs from sitemap since content is now integrated into regular verse pages. Commentary data and functions preserved as they're actively used on verse pages.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 12:40:39 -05:00
kennethreitz 723b90f521 Simplify bot logging to just show bot name
Changed from "[BOT] googlebot - GET /path" to just "[BOT] googlebot"
for cleaner, more concise logs.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 01:43:32 -05:00
kennethreitz 711b3558a8 Add smart bot detection logging
Only logs requests from known bots/crawlers (Googlebot, PerplexityBot,
AmazonBot, etc.) while staying silent for regular user traffic. Helps
track SEO crawler activity without cluttering logs.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 01:37:30 -05:00
kennethreitz 83462bb4a4 Remove User-Agent logging middleware
User-Agent logging served its diagnostic purpose. Removing to
reduce log noise and improve performance.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 01:19:08 -05:00
kennethreitz 0aa5de0a85 Add User-Agent logging middleware
Adds middleware to log the User-Agent header for each incoming request
to help understand what clients are accessing the site (browsers, bots,
search engines, etc.).

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 01:05:07 -05:00
kennethreitz 05eac75841 Move biblical timeline to JSON and add comprehensive chronology
- Create biblical_timeline.json with 10 comprehensive periods
- Update server.py to load timeline from JSON file
- Add introduction and conclusion sections to timeline
- Enhance chronology notes with detailed methodology explanation
- Include chronology comparison table (Masoretic, Ussher, Scofield)
- Update biblical_timeline.html to display introduction and conclusion
- All 252 tests passing

Timeline now covers:
- Primeval History (Creation – c. 2100 BC)
- Patriarchal Period (c. 2100 – 1800 BC)
- Egypt and Exodus (c. 1800 – 1400 BC)
- Conquest and Judges (c. 1406 – 1050 BC)
- United Kingdom (c. 1050 – 930 BC)
- Divided Kingdom (c. 930 – 586 BC)
- Exile and Return (586 – 400 BC)
- Intertestamental Period (c. 400 – 5 BC)
- Life of Christ (c. 5 BC – AD 30)
- Apostolic Age (AD 30 – c. 100)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 14:42:17 -05:00
kennethreitz 7522b27e7c Implement Phase 2 performance optimizations
1. Replace regex markdown with mistune library
   - Add mistune>=3.0.2 dependency
   - Replace custom regex patterns with proper markdown parser
   - Better performance and more robust parsing
   - Supports full markdown syntax (bold, italic, strikethrough, etc.)

2. Cache story counts
   - Cache get_story_count() and get_category_count()
   - Expected: 10-20x faster story index page loads
   - Added cache invalidation to refresh_stories()

3. Fix O(n) pattern in helpers.py
   - Replace manual chapter filtering with bible.get_chapters_for_book()
   - Uses existing @lru_cache for instant lookups

Combined expected improvement: 10-20% on story pages, faster markdown

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 12:06:13 -05:00
kennethreitz 6c4c23a83e Implement major performance optimizations (Phase 1)
Optimization #2: Replace O(n) verse filtering with cached methods
- Replace manual filtering loops with bible.get_verses_by_book_chapter()
- Replace chapter filtering with bible.get_chapters_for_book()
- 13 replacements in server.py
- Expected: 80-95% faster book/chapter pages after first access

Optimization #3: Build slug index for O(1) resource lookups
- Create pre-built slug indexes for all 38 resource dictionaries
- Replace O(n) linear search with O(1) hash lookup
- Add find_resource_by_slug() function to data module
- Expected: 95% faster resource page lookups

Combined expected improvement: 50-80% overall performance gain

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 12:00:13 -05:00
kennethreitz 2c2726ff01 Optimize books loading by using cached get_books() method
Replace all 26 calls to list(bible.iter_books()) with bible.get_books()
which uses @lru_cache to avoid iterating through 31,102 verses on
every page request.

Expected improvement: 50-70% faster page loads

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 11:56:18 -05:00
kennethreitz 9ec7885dce Make PDF generation async to prevent event loop blocking
Convert all PDF generation endpoints from synchronous to async to
prevent blocking FastAPI's event loop during CPU-intensive operations.

Changes:
- Add render_html_to_pdf_async() using ThreadPoolExecutor (2 workers)
- Convert all PDF endpoints to async def
- Use await render_html_to_pdf_async() instead of blocking calls
- Keep render_html_to_pdf() for backward compatibility

Performance impact:
- Prevents event loop blocking during PDF generation
- Allows other requests to be processed while PDFs are rendering
- Limits concurrent PDF generation to 2 workers to control CPU usage

Files updated:
- kjvstudy_org/utils/pdf.py (new async implementation)
- kjvstudy_org/server.py (5 PDF endpoints)
- kjvstudy_org/routes/api.py (4 PDF endpoints)
- kjvstudy_org/routes/resources.py (7 PDF endpoints)
- kjvstudy_org/routes/stories.py (2 PDF endpoints)
- kjvstudy_org/routes/study_guides.py (1 PDF endpoint)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 11:44:35 -05:00
kennethreitz 24c11f5f3a Optimize search performance with FTS5 index
Add SQLite FTS5 search index initialization to dramatically improve
search performance from ~2.8s to <100ms.

Changes:
- Build search index at Docker image build time
- Initialize search index on app startup as fallback
- Index enables fast full-text search across all 31,102 verses

Performance impact:
- Before: ~2.8s (O(n) iteration through all verses)
- After: <100ms (FTS5 indexed search)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 11:20:15 -05:00
kennethreitz 64b63a5b8d Add systematic theology resources and update server routes
- Introduced new routes for systematic theology topics including Bibliology, Theology Proper, Anthropology, Hamartiology, Providence, Grace, Justification, Sanctification, Law and Gospel, and Worship.
- Each topic includes HTML and PDF endpoints for resource index and detail pages.
- Updated the resources page to include descriptions and counts for the new theology topics.
2025-11-26 21:08:50 -05:00
kennethreitz bda0c8291e Remove parenting resource card 2025-11-26 19:46:07 -05:00
kennethreitz c09019adee Add book introduction content to PDF exports
Include all book page sections (introduction, outline, themes,
key verses, historical context, literary style, theological
significance, Christ in book, NT relationship, and practical
application) at the beginning of book PDF exports before the
chapter text.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 16:08:28 -05:00
kennethreitz 08a7b8dc36 Add inline markdown filter for Key Themes descriptions
Create new 'mdi' filter for inline markdown (bold/italic only)
without paragraph wrapping. Apply to Key Themes descriptions
to properly render markdown formatting within list items.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 16:04:03 -05:00
kennethreitz cbaa498dba Add italic text support to markdown filter
Update markdown filter to convert *italic* to <em>italic</em>
in addition to existing **bold** support. Processes bold first
to avoid conflicts with italic markers.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 16:02:39 -05:00
kennethreitz 8402e3d948 Fix markdown filter to always wrap content in p tags
Previously single-paragraph content was returned unwrapped,
causing missing paragraph styling on sections like "Christ in Acts".

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 15:12:19 -05:00
kennethreitz cd2f83d9c1 Expand Pentateuch book introductions with rich theological content
- Genesis, Exodus, Leviticus, Numbers, Deuteronomy fully expanded
- Each book now includes: multi-paragraph introductions, key themes with
  descriptions, key verses with significance, detailed outlines, historical
  context, literary style, theological significance, Christ in book,
  relationship to NT, and practical application
- Update book.html template to handle new data structure
- Add markdown filter for bold text conversion
- Template now supports both old and new data formats

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:41:35 -05:00
kennethreitz cf212062f7 Add individual book introduction JSON files for all 66 books
- Create books.py loader module with caching for book data
- Add JSON files for each book with introduction, themes, key verses,
  outline, historical context, literary style, Christ in book, and
  practical application sections
- Update API routes to include book metadata and introduction data
- Update book.html template to display rich book content
- Template falls back to commentary data when book_intro unavailable

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:26:11 -05:00
kennethreitz 20190dc549 Add biblical timeline PDF download 2025-11-26 01:50:15 -05:00
kennethreitz 776e39370e Add global resource and reading plan PDF exports 2025-11-26 01:38:55 -05:00
kennethreitz 1156fb68e1 silly 2025-11-26 01:16:45 -05:00
kennethreitz 23ce33e3b0 Add Bible Stories feature with adult and kids versions
- Add stories.py loader for JSON story files
- Add routes for /stories, /stories/{slug}, /stories/{slug}/kids
- Add templates: stories_index, story_detail, story_kids
- Include 32 stories across 4 categories (creation, patriarchs, exodus, conquest/judges)
- Add Bible Stories to homepage feature grid and explore links

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:53:03 -05:00
kennethreitz a41e2d2d9e Update biblical timeline dates to revised chronology
Patriarchs: Abraham 2068 BC, Isaac 2067 BC, Jacob 2007 BC, Joseph 1877 BC
Exodus: Bondage 1887-1447 BC, Exodus 1447 BC, Sinai 1447 BC
Conquest: Canaan 1407 BC, Judges 1367-1047 BC
Kingdom: Saul 1047 BC, David 1010 BC, Temple 967 BC, Division 931 BC

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:43:17 -05:00
kennethreitz d6e190ddce Add format_lists filter for numbered lists in study guides
Converts (1), (2), etc. patterns into proper HTML <ol> lists.
Text after the list is wrapped in a new <p> tag.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:36:17 -05:00
kennethreitz 65601d8b7f Add 11 systematic theology resources and simplify sidebar
New theological resources:
- The Trinity, Christology, Pneumatology, Soteriology
- Ecclesiology, Eschatology, Kingdom of God
- Types and Shadows, Messianic Prophecies
- The Blood in Scripture, Names and Titles of Christ

Updates:
- Add new resources to homepage Theological Studies grid
- Add Systematic Theology category to /resources page
- Simplify sidebar with single "All Resources" link
- Export new data variables from data/__init__.py

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:16:35 -05:00
kennethreitz d621301b78 Consolidate resource pages into single generic template
- Created resource_index.html as a unified template for all resource pages
- Updated routes to use the generic template with configurable data
- Added link_verses and link_names filters to descriptions for automatic linking
- Added 6 new resources to /resources page (Miracles, I Am Statements,
  Beatitudes, Ten Commandments, Armor of God, Prayers)
- Deleted 6 redundant individual templates (miracles.html, prayers.html,
  beatitudes.html, ten_commandments.html, armor_of_god.html, i_am_statements.html)

This reduces code duplication and ensures consistent verse linking across
all resource pages.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 19:28:30 -05:00
kennethreitz 61be013906 Fix all deprecation warnings
- Change `example=` to `examples=[]` in FastAPI Path/Query params
- Replace `on_event("startup")` with lifespan context manager
- Update TemplateResponse to use new signature (request, name, context)

All 100 tests pass with no warnings.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:50:20 -05:00
kennethreitz bcae0d8832 Restore inject_word_markers filter for word studies
Re-add the filter function that was accidentally removed during
refactoring. This filter injects sidenote markers into verse text
for word study annotations.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:39:19 -05:00
kennethreitz 27cc988d1e Extract utility routes to routes/utility.py
- Create new utility module (~340 lines) containing:
  - sitemap.xml generation with daily caching
  - robots.txt for search engine crawlers
  - health check endpoint

- Update routes/__init__.py with new exports

- Reduce server.py from 2,394 to 2,045 lines

All 100 tests passing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:02:19 -05:00
kennethreitz b48f3f09f9 Extract commentary system to routes/commentary.py
- Create new commentary module (4,130 lines) containing:
  - Commentary route handler
  - All commentary generation functions
  - Book introduction and historical context generators
  - Literary features, themes, and theological significance
  - Word study sidenotes and verse analysis

- Update routes/__init__.py with new exports

- Reduce server.py from 7,100+ to 2,394 lines (-66% reduction)

All 100 tests passing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:54:21 -05:00
kennethreitz ba92dd674e Extract study guides routes to separate module
- Create routes/study_guides.py (943 lines) with:
  - Study guides index page
  - Individual study guide detail pages
  - All theological content for 15 study guides

- Reduce server.py from 7,969 to 7,081 lines (~888 lines removed)
- All 100 tests pass

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:31:51 -05:00
kennethreitz 63c826db98 Extract family tree routes to separate module
- Create routes/family_tree.py (793 lines) with:
  - All family tree routes (main, generation, person, search, lineage, etc.)
  - GEDCOM parsing functions
  - Kekulé numbering for ancestral calculations
  - SVG lineage visualization

- Reduce server.py from 8,437 to 7,969 lines (~468 lines removed)
- All 100 tests pass

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:25:14 -05:00
kennethreitz b974c1ff7f Extract biblical resources routes to separate module
- Create data/ package with centralized resource data (1,287 lines)
  - BIBLICAL_LOCATIONS, ANGELS_DATA, PROPHETS_DATA, NAMES_DATA
  - PARABLES_DATA, COVENANTS_DATA, APOSTLES_DATA, WOMEN_DATA
  - FESTIVALS_DATA, FRUITS_DATA

- Create routes/resources.py with thin route handlers (562 lines)
  - Maps, angels, prophets, names of God, parables
  - Covenants, apostles, women, festivals, fruits of spirit
  - Tetragrammaton special page

- Reduce server.py from 11,518 to 8,437 lines (~3,081 lines removed)
- Eliminate data duplication between list and detail routes
- All 100 tests pass

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:17:27 -05:00
kennethreitz e010401f96 Remove duplicate helper functions from server.py
- Remove 650+ lines of duplicate functions now imported from utils:
  - create_slug, normalize_book_name, get_related_content
  - get_chapter_popularity_score, get_chapter_popularity_explanation
  - is_verse_reference, parse_verse_reference, perform_full_text_search
  - calculate_relevance_score, highlight_search_terms, get_verse_text

- Rename local parse_verse_reference to verse_reference_to_url
  (different function - converts references to URL paths for templates)

- server.py reduced by ~650 lines, all 100 tests still pass

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 19:03:45 -05:00
kennethreitz 83df2a37ed Refactor: Split server.py into modular packages
- Create kjvstudy_org/utils/ package:
  - books.py: Book name normalization, abbreviations, testament categorization
  - helpers.py: Utility functions (create_slug, get_verse_text, etc.)
  - search.py: Full-text search with FTS5 support
  - search_index.py: SQLite FTS5 search index implementation

- Create kjvstudy_org/routes/ package:
  - api.py: All /api/* endpoints as FastAPI router

- Update server.py:
  - Import from new modular packages
  - Include API router via app.include_router()
  - Remove duplicate API routes

- Fix test_edge_cases.py to accept 404 for reversed verse ranges

All 100 tests pass.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 18:59:35 -05:00
kennethreitz 0c61cb5e46 Add color-coded book categories to books page
Categorize all 66 books by type with subtle color-coding:
- Law (blue): Genesis-Deuteronomy
- Historical (green): Joshua-Esther
- Wisdom (purple): Job-Song of Solomon
- Major Prophets (orange): Isaiah-Daniel
- Minor Prophets (red): Hosea-Malachi
- Gospels (gold): Matthew-John
- Acts (teal): Acts
- Pauline Epistles (indigo): Romans-Philemon
- General Epistles (pink): Hebrews-Jude
- Apocalyptic (crimson): Revelation

Colors use subtle gradients and work well in both light/dark modes.
Legend at bottom shows all categories.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 13:35:54 -05:00
kennethreitz fae302ec37 Add /api/health endpoint to API documentation
Added /api/health endpoint for monitoring and status verification.
Returns service status, name, and version information.
Now visible in Swagger docs at /api/docs.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:48:38 -05:00
kennethreitz 6716a9daff Add API endpoints for complete book and Bible text
New endpoints:
- /api/books/{book}/text - Get all text content of a book
- /api/bible - Get the entire Bible text (all 66 books, 31,102 verses)

Both endpoints return structured JSON with verses organized by chapters.
Updated API index to include all available endpoints.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:47:35 -05:00
kennethreitz 972025b597 Add default examples to all API endpoint parameters
Prepopulate Swagger UI input boxes with reasonable defaults:
- /api/search: q="faith", limit=10
- /api/verse: John 3:16
- /api/verse-range: Psalms 23:1-6
- /api/interlinear: John 1:1
- /api/books/{book}: Genesis
- /api/books/{book}/chapters/{chapter}: Romans 8
- /api/cross-references: John 3:16
- /api/topics/{topic_name}: faith
- /api/reading-plans/{plan_id}: chronological

Also fixed Path import conflict by aliasing pathlib.Path as PathLib.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:39:54 -05:00
kennethreitz 6248fcca81 Fix reading-plans API endpoint
Fixed TypeError where get_plan_summary() was incorrectly called with
an argument. The function takes no arguments and returns all plans,
so simplified the endpoint to use it directly.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:36:36 -05:00
kennethreitz f0bb199be5 Add comprehensive API endpoints for site content
Expose all major site content through RESTful API endpoints:
- /api/books - List all Bible books with testament categorization
- /api/books/{book} - Get book details and chapter counts
- /api/books/{book}/chapters/{chapter} - Get all verses in a chapter
- /api/cross-references/{book}/{chapter}/{verse} - Get cross-references
- /api/topics - List all topical index entries
- /api/topics/{topic_name} - Get complete topic data with subtopics
- /api/reading-plans - List all reading plans
- /api/reading-plans/{plan_id} - Get reading plan details

All endpoints support book name normalization and return structured JSON.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:33:12 -05:00
kennethreitz f8b2e495cc Add interlinear API endpoint
Add /api/interlinear/{book}/{chapter}/{verse} endpoint to fetch
word-by-word interlinear data including:
- Original Hebrew/Greek text
- Transliteration
- Strong's concordance numbers
- Parsing information
- English translations
- Definitions

The endpoint returns interlinear_available flag and gracefully
handles verses without interlinear data by returning an empty
words array.

Updated API index to include the new interlinear endpoint.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:29:48 -05:00
kennethreitz f27316ad6b Fix OpenAPI schema generation and add API index
Fix the custom OpenAPI function to use FastAPI's get_openapi
utility instead of calling app.openapi() recursively, which
was causing internal server errors.

Add an API index endpoint at /api/ that provides:
- API name, version, and description
- Links to documentation (Swagger UI, ReDoc, OpenAPI JSON)
- List of available endpoints with URL patterns

This resolves the 404 on /api/ and the OpenAPI schema errors.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:28:14 -05:00
kennethreitz f3bd35b832 Filter API docs to only show /api endpoints
Add custom OpenAPI schema generation to filter documentation
to only include routes starting with /api/. This keeps the
API docs clean and focused on the actual API endpoints without
cluttering them with web page routes.

The /api/docs will now only show:
- /api/search
- /api/verse-of-the-day
- /api/verse/{book}/{chapter}/{verse}
- /api/verse-range/{book}/{chapter}/{start}/{end}

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:26:10 -05:00
kennethreitz 298bf16f54 Configure API documentation at /api/docs
Move FastAPI automatic documentation to /api/* endpoints:
- /api/docs - Swagger UI (interactive API documentation)
- /api/redoc - ReDoc (alternative documentation format)
- /api/openapi.json - OpenAPI schema

Updated API title and description to better reflect the
RESTful API nature of the endpoints.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:24:37 -05:00
kennethreitz 0dc7c94cdc Add comprehensive book abbreviation support
Add extensive abbreviation mappings to normalize_book_name function
to handle common Bible book abbreviations. URLs like /book/Gen/...
will now automatically redirect to /book/Genesis/...

Supports all standard abbreviations including:
- Gen, Ge for Genesis
- Ex, Exo for Exodus
- Mt, Mat for Matthew
- And many more...

This improves URL flexibility and user experience when typing
abbreviated book names directly in the address bar.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 12:23:09 -05:00
kennethreitz 8dd3a04bf8 Simplify study guide breadcrumbs
Remove category level from breadcrumbs for cleaner navigation.
Breadcrumb trail now shows: Home > Study Guides > Guide Title

This is simpler and more direct, as the category is already
visible on the study guides listing page.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 11:34:00 -05:00