Commit Graph

148 Commits

Author SHA1 Message Date
kennethreitz edecac493b Add dynamic OG image generation for social sharing
- 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>
2025-12-12 13:03:46 -05:00
kennethreitz 5e00af78b7 Add SEO schema improvements (BreadcrumbList, Book schema)
- 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>
2025-12-12 12:56:08 -05:00
kennethreitz 12cbc15b2d Add Listen button across site for text-to-speech
- Chapter pages: Listen to full chapter text
- Bible stories (adult & kids): Listen button at bottom with PDF
- Resource index pages (Ten Commandments, Beatitudes, etc.)
- Resource detail pages (individual commandments, etc.)
- Twelve Apostles, Biblical Prophets, Names of God
- Parables, Women of the Bible, Fruits of the Spirit

All pages use consistent .action-btn styling and KJVSpeech integration.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 14:50:16 -05:00
kennethreitz c4bba295f9 Remove border from chapter navigation
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 20:04:18 -05:00
kennethreitz 0525a37c5b Remove auto-linking to family tree on verse and chapter pages 2025-12-05 15:34:22 -05:00
kennethreitz 1fa89c01a1 Increase verse text size on chapter view for mobile 2025-12-05 15:18:51 -05:00
kennethreitz b53e04f2eb Reduce chapter nav button width on mobile 2025-12-05 15:11:02 -05:00
kennethreitz 3ebf27c0ed Comprehensive mobile UX improvements
- Auto-enable large font mode on mobile (base.html)
- Add swipe gestures for chapter navigation
- Improve verse number tap targets with background
- Make family tree pages full width on mobile
- Enhance homepage mobile layout with larger touch targets
- Increase text sizes and line heights for readability
- Remove sidenote tap target styling per user request

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 15:10:08 -05:00
kennethreitz 3ebf7d83b8 Fix verse number underline on mobile (border-bottom)
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:53:03 -05:00
kennethreitz 2ebddfbdc0 Improve mobile chapter reading experience
- Full width poetry verses on small screens (no 55% constraint)
- Larger verse text on mobile (1.2rem, 1.8 line-height)
- Remove underlines from verse numbers on mobile

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:51:44 -05:00
kennethreitz 132bd657b2 Add poetry formatting for Job, Proverbs, Song of Solomon, Lamentations, Ecclesiastes
Expand poetry support beyond Psalms using stanza break data extracted from
World English Bible USFM source:

- Job: 40 poetry chapters (3-42), 133 stanza breaks
- Proverbs: 31 chapters, 54 stanza breaks
- Song of Solomon: 8 chapters, 17 stanza breaks
- Lamentations: 5 chapters, 86 stanza breaks
- Ecclesiastes: 4 poetry chapters (3, 10, 11, 12)

Updates:
- Restructure poetry_formatting.json to support multiple books
- Add is_poetry_chapter() for mixed prose/poetry books like Job
- Poetry verses wrap at 55% width to respect sidenote margin
- Stanza breaks use simple vertical spacing (3.5em)
- Section headings appear below stanza breaks when both present
- Update PDF templates for per-chapter poetry detection

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:42:52 -05:00
kennethreitz 52930be764 Add poetry formatting for Psalms with stanza breaks
- Extract stanza break data from eBible USFX (199 breaks across 127 psalms)
- Add poetry_loader utility to identify poetry books and stanza breaks
- Render Psalms with verse-per-line layout and ❧ ornament at stanza breaks
- Add stanza break styling to chapter and book PDF exports
- Web view: decorative hedera with subtle line divider
- PDF view: simple horizontal rule for stanza breaks

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:21:27 -05:00
kennethreitz d6f0b9597e Improve cross-ref ordering and show up to 5 refs
- Sort cross-ref groups by theological priority (Prophecy/Covenant
  first, generic "Parallel theme" last)
