Landing view
LANDING_VIEWA visitor lands on the homepage for the first time.
Visitor-visible global mount fired in global-mounts.tsx.
Operator reference
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.
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_VIEWA visitor lands on the homepage for the first time.
Visitor-visible global mount fired in global-mounts.tsx.
Foundation sample unlock
SAMPLE_UNLOCKA 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_1A signed-in family completes the family-intake form.
/onboarding/family + server anchor /api/onboarding/family-intake.
Onboarding step 2 — subjects
ONBOARDING_STEP_2A 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_3A signed-in family completes the weekly timetable.
/onboarding/step-3 + server anchor /api/onboarding/weekly-timetable.
Subscription checkout start
SUBSCRIPTION_CHECKOUTA 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_PAIDA Stripe-verified subscription lands its first paid session.
/subscribe/thanks after Stripe session verification, alongside the existing InternationalConversionEvent stamp.
Subscribe view
SUBSCRIBE_VIEWA visitor lands on the focused /subscribe retail-rung page.
Mounted on /subscribe via SubscribeViewMarker (parent-funnel/SubscribeViewMarker.tsx); source="subscribe-page".
Checkout entry
CHECKOUT_ENTRYA /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_PAIDA 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_VIEWA 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_PAIDA 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_ENGAGEA 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.