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 too — POST /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
Paid ("Plus") — the cost-bearing + power features
- 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:
- Graphene+ included → Graphene 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]]. - 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]]. - 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
- 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.
- "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.
- 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
- Build the subscription + feature gate first (Stripe infra already exists in the repo for other products). This is the real blocker — NOT ads.
- Soft-launch paid with the free single-wall tier as the wedge.
- 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
subscriptionstable (no new table) withplan_key = 'family_wall_plus'— same pattern aswrite-cafe-pro/ Graphene+.isFamilyWallPlus(userId)= active row (keeps access through a cancelled-but-not-ended period). - Master switch
FAMILY_WALL_PLUS_ENFORCED(default off).requireFamilyWallPlusis 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 (
applyMessageAudio→sayInUserVoice) skip the paid render gracefully for non-Plus (free browser TTS fallback +plus_requiredwarning, no 402/no spend); kids'-chat enablement (updateKidChatenabled: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).