Commit Graph

520 Commits

Author SHA1 Message Date
kennethreitz 776e39370e Add global resource and reading plan PDF exports 2025-11-26 01:38:55 -05:00
kennethreitz 87b31f7b6a Move chapter PDF button to header 2025-11-26 01:22:06 -05:00
kennethreitz 1156fb68e1 silly 2025-11-26 01:16:45 -05:00
kennethreitz 0a5c06bbf4 Fix WeasyPrint system dependencies in Dockerfile
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>
2025-11-26 00:27:10 -05:00
kennethreitz ffd9e8c187 Add PDF export for stories using WeasyPrint
- 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>
2025-11-26 00:26:25 -05:00
kennethreitz 608989347b Improve story text layout with Tufte-style typography
- 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>
2025-11-26 00:19:23 -05:00
kennethreitz 06be7a6d3c Add Jesus ministry stories (08_jesus_ministry.json)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 00:11:18 -05:00
kennethreitz 7bd15f9698 Add kids stories index page at /stories/kids
- 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>
2025-11-26 00:10:19 -05:00
kennethreitz 2da1eb7846 Fix scripture links to use proper anchor syntax for verse ranges
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>
2025-11-26 00:07:18 -05:00
kennethreitz be768c7ca5 Add Bible Stories to sidebar navigation
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 23:53:50 -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 8546e58713 Add TOC to study guides and new Spirits & Demons guide
- 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>
2025-11-25 22:41:10 -05:00
kennethreitz 9aab232937 Fix missing bible import in study guides routes
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>
2025-11-25 20:45:55 -05:00
kennethreitz 5c1e4034f5 Remove Christ in Every Book guide, fix verse lookup fallback
- 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>
2025-11-25 20:43:21 -05:00
kennethreitz 56b88ee5d9 Add chapter-only reference linking in study guides
Links like "Psalm 2" and "Psalm 45" now link to chapter pages.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:37:36 -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 40970e7c3a Add 10 doctrinal and thematic study guides
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>
2025-11-25 20:33:13 -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 02ede39842 Expand Introduction to Spiritual Warfare section
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>
2025-11-25 19:23:55 -05:00
kennethreitz e769dd29ec Add new resource pages to sidebar navigation
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>
2025-11-25 19:20:09 -05:00
kennethreitz 651bd1fd96 Expand biblical resource pages with additional content
- Add 7 missing Minor Prophets (Obadiah, Nahum, Habakkuk, Zephaniah,
  Haggai, Zechariah, Malachi) completing all 12
- Add 3 miracles: Second Catch of Fish, Syrophoenician Woman's
  Daughter, Healing the Multitudes
- Add 4 New Testament prayers: Philippians, Thief on Cross,
  Choosing Matthias
- Add 5 Psalms of Prayer: Psalms 63, 27, 86, 143

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 18:51:07 -05:00
kennethreitz e6a05c9697 test 2025-11-25 18:36:27 -05:00
kennethreitz c56ee66260 Remove help cursor from sidenote numbers
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 18:05:08 -05:00
kennethreitz 0fd8f8bfa3 Fix template name for fruits of the spirit page
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>
2025-11-25 18:03:46 -05:00
kennethreitz f8cd706010 Add passage about KJV as wellspring of English language
Include cultural references (Lincoln, King) in sidenote margin.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 01:54:15 -05:00
kennethreitz 32bd177cc8 Increase homepage visual centering offset to -150px
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>
2025-11-24 21:11:53 -05:00
kennethreitz 9c85c160da Offset homepage header to center visually with sidebar
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>
2025-11-24 21:09:54 -05:00
kennethreitz 7aa6063cc0 Fix fly deploy workflow to trigger on push
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>
2025-11-24 21:07:47 -05:00
kennethreitz 9b87cb3bee Increase sidebar font size
Change from 0.7rem to 0.85rem for better readability.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:04:45 -05:00
kennethreitz 5d04aeb3cc Add help cursor to verse reference links with tooltips
Use CSS attribute selectors to target links to verse pages
that display tooltips on hover.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 21:03:48 -05:00
kennethreitz 93b9790dde Center search box and add help cursor to sidenotes
- 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>
2025-11-24 21:02:36 -05:00
kennethreitz 9cde3a125c Clean up homepage design
- 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>
2025-11-24 20:59:20 -05:00
kennethreitz e32bcf00ce Clean up dependencies
- 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>
2025-11-24 20:52:28 -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 1e86c719be Use pytest-xdist for parallel test execution
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>
2025-11-24 20:45:35 -05:00
kennethreitz 5e6c63b0f8 Run tests in parallel and remove duplicate test runs
- 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>
2025-11-24 20:41:09 -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 3492bcf182 Fix missing inject_word_markers filter in chapter template
Remove call to non-existent filter that was breaking tests.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 20:36:26 -05:00
kennethreitz 23527fe2e8 Fix verse of the day centering on homepage
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>
2025-11-24 20:33:08 -05:00
kennethreitz 1e91f0b1f4 Add complete reading plans and center verse of the day
- 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>
2025-11-24 20:24:02 -05:00
kennethreitz 67774f43d2 Merge modular code restructuring from friendly-roentgen
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>
2025-11-24 20:06:06 -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