Fired when a user initiates form submission (before the API responds). Measures submit attempt volume — compare against success/fail to understand error rates.
Primary growth event. Fired after a successful application submission. Use for activation funnels, conversion rate, and cohort analysis.
Properties
is_invited: boolean, link_count: number of valid links submitted, platform_count: number of unique platforms, platforms: array of platform strings, link_types: array of 'profile'/'other'
Person properties set
signup_date: ISO 8601 timestamp (via setPersonPropertiesOnce)
Files
components/onboarding/screens.tsx (ReviewScreen after submitInvited success, NameEmailScreen after submit success)
Fired once per session when the PostHog feature flag Landing-page-vs-Step-1 resolves. Records which experiment arm this user is in so downstream funnel analysis can be segmented by variant.
Registered via posthog.register() on first load when the app is opened with a ?lp=<path> param, so every subsequent event carries the in-profile destination the visitor was sent to apply for. Use it to segment the funnel by entry point (e.g. a specific quest). Only same-origin relative paths are accepted — anything absolute or protocol-relative is dropped and no super property is set.
Files
shared/sharedHelpers.ts (sanitizeLandPath), components/onboarding/onboarding.tsx (InviteChecker — before the invite-token guard, so it also applies to self-serve visitors)
Fired when an invite token is validated successfully. Signals a real invited user has entered the flow. Also triggers posthog.identify() with the user's email.
Properties
none
Files
components/onboarding/onboarding.tsx (InviteChecker — after successful check response)
Fired once per valid invite when the user is attributed to a subject-line A/B variant. Also registers the subject_line_key super property so every subsequent funnel event carries the variant (enabling conversion-by-variant analysis).
Properties
subject_line_key: the resolved subject-line variant key (e.g. 'default', 'curiosity'). Returned by /api/invite/check.
Files
components/onboarding/onboarding.tsx (InviteChecker — after invite:token_valid when res.subjectLineKey is present)
Registered via posthog.register() so it rides along on all events after invite assignment. The variant is chosen by the caller of the bulk-invite API (invites[].subjectLineKey), stored on the invite doc, and also attached to the Resend email as a subject_line_key tag for open/click-rate analysis.
Fired once per verification reminder when the user is attributed to a subject-line A/B variant. Also registers the verify_subject_line_key super property so every subsequent funnel event carries the variant (enabling conversion-by-variant analysis).
Properties
verify_subject_line_key: the subject-line variant key (e.g. 'rem48h_access_expiring', 'rem48h_last_step'). Passed via URL parameter ?vsl=<key>.
Files
app/verify/page.tsx (on mount when vsl query parameter is present)
Registered via posthog.register() so it rides along on all events after verification page load. The variant is randomly assigned by the reminder lambda, included in the verification URL as a vsl parameter, and also attached to the Resend email as a subject_line_key tag for open/click-rate analysis.