Activation Metrics

Event taxonomy and funnel definitions for onboarding and first-session activation.

Activation is the moment a new user gets real value, not just a page view.

For Noosaga, the current activation north star is:

first_workflow_article_completed

Why: subfield maps are now populated by Noosaga before normal browsing. User activation starts when someone selects a framework inside an existing subfield map and begins generating deeper framework-level learning content.

Core Funnel Events

Marketing/product funnel reporting should use these canonical event names:

EventTriggerKey non-PII properties
landing_viewedUser opens the homepageroute, referrer, UTM fields, traffic_source, is_logged_in, variant
explore_field_openedUser expands/selects a category, discipline, field, or subfield entry pointcategory, discipline, subfield, field_state, framework_count, source, is_logged_in
subfield_openedUser opens an /explore/... subfield page or switches subfield in-appcategory, discipline, subfield, field_state, framework_count, is_logged_in
framework_openedUser selects a framework from a subfield timeline/listcategory, discipline, subfield, framework_id, framework_slug, interaction_type, is_logged_in
graph_interactedUser selects a concept node, clicks a vocabulary-timeline concept, exports, or proposes concept-map changessubfield, framework_id, framework_slug, concept_id, interaction_type, is_logged_in
article_interactedUser views sources, copies, rates, proposes edits, generates concept articles, or starts/answers quizzesarticle_layer, subfield, framework_id, framework_slug, concept_id, interaction_type, is_logged_in
return_visit_detectedReturning session after the stored first-seen timestamp passes the return thresholdsubfield, elapsed_ms/return context where available, is_logged_in
share_clickedUser clicks a copy-link share controlsubfield, framework_id, framework_slug, interaction_type, source, is_logged_in
signup_startedUser starts Google sign-in from nav, empty field, workflow, or concept article CTAsource, subfield, framework_id, concept_id, interaction_type
signup_completedUser returns authenticated after a tracked sign-in startsource, started_subfield, framework_id, concept_id, elapsed_ms

All analytics events are enriched client-side with route, normalized referrer, current UTM values, and first-touch UTM/referrer/source values when available. Do not add email addresses, usernames, raw article text, prompts, or other sensitive content to event properties.

Analytics is controlled by NEXT_PUBLIC_ANALYTICS_PROVIDER:

  • unset / none: no-op fallback; no browser events are sent
  • internal: consent-gated mirror to POST /api/events
  • vercel: Vercel Analytics provider events
  • internal,vercel: both

Legacy Activation Events

The primary onboarding flow emits the following activation events:

EventTriggerGoal
landing_viewUser opens homepageTop-of-funnel traffic
landing_start_with_field_clickedUser clicks the primary homepage hero CTAMeasure homepage guided-entry intent
landing_browse_atlas_clickedUser clicks the secondary homepage browse CTAMeasure homepage browse intent
field_selectedUser selects a field or subfield from search/browseIntent to explore
explore_viewUser opens an explore pageExplore entry
workflow_start_clickedUser starts a per-framework workflowFramework-generation intent
verify_startedVerification queue started for the selected frameworkStep 1 progression
framework_article_readyFramework article became availableFirst deep learning milestone
first_workflow_article_completedFirst framework article is generated in workflowActivation north star
concept_map_readyConcept map became availableDeeper framework coverage
first_quiz_submittedFirst quiz interaction submittedLearning engagement
relations_startedSeparate framework-relations action startedOptional branch outside the bundled workflow
login_prompt_shownLogin requirement is visibly shown before a generation/workflow actionSeparate auth friction from generation friction
login_startedUser clicks a login CTA and OAuth flow startsMeasure auth intent
login_completedSession returns authenticated after a tracked login startMeasure auth completion
next_best_action_cta_clickedUser clicks CTA in dynamic "Next best action" stripMeasure guidance engagement
blog_viewedUser opens a blog pageBlog entry attribution
onboarding_variant_assignedUser is assigned guided or full onboarding variantExperiment attribution
session_returned_d1Returning session after 24hEarly retention

Legacy map-generation events still exist for back-compatibility and rare empty-field/admin paths:

EventCurrent interpretation
empty_field_viewedDiagnostic only; normal users should usually land on populated subfields.
first_map_generation_startedLegacy empty-field generation event; do not use as a primary activation funnel step.
first_map_generation_completedLegacy empty-field generation event; do not use as a primary activation funnel step.

