Use correct package names for Debian Trixie:
- libpango-1.0-0 instead of libpango1.0-0
- Add libharfbuzz0b and libpangoft2-1.0-0
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add WeasyPrint dependency and system libs to Docker image
- Create PDF templates for adult and kids stories
- Add /stories/{slug}/pdf and /stories/{slug}/kids/pdf routes
- Add Download PDF button to story pages
- Add stories API endpoints: /api/stories and /api/stories/{slug}
- Gracefully handle missing WeasyPrint system libraries
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add newthought styling for first paragraph (small caps leading words)
- Add * * * divider between header/meta and narrative
- Add print styles for cleaner PDF output
- Applies to both adult and kids story templates
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Playful colorful design matching individual kids story pages
- TOC grid with category links
- Search functionality
- Card-based grid with character badges and theme badges
- Links between adult and kids story indexes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Update story templates to link to chapter pages with #verse-X-Y anchors
instead of individual verse pages. This properly scrolls to and highlights
verse ranges like Judges 16:23-31.
Also adds more story JSON files (prophets, Jesus birth, parables, passion, acts).
🤖 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>
- Add table of contents navigation to study guide detail pages
- New study guide covering biblical teaching on demons and spiritual warfare:
- The Reality of Evil Spirits
- Satan: The Adversary
- Demon Possession in the Gospels (Legion, etc.)
- Christ's Victory Over Demons
- Spiritual Warfare
- Testing the Spirits
- Demons' Final Doom
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The bible module was only imported inside get_books() but was
referenced in study_guide_detail() for verse lookups, causing
all verse texts to fail silently.
Also excludes .venv from Docker volume mount to prevent
local/container environment conflicts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove Christ in Every Book study guide (redundant with Gospel in OT)
- Fix verse text lookup to initialize variable before use
- Add fallback "(See Reference)" with link when verse text unavailable
- Add chapter-only reference linking in study guides
🤖 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>
Doctrinal Studies:
- The Sovereignty of God
- The Attributes of God
- The Doctrine of Scripture
- The Problem of Evil
- Covenant Theology
Thematic Studies:
- The Gospel in the Old Testament
- Christ in Every Book
- The Law and the Christian
- Faith and Works
- The Scarlet Thread
All guides follow Reformed theological framework.
🤖 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>
Added 7 additional verses covering the full scope of spiritual warfare:
- Ephesians 6:13 (standing in the evil day)
- James 4:7 (resist the devil)
- Colossians 2:15 (Christ's triumph over powers)
- 1 John 4:4 (greater is He in you)
- Romans 8:37-39 (more than conquerors)
- Revelation 12:11 (overcoming by the blood)
- 2 Timothy 2:3-4 (good soldier of Christ)
Also enhanced description to emphasize Christ's victory at the cross.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added 6 new pages to the Theology section:
- I Am Statements
- Miracles of Jesus
- The Beatitudes
- Ten Commandments
- Armor of God
- Prayers of the Bible
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Correct template reference from fruits_of_the_spirit.html to
fruits_of_spirit.html to match actual filename.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adjust margin-left offset for title-page and nav-links to better
visually center content accounting for the sidebar space.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add margin-left offset to title-page, search, and nav-links
to compensate for sidebar space. Remove offset on mobile.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Change from workflow_run trigger (unreliable) to direct push trigger
with test job as dependency.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Center the search/lookup section on homepage with subtle border
- Add cursor: help to sidenote numbers site-wide via base template
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Refine title page styling with lighter h1 weight and border separator
- Simplify subtitle to single line with middot separator
- Add epigraph class for verse of the day with constrained width
- Wrap search in section element
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move pytest, pytest-cov, pytest-xdist to dev dependencies
- Remove redundant jinja2 and uvicorn (included in fastapi[standard])
- Update CI to use --extra dev for test dependencies
🤖 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>
Add pytest-xdist and use -n auto to run tests in parallel within
a single job instead of multiple GitHub Actions runners.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Split test suite into 3 parallel jobs (API, edge cases, web routes)
- Change fly-deploy to trigger after Tests workflow succeeds
- Remove duplicate test run from deploy workflow
🤖 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>
Move verse of the day inside title-page div to inherit centered styling.
Also change verse page wrapper from div to section.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create comprehensive reading plans data file with complete daily readings:
- One Year Plan (365 days with OT, NT, Psalms)
- New Testament in 90 Days
- Gospels and Acts in 30 Days
- Psalms and Proverbs 31-day cycle
- Paul's Epistles in 30 Days
- Chronological plan (partial)
- Center verse of the day section on homepage with max-width constraint
- Add mobile responsive styling for verse of the day
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major refactoring to split server.py into modular components:
- routes/api.py: API endpoints
- routes/resources.py: Biblical resources pages
- routes/family_tree.py: Family tree/genealogy
- routes/study_guides.py: Study guides
- routes/commentary.py: Commentary system (4,130 lines)
- routes/utility.py: Sitemap, robots.txt, health
- utils/books.py: Book name normalization
- utils/helpers.py: Common helpers
- utils/search.py: Full-text search
- utils/search_index.py: SQLite FTS5 index
- data/resources.py: Biblical resource data
Server.py reduced from ~12,600 to 2,045 lines (84% reduction).
All 100 tests passing.
🤖 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>