Family Wall — sleep stories (Plus content bundle)
Status: ✅ Phase 1 BUILT (2026-07-18, migration 542). Phase 2 (bedtime-in-your-voice) still design. Part of the Plus bundle (FAMILY_WALL_MONETIZATION.md).
Big reuse win
The content + narration already exist. sleep-story-gen.ts generates a catalog of
sleep stories stored as story_seasons (universe='sleep_story') with poster_url,
episodes, and per-episode chapter_audio_url (house-voice narrated audio). Helpers:
listRecentSleepStories(limit), pickSleepStoryOffer(). There's also a
SleepTimerButton component. So the wall feature is mostly surfacing + a player, not
new content.
Two phases
Phase 1 — Sleep stories on the wall (house voice) — the light build
- A per-wall
show_sleep_storiesopt-in (bedroom screens especially). Migration: one boolean onfamily_wall_displays. - Wall gains a 🌙 Sleep stories mode: a shelf of
listRecentSleepStories()(poster + title); tap → plays the episodechapter_audio_urlwith a big calm player + a sleep timer (reuseSleepTimerButtonlogic) that fades out + dims to the screensaver. No new TTS — reuses the already-narrated audio. - Public: fold a small
sleep_storieslist intoresolveWallView(only whenshow_sleep_stories), OR a dedicated publicGET /wall/view/:token/sleep-stories(token-scoped). Gate on the wall OWNER's Plus (requireFamilyWallPlus, no-op until enforced).
Phase 2 — "Bedtime stories in your voice" — the narration upgrade
- Re-narrate a chosen story's chapter text (from
story_episodes) in the parent's cloned voice (long-form) and cache it, so a child hears the parent read the story. - Heavier: long-form TTS cost (a chapter is minutes of audio, not a one-line clip) →
render on demand per (story, voice), cache the result, cap length. Reuse the
season/chapter narration pipeline (
narration.ts+ the voice clone), not the short-clipsayInUserVoicepath. - Consent v2 (owner's own voice). Correctly the highest-tier Plus perk.
Build order (revised)
- #1405 voice alarms (built — apply migration 541, merge).
- Phase 1 sleep stories on the wall (light — reuse existing audio). ← next
- Phase 2 bedtime-in-your-voice (narration pipeline).
- Bundle Graphene+ entitlement into Plus (shared/derived) so the catalog access is
coherent (
graphene-subscription.ts).
Related: [[project_graphene_lore]], [[project_living_voice_roadmap]], [[project_family_wall_monetization]].