בס״ד

Family-page build queue (Sam's voice brief, 2026-06-03)

docs/FAMILY_PAGE_BUILDS.md · last changed (pre-VM history) · rendered from GitHub master

Family-page build queue (Sam's voice brief, 2026-06-03)

Captured so nothing's lost. These extend the family surfaces (chanie-home.html /wife,
family-kiosk.html /family). All must stay key-free (no master key) so the gated
family login is safe. Build order = top to bottom (quickest/most-emphasized first).

0. 🐛 FIX: kiosk voice fails in the home-screen app ("service not allowed")

Confirmed root cause: family-kiosk.html uses webkitSpeechRecognition (Web Speech API,
line ~493). It works in Safari but iOS blocks it inside a standalone/home-screen app
service-not-allowed. (Interim done 2026-06-03: honest error message + "use Safari" hint.)
Real fix: replace the SpeechRecognition flow with getUserMedia → MediaRecorder → POST the
audio to /voice/transcribe
(already on the Worker, index.ts ~1266: audio → Whisper → text).
getUserMedia does work in standalone on iOS 18, so this fixes the wall-tablet case. Test the
iOS MediaRecorder output format against what Whisper accepts (iOS records mp4/aac). Apply the
same fix anywhere else a page uses webkitSpeechRecognition for input. Build before relying on
the wall iPad for voice.

1. Messaging → a prominent CHAT button (Sam emphasized)

Today the two-way thread exists + a mic, but it's not prominent. Add a persistent "Chat"
button near the top
(like a Verizon/utility app's chat bubble) that jumps straight to the
messaging thread
(#zee on Chanie's page / the kiosk thread). In addition to the mic, not
instead. Put it on /wife + /family (+ wherever else). Make messaging feel one-tap.

2. Calendar → UPCOMING per person (not just today)

The people-tagging (calendar-tags.js HSCAL) currently shows only today's tagged events.
Sam wants upcoming per person — e.g. "Yaakov: Chemistry Regents (Tue), Algebra (Thu)".
Extend loadPeopleToday → an upcoming window (next ~14 days), grouped by person, on the
kiosk/home. Uses /calendar?scope=family (already referer-gated, no key).

3. Groceries → a "bought / re-add" page + store breakdown

4. Top-of-page polish

The "Good evening" greeting + the block underneath could be refined on the family pages.
Vague — get Sam's specifics before changing (don't guess the aesthetic).

5. iPad wall-mount HARDWARE (researched 2026-06-03) — for the wall tablet

Sam's device: iPad 8th gen (10.2", 2020), model MYLN2LL/A, iPadOS 18.3.1. Wants a
magnetic setup: a plate on the wall + a magnetic-backed case on the iPad → snaps flat to
the wall, charges, removable (also sticks to the fridge/other metal). Aesthetic, front-of-house.
- EMONITA Magnetic Wall Mount + Charging Case A7exact fit (iPad 7/8/9 10.2"): magnetic
case + ~10mm slim wall mount, 18W charging, 360° rotate, removable. This is the one.
- Zilvex Magnetic Wall-Mount Charging Kit (iPad 7/8/9 10.2") — 15W, TPU case, 360°, aesthetic.
- Caseco "Simpl" Magnetic iPad Wall Mount — minimalist alternative.
- Pair with: iOS Guided Access (lock to one page) + Add to Home Screen (standalone) +
the family-scoped CF login (so the wall device can't reach Sam's pages) — see
docs/MILDRED_SERVER_SCOPING.md pattern.

Source trail · docs/FAMILY_PAGE_BUILDS.md @ master · rendered 2026-07-02 7:23 PM EDT by scripts/build-docs.py · the .md in the repo is the truth; this page is the phone-readable view