Customer Journey Maps
How customers actually move from "never heard of us" to "long-term Member" (monthly) or "repeat hourly user" (hourly).
This doc is read-only context for agents. Per guardrails.md, agents do not touch, modify, or operate within the customer journey. They use this doc to reason about ad targeting, copy fit by funnel stage, and where to flag friction in retros. They never send the emails, automate the follow-ups, or act on customer state.
Two journeys (different products, different shapes)
| Journey | Primary product | Conversion type | Avg time discovery → conversion |
|---|---|---|---|
| Monthly | Monthly Lockout / Artist Studio | Lead → Tour → Member | Days to weeks (CM-driven sale) |
| Hourly | Hourly Studio | Direct online booking + payment | Same session (no human in loop) |
The marketing playbook differs accordingly: monthly leans on tour conversion (a person closes the sale); hourly leans on instant online conversion (the LP closes the sale).
Monthly journey
The high-LTV path. ~80% of tours close historically. Best customers stay 3+ years. The drummer/established-band ICP lives here.
digraph monthly_journey {
rankdir=TB;
node [shape=box, style=rounded, fontname="Helvetica"];
edge [fontname="Helvetica", fontsize=10];
discovery [label="Discovery\n(paid Meta, organic search,\nreferral, partnership, walk-by)"];
landing [label="Landing\n(/[locationSlug] LP or /monthly LP)"];
form [label="Form submit", shape=diamond];
tour_req [label="Tour request"];
email_cap [label="Email-only capture\n(post-LP-rebuild, April 2026)"];
human_email [label="CM email + staff notification\n(human-owned, agents don't touch)",
style="rounded,filled", fillcolor="lightgray"];
cm_followup [label="CM follow-up:\nschedule tour time"];
tour_done [label="Tour conducted\n(in-person walkthrough by CM)"];
close [label="Close decision", shape=diamond];
member [label="Becomes Member\n(studio assigned, access code,\nfirst month)"];
no_convert [label="Doesn't convert\n(re-nurture or lose)"];
active [label="Active Member\n(24/7 access, monthly subscription,\ngear stays in the room)"];
retention [label="Long-term retention\n(3+ yrs for best customers)"];
offboard [label="Off-boards\n(30-day notice cancellation)"];
discovery -> landing;
landing -> form;
form -> tour_req [label="tour request"];
form -> email_cap [label="email-only"];
email_cap -> human_email;
human_email -> cm_followup;
tour_req -> cm_followup;
cm_followup -> tour_done;
tour_done -> close;
close -> member [label="~80% historical"];
close -> no_convert [label="~20%"];
member -> active;
active -> retention;
retention -> offboard;
}
Key transitions for agent reasoning
| Transition | What matters | Where measured |
|---|---|---|
| Discovery → Landing | Ad creative + LP fit. Blast-beats lesson lived here. | tour_events source attribution; UTMs in DB |
| Landing → Form submit | LP conversion rate. Post-rebuild (April 2026) used email-only capture. | tour_events, custom queries |
| Tour request → Tour conducted | Show-up rate. CM follow-up speed matters. | tour_events |
| Tour conducted → Member | ~80% close rate historically. Mostly a CM + product fit story, not a marketing one. | tour_events, tour_pipeline |
| Member → Long-term | Retention. Driven by gear-anchored lock-in (per icp.md). |
subscription_months, active_subscriptions, churn_monthly |
What agents do at each stage
| Stage | Agent's role |
|---|---|
| Discovery | Run paid ads (autonomous within budgets). Draft creative for review. |
| Landing | Draft LPs (in PR, awaiting approval). Reference voice, glossary, positioning, guardrails. |
| Form submit | Read-only — observe conversion data. Never operate the form. |
| Email nurture | Read-only — observe what's there. Never write or send anything in this pipeline. |
| Tour scheduling | Read-only. |
| Tour conducted | Read-only. Tour conversion is the CM + product fit story. |
| Becoming Member | Read-only. |
| Active Member | Read-only. |
| Cancellation | Read-only. |
Hourly journey
The newer product (launched 2026), Cherry City only currently. Different ICP — drop-in, often pre-band, often doesn't own gear (per icp.md). Conversion is fast and self-serve.
digraph hourly_journey {
rankdir=TB;
node [shape=box, style=rounded, fontname="Helvetica"];
edge [fontname="Helvetica", fontsize=10];
discovery [label="Discovery\n(paid Meta — Cherry City only,\norganic, walk-by)"];
landing [label="Landing\n(/cherry-city/hourly or /hourly LP)"];
booking [label="Online booking flow", shape=diamond];
bounce [label="Lost (bounce)"];
pay [label="Pay\n(card or pre-paid credits)"];
confirmation [label="Confirmation email\n(human-owned, agents don't touch)",
style="rounded,filled", fillcolor="lightgray"];
session_day [label="Session day\n(keyless entry code activates\nat session start time)"];
in_studio [label="In studio\n(full backline, 1–4 hours)"];
repeat [label="Repeat decision", shape=diamond];
monthly_start [label="Monthly journey starts\n(unvalidated hypothesis;\nno data yet)",
style="rounded,dashed"];
churn [label="Lost (churn)"];
discovery -> landing;
landing -> booking;
booking -> bounce [label="bounce"];
booking -> pay [label="book session"];
pay -> confirmation;
confirmation -> session_day;
session_day -> in_studio;
in_studio -> repeat;
repeat -> booking [label="repeat hourly"];
repeat -> monthly_start [label="graduate to monthly"];
repeat -> churn [label="churn"];
}
Key transitions for agent reasoning
| Transition | What matters | Where measured |
|---|---|---|
| Discovery → Landing | Ad creative + LP fit. Same as monthly side. | UTMs in DB; Meta ad-level metrics |
| Landing → Booking | Self-serve LP must close on its own; no human safety net. Conversion rate is the LP's grade. | hourly_bookings, custom queries |
| Booking → Session | Operational (access code activation, gear ready). Not a marketing surface. | hourly_bookings |
| Session → Repeat | Open question — hourly only launched 2026, lifecycle data is forming. Per ICP doc, repeat is the candidate signal of fit. | hourly_bookings, hourly_revenue_by_source |
| Hourly → Monthly | The "graduation" hypothesis. Not yet measured; not yet validated as a real funnel. | Open |
What agents do at each stage
| Stage | Agent's role |
|---|---|
| Discovery | Run paid Meta ads (autonomous within budgets). Currently Cherry City only. |
| Landing | Draft LPs (in PR, awaiting approval). |
| Booking flow | Read-only — observe conversion data, flag friction. Never operate the booking. |
| Confirmation email | Read-only — never touch this pipeline. |
| Session | Read-only. |
| Repeat or graduate | Read-only. Pattern not yet measured rigorously. |
Email-capture lead funnel (post-LP-rebuild, April 2026)
The simplified flow shipped in April for cold paid-Meta traffic. Reduces friction to entry — email-only on the LP, then CM follow-up.
digraph email_capture_funnel {
rankdir=TB;
node [shape=box, style=rounded, fontname="Helvetica"];
edge [fontname="Helvetica", fontsize=10];
visitor [label="Cold visitor\n(from paid Meta)"];
lp [label="/cherry-city/tour LP"];
form [label="Email-only capture form"];
inquiry [label="Inquiry record in DB"];
cm_email [label="CM email\n(human-from-template,\nagent doesn't touch)",
style="rounded,filled", fillcolor="lightgray"];
staff_email [label="Staff notification email\n(internal, agent doesn't touch)",
style="rounded,filled", fillcolor="lightgray"];
cm_followup [label="CM follow-up:\nschedule a tour"];
monthly_journey [label="Joins Monthly journey", style="rounded,dashed"];
visitor -> lp;
lp -> form;
form -> inquiry;
inquiry -> cm_email;
inquiry -> staff_email;
cm_email -> cm_followup;
cm_followup -> monthly_journey;
}
This pipeline is entirely human-owned. Agents observe conversion at the form-submit stage and may report on it, but do not operate any of the email or follow-up steps.
Where each measurement lives
Cross-reference to the existing analytics infrastructure (per engineering/infrastructure/analytics):
| Measurement | View / Dashboard |
|---|---|
| Tour funnel volumes & rates | analytics.tour_events, tour_pipeline → Owner Dashboard / CM Dashboard |
| Hourly booking volume & repeat | analytics.hourly_bookings, hourly_revenue_by_source |
| Member tenure & churn | analytics.subscription_months, active_subscriptions, churn_monthly |
| Occupancy by location | analytics.occupancy_monthly → Owner / CM dashboards |
| Booking patterns (heatmap) | analytics.booking_heatmap, booking_hours |
Agents querying funnel-stage data use these views. Don't reinvent the queries.
Friction points — known gaps and observations
Honest list of where the journey has known friction or measurement gaps. Agents producing retros may flag these explicitly when relevant.
Monthly
- Tour scheduling latency — CM follow-up speed varies; not currently measured rigorously. A delayed reply costs tours.
- Tour show-up rate — exists in
tour_eventsbut isn't reliably surfaced in retros. - No-tour conversion path — some prospects email-capture but never tour. The current human nurture path is informal. Not modeled.
Hourly
- Repeat / graduation pattern is unmeasured. Hourly launched 2026; we don't yet know what % of first-time hourly users come back, or whether/when any graduate to monthly.
- Drop-off after booking — when a booking is made but the session doesn't happen (no-show), is that captured? Worth verifying.
- First-time vs. repeat hourly user split — we'd benefit from knowing this for cold-traffic ad copy decisions.
Cross-journey
- Attribution — investigation complete and CAPI implementation shipped 2026-04-27 (PR #652). All four conversion events (Purchase, Lead, CompleteRegistration, InitiateCheckout) fire on both Pixel and CAPI with matching
event_idfor deduplication. DB-sideconversion_attributionsremains the source of truth; Meta-reported counts should now align more closely. Seepaid-meta.mdfor the full picture. - Cross-product migration (hourly → monthly) — hypothetical funnel. Not yet validated.
How to use this doc when generating reports (AI agents, read this)
- Read-only context, period. This doc helps you understand the funnel. It does not authorize any operational action within the funnel. (See
guardrails.mdfor hard prohibitions on customer comms, app/DB actions, and journey touching.) - Identify the journey stage being affected. When generating an ad creative, retro, or LP draft, name which stage it targets (Discovery, Landing, Form submit, etc.).
- Know which conversions matter for which journey. Monthly funnel = lead → tour → member. Hourly funnel = LP → booking → repeat. Don't conflate the two.
- Lean on the existing analytics views. Tour funnel =
tour_events+tour_pipeline. Hourly =hourly_bookings. Don't reinvent. - When flagging friction, distinguish marketing friction from operational friction. "LP conversion rate is dropping" is marketing. "CM is slow to follow up" is operational; it's worth flagging but it's not for the agent to fix.
- Don't propose journey-modifying interventions. No "let's add an automated nurture email," no "let's auto-tag prospects." The agent's lane is paid ads + LPs, not journey design.
Related docs
docs/marketing/icp.md— who's traveling each journeydocs/marketing/positioning.md— what to say at the discovery / landing stagedocs/marketing/paid-meta.md— discovery-stage paid channeldocs/marketing/goals-and-kpis.md— marketing thresholds and where measurements livedocs/marketing/guardrails.md— hard prohibitions on touching the journey- engineering/infrastructure/analytics — the actual measurement layer for funnel data