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
| Layer | Name (proposed) | Channel / owner | Front door | Status |
|---|---|---|---|---|
| The engine (shared, neutral) | no consumer brand | platform | /dashboard/coaching | live (Phase 1) |
| Fitness skin | Workout Window ✅ DECIDED (was "DreamPro") | John Rowley | /for-coaches | name locked 2026-07-13; reserve-the-word refactor pending |
| Spirituality / embodied skin | Lantern ✅ DECIDED (display name) | (sister's network — connector) | /for-guides | name locked 2026-07-13; domain TBD (two-word, decoupled from display) |
| Life-goals / ambition skin | DreamPro ✅ REPOSITIONED 2026-07-13 | platform (dreampro.io) | TBD | reclaims 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 WORD ✅ DECIDED 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-windowslugs — 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 likedreampro-house, thebrand=dreamproparam, env varsNEXT_PUBLIC_DREAMPRO_*, theisDreamproflag 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-windowlanding +/dashboard/workout-window+ battle/chain/checkin/mosaic,FeatureMenu,feature-index.ts). Keep routes, service dir, slugs, and migrations asworkout-window(internal). On the fitness/coachingskin, 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 pointdreampro.ioat 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-coachescopy 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/wavepage 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/mapreturns this week's verified check-ins as fuzzed city-centroid points (viautils/geoFuzz.tsfuzzCoordsover per-userworkout_window_locations), each flaggedtoday. Rendered on/wavebycomponents/wave/WaveMapInner.tsx(LeafletCircleMarkers, US-centered) — today's points glow amber, this-week's are dim. Sparse until real check-ins accumulate. Caveat: users without aworkout_window_locationsrow 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,PolylinerequestAnimationFrame); 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 realtimewrite-cafe/battles/watchpattern 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
-
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.
- 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 (
-
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) andgetlantern.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-guidescopy. 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).
- Exact-match is gone:
-
✅ DECIDED 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.dreampro.iodisposition
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-interestwithsource: 'for_guides'(no backend change — same super-admin review queue). Brand isolated to a singleBRAND = '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).
- Name it → open the PR.
- Her: 2–3 warm intros. Kalyn Parker (kalynparker.com — embodied leadership coach, runs the "Embodied Leaders Lounge" mastermind) = intro #1.
- Provision the first guide by invite; let them run one real cohort.
- 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").