Skip to content

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_events but 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_id for deduplication. DB-side conversion_attributions remains the source of truth; Meta-reported counts should now align more closely. See paid-meta.md for 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)

  1. Read-only context, period. This doc helps you understand the funnel. It does not authorize any operational action within the funnel. (See guardrails.md for hard prohibitions on customer comms, app/DB actions, and journey touching.)
  2. 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.).
  3. Know which conversions matter for which journey. Monthly funnel = lead → tour → member. Hourly funnel = LP → booking → repeat. Don't conflate the two.
  4. Lean on the existing analytics views. Tour funnel = tour_events + tour_pipeline. Hourly = hourly_bookings. Don't reinvent.
  5. 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.
  6. 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.