Bỏ qua để đến nội dung

DOL Edu - Onboarding Flow Documentation (Web V2)

DomainsDOL EnglishUX1.917 words10 min read
active
  • Nếu câu hỏi là shell post-login, default entry, hoặc return/continuity sau auth, đọc ../ENG_Navigation_00_Overview.md trước.
  • Core canon của lane auth vẫn đọc từ ./REG_00_Overview.md.
  • File này chỉ giữ onboarding/goal nudge behavior sau khi entry route đã được quyết.
  • Current truth của onboarding lane nằm trong UX Design/Register; Discovery chỉ là supporting trail khi cần replay quyết định cũ.
  • Thu thập thông tin mục tiêu đủ dùng để cá nhân hóa gợi ý học, nhưng không làm tăng friction lúc tạo tài khoản.
  • Đảm bảo mục tiêu học tập là lớp tùy chọn và không trở thành điều kiện bắt buộc ở bất kỳ flow nào.
  • Làm rõ khác biệt giữa lane thi chứng chỉ và lane giao tiếp thực tế để user chọn mục tiêu đúng ngữ cảnh ngay từ đầu.
  • Giữ lane onboarding riêng cho KID: phụ huynh quản lý tạo account con, con vào học nhanh bằng code.
  • First landing sau khi đăng ký thành công là Home dạng empty-state.
  • Onboarding mục tiêu xuất hiện dưới dạng popup trên Home ngay sau khi đăng ký thành công.
  • Trong 7 ngày đầu sau signup, Home có thể hiển thị activation card inline để gợi ý bước học đầu tiên/tiếp theo.
  • Onboarding là optional: user có thể bỏ qua.
  • Không dùng nhắc popup theo chu kỳ tuần cố định.
  • Nhắc lại mục tiêu theo ngữ cảnh, không chặn luồng chính.
  • Goal popup đi theo logic hỏi ngắn dạng “chọn hướng học trước” thay vì hiển thị cùng lúc nhiều field.
  • Touchpoints nhắc mục tiêu:
    • Home,
    • Tiến độ,
    • Profile.
  • Tần suất nhắc:
    • nhắc mục tiêu: tối đa 1 lần/ngày cho mỗi account,
    • tổng cap goal/profile nudge: tối đa 1 lần/ngày cho mỗi account.
  • Chống mỏi nudge:
    • nếu user dismiss/ignore goal nudge >=3 lần trong rolling 14 ngày và vẫn chưa có goal:
      • bật soft-snooze trong 14 ngày.
    • trong soft-snooze:
      • không hiện popup goal,
      • chỉ giữ nhắc nhẹ inline ở touchpoint hợp lệ.
    • nếu user chủ động mở form goal hoặc lưu goal thì thoát soft-snooze ngay.
  • Nếu đồng thời thiếu cả goal và profile milestone:
    • ưu tiên nhắc goal trước.
  • Goal không bắt buộc trong flow trả phí; checkout chỉ bắt buộc thông tin thanh toán.
  • Nếu đăng ký phát sinh từ flow cần auth (ví dụ bắt đầu làm bài), sau khi xác thực thành công user quay lại đúng context trước đó; nếu context không còn hợp lệ thì fallback theo thứ tự:
    • route hợp lệ gần nhất trong cùng skill/program,
    • route hợp lệ ở cấp program,
    • onboarding / program choice / discovery là fallback cuối.
  • Nếu user được return về protected in-progress context:
    • không chèn goal popup ngay tại thời điểm return,
    • ở lần vào Home đầu tiên sau đó trong cùng session, goal nudge vẫn có thể hiển thị nếu chưa vượt cap ngày.
  • Activation guidance boundary:
    • activation chỉ là nudge trên Home (inline card), không thêm popup onboarding mới.
    • goal onboarding và activation card cùng là non-blocking; không có hard prerequisite giữa hai phần.
  • Kid lane boundary:
    • lane phụ huynh chỉ hiển thị trong domain KID, không hiển thị trong English/Academy,
    • con vào KID bằng code thì ưu tiên vào học ngay, không chèn goal popup kiểu thi/chứng chỉ ở thời điểm vào lớp học.
    • phụ huynh có thể thiết lập mục tiêu cơ bản cho con trong khu quản lý, không chặn việc vào học.
    • khi user chuyển từ KID sang English/Academy và kích hoạt login độc lập, goal popup theo chương trình được bật ở lần vào Home đầu tiên của domain mới.

