Onboarding that ends when users actually activate.
Welcome series triggered by signed_up_at, each nudge fired on the channel that fits the missing step. Stops the moment activated_at is set.
Trigger · Sequence · Goal.
Three pieces, no hidden state. The flow lives in your data, fires on a column flip, and stops when the goal column is filled.
signed_up_at filled
The flow fires the moment a new user appears in your users table. No CSV export, no nightly batch.
WHEN signed_up_at IS NOT NULLChannel matched to the missing step
An email tip when a device is missing, a WhatsApp nudge for the first workout, an in-app push for invites. Each step waits on its own data column.
Email · WhatsApp · Pushactivated_at not null
The flow stops the second your activation column flips: device connected, first workout logged, friend invited. Goal completion is attributed to the channel that did it.
STOP WHEN activated_at IS NOT NULLSame recipe, four shapes.
B2B onboarding: book a call
Detect plan = team and replace the generic welcome with a calendar link to the founder.
Vibe-coder lane
If signup_source = lovable / cursor / replit, lead with a Postgres connection guide instead of generic onboarding.
Freemium: first value first
Skip the welcome series and ship straight to the missing-feature email if the user is already active in week 1.
Cold start: re-target on day 14
If activation hasn't fired in 14 days, branch into a re-engagement track instead of dropping the user.
Day-7 activation jumped from 32% to 54% in 8 weeks. We didn't change a single line of product code, just wired the welcome flow to the columns we already had.
Activate your signups today.
Connect Supabase or Postgres. Wire the trigger on signed_up_at, drop the channels, watch activation lift.
14 days · all features · no credit card