The brand journey

Five stages, in money order. Every step shows the copy, the events that fire, and links to the strategy doc, the dev spec, the PostHog insight, and the webhook.

Stage A

Acquisition → Activation

Top of funnel through first campaign. MKT events join on email; INT events join on Firebase UID — never crossed.

A1 · MKTblind spot

Landing → account created

First-touch attribution lives here. After this, the person is tracked by Firebase UID, not by source.

page_viewaccount_created
No links yet · turn on Edit links to add
A2 · trial

Trial started

Card on file, 7-day trial begins. Becomes the cohort root for E1 close sequence.

trial_startedcheckout_completed
No links yet · turn on Edit links to add
A5 · ACTIVATION

Wizard → first campaign

3 questions, then the first campaign is created. The aha moment.

campaign_createdprogram_createdonboarding_*tour_stage_*
No links yet · turn on Edit links to add
A6–A7 · ACTIVATION

Success → first creator invited

The cohort key for boost framing is captured here, once.

program_auto_invite_sentdashboard_first_view
No links yet · turn on Edit links to add
Stage B

Funding the campaign

The 'Add $X to launch' wallet top-up. Was the last un-instrumented money step.

B2 · ✦ NEWnew

Campaign Readiness modal

'Add $500.00 to launch. Pending deposits count. Unused funds stay withdrawable.'

✦ funding_modal_shown✦ funding_method_added
No links yet · turn on Edit links to add
B3 · ✦ NEWnew

Top-up → live (or the leak)

The drop-off here was money walking out with no event. Now it has props.

✦ funding_topup_completed✦ funding_topup_abandoned
No links yet · turn on Edit links to add
Stage C

Pain + engagement

Server-swept nightly (cron 15:00 UTC). Surfaces render from that state. Move the offer to the felt-pain moment.

C1

Launch nudge

when · <24h live, 0 applicants

'Want a head start? Boost this role so more creators see it on day one.'

boost_nudge_shownboost_nudge_clicked
No links yet · turn on Edit links to add
C2 · pain

Slow applicants

when · live ≥48h AND 1–4 applicants

'More creators haven\'t seen \'{job}\' yet.' Banner + one-time email.

boost_banner_*boost_pain_email_sent
No links yet · turn on Edit links to add
C3 · pain

No hire

when · live ≥7d AND 0 hires

'Still no hire on \'{job}\'? Let\'s widen the pool.' Stronger 'at bats' copy.

boost_banner_*boost_pain_email_sentapplicant_accepted
No links yet · turn on Edit links to add
C4

Empty pipeline

when · DB browsed, 0 saved

'Keep looking, or boost the role and let the right creators apply to you.'

boost_banner_shown/_clicked
No links yet · turn on Edit links to add
C5 · ✦ NEW · engagementnew

It's working · get more

when · X+ applicants (banner) · or a hire just landed (prompt)

'It\'s working. Get even more creators applying.' / 'Nice hire. Boost your next role.'

✦ boost_engagement_trigger_firedsub_trigger: high_applicants | post_hire
No links yet · turn on Edit links to add
C6

Self-initiated

when · brand clicks Boost (job card / applicants)

Peak-intent entry. Prominent CTA, not a buried icon.

boost_nudge_clicked
No links yet · turn on Edit links to add
Stage D

Boost conversion

SKU ladder + running total → checkout → applied. trigger + sub_trigger on every event.

D1

Boost modal · SKU ladder

Anchor first (Maximum Visibility ~$800), then Top of Feed $250 · Staff Pick $150 · Priority Push $500. Cohort subhead + pre-selected combo.

boost_modal_openedboost_sku_toggledboost_modal_dismissed
No links yet · turn on Edit links to add
D2–D3

Checkout → applied → receipt

'You\'re boosted. Your role goes in front of more creators shortly.'

boost_checkout_startedboost_purchase_completedboost_purchase_completedboost_purchase_failed
No links yet · turn on Edit links to add
Stage E

Retention & recovery

The bigger, faster money. Mostly lifecycle (email/iMessage), Preclose-owned, fired to MKT (email-keyed). The map's previously-missing half.

E0 · trigger enginenew

Churn & upsell trigger inventory

29 detection points today (T1–T15 engine triggers, C1–C6 Boost surfaces, 8 Intercom conversation signals). The full inventory maps signal → truth check → action path → measurement.

T1-T15 trigger-engine jobsC1-C6 Boost surfaces8 Intercom signals
No links yet · turn on Edit links to add
E1 · ✦ · the first gatenew

Trial close sequence

when · trial day 5–7 · pre-conversion

'3 hires in already. Lock your team in before the trial ends.' Value recap, then the ask.

trial_to_paid✦ close_sequence_sent
No links yet · turn on Edit links to add
E2 · ✦ · PAYBACK #1

Payment recovery / dunning

when · payment_failed · Day 0 / 3 / 7 / 14

'Your card didn\'t go through. Fix it in one tap to keep your roles live.'

✦ payment_failed✦ dunning_sent✦ card_updated
No links yet · turn on Edit links to add
E3 · ✦ · PAYBACK #2

Annual at win moments

when · first hire · 30-day active · pre-renewal

'First hire\'s in. Lock the year and save 30%.' Offer rides the success moment, not a random day.

applicant_accepted✦ annual_offer_shown✦ annual_converted
No links yet · turn on Edit links to add
E4 · ✦ · expansion

Plan upgrade at the cap

when · plan_cap_hit (Starter posting limit)

'You\'re at your plan\'s role limit. Move to Growth to post more roles at once.'

✦ upgrade_prompt_shown✦ plan_upgraded
No links yet · turn on Edit links to add
E5 · ✦ · save

Cancel → matched save

when · cancel_initiated → reason picker

Price → 'drop to a smaller plan' or a time-boxed discount. Non-usage → 'pause 60 days, keep your data.' The offer has to match the reason.

cancellation_reason_submitted✦ save_offer_shown✦ save_accepted
No links yet · turn on Edit links to add
E6 · ✦ · win-back

Canceled cohort win-back

when · 30 / 60 / 90 days post-cancel

'Roles still open? {n} new creators joined since you left.' Cohort-specific, never a blast.

✦ winback_sent✦ reactivatedmeta_custom_audience
No links yet · turn on Edit links to add