Purpose: ghi nhận mục tiêu học tập để cá nhân hóa Home, recommendation và theo dõi tiến bộ.

  1. Hỏi Bạn học tiếng Anh để làm gì lúc này?
    • Thi chứng chỉ hoặc Giao tiếp thực tế.
  2. Nếu chọn Thi chứng chỉ:
    • chọn chương trình (IELTS, TOEIC, SAT),
    • chọn assessment form + skill ưu tiên,
    • chọn điểm mục tiêu theo đúng thang điểm của chương trình đã chọn,
    • chọn ngày thi dự kiến (hoặc chọn Chưa chốt ngày thi).
  3. Nếu chọn Giao tiếp thực tế:
    • chọn bối cảnh sử dụng chính (đời sống/công việc/du lịch…),
    • chọn mức năng lực mong muốn,
    • chọn mốc thời gian kỳ vọng (ví dụ 1/3/6 tháng hoặc Chưa chốt).
  4. Hiển thị thẻ tóm tắt mục tiêu trước khi lưu để user rà lại lựa chọn.
  • Nhánh mục tiêu: Thi chứng chỉ hoặc Giao tiếp thực tế.
  • Nếu nhánh Thi chứng chỉ:
    • chương trình mục tiêu (IELTS, TOEIC, SAT),
    • assessment form + skill mục tiêu chính,
    • điểm mục tiêu theo guardrail của program + assessment form (tham chiếu catalog scale),
    • ngày thi dự kiến (optional, khuyến nghị điền).
  • Nếu nhánh Giao tiếp thực tế:
    • bối cảnh giao tiếp ưu tiên,
    • mức năng lực mong muốn,
    • mốc thời gian kỳ vọng (optional).
  • Thẻ tóm tắt mục tiêu trước khi Lưu mục tiêu.
  • CTA:
    • Lưu mục tiêu
    • Bỏ qua
  • Goal picker phải đọc từ REG_Goal_Scale_Catalog.md.
  • Baseline scale theo chương trình:
    • IELTS: band 0.0 -> 9.0 (step 0.5),
    • TOEIC: theo form/skill (10..990, 5..495, 0..200),
    • SAT: total 400..1600, section 200..800 (step 10),
    • Giao tiếp: level A1..C2 (CEFR).
  • Lưu mục tiêu:
    • lưu goal profile,
    • payload goal phải lưu đủ program + assessment form + skill + scale profile + target value,
    • nếu là nhánh thi và chưa có ngày thi, vẫn cho lưu (không chặn) nhưng gắn nhắc nhẹ bổ sung mốc thời gian ở touchpoint sau,
    • nếu là nhánh giao tiếp và chưa có mốc thời gian, vẫn cho lưu (không chặn) và ưu tiên gợi ý hoàn thiện ở Home/Profile,
    • nếu user chỉ tạo 1 goal thì goal đó mặc định là primary,
    • cho phép thêm 1 goal phụ (secondary) sau đó từ Profile/Practice Management,
    • mỗi lần đổi goal tạo goal_version_id mới (append-only),
    • đóng popup,
    • cập nhật card/nudge liên quan ở Home,
    • hiển thị popover xác nhận nhanh.
  • Bỏ qua:
    • đóng popup,
    • giữ trạng thái goal chưa trả lời,
    • chỉ nhắc lại khi user đi qua touchpoint ngữ cảnh hợp lệ.
  • Goal input rendering:
    • sau khi user chọn program, UI chỉ render các target options hợp lệ theo program đó,
    • sau khi user chọn assessment form, UI chỉ render skill options hợp lệ theo form đó,
    • không dùng một field điểm mục tiêu chung cho mọi chương trình,
    • không hiển thị trường “điểm thi” cho nhánh Giao tiếp thực tế,
    • nếu target quá tham vọng so với mốc thời gian đã chọn, chỉ cảnh báo mức độ thách thức (không hard-block).

