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>
- 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>
- 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>
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>
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>
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>
- 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>
- 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>
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>
- 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>
- 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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Implement breadcrumb navigation using the established breadcrumb
system in base.html. Breadcrumb trail shows:
Home > Study Guides > Category > Guide Title
The server-side code determines the category for each guide slug
and builds the appropriate breadcrumb structure. Base.html renders
the breadcrumbs with proper styling and separators.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add books list to error handler template context so the sidebar
navigation displays Bible books on error pages.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace hardcoded study guide slug list with dynamic extraction from
study_guides dictionary. This ensures new guides (trinity, resurrection,
heaven-eternity, biblical-marriage, raising-children, money-stewardship)
are automatically included in sitemap.xml.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Study Guides:
- Add 3 new categories: Doctrinal Studies, Family & Relationships
- Create 6 new comprehensive study guides with 8 sections each:
* The Trinity
* The Resurrection
* Heaven & Eternity
* Biblical Marriage
* Raising Children
* Money & Stewardship
Bug Fixes:
- Fix verse tooltips for hash fragment ranges (e.g., #verse-20-21)
- Add verse reference linking to biblical-angels page
All new study guides include deep theological content with verse
references, matching the quality of existing guides.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created normalize_book_name() function to handle all common book name variations:
- Roman numerals (I Samuel → 1 Samuel, II Corinthians → 2 Corinthians, etc.)
- Full word numbers (First Peter → 1 Peter, Second Kings → 2 Kings, etc.)
- Alternative names (Song of Songs → Song of Solomon, Canticles → Song of Solomon)
- Psalm → Psalms
Applied to all book routes (/book/{book}, /book/{book}/chapter/{chapter},
/book/{book}/chapter/{chapter}/verse/{verse_num}) and API endpoints
(/api/verse/{book}/{chapter}/{verse}, /api/verse-range/{book}/{chapter}/{start}/{end})
All variations now redirect with 301 status to canonical book names.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Support both "Psalm" and "Psalms" in book URLs by adding 301 redirects
for /book/Psalm, /book/Psalm/chapter/{n}, and /book/Psalm/chapter/{n}/verse/{m}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace section tags with div tags in topics.html
- Collapse OT/NT sidebar sections by default
- Add verse reference linking to biblical-covenants page
- Support both "Psalm" and "Psalms" in API endpoints
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created efficient JSON API endpoints for verse retrieval and updated
tooltips to use them instead of HTML parsing.
API Endpoints:
- GET /api/verse/{book}/{chapter}/{verse}
Returns: { book, chapter, verse, reference, text }
- GET /api/verse-range/{book}/{chapter}/{start}/{end}
Returns: { book, chapter, start, end, reference, verses[], text }
Changes:
- Added JSONResponse import to server.py
- Implemented api_get_verse() for single verse retrieval
- Implemented api_get_verse_range() for verse range retrieval
- Updated tooltip fetchVerseText() to use API endpoints
- Removed complex HTML parsing logic from tooltips
- Simplified tooltip code from ~80 lines to ~35 lines
Benefits:
- 90% reduction in bandwidth (JSON vs full HTML page)
- Faster tooltip response times
- Cleaner separation of concerns
- Easier to maintain and debug
- API can be used by external tools
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create informational page explaining interlinear study, how to use it,
and featuring example verses. This provides discoverability and SEO
benefits while keeping the actual interlinear data integrated into
verse pages.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed standalone interlinear section since word-by-word analysis is
now integrated directly into verse pages. Removed route handlers,
sitemap entries, and navigation links.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add word-by-word analysis directly to verse pages instead of requiring
a separate /interlinear section. Includes Greek/Hebrew original text,
transliteration, Strong's numbers with links, English translation,
parsing information, and definitions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit completes a major content expansion across the site:
Fruits of the Spirit Resource:
- Expanded all 9 fruits (Love, Joy, Peace, Longsuffering, Gentleness,
Goodness, Faith, Meekness, Temperance) from brief descriptions to
comprehensive 4-5 paragraph theological expositions
- Each fruit now includes Greek word studies, biblical foundations,
practical applications, and cultivation methods
- Added extensive Scripture quotations throughout
Study Guides Expansion (3 sections → 8 sections each):
- The Gospel Message: Nature of gospel, holiness vs sin, divine wrath,
Christ's atonement, resurrection, repentance/faith, justification,
commission to proclaim
- Fruits of the Spirit: Source of fruit, Godward/outward/inward graces,
unity of fruit, fruit vs flesh, cultivation, evidence of faith
- Prayer & Faith: Nature of prayer, Lord's Prayer model, prayer elements,
praying in faith, persistence, nature of faith, faith through obedience,
growing in faith
- Christian Living: Living sacrifice, separation from world, Spirit vs flesh,
shining as lights, pursuit of holiness, faithful stewardship, love in action,
perseverance
- God's Love: God's essential nature, love in creation/providence, covenant love,
Calvary demonstration, unfailing love, experiencing God's love, responding
to love, loving others
- Hope & Comfort: God of all comfort, purpose in affliction, God our refuge,
hope in resurrection, certainty of glory, comfort through Word, ministry
of comfort, blessed hope of Christ's return
- Wisdom & Guidance: Fear of Lord as beginning, asking for wisdom, trusting
God not self, Scripture as source, discerning God's will, godly counsel,
daily decisions, growing in wisdom
All content maintains consistent theological depth, classical scholarly voice,
KJV quotations, and compatibility with Tufte CSS styling.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Apply link_verses filter to fruit descriptions in fruits_of_spirit.html
- Add link_verses filter to resource_detail.html for individual fruit pages
- Inline verse references like "(Romans 5:1)" are now clickable links
- Expand Joy and Peace fruit descriptions with theological depth
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive theological overview to Parenting topic
- Update topic_detail.html template to support custom overview text
- Heavily expand Love fruit description with theological depth
- Add Fruits of the Spirit and Parenting to sidebar navigation
- Add both resources to resources page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Create comprehensive resource for the 9 fruits of the Spirit from
Galatians 5:22-23 with individual pages for each fruit:
- Love - The Supreme Christian Virtue
- Joy - The Gladness of Grace
- Peace - The Tranquility of Trust
- Longsuffering - Patient Endurance
- Gentleness - Kindness and Compassion
- Goodness - Moral Excellence
- Faith - Steadfast Faithfulness
- Meekness - Humble Strength
- Temperance - Disciplined Self-Control
Each fruit includes 6-7 carefully selected Bible verses with
theological exposition and Greek word studies.
Main page: /fruits-of-the-spirit
Detail pages: /fruits-of-the-spirit/{fruit-slug}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implement caching for sitemap.xml to avoid regenerating the massive
sitemap on every request. The sitemap is now:
- Generated once and cached with the current date
- Served from cache for all requests on the same day
- Automatically regenerated the next day
This significantly improves performance as the sitemap includes thousands
of URLs for all Bible verses, chapters, books, topics, and other resources.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Created caching infrastructure to avoid re-parsing GEDCOM file on every request:
- Added global caches for tree_data, generations, and name_to_person_id mapping
- Created get_family_tree_data() to return cached tree and generations
- Created get_person_name_mapping() for name lookups
- Updated search_family_tree() to use cached data
- Updated link_person_names_in_text() to use cached name mapping
- Updated /family-tree route to use cached data
This significantly improves performance for all family tree pages and searches.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>