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:
| Event | Trigger | Key non-PII properties |
|---|---|---|
landing_viewed | User opens the homepage | route, referrer, UTM fields, traffic_source, is_logged_in, variant |
explore_field_opened | User expands/selects a category, discipline, field, or subfield entry point | category, discipline, subfield, field_state, framework_count, source, is_logged_in |
subfield_opened | User opens an /explore/... subfield page or switches subfield in-app | category, discipline, subfield, field_state, framework_count, is_logged_in |
framework_opened | User selects a framework from a subfield timeline/list | category, discipline, subfield, framework_id, framework_slug, interaction_type, is_logged_in |
graph_interacted | User selects a concept node, clicks a vocabulary-timeline concept, exports, or proposes concept-map changes | subfield, framework_id, framework_slug, concept_id, interaction_type, is_logged_in |
article_interacted | User views sources, copies, rates, proposes edits, generates concept articles, or starts/answers quizzes | article_layer, subfield, framework_id, framework_slug, concept_id, interaction_type, is_logged_in |
return_visit_detected | Returning session after the stored first-seen timestamp passes the return threshold | subfield, elapsed_ms/return context where available, is_logged_in |
share_clicked | User clicks a copy-link share control | subfield, framework_id, framework_slug, interaction_type, source, is_logged_in |
signup_started | User starts Google sign-in from nav, empty field, workflow, or concept article CTA | source, subfield, framework_id, concept_id, interaction_type |
signup_completed | User returns authenticated after a tracked sign-in start | source, 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 toPOST /api/eventsvercel: Vercel Analytics provider eventsinternal,vercel: both
Legacy Activation Events
The primary onboarding flow emits the following activation events:
| Event | Trigger | Goal |
|---|---|---|
landing_view | User opens homepage | Top-of-funnel traffic |
landing_start_with_field_clicked | User clicks the primary homepage hero CTA | Measure homepage guided-entry intent |
landing_browse_atlas_clicked | User clicks the secondary homepage browse CTA | Measure homepage browse intent |
field_selected | User selects a field or subfield from search/browse | Intent to explore |
explore_view | User opens an explore page | Explore entry |
workflow_start_clicked | User starts a per-framework workflow | Framework-generation intent |
verify_started | Verification queue started for the selected framework | Step 1 progression |
framework_article_ready | Framework article became available | First deep learning milestone |
first_workflow_article_completed | First framework article is generated in workflow | Activation north star |
concept_map_ready | Concept map became available | Deeper framework coverage |
first_quiz_submitted | First quiz interaction submitted | Learning engagement |
relations_started | Separate framework-relations action started | Optional branch outside the bundled workflow |
login_prompt_shown | Login requirement is visibly shown before a generation/workflow action | Separate auth friction from generation friction |
login_started | User clicks a login CTA and OAuth flow starts | Measure auth intent |
login_completed | Session returns authenticated after a tracked login start | Measure auth completion |
next_best_action_cta_clicked | User clicks CTA in dynamic "Next best action" strip | Measure guidance engagement |
blog_viewed | User opens a blog page | Blog entry attribution |
onboarding_variant_assigned | User is assigned guided or full onboarding variant | Experiment attribution |
session_returned_d1 | Returning session after 24h | Early retention |
Legacy map-generation events still exist for back-compatibility and rare empty-field/admin paths:
| Event | Current interpretation |
|---|---|
empty_field_viewed | Diagnostic only; normal users should usually land on populated subfields. |
first_map_generation_started | Legacy empty-field generation event; do not use as a primary activation funnel step. |
first_map_generation_completed | Legacy 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
subfielddisciplineframework_idframework_labelsource_page_type(usuallyexplore)
verify_started
subfielddisciplineframework_idframework_labelsource_page_type(usuallyexplore)
framework_article_ready
subfieldframework_idframework_labelfield_state(mappedin the normal browsing flow; retained for back-compatibility)variantis_logged_in
first_workflow_article_completed
subfieldframework_idframework_labelfield_state(mappedin the normal browsing flow; retained for back-compatibility)is_logged_in
concept_map_ready
subfieldframework_idfield_state(mappedin the normal browsing flow; retained for back-compatibility)variantis_logged_in
login_prompt_shown
source(for examplenext_best_action_workflow)subfielddisciplineframework_id(when applicable)field_stateis_logged_in
next_best_action_cta_clicked
action_id(for examplestart_verification,start_article)cta_labelsubfieldframework_idis_logged_in
onboarding_variant_assigned
variant(guidedorfull)
Funnel Definition
Use this baseline marketing funnel:
landing_viewedexplore_field_openedsubfield_openedframework_openedgraph_interactedorarticle_interactedreturn_visit_detected,share_clicked,signup_started, orsignup_completed
Track conversion rates and median time between each step.
Extended first-session funnel:
landing_viewedlanding_start_with_field_clickedorlanding_browse_atlas_clickedexplore_field_openedsubfield_openedframework_openedworkflow_start_clickedverify_startedframework_article_readyconcept_map_readyfirst_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_openedtoframework_opened) - Framework → Graph/article interaction (
framework_openedtograph_interactedorarticle_interacted) - Workflow → Article conversion (
workflow_start_clickedtofirst_workflow_article_completed) - Article → Concept-map conversion (
framework_article_readytoconcept_map_ready) - Median time to first workflow article
- Median time to concept map ready
- Most-clicked
next_best_action_cta_clicked.action_idvalues - Homepage CTA split:
landing_start_with_field_clickedvslanding_browse_atlas_clicked - Explore abandonment:
subfield_openedwith noframework_opened - Empty-field exposure:
empty_field_viewed/subfield_openedas 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_pathfor the first tracked route path within the session.subfieldandframework_idto find which maps and frameworks convert to deeper generation.field_stateremains useful for diagnosing legacy empty-field exposure, but normal user sessions should be mostlymapped.
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/eventsreceives client events (same-origin + analytics-consent gated)- Invalid payloads and no-consent requests are ignored with
204to stay non-blocking for UX.
- Invalid payloads and no-consent requests are ignored with
GET /api/events?windowMinutes=...&name=...returns an aggregated summary for admin sessions only- Admin check uses NextAuth session email matching
ADMIN_EMAIL.
- Admin check uses NextAuth session email matching
- 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.