Profile completion đi theo milestone progression. Mỗi milestone hoàn thành nhận 1 badge ghi nhận.

  • Basic profile: tên, tuổi, ngày sinh, thành phố, social links.
  • Academic profile: chương trình + mục tiêu theo lane (exam score hoặc communication proficiency), đều optional và cho phép partial completion.
  • Goal profile: lớp mục tiêu cá nhân hoá (optional).
  • Payment profile: thông tin thanh toán/thẻ trong luồng trả phí.
  • Home giữ nudge hoàn thiện hồ sơ theo từng milestone đang thiếu.
  • Goal profile là lớp khuyến khích, không phải hard gate.
  • Payment milestone vẫn hiển thị cho mọi user.
  • Payment milestone có trọng số trong % hoàn thiện profile.
  • Nếu user cung cấp payment profile sớm trước khi trả phí, hệ thống lưu nhận như dữ liệu optional/prefill.
  • Badge/milestone anti-abuse:
    • mỗi milestone chỉ thưởng 1 lần/account.
  • Achievement scope V2:
    • chỉ track + display,
    • social sharing deferred (data-ready).
  • first_post_signup_landing = home_empty_state.
  • goal_required_policy = none.
  • goal_status = answered | unanswered | skipped.
  • goal_model_mode = program_assessment_form_skill_aware.
  • goal_depth_scope = program_assessment_form_skill.
  • goal_program_id = enum.
  • goal_assessment_form = enum.
  • goal_skill_id = enum.
  • goal_form_skill_options_source = assessment_form_catalog_v1.
  • goal_scale_catalog_id = reg_goal_scale_catalog_v1.
  • goal_scale_catalog_version = 2026-03-04.
  • goal_scale_profile_id = string.
  • goal_target_value = number | string.
  • goal_priority = primary | secondary.
  • goal_secondary_limit = 1.
  • goal_version_id = string.
  • goal_versioning_policy = append_only.
  • goal_nudge_mode = contextual_only.
  • goal_nudge_touchpoints = home | practice_management | profile.
  • goal_nudge_daily_cap = 1.
  • goal_nudge_suppress_on_return_to_protected_context = true.
  • goal_nudge_allow_on_first_home_entry_same_session_if_cap_allows = true.
  • goal_nudge_dismiss_streak_threshold = 3.
  • goal_nudge_dismiss_window_days = 14.
  • goal_nudge_soft_snooze_days = 14.
  • goal_nudge_soft_snooze_popup_policy = suppress.
  • goal_nudge_soft_snooze_surface = inline_only.
  • goal_nudge_soft_snooze_exit = manual_goal_open | goal_saved.
  • profile_completion_milestone_state = basic | academic | goal | payment.
  • profile_completion_badges_count = integer.
  • profile_completion_nudge_priority = goal_first.
  • profile_completion_nudge_global_daily_cap = 1.
  • profile_completion_payment_milestone_weighted = true.
  • activation_window_days = 7.
  • activation_surface_mode = home_inline_card_only_non_blocking.
  • activation_ladder_steps = first_attempt | second_attempt_within_48h | active_days_ge3_week1.
  • kid_access_mode = parent_managed_code_entry.
  • kid_goal_popup_policy_on_child_entry = suppress.
  • kid_to_independent_login_policy = same_account_upgrade_no_recreate.
  • onboarding_goal_popup_viewed.
  • onboarding_goal_saved.
  • onboarding_goal_skipped.
  • onboarding_goal_contextual_nudge_viewed.
  • onboarding_goal_soft_snooze_entered.
  • onboarding_goal_soft_snooze_exited.
  • onboarding_goal_primary_set.
  • onboarding_goal_secondary_set.
  • onboarding_goal_version_created.
  • profile_milestone_completed.
  • profile_badge_awarded.
  • 2026-03-25: Đồng bộ onboarding với auth return canon mới: context invalid không fallback thẳng về Home mà đi theo ladder context gần nhất trước, Home sau cùng.