product

Family Wall — monetization

Status: DECIDED direction (2026-07-18). Owner green-lit the freemium model. The entitlement GATE is now BUILT (family-wall-plus.ts) but ships OFF (FAMILY_WALL_PLUS_ENFORCED unset → nothing paywalled). Stripe checkout is now BUILT tooPOST /api/payment/family-wall-plus/checkout (monthly/annual) → webhook upserts the subscriptions row (plan_key='family_wall_plus'), same path as Graphene+/write-cafe-pro. The remaining pieces are operational: create the Stripe prices + set STRIPE_PRICE_FAMILY_WALL_PLUS / _ANNUAL, grandfather early users, gate the two cost points, then flip the env on.

The model: freemium subscription ("Family Wall Plus")

Free tier is the acquisition wedge (the "no hardware to buy" story vs Skylight/Hearth); the subscription monetizes the features that either cost us money or are power-family.

Price anchor: ~$4.99/mo or $39/yr. Undercuts Hearth ($699 + $99/yr), matches Skylight Plus ($39–80/yr), sits just above Cozi Gold ($30/yr) — with $0 hardware.

Free (genuinely useful — one kitchen wall)

  • 1 wall, family members + routines + tap-to-check-off, streaks
  • Calendar (1–2 sources), notes board, who's-home, weather, shopping, meals
  • Preset backgrounds, screensavers, ambient sound
  • Ask JQ (LLM calls) + JQ voice actions
  • Voice messages in your cloned voice (ElevenLabs TTS)
  • Intercom (tap-to-talk to screens)
  • Multiple walls (bedroom/personal screens beyond the first)
  • Kids' chat (moderation cost)
  • Points / allowance, journal-art backgrounds, unlimited calendar sources

Plus content bundle — the sticky, nightly/daily-use features (roadmap, not built)

These are what make Plus emotionally worth it (and drive daily retention). All tie into Living Voice (cloned voice) + Graphene content, delivered on the wall device:

  1. Graphene+ includedGraphene sleep stories on the wall ("Sleep stories" panel/mode). Bundle Graphene+ into Plus (shared/derived entitlement, reuse graphene-subscription.ts + the Graphene story/audio library). See [[project_graphene_lore]].
  2. Bedtime stories in your voice — Graphene sleep stories narrated in the parent's cloned voice (sayInUserVoice + voice clone). Consent v2 (owner's own voice). Real TTS cost → correctly Plus. See [[project_living_voice_roadmap]].
  3. Custom voice alarm clocks — a wall wakes the family: a child wakes to their parent's voice; a parent wakes to a motivational quote or their own voice cheering them out of bed. Per-member alarm time + a chosen voice/clip; the wall (already an always-on device with audio) plays it. Ties Living Voice + the wall's existing audio path.

Build order (recommendation): (3) alarm clocks first (most contained — scheduling + the wall's existing audio path; huge "wow"), then (2) bedtime-in-your-voice (reuses the voice pipeline + adds Graphene stories), then (1) full Graphene+ sleep-story library + entitlement bundling. Each is its own build; all gate behind Plus.

Why this shape

  1. The paywall protects margin, not just access. Our real marginal costs (LLM, TTS, moderation) are exactly the gated features — rare alignment. On-brand honest: free stays genuinely complete; we charge where we actually spend.
  2. "No hardware" is the moat. $0 entry vs Skylight's $80–300 upfront; monetize on subscription. Same LTV, none of the hardware capex/support/returns burden. Don't blunt it by charging upfront.
  3. Top-of-funnel for all of HiveJournal. Family is a huge, high-intent market that spreads inside a household; the wall is the consumer front door to JQ + the wider journaling ecosystem.

Sequencing

  1. Build the subscription + feature gate first (Stripe infra already exists in the repo for other products). This is the real blocker — NOT ads.
  2. Soft-launch paid with the free single-wall tier as the wedge.
  3. Skip ads — off-brand for a family/kids surface and low-yield vs a $39/yr sub; revisit only much later, if ever. (Matches [[project_journaling_market_push]]: ads premature without a paid tier.)

Not now

  • B2B (schools / facilities) — eldercare has its own GTM ([[project_legacy_channel_eldercare]]); don't split focus. The wall is B2C.

The gate — BUILT (enforcement off)

  • Entitlement reuses the shared subscriptions table (no new table) with plan_key = 'family_wall_plus' — same pattern as write-cafe-pro / Graphene+. isFamilyWallPlus(userId) = active row (keeps access through a cancelled-but-not-ended period).
  • Master switch FAMILY_WALL_PLUS_ENFORCED (default off). requireFamilyWallPlus is a no-op until it's on, so the plumbing shipped without paywalling any existing usage.
  • Enforced at the service layer (so the public token routes gate on the wall's OWNER): createWallDisplay (2nd+ wall), askWall + actOnWall (Ask JQ + actions), sendIntercom. Returns HTTP 402 { error, upgrade:true, feature }.
  • UI: GET /api/family/wall/plus-status{ plus, enforced }; the wall settings page shows an upsell banner + ✨Plus badges only when enforced && !plus.
  • Cost-point gates — BUILT: cloned-voice wall messages (applyMessageAudiosayInUserVoice) skip the paid render gracefully for non-Plus (free browser TTS fallback + plus_required warning, no 402/no spend); kids'-chat enablement (updateKidChat enabled:true) → 402. Stripe checkout — BUILT.
  • Grandfather early users generously; the free tier must stay a real product, not a demo.

Related: [[project_family_frame]], [[project_journaling_market_push]] (mobile store-ship = the other paid-tier prerequisite), [[project_elevenlabs_tts_spend]] (TTS is a real cost the gate should bound).

FAMILY WALL MONETIZATION — Docs | HiveJournal