Projects BibleWeb Bible Reading Hold-to-rapid-navigate (10ch/sec)
Planned

Hold-to-rapid-navigate (10ch/sec)

Area: Bible Reading Milestone: v1

Context

Problem: When users want to jump many chapters ahead (e.g., from Genesis to Exodus, or scanning through Psalms), clicking "Next" repeatedly is tedious. They need a faster way to fly through chapters.

Solution: Holding down the Next or Prev button (or holding an arrow key) triggers rapid auto-advance through chapters at approximately 3 chapters per second, accelerating over time.

Not included: Direct chapter/book jumping (that's the book picker or command palette). This is specifically for rapid sequential browsing.

Functional

When the user holds down the Next or Previous button for more than 500ms, chapters start auto-advancing at an increasing rate.

User flow:

  1. User presses and holds the "Next" or "Prev" button
  2. After 500ms delay, chapters start advancing at ~3 chapters/second
  3. Acceleration kicks in — speed increases over time
  4. User releases the button and reading stops at the current chapter

Platforms:

  • Desktop: hold left/right arrow keys
  • Mobile: long-press the prev/next buttons
  • The chapter text updates as you fly through (no blank screens)

Edge cases:

  • Reaching Genesis 1 or Revelation 22 stops the advance
  • The text should update quickly enough to give a "scanning" feeling
  • Book boundaries crossed smoothly (auto-wraps)

UX & Design

Timing:

  • Initial delay: 500ms before auto-advance starts
  • Starting speed: ~3 chapters per second
  • Acceleration: speed increases the longer you hold

TODO: Define exact acceleration curve. BibleGame used ~10ch/sec max speed.

Visual: Each chapter's text loads as you fly through — giving a rapid-flip effect similar to flipping through a physical Bible.

Technical

Implementation approach:

  • setInterval on button hold (or keydown without keyup)
  • Start with 333ms interval (3/sec), decrease interval over time
  • Clear interval on release (mouseup/touchend/keyup)
  • Each tick calls the existing chapter navigation function

Reference: BibleGame InputManager.cs had hold-to-repeat with acceleration.

Files:

  • apps/web/src/lib/components/bible/ChapterNav.svelte (modify — add hold detection)
  • apps/web/src/routes/(app)/read/[[book]]/[[chapter]]/+page.svelte (modify — rapid nav logic)

Status

Current: PLANNED Milestone: v1 Priority: Medium — power-user feature for fast navigation

History:

  • BibleGame had this in InputManager.cs with ~10ch/sec max speed
  • Not yet implemented in web version

Dependencies:

  • Requires: chapter navigation (DONE)
  • Blocks: nothing