Nine lifecycle events have first-class TypeScript helpers. Prefer them overDocumentation Index
Fetch the complete documentation index at: https://docs.vibefollow.com/llms.txt
Use this file to discover all available pages before exploring further.
events.track() — you get autocomplete and protection against name typos.
The nine helpers
signedUp
user_signed_up — account created.trialStarted
trial_started — trial activated.featureUsed
feature_used — meaningful action in product.onboardingStep
onboarding_step — step started or completed.subscriptionChanged
subscription_changed — any plan/interval change.subscriptionCancelled
subscription_cancelled — cancel requested, still has access.paymentFailed
payment_failed — billing decline.trialExpiring
trial_expiring — trial about to end.userInvited
user_invited — teammate invited.Reference table
| Helper | Event name | Common properties |
|---|---|---|
users.signedUp | user_signed_up | plan, source |
users.trialStarted | trial_started | trialDays |
users.featureUsed | feature_used | feature (required), count |
users.onboardingStep | onboarding_step | step (required), completed |
users.subscriptionChanged | subscription_changed | from, to (required), interval, mrr |
users.subscriptionCancelled | subscription_cancelled | reason, effectiveAt |
users.paymentFailed | payment_failed | reason |
users.trialExpiring | trial_expiring | daysLeft (required) |
users.userInvited | user_invited | invitedEmail (required) |
signedUp
Fires when a user creates their account. Drives the signup audience and the “welcome” trigger rule.
trialStarted
Fires when a trial activates. Often the same moment as signup; emit both if so.
featureUsed
Fires when the user does something interesting in your product. The feature string is the audience key — pick stable identifiers (dashboard_export, not Dashboard Export!).
onboardingStep
Fires when a user completes (or starts) an onboarding step. Powers the “onboarding stalled” trigger that nudges users who got partway through.
subscriptionChanged
Fires on any plan change — trial → pro, pro → enterprise, monthly → yearly. The interval field is denormalised onto the user row so audience filters like “all yearly subscribers” can be answered without scanning event JSON. mrr should be in cents (9900 = $99/mo).
subscriptionCancelled
Fires when the user clicks Cancel but still has access. Distinct from churned (truly gone after the grace period — emit a follow-up subscription_changed with to: 'churned' when access actually ends).
paymentFailed
Fires on any billing decline. Powers the “card declined” recovery flow.
trialExpiring
Fires when a trial is about to end. daysLeft lets your billing system control the cadence (7, 3, 1).
userInvited
Fires when a user invites a teammate. Powers the team-expansion nudges.
What if my event isn’t on this list?
Use
events.track(). Custom event names are accepted as-is and become first-class citizens in audience filters. See Custom events.