# BibleVerse for Tactility

Single-verse bible reader. Shows one verse fullscreen, auto-advances every minute. Tap to toggle controls.

## UX

- **Default view (no chrome)**: immersive context — just the verse text + reference, centered, large font. Like BookPlayer image-only view.
- **Tap**: shows header (current ref + position) and footer controls:
  - Close X, Prev, Pause/Play (auto-advance), Next, Highlight (star), Audio memo placeholder.
- Highlighted verses saved to `favorites.txt` in app user data. Long-term: record voice memo, read aloud TTS.

## Bible data format (split per book)

We fetch public domain bibles from https://github.com/sajeevavahini/bibles (Zefania XML).

Offline conversion:

```
python3 tools/convert_bible.py  --src "World English Bible.xml" --dst assets/bible
```

Result structure:

```
assets/bible/
  books.json          # {"books":[{"bnumber":1,"bname":"Genesis","verses":1533,...}], total_verses, translation, version}
  01.bin / 01.idx     # Genesis
  02.bin / 02.idx     # Exodus
  ...
  66.bin / 66.idx
```

- `.bin`: concatenated NUL-terminated UTF8 verse texts. No parsing needed, low RAM.
- `.idx`: header 10 bytes: magic 'BIBK', uint16 version, uint32 count. Then per entry 8 bytes: uint32 offset, uint16 cnum, uint16 vnum.

This split makes memory footprint tiny for ESP32:
- Only one book loaded at a time (max ~215KB for Psalms, typical 12-100KB).
- Index ~19KB max for Psalms, typically <5KB.

## SD card fallback

App also scans:

- `/sdcard/bibles/` and `/sdcard/bible/`

If `books.json` not found in assets, it will try to use SD folder. This lets users drop extra translations offline.

## Settings persistence

Same pattern as EpubReader / BookPlayer (but those two didn't persist in BookPlayer, EpubReader does):

Using Tactility app user data paths:

- `tt_app_get_user_data_path()` -> e.g. `/sdcard/user/app/one.tactility.bibleverse`
- `progress.txt`: stores global verse index + b/c/v for debug
  ```
  1234
  1 1 1
  0 0
  ```
- `favorites.txt`: list of global indices, one per line.

This lives on SD card (or internal data partition), survives app reinstalls.

## Build (color screen device, esp32s3)

Same as BookPlayer — external app, compiled for esp32s3 target (covers CYD-2432s028r, m5stack-cores3, etc).

```bash
# source IDF (example)
source ~/esp/esp-idf/export.sh
export TACTILITY_SDK_PATH=/path/to/TactilitySDK  # or use --local-sdk

python3 tactility.py Apps/BibleVerse build esp32s3 --local-sdk
```

Output: `build/BibleVerse.app` installable via Tactility file manager or `tactility.py ... install <ip>`

## Future extensions

- Voice memo: record to `/sdcard/bible_memos/<global>.wav` using same I2S code as BookPlayer
- TTS read aloud: use esp tts or pre-generated mp3 like BookPlayer pages
- Book picker UI (like BookPlayer picker but for bible books)
- Highlight color, search, jump to reference dialog