- Show up to 5 refs without expansion (was 3)
- Show all if 6 or fewer to avoid "+1"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 12:39:06 -05:00
kennethreitz d303d70f02 Add section headings for all 66 books of the Bible
Adds 2,543 section headings (e.g., "The Sermon on the Mount",
"The Suffering Servant") that display before verses in chapter
pages. Headings are loaded from JSON and rendered as styled h3
elements in the Tufte typography style.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 09:37:46 -05:00
kennethreitz 3bbe683a60 Condense cross-refs: show book only when it changes
Instead of "Revelation 1:20; Revelation 1:16; Revelation 3:7"
now shows "Revelation 1:20, 1:16, 3:7" - much cleaner.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:46:49 -05:00
kennethreitz 5bd0f7556b Restore cross-reference grouping with collapse behavior
Keep group descriptions (Prophecy:, Related:, etc.) while still
showing first 3-4 refs collapsed with "+N" expand for more.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:39:31 -05:00
kennethreitz 31d5756240 Show all cross-refs if 4 or fewer, avoid "+1"
If there are 4 or fewer refs, show them all without expand.
Only use the collapsed "+N" pattern when there are 5+ refs.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:38:20 -05:00
kennethreitz 97877b22d6 Show first 3 cross-refs collapsed, expand for more
Cross-references now show first 3 refs by default with "+N" indicator.
Clicking expands to show all references. Simplifies the template by
flattening grouped refs into a single list.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:37:17 -05:00
kennethreitz ea454723eb Auto-expand word studies when margin isn't crowded
Word studies now auto-expand when there's room (2+ verses since last
word study), matching cross-ref behavior.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:19:39 -05:00
kennethreitz 29adf18818 Auto-expand cross-refs when not crowded, collapse when cramped
Cross-references now auto-expand when there's room (3+ verses since
last xref), but stay collapsed when verses are close together to
prevent margin overload.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:14:19 -05:00
kennethreitz db0fb31fb3 Add 3-verse cooldown for cross-references
When verses are close together (within 3 verses), show condensed
"+N refs" instead of full cross-reference groups to prevent
margin overload.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:13:25 -05:00
kennethreitz 4f22d1ef02 Only collapse cross-refs when 3+ are hidden
Show +1 or +2 refs expanded inline. Only show the +N collapse
indicator when there are 3 or more hidden refs.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 00:08:08 -05:00
kennethreitz bd6ce112d9 Add margin-bottom to sidenotes for vertical spacing
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:25:24 -05:00
kennethreitz aa7929205e Fix sidenotes pushing each other horizontally
Add clear:right to ensure sidenotes stack vertically
instead of being pushed off to the side.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:23:45 -05:00
kennethreitz cb39aa5a8f Show 1 ref per theme, max 3 themes unexpanded
Cross-refs collapsed view now shows:
- First ref from up to 3 theme groups
- Click to expand and see all refs in all groups

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:21:04 -05:00
kennethreitz bcc96b8be5 Show up to 3 refs per theme before expanding
Cross-references now show first 3 verses per theme group in the
collapsed view. Additional refs beyond 3 per group are hidden
until expanded.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:20:20 -05:00
kennethreitz 27800962d7 Fix word study collapse with !important
Ensure word-study-details is properly hidden by adding !important
to override any conflicting Tufte CSS rules.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:18:02 -05:00
kennethreitz 4e98b5c083 Remove arrow from cross-ref count indicator
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:13:29 -05:00
kennethreitz da84f66fbc Add ▸ arrow indicator to cross-ref +N count
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:13:09 -05:00
kennethreitz 38c0ee8d2f Fix cross-ref layout shift by using inline expand
Extra refs now appear inline when expanded rather than
swapping between preview/details elements. This prevents
any layout shift when clicking to expand.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:12:20 -05:00
kennethreitz 803c3cbe39 Simplify cross-ref expand CSS to reduce layout shift
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:10:29 -05:00
kennethreitz 46e2c042b1 Show first ref from each group in collapsed cross-refs
Collapsed view now shows one ref per theme/description group
(e.g., "Prophecy: Isa 7:14; Fulfillment: Matt 1:23 +3")
so users see the variety of cross-reference types at a glance.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:09:05 -05:00
kennethreitz 22de2194cd Collapse cross-refs by default, show first ref with expand for all
Cross-reference sidenotes now show just one verse reference by default
with a "+N more" indicator. Click to expand and see all grouped refs.
This reduces sidebar clutter while keeping all cross-refs accessible.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:08:13 -05:00
kennethreitz 5332c79c45 Collapse word studies by default, show only word + Greek term
Word study sidenotes now show just the word and Greek/Hebrew term by default.
Click to expand and reveal transliteration and full definition.
Adds a subtle ▸ indicator showing the sidenote can be expanded.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 23:06:29 -05:00
kennethreitz c397e8a8a0 Fix red letter styling bleeding into sidenote links
Links inside sidenotes (like "Jesus" or Strong's references) were
inheriting the red color from .words-of-christ styling due to an
!important rule in base.html. Added more specific sidenote link rules
with !important to override.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 22:51:07 -05:00
kennethreitz 8d02b5b8eb Refactor: consolidate shared dark mode rules in base.html
Move common dark mode CSS rules to base.html:
- .words-of-christ
- .section-card, .section-card h2
- .person-card-name, .person-card-verse
- .nav-paragraph.selected

Reduces duplication across 6 templates.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 10:10:15 -05:00
kennethreitz 01f5b1ba7b UI improvements: nav pills, breadcrumb positioning, anchor offsets
- Convert verse navigation to pill-style buttons
- Extend breadcrumb bar to the left with padding
- Add scroll-margin-top for verse anchors on chapter page
- Rename 'Chapter X' to 'Read in Chapter X'

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 09:36:08 -05:00
kennethreitz cb49f5e130 Comprehensive mobile experience improvements
- Disable sticky breadcrumb on mobile, hide action buttons
- Add mobile styles to chapter page (nav, touch targets)
- Add mobile styles to verse page (share buttons, tooltips)
- Add mobile styles to books page (responsive grid)
- Add mobile styles to book page (chapter links, nav hints)
- Add mobile styles to search page (full-width, iOS zoom fix)
- Add mobile styles to topics and reading plans pages
- Improve touch targets across all pages (44px min)
- Fix max-width containers for mobile (100%)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 21:03:35 -05:00
kennethreitz 3336863a4d Improve keyboard navigation consistency across site
- Add KJVNav.initGridNav for standardized 2D grid navigation
- Migrate books.html, topics.html, resources.html to use initGridNav
- Add sidebarActive check to all templates with custom keyboard handlers
- Add [ and ] shortcuts for prev/next chapter on chapter pages
- Add [ and ] shortcuts for prev/next book on book pages
- Update accessibility page with comprehensive keyboard shortcut docs
- Add honest note about keyboard navigation complexity
- Fix sidebar nav conflicting with main content selection

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 01:26:09 -05:00
kennethreitz f0a4b34bfa Redesign homepage and add section IDs across site
Homepage improvements:
- Cleaner title section with divider and prominent daily verse
- Simplified search bar design
- Button-style quick links with primary action
- 2-column resource grid with breathing room
- Original Language Study section with Hebrew (Gen 1:1) and Greek (John 1:1) samples
- Theological Commentary section highlighting 20,000+ verses with commentary
- Interactive Resources section (Genealogies, Timeline, Maps, Stories)
- Full theological studies grid
- Streamlined footer

Section IDs for anchor links:
- verse.html: #interlinear, #cross-references, #commentary, #analysis, #historical, #theological, #questions
- books.html: #old-testament, #new-testament
- chapter.html: #related-resources
- resources.html: dynamic category IDs
- topics.html: #major-topics
- study_guides.html: dynamic category IDs
- reading_plans.html: #your-reading-plans, #available-reading-plans
- stories_index.html: #categories
- biblical_timeline.html: #timeline-introduction, #conclusion
- resource_detail.html: #description, #key-verses

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 23:50:15 -05:00
kennethreitz 9a1657558c Make sidenotes unselectable site-wide via style.css
Added sidenote selection styles to style.css instead of
tufte.css to keep third-party CSS unmodified.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:32:59 -05:00
kennethreitz cfe5327785 Revert "Make sidenotes unselectable site-wide"
This reverts commit 31541c9b4b.
2025-12-02 20:32:30 -05:00
kennethreitz 31541c9b4b Make sidenotes unselectable site-wide
Moved sidenote user-select styles to tufte.css so they apply
across all pages, not just chapter pages.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:32:20 -05:00
kennethreitz 2e3e7703bb Add newline between verses when copying multiple verses
When selecting multiple verses, each verse is now separated
by a newline in the clipboard. Single verse or partial
selections still get normalized whitespace.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:21:28 -05:00
kennethreitz 1371fa615d Fix sidenote selection highlight showing through
Added vendor prefixes for user-select and transparent
selection background to prevent sidenotes from showing
blue highlight when selecting verse text.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:20:41 -05:00
kennethreitz aa0b940641 Normalize whitespace when copying verse text
Collapses multiple spaces/newlines into single spaces for
cleaner clipboard content.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:19:52 -05:00
kennethreitz b0232d5473 Make sidenotes unselectable
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:17:45 -05:00
kennethreitz 74e2ef2870 Allow copying sidenote text when explicitly selected
If the selection is entirely within a sidenote or marginnote,
allow normal copy behavior. Only strip sidenotes from copied
text when selecting verse content that includes sidenotes.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:17:02 -05:00
kennethreitz 95995161c7 Fix copy to exclude sidenotes and verse numbers
Added copy event handler that cleans selected text before
copying to clipboard, removing sidenotes, marginnotes, and
verse number links. Also added user-select: none to verse
number links for visual consistency.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:12:32 -05:00
kennethreitz 3d3e0a7be0 Exclude sidenotes from text selection
Sidenotes, marginnotes, and sidenote number labels are now
excluded from text selection, so selecting verse text only
captures the actual verse content.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 20:11:43 -05:00