product

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_stories opt-in (bedroom screens especially). Migration: one boolean on family_wall_displays.
  • Wall gains a 🌙 Sleep stories mode: a shelf of listRecentSleepStories() (poster + title); tap → plays the episode chapter_audio_url with a big calm player + a sleep timer (reuse SleepTimerButton logic) that fades out + dims to the screensaver. No new TTS — reuses the already-narrated audio.
  • Public: fold a small sleep_stories list into resolveWallView (only when show_sleep_stories), OR a dedicated public GET /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-clip sayInUserVoice path.
  • Consent v2 (owner's own voice). Correctly the highest-tier Plus perk.

Build order (revised)

  1. #1405 voice alarms (built — apply migration 541, merge).
  2. Phase 1 sleep stories on the wall (light — reuse existing audio). ← next
  3. Phase 2 bedtime-in-your-voice (narration pipeline).
  4. 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]].

FAMILY WALL SLEEP STORIES — Docs | HiveJournal