- [x] June 10: Pick up the kids from school and take them to piano class. (Captured 2026-05-27, A Reyna; covered/confirmed 2026-06-15)
- [x] Verify and pay AccoladeCare overdue balance ($6.85) if valid. (Captured 2026-05-26 photo scan; paid 2026-05-29)
- [x] Attend financial advisor appointment with James Phillips (Tue, Jun 16, 2026, 11:00 AM–1:00 PM ET, RingCentral Meeting ID: 321722788). Went well; follow-up in-person session scheduled. (Captured 2026-05-27, completed/updated 2026-06-16, A Reyna)
- [ ] Attend in-person financial planning session with James Phillips on Saturday, July 11, 2026, 11:00 AM–2:00 PM ET (3 hours). Location/details TBD. (Captured 2026-06-16, A Reyna)
- [ ] Attend in-person financial planning session with James Phillips on Friday, September 11, 2026, 11:00 AM–2:00 PM ET (3 hours). Location/details TBD. Month corrected from July to September on 2026-07-08. (Captured 2026-06-16, A Reyna)
- [x] Fridge warranty/service appointment completed Wednesday, June 17, 2026. Whirlpool appliance, model WRS325SDHZ13, serial HRE3403608, service job SWPV64ED5019-1. Provider: Wsvc Brandt's Appliance Serv, 4415 77th St, Vero Beach, FL, +1 (772) 562-5759. Visit covered by warranty. (Captured 2026-06-15; updated 2026-06-17, A Reyna)
- [x] Fridge completely fixed; no further warranty repair follow-up needed. Original provider: Wsvc Brandt's Appliance Serv. (Captured 2026-06-17; completed/updated 2026-07-04, A Reyna)
- [x] Attend confirmed ENT appointment on Thursday, June 18, 2026. Adolfo confirmed the appointment. (Captured 2026-06-17; completed by 2026-06-18)
@@ -358,6 +358,215 @@ Possible `book.json` fields:
}
```
## Tactility ESP32 App Plan
Captured on 2026-07-08 from the next app idea: build a dedicated Tactility app that can play local book packages from the SD card, one page at a time, showing the image and playing the matching narration together on the device screen.
### App Goal
Create a Tactility app, tentatively called **Book Player**, that runs locally on the ESP32/Tactility device instead of requiring Hermes to coordinate each page over MCP.
Core behavior:
1. Scan a books folder on the SD card.
2. Let the user pick a book.
3. Display the current page image on the screen.
4. Play the matching page audio.
5. Provide on-device controls:
- play/pause
- next page
- previous page
6. Auto-advance to the next page when audio finishes.
7. Keep the device safe and responsive by loading only the current page assets.
### Tactility App Details for Codex Build
Implementation notes for the future Codex/Tactility build:
- Follow existing Tactility app structure in the firmware repository rather than inventing a separate framework.
- Look for existing examples of:
- app registration
- screen lifecycle
- LVGL/UI layout
- SD-card file access
- image rendering
- audio playback
- Register the app so it appears in the Tactility launcher.
- Use robust SD-card path handling and clear serial logs.
- Handle these failures without crashing:
- no SD card
- no `/sdcard/books/` folder
- no books found
- missing or invalid manifest
- missing image/audio files
- unsupported image/audio formats
- audio playback errors
- If true audio pause/resume is unavailable in the Tactility audio stack, implement clean stop/restart behavior and document the limitation.
### Preferred SD Card Book Folder Layout
Use a parent folder containing one subfolder per book:
```text
/sdcard/books/
grace-poppy/
manifest.json
page001.png
page001.mp3
page002.png
page002.mp3
another-book/
manifest.json
page001.jpg
page001.wav
```
Each book folder should include a `manifest.json` like:
```json
{
"title":"Princess Grace and Poppy",
"author":"Reyna Family",
"pages":[
{
"image":"page001.png",
"audio":"page001.mp3",
"caption":"Optional caption text"
},
{
"image":"page002.png",
"audio":"page002.mp3",
"caption":"Optional caption text"
}
]
}
```
For future multi-language or multi-voice versions, this can later evolve toward the richer `book.json` package format below, but the first app should stay simple and folder-based.
### Desired Device UI
Book picker screen:
- Title: `Books`
- List of detected book titles from manifests
- Error/empty state if no books are found
Player screen:
- Top: book title or short title
- Center: page image scaled to fit the screen while preserving aspect ratio
- Bottom controls: `Prev`, `Play/Pause`, `Next`
- Small page indicator such as `1 / 23`
### Playback Rules
- Opening a book loads page 1.
- Pressing Play plays the current page audio while keeping the image visible.
- When audio finishes, advance to the next page and start playback.
- At the final page, stop and remain on the final image.
- Next/Previous should stop the current audio, switch pages, and resume audio if playback was active.
- Only load the current image/audio metadata; do not load the whole book into memory.
### Acceptance Criteria for the Build
The app build is successful when:
- Firmware builds.
- The app appears in the Tactility launcher.
- A test book under `/sdcard/books/test-book/` appears in the picker.
- Selecting the book displays page 1.
- Play starts page 1 narration.
- Play/pause, next, and previous work.
- Audio completion advances pages automatically.
- Missing/invalid files show or log a useful error instead of crashing.
- A README documents the SD-card folder format and includes a sample manifest.
### Codex Prompt Seed
Use the following as the working direction for Codex when implementing the app:
```text
Create a new Tactility app for ESP32 called “Book Player”. It should scan `/sdcard/books/` for subfolders with `manifest.json`, show a book picker, then play each selected book page by displaying the page image and playing the matching audio. Provide Prev, Play/Pause, and Next controls. Auto-advance when audio finishes. Follow existing Tactility app structure, UI conventions, app registration, SD-card access, image rendering, and audio playback patterns in the repository. Keep memory usage safe by loading only the current page. Handle no SD card, no books, invalid JSON, missing assets, and playback errors gracefully. Add registration/build entries, a README, and a sample manifest. Build and report changed files and limitations.
```
### Initial Example Book Package
A ready-to-copy example package was assembled on 2026-07-08 using the current Grace/Poppy assets:
Captured on 2026-07-08: Page 1 narration felt too plain, with phrases gluing together and not enough emotion. A comparison trial was generated using performance text with warmer storytelling direction, clearer pauses, and more deliberate pacing.
Performance direction used:
- Warm bedtime-story opening.
- Slightly magical/hushed tone for “Once upon a time.”
- Wider pause before the castle setting.
- Gentle affection when introducing the father/king.
- Original package Page 1 was 15.840s, so both trials are slower and should reduce phrase-gluing.
If one version is approved, replace only `books/grace-poppy/page001.mp3` in the Tactility package first, then regenerate the package ZIP.
### Full Aiden Audio Regeneration
Captured on 2026-07-09 after review: the second male voice, Voicebox profile `Aiden`, sounded better than the Adolfo cloned voice for this storybook narration. All 21 app pages were regenerated with Aiden using paced performance text: line breaks, ellipses, dialogue separation, and slower emotional phrasing to avoid glued-together sentences.
Artifacts:
- Final ZIP: `/home/adolforeyna/output/tactility-book-packages/grace-poppy-tactility-book-aiden-audio.zip`
- Working folder: `/home/adolforeyna/output/tactility-book-packages/grace-poppy-aiden-full-audio/`
- ZIP entries: 45 files, including `AUDIO_REGENERATION.md`
- ZIP SHA256: `18dee4feffa2184fb03c7e459d63c372e81a1a3e0b09c6184c4b269c5f2f3444`
- Verification: `unzip -t` reported no errors.
The package manifest now includes `audio_voice: "Aiden"` and per-page `audio_duration_sec` values. The source package folder under `/home/adolforeyna/output/tactility-book-packages/grace-poppy-tactility-book-example/books/grace-poppy/` was also updated with the Aiden audio files and regenerated manifest.
## Correction Workflow Ideas
Corrections should be recorded as structured page-level notes rather than ad hoc prompts.
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.