PRD · FLYER Teacher · FLYER Exam · Sprint 114

Có gì mới (What's new) phiên bản 2

Một nơi duy nhất để giáo viên và học sinh biết sản phẩm vừa thay đổi gì, đọc lại được, và mở thẳng tính năng. Thay cho ba cơ chế rời rạc hiện có, trong đó bài gần nhất cho giáo viên đã cách bốn tháng.

Phiên bản
2.0 · bản đề xuất
Màn hiện tại
Chuông → tab FLYER NEWS · popup theo phiên bản
Căn cứ số liệu
Read-replica và mã nguồn, 14/10/2026
Ngày
14/10/2026
Bản đề xuất — cần chốt người viết nội dung và phạm vi phase A
Xuất xứ / Prompt / Giới hạn

Tài liệu trả lời yêu cầu ngày 14/10/2026, nguyên văn:

  • Mình có documents, PRD về phần What's new của product chưa nhỉ? Chưa thì làm cho anh nhé
  • cả Exam.flyer.us và teacher.flyer.us đều có What's new rồi đó

Nội dung do trợ lý AI soạn trong một phiên làm việc. Chưa có PRD nào về chủ đề này trước đó; tài liệu gần nhất là trang hướng dẫn tính năng /onboarding-motion và nhánh preview/tungtony-what-new (trang /whats-new trong app, chưa lên production).

Nguồn: read-replica production ngày 14/10/2026 (bảng version_notifications, notifications, menu_notifications); mã nguồn partner-web main v3.39.x (RecapProvider.tsx, Modal/WhatNews, layouts/main/Notification.tsx, Home/UpdateInfo), flyer-webs/apps/exam (modal/WhatNews, pages/home), backend-nodejs (send-noti.handler.ts); ảnh chụp teacher.flyer.us (14/10/2026) và exam.flyer.us (15/10/2026) từ tài khoản thật; bảng sprint trên roadmap.flyer.vn.

Giới hạn:

  • Không đo được tỷ lệ đọc: trạng thái “đã xem” của popup nằm trong localStorage trình duyệt, tab FLYER NEWS là một bản ghi chung không có trạng thái theo người dùng.
  • Phân loại bài “tính năng” và “chiến dịch” dựa trên tiêu đề, có thể lệch vài bài.
  • Giao diện đăng bài đọc từ mã nguồn admin-web/apps/admin (trang /notifications/versionNotification) và quy tắc hiển thị từ flyer-exam/graph/user/base.resolvers.go; chưa chụp được màn admin.flyer.vn vì công cụ trình duyệt chưa được cấp quyền tên miền đó.
  • Mọi con số ở tab Đề xuất là mục tiêu để kiểm chứng, chưa phải số đo.
Bài gần nhất cho giáo viên
11/06/2026
Popup “Trợ giảng AI” · 4 tháng trước
Sprint đã ra mắt từ đó
3
Sprint 111–113 · 22 mục riêng sprint 113
Cửa sổ hiện popup
5–8 ngày
Hết hạn là mất, không xem lại được
Tỷ lệ đọc đo được
—
Không có trạng thái theo người dùng
Kết luậnSản phẩm đã có ba cơ chế “có gì mới” nhưng không cơ chế nào làm đủ ba việc: báo đúng lúc, đọc lại được, và đo được. Đề xuất gom về một nguồn bài theo sprint, một trang /whats-new có lịch sử, một nút cạnh chuông có số chưa đọc; popup chỉ dành cho bài nổi bật. Phase A không cần backend mới.

Ba cơ chế đang chạy

Cơ chếNơi hiệnNơi đăng (admin.flyer.vn)Số bàiGần nhất
Popup theo phiên bảnTự mở khi vào app, một lần cho mỗi người mỗi phiên bảnNotifications → Version Notification (version_notifications)71 từ 04/2024Giáo viên 11/06/2026 · Học sinh 25/09/2026
Tab FLYER NEWS / EntertainmentGiáo viên: chuông → tab FLYER News. Học sinh: Notification → tab EntertainmentNotifications → Notification (notifications loại GLOBAL)59 từ 01/2023 · 5 trong 400 ngày30/09/2026
Hướng dẫn theo trangDải “Xem hướng dẫn” đầu mỗi trang, có videoMenu notification (menu_notifications)2920/07/2026

Ba lựa chọn

1 · Một nguồn, nhiều bề mặt

Mỗi sprint một bài, dựng nháp từ danh sách đã ra mắt trên roadmap. Popup, trang, nút cạnh chuông và thẻ trang chủ đều đọc từ đó.

2 · Đọc lại được

Bài không hết hạn. Trang /whats-new giữ lịch sử theo sprint, có đường dẫn cố định cho từng bài.

3 · Đo theo người dùng

Trạng thái đã xem lưu phía máy chủ; đo tỷ lệ mở, bấm “Mở tính năng”, và việc dùng tính năng 7 ngày sau khi đọc.

Popup theo phiên bản

Ứng dụngSố bàiCó videoCửa sổ hiện trung bìnhCửa sổ dưới 3 ngàyBài gần nhất
Exam web (học sinh)2165,5 ngày1425/09/2026
App học sinh2055,3 ngày1425/09/2026
Teacher web15107,7 ngày711/06/2026
App giáo viên1388,0 ngày611/06/2026
Phụ huynh227,8 ngày012/02/2026

Theo năm: 2024 có 34 bài, 2025 có 21, 2026 có 16. Theo tiêu đề: 55 bài giới thiệu tính năng, 16 bài chiến dịch (thách đấu, flash sale, mã giảm). Mỗi bài phải tạo hai bản ghi (web và app) nên số bài thật bằng một nửa. Toàn bộ do một tài khoản quản trị đăng.

Thuộc tínhCách làm hiện tại
Nội dungHTML tự do (content_html, content_html_en), màu chữ gắn cứng kiểu hsl(60,75%,60%); ảnh hoặc video YouTube; cờ show_domain, style luôn là v1
Trạng thái đã xemlocalStorage theo userId + appVersion. Đổi trình duyệt hoặc máy là hiện lại; xoá cache là hiện lại
Hết cửa sổKhông còn đường nào xem lại. Không có trang lưu trữ
Giao diện giáo viênModal/WhatNews dùng NewModalLayout, tiêu đề cố định “FLYER được nâng cấp!!”, nút “Đã hiểu!”
Giao diện học sinhModal tím gradient, dòng “Cập nhật mới nhất: <phiên bản>”, vùng nội dung cuộn cao 200px

Nơi đăng: admin.flyer.vn → Notifications → Version Notification

Cùng nhóm menu còn có Notification (tin FLYER NEWS), Mobile Notification (đẩy điện thoại) và Partner Notification. Biểu mẫu Version Notification:

Trường trên biểu mẫuGiá trịNhận xét
Trạng thái kích hoạtACTIVE / INACTIVE
Loại AppTEACHER · PARTNER_WEB · STUDENT · EXAM_WEB · PARENTMột bài cho giáo viên phải tạo hai lần (web và app); học sinh cũng vậy
Hiển thị cho trung tâmBật / tắtTắt thì học sinh thuộc tên miền riêng có cờ “không hiện kim cương” sẽ không thấy
UIV1 / V2Toàn bộ 71 bài đang là V1; app giáo viên đã bỏ điều kiện kiểm tra style
Phiên bảnChuỗi tự nhập, ví dụ 1.6.0Dùng làm khoá “đã xem” ở trình duyệt; trùng phiên bản thì không hiện lại
Loại tiêu đềẢnh tải lên hoặc YouTube id
Nội dung tiếng Việt, tiếng AnhCKEditor, bắt buộc cả haiHTML tự do, màu chữ gắn cứng trong bài
Thời gian kích hoạtNgày bắt đầu, ngày kết thúc; gợi ý 3 ngày · 1 tuần · 1 thángThực tế chọn ngắn: trung bình 5–8 ngày

Quy tắc hiển thị popup

Điều kiệnHệ quả
Tài khoản (hồ sơ giáo viên hoặc học sinh) tạo trên 3 ngàyNgười mới trong tuần đầu không bao giờ thấy popup, kể cả bài đang chạy
Bài ACTIVE, đúng loại app, start_date ≤ now ≤ end_dateNgoài cửa sổ là không có gì để hiện; không có trang lưu trữ
Nhiều bài cùng chạy → lấy bài có chuỗi phiên bản lớn nhấtSo sánh chuỗi, nên “1.14.0” nhỏ hơn “1.6.0”; dễ hiện nhầm bài cũ
Phiên bản đã có trong localStorage của người dùngKhông hiện lại trên máy đó; máy khác hiện lại

Hai điều kiện đầu giải thích vì sao không chụp được popup ngày 14–15/10: không có bài nào trong cửa sổ, và tài khoản dùng để chụp mới tạo.

Màn hình production · 14–15/10/2026

Giáo viên: teacher.flyer.us, tài khoản dùng thử, 14/10. Học sinh: exam.flyer.us, tài khoản thật, 15/10. Popup theo phiên bản không chụp được ở cả hai (xem quy tắc hiển thị); bài giáo viên gần nhất (11/06/2026, phiên bản 1.6.0) có nội dung: “Trợ giảng AI — ‘Bách khoa toàn thư’ giải đáp mọi thắc mắc của giáo viên: kiến thức giảng dạy chuyên môn và ý tưởng hoạt động lớp học; hướng dẫn sử dụng các tính năng trên FLYER LMS; nhận báo cáo chi tiết kết quả học tập của lớp học với 1 câu lệnh”, kèm video YouTube, cửa sổ hiển thị 2 ngày.

Popover chuông với hai tab Lớp học và FLYER News

1 · Popover chuông — hai tab Lớp học và FLYER News; nút “Có gì mới” riêng chưa có trên production.

Trang Thông báo, tab FLYER News trống

2 · Trang Thông báo, tab FLYER News — trống với tài khoản này dù hệ thống có 59 bài GLOBAL.

Dải Xem hướng dẫn và Hướng dẫn trực tiếp trên trang Học sinh

3 · Dải hướng dẫn đầu trang — /vi/student-list: “Xem hướng dẫn” mở video và các bước, “Hướng dẫn trực tiếp” chạy tour trên màn hình thật. Đây là lớp “cách dùng”, không phải “có gì mới”.

Hộp thoại hướng dẫn Thêm học sinh với video và ba bước

4 · Hộp thoại “Xem hướng dẫn” — nội dung từ menu_notifications (video YouTube + 3 bước + nút liên hệ). Khuôn này đáng giữ cho phần “Cách dùng” của mỗi bài có gì mới.

Hộp thoại Xem lại hướng dẫn với nút Mời học sinh vào trường

5 · “Hướng dẫn trực tiếp” — hỏi lại trước khi chạy tour; mỗi trang một tour.

Bước 1/4 của tour hướng dẫn trên trang Học sinh

6 · Tour driver.js, bước 1/4 — khoanh mục “Học Sinh” trên thanh bên. Tiêu đề popover còn hiện chữ mặc định “Popover Title” trong DOM (ẩn bằng CSS).

Trang chủ exam.flyer.us với nhãn NEW trên Practice và Notebook

7 · Trang chủ học sinh — exam.flyer.us. “Có gì mới” duy nhất nhìn thấy là nhãn NEW gắn cứng trên hai biểu tượng (Practice, Notebook); không có nút hay trang riêng.

Bảng Notifications của học sinh, tab Champions Race

8 · Notification → Champions Race — thông báo từ giáo viên (lớp sắp học, nhiệm vụ mới); tương đương tab Lớp học bên giáo viên.

Bảng Notifications của học sinh, tab Entertainment với tin từ FLYER

9 · Notification → Entertainment — cùng nguồn GLOBAL với FLYER NEWS bên giáo viên: tổng kết tháng 9, thách đấu Trung thu, tổng kết tháng 8. Toàn bộ là chiến dịch, không có bài tính năng.

Tab FLYER NEWS trong chuông

Thuộc tínhCách làm hiện tại
NguồnHàm send-noti ghi một bản ghi notifications với type=NEW_FEATURE, type_notification=GLOBAL, source=FLYER, không có profile_id
Nhịp59 bài từ 01/2023; 12 tháng gần nhất 5 bài; 4 trong 5 là chiến dịch học sinh (thách đấu, tổng kết tháng), 1 là tính năng từ điển cho học sinh nhưng hiện cả ở app giáo viên
Trạng thái đã xemCột seen trên bản ghi chung, không theo người dùng. Không đo được ai đã đọc
Liên kếtmeta.linkExam: bài Facebook, YouTube, bit.ly hoặc đường dẫn trong app

Hướng dẫn theo trang

Bảng menu_notifications có 29 mục loại TUTORIAL, mỗi mục gắn một địa chỉ trang (/explore, /assigned-tests, /flyer-ai, /program, /tuition-management, /centralized-exam…), có video. Đây là lớp “cách dùng” tốt nhất đang có, nhưng không nói “cái gì vừa thay đổi”.

Phần đã có nhưng không chạy

Thành phầnTình trạng
Thẻ “TÍNH NĂNG MỚI” ở trang chủ (Home/UpdateInfo)Chữ gắn cứng “Thử ngay tính năng Chương Trình!” trỏ help.flyer.vn; biến isOpen khởi tạo false nên không bao giờ hiện. Mã chết
Trang /whats-new trong appCó trên nhánh preview/tungtony-what-new (17 tính năng, hình động, nút cạnh chuông); production trả 404
Trang /onboarding-motionKhuôn hướng dẫn bằng ảnh thật có khoanh, dựng trên roadmap, chưa vào app

Khoảng cách giữa sản phẩm và thông báo

SprintRa mắtMục đã ra mắtBài “có gì mới” cho giáo viên
11306/10/202622 · 4 tính năng mới, 14 cải tiến; có Bingo AI Co-TeacherKhông
11221/09/202612Không
111—18Không
Trước 11/06/2026Popup “Trợ giảng AI”, cửa sổ 2 ngày

Bảng roadmap có 286 mục đã ra mắt. Tính năng lớn nhất quý này lên production không kèm một dòng thông báo nào.

Sáu nguyên nhân

#Nguyên nhânHệ quả
1Ba nơi, ba bảng, ba cách đăng; không nơi nào là “nguồn”Mỗi lần đăng là làm tay hai đến bốn bản ghi; dễ bỏ sót
2Bài có hạn, 5–8 ngày, nhiều bài 2 ngàyGiáo viên không vào app trong tuần đó thì không bao giờ thấy
3Trạng thái đã xem ở trình duyệtHiện lặp trên máy khác; không có số liệu
4Nội dung chiến dịch và tính năng chung một kênhFLYER NEWS gần đây toàn thách đấu; giáo viên học cách bỏ qua
5Không nối với roadmapPhải viết lại từ đầu dù danh sách đã ra mắt có sẵn trên bảng
6Một người đăng, không có lịchBài giáo viên dừng từ tháng 6 khi người đó bận việc khác
7Popup ẩn với tài khoản dưới 3 ngày tuổi; chọn bài theo chuỗi phiên bảnTuần đầu, lúc giáo viên tò mò nhất, không thấy gì; so chuỗi “1.14.0” < “1.6.0” có thể hiện nhầm bài cũ

Nguyên tắc

  1. Một bài, một nguồn. Bản ghi “bài có gì mới” là nguồn duy nhất; popup, trang, nút chuông, thẻ trang chủ chỉ là cách hiển thị.
  2. Theo sprint, không theo phiên bản. Giáo viên không biết “1.6.0”; họ biết “tuần này có gì”.
  3. Không hết hạn. Bài cũ xếp xuống dưới, không biến mất.
  4. Mỗi bài có một nút mở thẳng tính năng và một nút hướng dẫn, lấy từ menu_notifications khi có.
  5. Chiến dịch tách khỏi tính năng. Thách đấu, ưu đãi đi kênh thông báo lớp học hoặc popup chiến dịch, không vào “Có gì mới”.

Mô hình bài

TrườngÝ nghĩaBắt buộc
sprint, released_atSprint và ngày ra mắt, lấy từ roadmapCó
appteacher · student · parent (một bài có thể gắn nhiều app)Có
kindMới · Cải tiến · Sửa lỗiCó
title_vi/en, summary_vi/enTiêu đề tối đa 60 ký tự; một câu lợi íchCó
body_vi/enTối đa 3 bước “cách dùng”, có cấu trúc, không HTML tự doCó
mediaMột ảnh hoặc GIF 16:9, hoặc videoNên
open_path, guide_idĐường dẫn mở tính năng; mục hướng dẫn tương ứngCó · Nên
audienceGói, vai trò (chủ trường, giáo viên), trường cụ thểKhông
featuredBài nổi bật được phép mở popupKhông
roadmap_item_idsMục trên bảng roadmap mà bài này nói tớiNên

Bề mặt hiển thị

Bề mặtHành viThay cho
Nút “Có gì mới” cạnh chuôngChấm đỏ kèm số bài chưa đọc; bấm mở trang. Chấm tắt khi mở trangThẻ trang chủ chết
Trang /whats-newDòng thời gian theo sprint, lọc theo app và loại, mỗi bài có đường dẫn cố định #<id>, nút “Mở tính năng” và “Hướng dẫn”Tab FLYER NEWS
PopupChỉ bài featured, tối đa một lần mỗi sprint, có nút “Xem tất cả”. Trạng thái xem lưu máy chủPopup theo phiên bản
Thẻ trang chủBài nổi bật mới nhất, tự ẩn sau khi đọcHome/UpdateInfo
Email tổng hợpTuỳ chọn: gom bài của sprint vào email tuần đang có—

Trang /whats-new

┌ Có gì mới ─────────────────────────────── [Giáo viên ▾] [Tất cả loại ▾] ┐ │ │ │ SPRINT 113 · ra mắt 06/10/2026 4 bài │ │ ┌──────────────┐ MỚI · Bingo AI Co-Teacher │ │ │ ảnh 16:9 │ Bingo chọn bài theo năng lực từng học sinh, giáo viên │ │ │ │ duyệt rồi giao. │ │ └──────────────┘ 1 Mở Công cụ › Bingo AI 2 Chọn chế độ 3 Duyệt tuần │ │ [Mở tính năng] [Hướng dẫn] #113-1 │ │ ───────────────────────────────────────────────────────────────────── │ │ CẢI TIẾN · Thông báo điểm danh về app phụ huynh … [Mở tính năng] │ │ │ │ SPRINT 112 · ra mắt 21/09/2026 3 bài │ │ … │ └───────────────────────────────────────────────────────────────────────────┘

Luồng dữ liệu

Roadmap board ─ items shipped (sprint N) ──▶ nháp bài (tự sinh) ──▶ người viết sửa, duyệt │ featured? ──▶ popup 1 lần/sprint ▼ nút chuông (số chưa đọc) ◀── release_note_reads ◀── release_notes ──▶ /whats-new (lịch sử) │ └──▶ thẻ trang chủ · email tuần

Nháp sinh từ GET /api/items?sprint=N của roadmap (hoặc công cụ MCP sprint_board): tiêu đề, loại, PRD. Người viết chỉ còn việc đổi tiêu đề kỹ thuật thành lợi ích và thêm ảnh.

Lịch

Khi nàoViệcAi
Ngày đóng sprint (T2)Sinh nháp từ danh sách đã ra mắt; chọn tối đa 5 bài, đánh dấu 1 bài nổi bậtPM
T3Viết lại theo mẫu, thêm ảnh hoặc GIF, bản ENContent
Ngày ra mắt (T2 tuần sau)Đăng cùng lúc với deploy; kiểm tra nút “Mở tính năng”PM
+7 ngàyXem số mở, số bấm; ghi vào mục đo lường của sprintPM

Mẫu một bài

PhầnQuy tắcVí dụ (sprint 113)
Tiêu đềTối đa 60 ký tự, nói việc giáo viên làm được, không nói tên kỹ thuậtBingo tự chọn bài theo năng lực từng học sinh
Một câu lợi íchAi, được gì, mất bao lâuMỗi tuần giáo viên duyệt một danh sách Bingo đã chọn sẵn thay vì tự tìm đề cho từng em.
Cách dùngTối đa 3 bước, mỗi bước một dòng1 Công cụ › Bingo AI Co-Teacher · 2 Chọn “Đề xuất — giáo viên duyệt” · 3 Duyệt tuần này
ẢnhMột ảnh thật 16:9, khoanh vùng tím theo khuôn /onboarding-motionMàn hàng chờ duyệt
Nút“Mở tính năng” bắt buộc; “Hướng dẫn” khi có mục trong menu_notifications/vi/bingo-ai-co-teacher

Không đưa vào “Có gì mới”

North StarTỷ lệ giáo viên hoạt động trong tuần đã mở ít nhất một bài của sprint vừa ra mắt, đo 7 ngày sau ngày ra mắt.
Chỉ sốCách đoMục tiêu phase A
Tỷ lệ thấyGiáo viên hoạt động trong 7 ngày có release_note_reads ÷ giáo viên hoạt độngTừ 40%
Tỷ lệ bấm “Mở tính năng”Sự kiện whats_new_open_feature ÷ lượt mở bàiTừ 15%
Dùng tính năng sau khi đọcGiáo viên đã đọc bài X có hành động trong X trong 7 ngày, so với nhóm chưa đọcCao hơn nhóm chưa đọc từ 1,5 lần
Độ trễNgày ra mắt → ngày đăng bài0 ngày
Đều đặnSprint có bài ÷ sprint đã ra mắt100%
PhiềnTỷ lệ đóng popup dưới 2 giâyDưới 50%

Sự kiện gửi qua bộ đo đang có (xem /tracking-events): whats_new_badge_click, whats_new_view (note_id), whats_new_open_feature, whats_new_open_guide, whats_new_popup_close (kèm thời gian mở).

PhasePhạm viCần backendThời gian
A · Có ngayTrang /whats-new trong app đọc bài từ roadmap (API hoặc tệp JSON xuất mỗi sprint); nút cạnh chuông, chấm đỏ theo localStorage; bài đầu tiên cho sprint 113 và 114; ngừng dùng popup theo phiên bản cho giáo viênKhôngSprint 114
B · Đo đượcBảng release_notes, release_note_reads; số chưa đọc theo máy chủ; popup bài nổi bật 1 lần/sprint; 5 sự kiện đo; thẻ trang chủCóSprint 115–116
C · Gom và cá nhân hoáGộp tab FLYER NEWS; audience theo gói và vai trò; nháp tự sinh từ roadmap; giao diện đăng bài trong admin; app học sinh và phụ huynh dùng chung mô hìnhCóQ1/2027
Làm được ngay, không cần codeĐăng bài sprint 113 cho giáo viên bằng biểu mẫu Version Notification đang có: hai bản ghi TEACHER và PARTNER_WEB, cửa sổ chọn “1 tháng” thay vì 2–3 ngày, phiên bản đặt theo sprint (ví dụ s113) để không trùng khoá cũ. Đây là cách rẻ nhất để chấm dứt bốn tháng im lặng trong khi phase A được làm.

Việc phải làm trong sprint 114

#ViệcNgười làm
1Chốt người viết nội dung mỗi sprint và người duyệtBan lãnh đạo
2Đưa trang /whats-new và nút cạnh chuông từ nhánh preview/tungtony-what-new lên main, đổi nguồn dữ liệu sang bài theo sprintDev
3Viết 4 bài sprint 113 (Bingo AI Co-Teacher, thông báo điểm danh về app phụ huynh, đồng bộ học phí và điểm danh sang TruongSo, liên kết lead) theo mẫu ở tab Nội dungContent
4Xoá Home/UpdateInfo và chuỗi “Thử ngay tính năng Chương Trình!” khỏi mãDev
5Gắn 5 sự kiện đoDev

Rủi ro

Rủi roMứcCách giảm
Không có người viết đều mỗi sprintCaoNháp tự sinh từ roadmap; bài tối thiểu là tiêu đề, một câu, một nút
Chiến dịch lấn át tính năngVừaChiến dịch không được vào “Có gì mới”; có trường kind ràng buộc
Popup gây phiềnVừaChỉ bài nổi bật, một lần mỗi sprint, đo tỷ lệ đóng nhanh
Bản EN chậmThấpBài không có EN thì hiện VI với nhãn, không chặn đăng

Cần ban lãnh đạo quyết

  1. Ai viết và ai duyệt bài mỗi sprint.
  2. Giữ popup cho bài nổi bật hay bỏ hẳn popup.
  3. Gộp FLYER NEWS vào trang mới ở phase C hay giữ riêng cho chiến dịch.
  4. Áp mô hình này cho app học sinh và phụ huynh cùng lúc hay làm giáo viên trước.

Cập nhật 14/10/2026 · Liên quan: Hướng dẫn tính năng · Chuỗi email onboarding · Bộ sự kiện đo lường · PRD Bingo AI Co-Teacher