Operator reference

Parent-funnel events

The BRIEF-NAMED stages across the parent journey — landing view, Foundation sample unlock, onboarding steps 1-3, the focused /subscribe retail-rung funnel (SUBSCRIBE_VIEW / CHECKOUT_ENTRY / CHECKOUT_PAID), the dashboard renewal funnel (RENEW_VIEW / RENEW_PAID), the professional-support engagement stamp, plus subscription checkout start and subscription paid. Every event carries a timestamp; the price-bearing events carry plan (cadence) + amount + currency. Wired through the platform's built-in event log, no third-party SDK.

Event index

Every stage of the parent journey fires a stable event with a timestamp. The list below is the BRIEF-NAMED index — adding a stage costs one change to src/lib/contracts/parent-funnel.ts, not a second copy/paste of the table. The seven original stages are joined by six Phase-2 extensions: SUBSCRIBE_VIEW / CHECKOUT_ENTRY / CHECKOUT_PAID (focused /subscribe retail-rung funnel) + RENEW_VIEW / RENEW_PAID (dashboard renewal funnel) + PROFESSIONAL_SUPPORT_ENGAGE (`/resources/professional-support` engagement).

Landing view

LANDING_VIEW

A visitor lands on the homepage for the first time.

Visitor-visible global mount fired in global-mounts.tsx.

Foundation sample unlock

SAMPLE_UNLOCK

A visitor hits the Foundation sample surface (or its server anchor).

/sample mounts the marker; /api/foundation-sample-lead is the canonical server anchor.

Onboarding step 1 — age / year-level

ONBOARDING_STEP_1

A signed-in family completes the family-intake form.

/onboarding/family + server anchor /api/onboarding/family-intake.

Onboarding step 2 — subjects

ONBOARDING_STEP_2

A signed-in family captures subjects + learning goals + support needs.

/onboarding/step-2 + server anchor /api/onboarding/step-2.

Onboarding step 3 — goals / support needs

ONBOARDING_STEP_3

A signed-in family completes the weekly timetable.

/onboarding/step-3 + server anchor /api/onboarding/weekly-timetable.

Subscription checkout start

SUBSCRIPTION_CHECKOUT

A prospective overseas family subscriber clicks one of the Stripe checkout CTAs.

Mounted on /overseas via the stripe-checkout-tracker island; CTA-clicks fire before the redirect.

Subscription paid

SUBSCRIPTION_PAID

A Stripe-verified subscription lands its first paid session.

/subscribe/thanks after Stripe session verification, alongside the existing InternationalConversionEvent stamp.

Subscribe view

SUBSCRIBE_VIEW

A visitor lands on the focused /subscribe retail-rung page.

Mounted on /subscribe via SubscribeViewMarker (parent-funnel/SubscribeViewMarker.tsx); source="subscribe-page".

Checkout entry

CHECKOUT_ENTRY

A /subscribe visitor is about to click into Stripe checkout from the focused retail-rung CTA.

Mounted on /subscribe next to <SubscribeCtaIsland/> via CheckoutEntryMarker; source="subscribe-page", plan="family-monthly", amountUsd=19, cadence="month", currency="USD".

Checkout paid

CHECKOUT_PAID

A Stripe-verified first-purchase from /subscribe settles its paid session.

Fired on /checkout/success inside the verified branch in CheckoutSuccessIsland.tsx after the existing purchase-completion chain; source="subscribe-page", plan=family-monthly|family-annual, amountUsd+cadence derived server-side from the verified Stripe session.

Renew view

RENEW_VIEW

A signed-in parent visits the dashboard subscription renewal surface.

Mounted on /dashboard/subscription/renew via RenewViewMarker (parent-funnel/RenewViewMarker.tsx); source="dashboard-renewal".

Renew paid

RENEW_PAID

A Stripe-verified renewal settles its paid session (success page carried ?renewed=1).

Fired on /checkout/success inside the verified branch in CheckoutSuccessIsland.tsx ONLY when isRenewal=true; source="dashboard-renewal", plan=family-monthly|family-annual, amountUsd+cadence derived server-side.

Professional-support engagement

PROFESSIONAL_SUPPORT_ENGAGE

A visitor engages with the professional-support prose bundle.

Mounted on /resources/professional-support via ProfessionalSupportEngageMarker; source="professional-support-page".

Server POST endpoint: /api/parent-funnel. Admin GET (counts + recent) requires role: admin; the per-row SUBSCRIPTION_PAID rows expose the verified Stripe session's amount + cadence on its amountUsd / cadence columns.