1. Sticky header on scroll
- Shows current page title and breadcrumb navigation
- Appears when scrolling past the main breadcrumb
- Smooth slide-down animation
2. Font size controls (A/A buttons)
- Small, normal, large, x-large sizes
- Persisted to localStorage
- Positioned next to dark mode toggle
3. Prefetch next/prev pages
- Uses requestIdleCallback for non-blocking prefetch
- Prefetches chapter/verse/book navigation links
- Makes page-to-page navigation feel instant
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove sidebar toggle button on desktop (>1200px)
- Sidebar now always visible on desktop for better navigation
- Keep hamburger menu toggle on mobile/tablet (<1200px)
- Remove backtick keyboard shortcut for sidebar toggle
- Update accessibility page to remove backtick reference
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create dedicated accessibility page at /about/accessibility
- Add skip link for keyboard/screen reader users
- Add keyboard navigation to interlinear landing page
- Implement 2D grid navigation for theological studies on homepage
- Add accessibility section to homepage with keyboard shortcut info
- Fix verse text color contrast on fruits of the spirit page
- Fix malformed proverbs commentary data
- Update about page with accessibility link
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
All resource pages (parables, christology, biblical-prophets, etc.)
now correctly highlight the Resources nav item in the sidebar.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Users can access books via the Books page. Cleaner nav focuses on
features and actions rather than duplicating book navigation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Extracted ~1250 lines of JavaScript from base.html to static/base.js
- Reduced base.html from ~2700 lines to ~1440 lines
- Updated tests to expect 404 (not 500) for invalid resources
- Updated CLAUDE.md to reflect proper error handling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Updated parseVerseUrl to recognize /book/{book}/chapter/{chapter}#verse-{verse} format in addition to the old /verse/ path format.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated base.html JavaScript to use chapter anchors instead of verse pages
- Added filter to skip text nodes inside anchor tags to prevent double-linking
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Cleaner link styling with rounded corners and hover backgrounds
- CSS triangle expand arrows instead of text characters
- Refined typography, spacing, and search box styling
- Add 'n' key to activate sidebar navigation (j/k to navigate, Enter to select)
- Highlight current page in green on sidebar links
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add KJVNav.initSimpleNav() for DRY keyboard navigation across site
- Fix broken keyboard nav on 10+ resource pages (orphaned JS code)
- Left arrow on chapters now does browser back
- Add non-writing prophets: Moses, Samuel, Nathan, Elijah, Elisha
- Redesign chapter PDFs with glossary, cross-refs, book intro
- Style sidenotes as inline notes in all PDFs (fix checkbox squares)
- More liberal word studies in PDF output (for_pdf parameter)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Wrap prefers-color-scheme dark styles with html:not([data-theme="light"])
- Fixes interlinear text being white on yellowish background
- Updated verse.html, chapter_interlinear.html, tufte.css, base.html,
and family-tree-expansions.css
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add mobile media query to hide sidenotes by default
- Show sidenotes when checkbox is clicked (tap on number)
- Style expanded sidenotes with background and border for clarity
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove "Disable Red Letters" link from sidebar navigation
- Add Shift+R keyboard shortcut to toggle red letters
- Update keyboard help modal with new shortcut
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
More descriptive than just 'About' - makes it clear what the
link is about when viewing the navigation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added About link at bottom of sidebar navigation
- Added breadcrumbs to /about, /about/stats, /about/commentary, /about/cross-references
- Removed emoji from "Open Source & Free" heading on about page
All about-related pages now have proper navigation structure.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Users can now disable analytics by visiting homepage with ?kr=1:
- Detects ?kr=1 parameter and sets localStorage + cookie
- Analytics script checks both before loading
- Persists across sessions (10 year cookie + localStorage)
- ?kr=0 re-enables analytics if needed
- Clean URL redirect after setting preference
- Fully client-side, privacy-focused implementation
Technical details:
- localStorage primary (instant, no server traffic)
- Cookie fallback (315360000s = 10 years)
- window.analyticsDisabled flag for runtime checks
- Gauges analytics respects opt-out flag
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed service worker, PWA manifest, offline page, and all related UI components to simplify the application and reduce bloat.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The 'Caching for offline' indicator is now a link to /offline page.
Also added toLocaleString() for page count formatting.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- PDF links/buttons are greyed out (40% opacity) when offline
- Adds strikethrough and "not-allowed" cursor
- Shows tooltip "PDF unavailable offline"
- Prevents click events
- Re-enables automatically when back online
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Service workers can only control URLs within their scope. A service worker
at /static/sw.js couldn't control the root scope (/) without special headers.
- Add /sw.js route that serves the service worker with Service-Worker-Allowed: /
- Update registration to use /sw.js instead of /static/sw.js
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Adds a link to the /offline debug page at the bottom of the sidebar,
allowing users to easily access offline status and cached pages list.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Service worker now pre-caches ~160 pages in background after install
- Includes all resource pages, topics, study guides, stories, book pages
- Caches in batches of 5 with 1-second delays to avoid overwhelming server
- Progress indicator shows "Caching for offline: X%" in bottom-left
- Shows "Ready for offline! (X pages)" when complete, then fades out
- Bumped cache version to v2 to trigger re-cache
Combined with the Bible JSON (~4.7MB), the entire site is now
available offline after first visit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created sw.js with caching strategies:
- Static assets (CSS, JS, fonts) - cache first
- Bible pages - network first, cache fallback
- API requests - network first with offline cache
- Pre-caches verses-1769.json (~4.7MB) on install
- Added service worker registration to base.html
- Added offline indicator (red badge in bottom-right)
- Linked manifest.json for PWA support
Users can now read the Bible offline after first visit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>