Event Properties

Global enrichment on activation events:

  • entry_surface (explore | blog | other)
  • entry_path (first tracked route path in session)
  • current_surface (surface for the current event page)

workflow_start_clicked

  • subfield
  • discipline
  • framework_id
  • framework_label
  • source_page_type (usually explore)

verify_started

  • subfield
  • discipline
  • framework_id
  • framework_label
  • source_page_type (usually explore)

framework_article_ready

  • subfield
  • framework_id
  • framework_label
  • field_state (mapped in the normal browsing flow; retained for back-compatibility)
  • variant
  • is_logged_in

first_workflow_article_completed

  • subfield
  • framework_id
  • framework_label
  • field_state (mapped in the normal browsing flow; retained for back-compatibility)
  • is_logged_in

concept_map_ready

  • subfield
  • framework_id
  • field_state (mapped in the normal browsing flow; retained for back-compatibility)
  • variant
  • is_logged_in

login_prompt_shown

  • source (for example next_best_action_workflow)
  • subfield
  • discipline
  • framework_id (when applicable)
  • field_state
  • is_logged_in

next_best_action_cta_clicked

  • action_id (for example start_verification, start_article)
  • cta_label
  • subfield
  • framework_id
  • is_logged_in

onboarding_variant_assigned

  • variant (guided or full)

Funnel Definition

Use this baseline marketing funnel:

  1. landing_viewed
  2. explore_field_opened
  3. subfield_opened
  4. framework_opened
  5. graph_interacted or article_interacted
  6. return_visit_detected, share_clicked, signup_started, or signup_completed

Track conversion rates and median time between each step.

Extended first-session funnel:

  1. landing_viewed
  2. landing_start_with_field_clicked or landing_browse_atlas_clicked
  3. explore_field_opened
  4. subfield_opened
  5. framework_opened
  6. workflow_start_clicked
  7. verify_started
  8. framework_article_ready
  9. concept_map_ready
  10. first_quiz_submitted

relations_started is tracked separately for the standalone framework-relations action and should not be treated as a required stage in the bundled per-framework workflow funnel.

Legacy first_map_generation_started and first_map_generation_completed events should be monitored as coverage/operations diagnostics only. They no longer represent the main user activation path.

Suggested Weekly Checks

  • Subfield → Framework conversion (subfield_opened to framework_opened)
  • Framework → Graph/article interaction (framework_opened to graph_interacted or article_interacted)
  • Workflow → Article conversion (workflow_start_clicked to first_workflow_article_completed)
  • Article → Concept-map conversion (framework_article_ready to concept_map_ready)
  • Median time to first workflow article
  • Median time to concept map ready
  • Most-clicked next_best_action_cta_clicked.action_id values
  • Homepage CTA split: landing_start_with_field_clicked vs landing_browse_atlas_clicked
  • Explore abandonment: subfield_opened with no framework_opened
  • Empty-field exposure: empty_field_viewed / subfield_opened as a diagnostic, expected to be low
  • Signup start to completion: signup_started -> signup_completed
  • D1 return rate from return_visit_detected

Segmentation

Use these dimensions for funnel cuts:

  • entry_surface (explore, blog, other) to segment by first interaction channel.
  • entry_path for the first tracked route path within the session.
  • subfield and framework_id to find which maps and frameworks convert to deeper generation.
  • field_state remains useful for diagnosing legacy empty-field exposure, but normal user sessions should be mostly mapped.

First Experiment To Run

Test whether the default onboarding CTA should prioritize immediate framework selection or immediate framework workflow start:

  • Variant A: current behavior
  • Variant B: emphasize "Select First Framework" before any generation CTA

Success metric: increase in first_workflow_article_completed rate within the first session.

Internal Endpoint

Activation events are also mirrored to an internal endpoint:

  • POST /api/events receives client events (same-origin + analytics-consent gated)
    • Invalid payloads and no-consent requests are ignored with 204 to stay non-blocking for UX.
  • GET /api/events?windowMinutes=...&name=... returns an aggregated summary for admin sessions only
    • Admin check uses NextAuth session email matching ADMIN_EMAIL.
  • Storage is durable and Redis-backed via the API service, with 30-day retention and a 100k event cap.

Take action in the app

Put what you just read into practice.

Try interactive timeline: Classical MechanicsBrowse atlas by fieldFAQ: timelines and maps