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.
Bản đề xuất — cần chốt người viết nội dung và phạm vi phase ATà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:
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 đó./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.| Cơ chế | Nơi hiện | Nơi đăng (admin.flyer.vn) | Số bài | Gần nhất |
|---|---|---|---|---|
| Popup theo phiên bản | Tự mở khi vào app, một lần cho mỗi người mỗi phiên bản | Notifications → Version Notification (version_notifications) | 71 từ 04/2024 | Giáo viên 11/06/2026 · Học sinh 25/09/2026 |
| Tab FLYER NEWS / Entertainment | Giáo viên: chuông → tab FLYER News. Học sinh: Notification → tab Entertainment | Notifications → Notification (notifications loại GLOBAL) | 59 từ 01/2023 · 5 trong 400 ngày | 30/09/2026 |
| Hướng dẫn theo trang | Dải “Xem hướng dẫn” đầu mỗi trang, có video | Menu notification (menu_notifications) | 29 | 20/07/2026 |
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ừ đó.
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.
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.
| Ứng dụng | Số bài | Có video | Cửa sổ hiện trung bình | Cửa sổ dưới 3 ngày | Bài gần nhất |
|---|---|---|---|---|---|
| Exam web (học sinh) | 21 | 6 | 5,5 ngày | 14 | 25/09/2026 |
| App học sinh | 20 | 5 | 5,3 ngày | 14 | 25/09/2026 |
| Teacher web | 15 | 10 | 7,7 ngày | 7 | 11/06/2026 |
| App giáo viên | 13 | 8 | 8,0 ngày | 6 | 11/06/2026 |
| Phụ huynh | 2 | 2 | 7,8 ngày | 0 | 12/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ính | Cách làm hiện tại |
|---|---|
| Nội dung | HTML 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 đã xem | localStorage 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ên | Modal/WhatNews dùng NewModalLayout, tiêu đề cố định “FLYER được nâng cấp!!”, nút “Đã hiểu!” |
| Giao diện học sinh | Modal 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 |
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ẫu | Giá trị | Nhận xét |
|---|---|---|
| Trạng thái kích hoạt | ACTIVE / INACTIVE | |
| Loại App | TEACHER · PARTNER_WEB · STUDENT · EXAM_WEB · PARENT | Mộ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âm | Bật / tắt | Tắ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 |
| UI | V1 / V2 | Toà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ản | Chuỗi tự nhập, ví dụ 1.6.0 | Dù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 Anh | CKEditor, bắt buộc cả hai | HTML tự do, màu chữ gắn cứng trong bài |
| Thời gian kích hoạt | Ngày bắt đầu, ngày kết thúc; gợi ý 3 ngày · 1 tuần · 1 tháng | Thực tế chọn ngắn: trung bình 5–8 ngày |
| Điều kiện | Hệ quả |
|---|---|
| Tài khoản (hồ sơ giáo viên hoặc học sinh) tạo trên 3 ngày | Ngườ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_date | Ngoà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ất | So 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ùng | Khô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.
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.
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.
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.
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”.
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.
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.
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).
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.
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.
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.
| Thuộc tính | Cách làm hiện tại |
|---|---|
| Nguồn | Hà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ịp | 59 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 đã xem | Cột seen trên bản ghi chung, không theo người dùng. Không đo được ai đã đọc |
| Liên kết | meta.linkExam: bài Facebook, YouTube, bit.ly hoặc đường dẫn trong app |
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”.
| Thành phần | Tì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 app | Có 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-motion | Khuôn hướng dẫn bằng ảnh thật có khoanh, dựng trên roadmap, chưa vào app |
| Sprint | Ra mắt | Mục đã ra mắt | Bài “có gì mới” cho giáo viên |
|---|---|---|---|
| 113 | 06/10/2026 | 22 · 4 tính năng mới, 14 cải tiến; có Bingo AI Co-Teacher | Không |
| 112 | 21/09/2026 | 12 | Không |
| 111 | — | 18 | Không |
| Trước 11/06/2026 | Popup “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.
| # | Nguyên nhân | Hệ quả |
|---|---|---|
| 1 | Ba 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 |
| 2 | Bài có hạn, 5–8 ngày, nhiều bài 2 ngày | Giáo viên không vào app trong tuần đó thì không bao giờ thấy |
| 3 | Trạng thái đã xem ở trình duyệt | Hiện lặp trên máy khác; không có số liệu |
| 4 | Nội dung chiến dịch và tính năng chung một kênh | FLYER NEWS gần đây toàn thách đấu; giáo viên học cách bỏ qua |
| 5 | Không nối với roadmap | Phải viết lại từ đầu dù danh sách đã ra mắt có sẵn trên bảng |
| 6 | Một người đăng, không có lịch | Bài giáo viên dừng từ tháng 6 khi người đó bận việc khác |
| 7 | Popup ẩn với tài khoản dưới 3 ngày tuổi; chọn bài theo chuỗi phiên bản | Tuầ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ũ |
menu_notifications khi có.| Trường | Ý nghĩa | Bắt buộc |
|---|---|---|
sprint, released_at | Sprint và ngày ra mắt, lấy từ roadmap | Có |
app | teacher · student · parent (một bài có thể gắn nhiều app) | Có |
kind | Mới · Cải tiến · Sửa lỗi | Có |
title_vi/en, summary_vi/en | Tiêu đề tối đa 60 ký tự; một câu lợi ích | Có |
body_vi/en | Tối đa 3 bước “cách dùng”, có cấu trúc, không HTML tự do | Có |
media | Một ảnh hoặc GIF 16:9, hoặc video | Nên |
open_path, guide_id | Đường dẫn mở tính năng; mục hướng dẫn tương ứng | Có · Nên |
audience | Gói, vai trò (chủ trường, giáo viên), trường cụ thể | Không |
featured | Bài nổi bật được phép mở popup | Không |
roadmap_item_ids | Mục trên bảng roadmap mà bài này nói tới | Nên |
| Bề mặt | Hành vi | Thay cho |
|---|---|---|
| Nút “Có gì mới” cạnh chuông | Chấm đỏ kèm số bài chưa đọc; bấm mở trang. Chấm tắt khi mở trang | Thẻ trang chủ chết |
Trang /whats-new | Dò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 |
| Popup | Chỉ 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 đọc | Home/UpdateInfo |
| Email tổng hợp | Tuỳ chọn: gom bài của sprint vào email tuần đang có | — |
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.
| Khi nào | Việc | Ai |
|---|---|---|
| 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ật | PM |
| T3 | Viết lại theo mẫu, thêm ảnh hoặc GIF, bản EN | Content |
| 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ày | Xem số mở, số bấm; ghi vào mục đo lường của sprint | PM |
| Phần | Quy tắc | Ví 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ật | Bingo tự chọn bài theo năng lực từng học sinh |
| Một câu lợi ích | Ai, được gì, mất bao lâu | Mỗ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ùng | Tối đa 3 bước, mỗi bước một dòng | 1 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 |
| Ảnh | Một ảnh thật 16:9, khoanh vùng tím theo khuôn /onboarding-motion | Mà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 |
audience, không đăng chung.| Chỉ số | Cách đo | Mục tiêu phase A |
|---|---|---|
| Tỷ lệ thấy | Giáo viên hoạt động trong 7 ngày có release_note_reads ÷ giáo viên hoạt động | Từ 40% |
| Tỷ lệ bấm “Mở tính năng” | Sự kiện whats_new_open_feature ÷ lượt mở bài | Từ 15% |
| Dùng tính năng sau khi đọc | Giáo viên đã đọc bài X có hành động trong X trong 7 ngày, so với nhóm chưa đọc | Cao hơn nhóm chưa đọc từ 1,5 lần |
| Độ trễ | Ngày ra mắt → ngày đăng bài | 0 ngày |
| Đều đặn | Sprint có bài ÷ sprint đã ra mắt | 100% |
| Phiền | Tỷ lệ đóng popup dưới 2 giây | Dướ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ở).
| Phase | Phạm vi | Cần backend | Thời gian |
|---|---|---|---|
| A · Có ngay | Trang /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ên | Không | Sprint 114 |
| B · Đo được | Bả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ình | Có | Q1/2027 |
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 | Người làm |
|---|---|---|
| 1 | Chốt người viết nội dung mỗi sprint và người duyệt | Ban 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 sprint | Dev |
| 3 | Viế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 dung | Content |
| 4 | Xoá Home/UpdateInfo và chuỗi “Thử ngay tính năng Chương Trình!” khỏi mã | Dev |
| 5 | Gắn 5 sự kiện đo | Dev |
| Rủi ro | Mức | Cách giảm |
|---|---|---|
| Không có người viết đều mỗi sprint | Cao | Nhá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ăng | Vừa | Chiến dịch không được vào “Có gì mới”; có trường kind ràng buộc |
| Popup gây phiền | Vừa | Chỉ bài nổi bật, một lần mỗi sprint, đo tỷ lệ đóng nhanh |
| Bản EN chậm | Thấp | Bài không có EN thì hiện VI với nhãn, không chặn đăng |