product

Coaching Brand Map — one engine, many niche-native skins

Status: PROPOSED — every name below is a placeholder until the named party confirms. Nothing here is committed. This doc exists so the naming decisions have a home instead of living in a chat thread. Update it as names firm up; delete the "proposed" markers only when the relevant person has signed off.

The core idea

There is one coaching engine — niche-agnostic — and each vertical gets its own branded skin on top of it, with its own name, domain, copy, and channel partner. The engine's machinery is identical across skins:

  • Coach seats (swappable AI/human holder) + the AI-draft → review → deliver lifecycle
  • The review queue (/dashboard/coaching) — the coach's home screen
  • Commitment windows / cohorts / squads / streak chains — the accountability primitive
  • Stripe Connect payouts + the 3-way channel split + recruit override
  • Own-voice encouragement, consent-based trend visibility ("signal, not surveillance")

See DREAMPRO_COACHING_SYSTEM.md for the engine itself and DREAMPRO_COACHING_SEAT_SCHEMA.md / DREAMPRO_COACHING_CHANNEL_SCHEMA.md for the data model.

The map

LayerName (proposed)Channel / ownerFront doorStatus
The engine (shared, neutral)no consumer brandplatform/dashboard/coachinglive (Phase 1)
Fitness skinWorkout WindowDECIDED (was "DreamPro")John Rowley/for-coachesname locked 2026-07-13; reserve-the-word refactor pending
Spirituality / embodied skinLanternDECIDED (display name)(sister's network — connector)/for-guidesname locked 2026-07-13; domain TBD (two-word, decoupled from display)
Life-goals / ambition skinDreamProREPOSITIONED 2026-07-13platform (dreampro.io)TBDreclaims dreampro.io (not "freed up"); see positioning below

DreamPro — repositioned (not retired)

DreamPro = AI and professional (human) mentoring to help someone achieve their bigger goals in life. Decided 2026-07-13. DreamPro stops being the fitness brand (that's Workout Window now) and stops being "freed up" — it becomes its own third skin: the life-goals / ambition vertical.

  • Positioning: the hybrid AI + human professional mentor product, aimed at a person's bigger life goals (career, business, personal ambition) — not a single niche like fitness (Workout Window) or inner/spiritual work (Lantern). "Dream" = the aspiration; "Pro" = professional-grade + real professional mentors.
  • Why it fits the engine: the coaching engine's swappable AI/human seat (supervisor_user_id, AI-draft → human-approve) is "AI and professional mentoring." DreamPro is the skin that leads with that hybrid rather than hiding it.
  • Domain: reclaims dreampro.io for this (resolves the earlier "freed up" question). The fitness surfaces currently branded "DreamPro" migrate to Workout Window; the DreamPro brand + domain stay, now meaning the life-goals product.
  • Status: positioning recorded; product surface (front door, mentor model, GTM) not yet built/scoped. This section is the record to build from.

Workout Window rebrand — findings & plan (mapped 2026-07-13)

Rebranding the fitness coaching skin "DreamPro Coaching" → "Workout Window" is entangled — three things surfaced that shape the work:

Finding 1 — the name already exists as a feature (the collision)

"Workout Window" is a live accountability primitive: /workout-window landing, /dashboard/workout-window (+ battle/chain/checkin/mosaic), apps/backend/src/ services/workout-window/, its own migrations, and a feature-index.ts entry. The coaching dashboard even feeds it (add-to-workout-window). So "Workout Window" would name two things unless we decide:

  • MERGE — one brand for both (rejected: the primitive is cross-skin, so the gym word would leak into Lantern/DreamPro).
  • RESERVE THE WORDDECIDED 2026-07-13 — genericize the shared primitive → "Commitment Window" (already done in the landing copy); "Workout Window" is exclusively the fitness skin's brand. Routes/service/migrations keep their workout-window slugs — only user-facing labels change (Phase 2 below).

Finding 2 — the coaching brand is fused to the domain + chrome

dreampro.io/coaching rewrite (middleware.ts), brand detection (branded-surface.ts isDreampro — true for the host AND for /coaching, /30-day-reset, /for-coaches), the dreampro-logo.png navbar branch, and the brand=dreampro signup param are all the same switch. Renaming the visible copy without addressing chrome = a half-state (page says "Workout Window", navbar shows the DreamPro logo).

Finding 3 — the domain can't be detached yet

dreampro.io is being reclaimed for the new DreamPro (mentoring), which isn't built. So we can't point dreampro.io at Workout Window, and we can't detach it to DreamPro-mentoring either. Interim: dreampro.io keeps serving the (now Workout-Window- branded) coaching front door until the mentoring product exists.

The plan (phased)

  • Phase 1 — visible rebrand (no infra): rename user-facing "DreamPro Coaching" → "Workout Window" across the coaching pages (/coaching, /for-coaches, welcome, subscribe, workout, /30-day-reset, /dashboard/(my-)coaching), swap the navbar DreamPro logo for a "Workout Window" wordmark, and update backend brand strings (COACHING_ORG_NAME, the coach-brief LLM prompt, house/seed display names, the "A DreamPro athlete" fallback). Keep internal identifiers stable (slugs like dreampro-house, the brand=dreampro param, env vars NEXT_PUBLIC_DREAMPRO_*, the isDreampro flag name) to avoid breaking DB rows / referral codes / analytics — they're internal, renamed later.
  • Phase 2 — relabel the primitive (decision: RESERVE THE WORD). Change the user-facing "Workout Window" labels on the shared accountability feature → "Commitment Window" (/workout-window landing + /dashboard/workout-window + battle/chain/checkin/mosaic, FeatureMenu, feature-index.ts). Keep routes, service dir, slugs, and migrations as workout-window (internal). On the fitness /coaching skin, the feature may stay "Workout Window" (brand context) — decide per-surface. Tracked as a task.
  • Phase 3 — domain + chrome cutover: when DreamPro-mentoring is ready, detach dreampro.io/coaching, give Workout Window its own domain/brand-detection, and point dreampro.io at the mentoring product.
  • Leave alone: all /dreampro/* citizen-science surfaces (Open Energy) — a separate product that merely shares the "dreampro" substring.

Why this shape

  • DreamPro was doing too much. It was simultaneously the engine, the fitness brand, and the domain. Splitting the engine (invisible) from the skins (niche-native brands) lets each vertical speak its own language and lets a channel partner own their brand without cannibalizing another.
  • The /for-coaches copy pass proved the engine is niche-neutral. Stripping the gym framing ("Workout Window" → "commitment windows", "reps" → "custom metrics") left copy that reads perfectly for a non-fitness coach. That refactor is what makes multiple skins possible.

Collective Challenge — what the "Workout Window" brand unlocks

The name implies everyone's in the window together, which points at a distinctive mechanic DreamPro couldn't own: a network-wide collective challenge where every member's individual commitment rolls up into one giant shared number.

  • Lineage: John ran the "52 Million Pound Challenge" — a huge aggregate goal the whole community pushes toward together. That's the template.
  • How it maps to the engine: it's a level above cohorts. Individual check-ins / commitment-window hits already exist per member (Phase 1). A collective challenge aggregates them across all Workout Window members/coaches into a single live counter + goal (e.g. "X million pounds / minutes / windows, together").
  • Why it's leverage:
    • Engagement — you're not just accountable to your coach, you're contributing to something big; the shared number is a reason to show up.
    • Acquisition — the collective total is a marketing asset; milestone moments are press/social-worthy ("the network just crossed …").
    • Channel fit — gives John a flagship "connect everyone" program to rally coaches and clients around, on top of his own roster economics.

"The Wave" — the signature expression

The aggregate counter is the quantity; the Wave is the ritual. Like a stadium wave, but continental: check-ins start before dawn on the East Coast and roll westward with the sunrise, member by member, timezone by timezone, all morning — then "and beyond": globally it becomes a 24-hour wave circling the planet, always cresting wherever the sun is just coming up.

  • Why it lands: the stadium-wave metaphor is instantly legible and joyful; timezone sequencing makes the collective feel alive and moving instead of a dead number; and it reframes the morning commitment as joining a continent-wide sunrise ritual — you show up partly because the wave is coming to you.
  • What it reuses (this is buildable on existing infra):
    • The Citizen Scientist world map already plots opted-in participants — the Wave is that map, animated by check-in time instead of static.
    • The platform's city-centroid privacy floor (never exact lat/lng) is exactly the right privacy model for a public live map of who's in the window right now.
    • Per-member check-in timestamps already exist (Phase 1) — the Wave plots them against local sunrise.
  • Marketing: a live "watch the Wave cross America" map is inherently shareable; "join the Wave" is a cleaner CTA than any adherence pitch.
  • Ad concept — "Don't be the one who doesn't rise up." Open on a stadium wave rolling through the crowd; one person stays seated, glued to their phone, the wave washing past them. The stadium is literal (it's the metaphor the product is named after) and emotional (don't sit out your own life; don't be the disconnected one). A belonging / anti-isolation line, not an adherence line — which is the whole pitch.

Copy bank (Workout Window) — emerging lines

Collected as they surface; refine later. The through-line: personal commitment ⇄ collective ritual, belonging over adherence.

  • "When is your Workout Window today?" — the daily prompt / notification. Reframes the ask from "did you work out" to "name your time" — and that time is your spot in the Wave.
  • "Don't be the one who doesn't rise up." — the ad line (stadium-wave concept above).
  • "Join the Wave." — primary CTA.
  • "Watch the Wave cross America." — the live-map marketing hook.

Build plan (grounded in the real infra, 2026-07-13)

The visualization stack already exists; the crux is the aggregate + per-check-in geo. Sequenced slices:

  • Slice 1 — the collective aggregate (BUILDING). A network-wide count of times members showed up (verified workout_window_checkins). GET /api/workout-window/wave (public) + a quiet /wave page with the big live number + the copy bank. No geo, no sunrise — self-contained. Caveat: seed/persona check-ins are counted for now (quiet launch); exclude before going public.
  • Slice 2 — the map ("who's in today"). BUILT 2026-07-14. GET /api/workout-window/wave/map returns this week's verified check-ins as fuzzed city-centroid points (via utils/geoFuzz.ts fuzzCoords over per-user workout_window_locations), each flagged today. Rendered on /wave by components/wave/WaveMapInner.tsx (Leaflet CircleMarkers, US-centered) — today's points glow amber, this-week's are dim. Sparse until real check-ins accumulate. Caveat: users without a workout_window_locations row are counted in the aggregate but not plotted; seed/persona points included for now.
  • Slice 3 — the Wave animation (marquee). BUILT 2026-07-14. An amber "dawn line" sweeps EAST→WEST across the map on a loop (components/wave/WaveMapInner.tsx, Polyline
    • requestAnimationFrame); points flare as it passes their longitude. Longitude is a proxy for the sunrise line (East Coast = higher lng = dawn first) — deliberately NOT true solar sunrise (which also depends on latitude/season); that's a later refinement if it's worth it. Chosen over the realtime write-cafe/battles/watch pattern because the sweep is a client-side visual, not multi-viewer state. Reads even with zero data (the line still sweeps). Re-renders per frame — fine for sparse points; revisit if it scales.

Status: concept → Slice 1 building. Slices 2–3 need the geo/sunrise groundwork above.

Open decisions

  1. Fitness → "Workout Window"?DECIDED 2026-07-13. John Rowley owns the fitness skin as Workout Window. Better fitness brand than DreamPro (concrete, active, carries its mechanic) — and it fits John's history: he ran the "52 Million Pound Challenge", a collective commitment challenge, so a brand tied to commitment windows + connecting everyone is squarely his lane.

    • Reserve-the-word refactor (now actionable): "Workout Window" is now the brand, but it's also the name of the shared in-app accountability primitive (/dashboard/workout-window). Rename the engine/generic term → "commitment window" (already done in the landing copy) so other skins don't inherit a fitness word; the fitness skin keeps "Workout Window" as both brand and mechanic (that overlap is a feature, not a bug — the name carries its mechanic). Small code refactor; that route's test file already carries a pre-existing typecheck error, so it's getting touched regardless.
  2. Spirituality skin name — Lovio vs. a fresh name.DECIDED 2026-07-13: the display brand is "Lantern" (Lovio kept free for the possible loving-oversight pivot rather than spent on a third meaning). Domain still open — this is decoupled from the display name:

    • Exact-match is gone: lantern.com/.co (a retired end-of-life startup, acquired by Wellthy) and getlantern.org (anti-censorship VPN) are taken.
    • Plan: a two-word domain (Lantern Circle / The Lantern Room / Lantern Collective) — better availability, cleaner trademark position, and it matches the "circle / room / container" language already in the /for-guides copy. Ship on a subpath/subdomain until the domain lands; the in-product display name is "Lantern" regardless.
    • Before spending money: a quick USPTO check on "Lantern" in the coaching/ wellness class (the prior mark is retired, which lowers but doesn't zero the risk).
  3. dreampro.io dispositionDECIDED 2026-07-13: dreampro.io is reclaimed for the repositioned DreamPro (AI + professional mentoring for bigger life goals — see "DreamPro — repositioned" above), NOT redirected to Workout Window. The fitness surfaces branded "DreamPro" migrate to Workout Window; the domain stays DreamPro with its new meaning.

What's already built toward this (uncommitted, one bundle)

  • apps/frontend/src/app/for-guides/page.tsx — Lantern spirituality front door, own-voice as a headline value, posts to /api/coaching/coach-interest with source: 'for_guides' (no backend change — same super-admin review queue). Brand isolated to a single BRAND = 'Lantern' const.
  • apps/frontend/src/app/for-coaches/page.tsx — niche-neutral copy pass (gym framing → cohort/mastermind), shipping in the same PR.

Launch posture: QUIET / unlisted (decided 2026-07-13). /for-guides is public but deliberately NOT surfaced in the /for hub, homepage, /features, footer, or admin — it's the direct link handed to the sister's warm intros. Invite-only, unproven vertical; broadcast across the standard audience surfaces only after a first Lantern guide runs a real cohort. (Contrast: the other /for-* landings are fully listed — see docs/ai/INDEX.md § Audience Landings.)

Ship gate: ✅ names settled (Lantern display / Workout Window). BRAND = 'Lantern' is set. Ready to open the Lantern-launch PR (add the docs/ai/INDEX.md entry in it). The /for-coaches eyebrow still reads "DreamPro Coaching" — flipping it to "Workout Window" belongs to the separate DreamPro→Workout Window rename workstream, not this launch, to avoid a half-renamed surface.

GTM sequence (spirituality skin)

Sister = pure connector (warm intros, not a design-partner coach herself).

  1. Name it → open the PR.
  2. Her: 2–3 warm intros. Kalyn Parker (kalynparker.com — embodied leadership coach, runs the "Embodied Leaders Lounge" mastermind) = intro #1.
  3. Provision the first guide by invite; let them run one real cohort.
  4. Sharpen the copy in their words — this community has a sharp nose for software cosplaying its language.

Tracked as product task 4f3346b8-ee7d-4fec-9e44-9eae67f79a5e ("Spirituality coaching skin (/for-guides) — name → first guide → validate").

COACHING BRAND MAP — Docs | HiveJournal