Skip to content

Marlins — xếp hạng JTBD, site-map ba tầng, luật trang điều hướng ​

Chủ dự án, 2026-08-25: "hệ thống các pages đang quá rối rắm, không phân tầng một cách khoa học".

Chẩn đoán: danh sách JTBD của bố mẹ đã có và vẫn đúng (parent-jtbd.md, JTBD-P1…P6). Thứ sai không phải là hiểu biết về bố mẹ, mà là điều hướng không phản chiếu hiểu biết đó. Menu đang xếp theo tên tính năng ("Giới thiệu", "Về Marlins", "Lighthouse") thay vì theo câu hỏi bố mẹ mang tới. Hệ quả đo được trên bản đang chạy:

  • 6 tab ngang, trong đó "Giới thiệu" thật ra là trang mời bạn bè — bố mẹ bấm vào chờ đọc giới thiệu thì gặp trang referral. Hai tab ("Giới thiệu", "Về Marlins") đọc như nhau.
  • Trang chủ trộn điều hướng với nội dung: danh sách con (điều hướng) + "Việc tiếp theo" đã trải nội dung + lời mời xem Finding Nemo.
  • Trang con: 4 ô điều hướng rồi lại đổ tiếp khối Student Portrait ngay bên dưới.
  • "Lighthouse" là chữ tiếng Anh không giải thích, và trùng nghĩa với ô "Mục tiêu" đứng ngay cạnh.

1. Xếp hạng JTBD theo tần suất × mức gấp ​

Xếp hạng này chỉ dùng để quyết định thứ gì được lên tầng nào, không thay bảng feature ở parent-jtbd.md.

HạngJTBDTần suấtGấpVì sao xếp ở đây
1P3 — "tuần này tôi nên làm gì"mỗi lần vàocaoCâu duy nhất bố mẹ mang theo khi mở máy. Trả lời sai thì mọi thứ còn lại vô nghĩa.
2P1 — "con đang thực sự ở đâu"tuầnvừaLà bằng chứng cho hạng 1. Bố mẹ đọc để tin lời khuyên, không đọc để thưởng thức số liệu.
3P4 — "đừng để tôi làm sai"khi định can thiệprất cao lúc xảy raHiếm nhưng đắt: một quyết định cho học thêm sai nguyên nhân tốn hàng tháng. Phải bám vào hạng 1, không đứng riêng.
4P2 — "vì sao con gặp khó"thángvừaLà chiều sâu của hạng 2. Không phải điểm đến, là chỗ bấm thêm một lớp.
5P6 — "hồ sơ xuyên suốt, con nhắm tới đâu"quýthấpMục tiêu, chân dung, lộ trình. Đặt nặng thì át hạng 1; bỏ thì mất phương hướng dài hạn.
6P5 — "cả nhà phối hợp"quýthấpMời người thân, chia sẻ. Là việc hành chính.
—Bán hàng (khoá học, sự kiện, giới thiệu bạn)thưado Nemo12 gấp, không phải bố mẹ gấpKhông phải JTBD của bố mẹ. Chiếm 3/6 tab hiện nay là sai tỉ lệ.
—"Nemo12 là gì"đúng một lầnthấpJob của lần đầu. Chiếm chỗ vĩnh viễn trên thanh nav là trả giá mỗi ngày cho một việc làm một lần.

Rút ra hai luật xếp chỗ:

  • Hạng 1–2 phải tới được trong ≤ 2 lần bấm từ trang chủ.
  • Việc làm một lần (giới thiệu, mời bạn, mời con) không được chiếm tab. Nó về menu avatar.

2. Site-map ba tầng ​

Nguyên tắc: mỗi tầng trả lời đúng một câu hỏi, và chỉ tầng 3 mới có nội dung.

Tầng 1 — "CON NÀO?"            /                        điều hướng thuần
  └─ thẻ mỗi con (tên · lớp · chip "n việc cần làm")
  └─ [phụ] mời con vào học

Tầng 2 — "VIỆC GÌ?"            /child/{id}               điều hướng thuần
  ├─ Con đang ở đâu             → /child/{id}/chi-so      (JTBD P1, P2)   ← đứng ĐẦU (SRC-599)
  ├─ Tuần này nên làm gì        → /child/{id}/plan        (JTBD P3, P4)
  ├─ Con nhắm tới đâu           → /child/{id}/lighthouse    (JTBD P6)
  └─ Tôi kể về con              → /child/{id}/ve-con      (JTBD P2, P5)

Tầng 3 — NỘI DUNG THẬT (không đổi, chỉ đổi đường đi tới)
  /child/{id}/plan        kế hoạch học đúng bản con thấy
  /child/{id}/report      Tổng quan · Dashboard · Tiến độ
  /child/{id}/lighthouse    mục tiêu · chân dung · lộ trình · kế hoạch
  /child/{id}/ve-con      ghi quan sát · cảm nhận theo môn (bí danh cũ: /beliefs)
  /child/{id}/chi-so      bảng chỉ số: MỘT CARD MỖI MÔN, bốn ô mastery/coverage/readiness/retention
  /child/{id}/chi-so/{metric}/{subject}   một ô, một URL — nói số đó ở đâu ra
  /next-steps           danh sách việc còn thiếu, mọi con

Đã trả (SRC-594): "ghi quan sát" từng nấp trong tab Tổng quan của `report` — tức là bố mẹ muốn
kể một điều về con thì phải đi qua đường "xem con đang ở đâu". Nay cả hai nằm chung ở `/ve-con`,
và khối cũ **bị bỏ hẳn** khỏi báo cáo chứ không để cả hai nơi: hai lối vào cho cùng một việc thì
chỗ nào cũng nửa vời, và bố mẹ ghi ở đây rồi sang kia không thấy sẽ tưởng mất.

Đã trả nốt (SRC-601): ô "Tuần này nên làm gì" nay hiện việc còn thiếu của ĐÚNG con đó ngay trên
kế hoạch học. Bố mẹ bấm vào ô đó là để hỏi đúng một câu — "giờ tôi làm gì" — mà câu trả lời từng
bị chẻ làm đôi ở hai trang. `/next-steps` vẫn còn, nay là bản xem cho MỌI con.

Không còn nợ nào ở tầng điều hướng.

Ngoài trục con:
  /discover               điều hướng thuần → khoá học · sự kiện · các school · cuộc thi · du học
  menu avatar             về Marlins · giới thiệu bạn bè · mời con · đăng xuất

Thanh nav ngang: 2 mục (Gia đình, Khám phá) thay cho 6. Bốn mục bị rút — Khoá học, Sự kiện, Giới thiệu, Về Marlins — không mất đường tới, chúng lùi xuống /discover và menu avatar.

3. Luật trang điều hướng (áp cho tầng 1 và tầng 2) ​

  1. Không có nội dung. Không số liệu, không đoạn văn giải thích, không form. Một trang điều hướng chỉ được chứa: tiêu đề, các ô dẫn đi, và tối đa một hành động phụ.
  2. Đặt tên ô theo câu hỏi của bố mẹ, không theo tên tính năng. "Con đang ở đâu" chứ không phải "Báo cáo học tập"; "Con nhắm tới đâu" chứ không phải "Lighthouse".
  3. Mỗi ô tối đa một dòng phụ. Dòng phụ nói sẽ thấy gì, không nói có bao nhiêu.
  4. Trần 4 ô mỗi trang. Thứ năm trở đi phải gộp vào một ô sẵn có hoặc lùi xuống tầng dưới. Bốn là ngưỡng còn quét được bằng một lần nhìn.
  5. Con số duy nhất được phép là con số thúc hành động — chip "2 việc cần làm" trên thẻ con. Nó là lý do để bấm, không phải thông tin để đọc.
  6. Thứ đọc một lần thì gấp lại. Giới thiệu, hướng dẫn, ẩn dụ Finding Nemo nằm sau một lần bấm, mặc định đóng.

4. Đổi tên có chủ đích ​

CũMớiVì sao
tab "Giới thiệu" (thật ra là referral)menu avatar → "Giới thiệu bạn bè"Nhãn cũ nói dối về đích đến.
"Lighthouse""Con nhắm tới đâu"Tiếng Anh, không giải thích, trùng nghĩa với "Mục tiêu" cạnh nó.
"Báo cáo học tập""Con đang ở đâu"Bố mẹ không tìm một bản báo cáo, họ tìm câu trả lời.

Thứ tự ô ở tầng 2 đổi ngày 2026-08-26 (SRC-599): "Con đang ở đâu" lên đầu, "Tuần này nên làm gì" xuống thứ hai. Lý do cũ (việc gấp hơn đứng trước) thua lý do mới: bố mẹ không tin một lời khuyên trước khi thấy tình hình, nên nhìn bốn chỉ số rồi mới đọc khuyến nghị thì khuyến nghị mới có chỗ đứng. | "Cảm nhận của bạn" + "Ghi quan sát" | "Tôi kể về con" | Hai lối vào cho cùng một việc; gộp một. |

5. Luật màn báo cáo và bảng chỉ số (chốt 2026-08-25) ​

Sáu quyết định dưới đây do chủ dự án chốt ngày 2026-08-25 khi đặt hai màn hình cạnh nhau — bản đồ mức vững của learn (learn.nemo12.com/turtle/lab/math/b21-read-tables-and-charts) và Dashboard của marlins. Chúng áp cho tầng 3, không đụng luật trang điều hướng ở §3.

5.1 Marlins mặc chung chất liệu với màn Lab của learn (SRC-571) ​

  • Cả cổng marlins dùng một theme duy nhất: biển sâu. Lớp od-* nằm ở design system chứ không ở apps/web, và một tầng override dưới .theme-marlins.od-root đổi mọi n12-card/Card thành kính mờ. Làm ở một chỗ thay vì sửa ~20 file màn, vì sót một thẻ trắng trên nền biển sâu thì lộ ngay, mà sửa rải rác thì chắc chắn sót. Bám .theme-marlins.od-root chứ không .od-root trần, để các màn www vốn đã dùng od-card không bị đổi theo.
  • Bấm thẻ trên bản đồ mức vững phải ra popover, lấy nguyên markup popover của learn — Dashboard không có gì để bấm thì bố mẹ đọc xong là hết đường đi tiếp.
  • Popover ở marlins bỏ nút "Vào học": bố mẹ không nên bị đẩy vào bài của con.
  • Biến thể glass có padding và khoảng cách rộng hơn hẳn bản light (ví dụ Module card: px-5 py-4 thay px-3 py-2.5, lưới Unit gap-4 p-5 thay gap-2 p-3). Trên nền tối các khối cần nhiều khoảng thở hơn mới tách nhau ra — chất liệu quyết định luôn nhịp.

5.2 Báo cáo Toán không hiện tầng Số học · Đại số · Hình học (SRC-577) ​

Ba Package đó là strand cũ trùng vai với cây B21 (SRC-299): cùng một Unit hiện hai lần dưới hai cách sắp xếp. learn lọc chúng bằng HIDDEN_STRANDS, marlins thì không — nên bố mẹ là người thấy sai.

Luật: lọc ngay trong MasteryMap chứ không ở chỗ gọi, để mọi cổng dùng nó đều đúng, kể cả cổng mở sau này. Chỉ giấu khỏi giao diện, không xoá dữ liệu — mọi bằng chứng đã ghi vẫn trỏ vào node của chúng. Danh sách mã là bản sao của apps/learn/src/api.ts (marlins không import được từ learn); hiddenStrands.test.ts đọc cả hai file bằng ?raw của Vite rồi so hai tập mã, trôi nhau là đỏ test.

5.3 Thứ tự tab, công tắc ngôn ngữ, thứ tự môn (SRC-578) ​

  • Tab: Dashboard · Coverage · Tổng quan, và Dashboard là tab MẶC ĐỊNH. Bố mẹ mở báo cáo là để xem "con vững tới đâu"; bản đồ mức vững trả lời đúng câu đó, Tổng quan là phần đọc thêm.
  • Công tắc EN/VI ở góc trên phải, dùng LangSwitch chung với learn (bản sao y hệt, md5 khớp cả ba nơi). en chỉ đi tới những chỗ thật sự có bản tiếng Anh trong dữ liệu: tên Package/Module/Unit và nội dung popover. Các màn khác của marlins vẫn chỉ tiếng Việt — nói rõ để không tưởng đã dịch hết.
  • Thứ tự môn cố định: Toán · Ngữ văn · Tiếng Anh · Tin học · Vật lí, áp cho cả hàng chip lẫn môn mở sẵn, và dùng chung ở ChildReport.tsx lẫn Metrics.tsx. Trước đây xếp theo thứ tự API trả về, tức là theo dữ liệu chứ không theo mức quan trọng với gia đình — Toán có hôm rơi xuống giữa hàng.
  • Mọi mã môn phải có nhãn hai thứ tiếng: informatics từng hiện nguyên mã vì thiếu trong bảng nhãn.

5.4 Đầu bản đồ, breadcrumb, thanh tab (SRC-580) ​

  • Bỏ vòng tròn điểm. Vòng tròn "59" + dòng "mức vững trung bình…" ép hai đại lượng khác bản chất — đã đo bao nhiêu và hiểu chắc tới đâu — thành một con số, mà con số đó không nói được cái nào đang kéo nó xuống. ScoreCircle thành code chết nên đã xoá hẳn.
  • Thay bằng đầu bản đồ của learn: dãy ô mức vững nằm ngay trên một câu hỏi, căn giữa. Tiêu đề là câu hỏi chứ không phải tên môn, vì bố mẹ vào đây mang theo một câu hỏi.
  • Bỏ link "← Quay lại", thay bằng breadcrumb Gia đình / <tên con> / Báo cáo. Link quay lại chỉ nói được một bậc và không nói mình đang ở đâu; ở cây ba tầng bố mẹ cần thấy cả đường đi. Bậc cuối không phải link vì đó là chỗ đang đứng.
  • Thanh tab: chênh lệch nằm ở ĐỘ ĐẬM, không ở việc đổi hẳn tông màu. Tab nghỉ là trắng mờ, tab đang mở là trắng đặc. Bản gốc lấy --muted-foreground — màu sinh ra cho nền sáng — nên trên nền tối nó xám xỉn, đọc như chữ bị vô hiệu hoá.

5.5 Thẻ Package hiện số Module — và câu hỏi cận trên/cận dưới (SRC-581) ​

Luật: thẻ Package hiện số Module ngay dưới tên, ở depth 0. Ở đó thân thẻ không dựng nên không có gì nói Package này to hay nhỏ — mà độ to nhỏ lại chính là thứ chênh lệch nhất giữa các Package.

Vì sao số Module lệch nhau lớn, và có vi phạm cận không? Đo trên D1 ngày 2026-08-25: 1 tới 12 Module mỗi Package. Trả lời phải tách hai cây, vì Nemo12 có hai cây curriculum chịu hai luật ngược nhau (curriculum-pearl-standard.md §0):

Cây kiến thức (D1) — thứ marlins hiển thịCây năng lực (Pearl)
Luật6/6/6: tối thiểu 6 Module mỗi Package (SRC-185)3 tới 6 Module mỗi Package (SRC-238)
Có cận trên khôngkhôngcó

Bản đồ mức vững của marlins đọc skill_nodes trong D1, nên luật áp cho nó là 6/6/6, không phải 3-6 của Pearl. Từ đó:

  • 12 Module không vi phạm gì. 6/6/6 chỉ có cận dưới; cận trên 6 là luật của Pearl và không áp cho cây D1.
  • 1 Module thì vi phạm cận dưới 6/6/6, và vi phạm này đã biết trước: curriculum-666.md ghi các môn AP · SAT · IELTS · GenAI mỗi Package hiện có một Module, còn thiếu +31 module mỗi môn. Nguyên nhân là thiếu nội dung chưa soạn, không phải xếp nhãn sai — và xếp lại nhãn cho đủ số chỉ tạo ra Module một bài.
  • Nên hiện số Module là hiện đúng sự lệch đang có thật, không phải lỗi hiển thị cần che.

5.6 Bảng chỉ số toàn môn, mỗi ô một URL (SRC-582) ​

Báo cáo cũ trả lời "môn NÀY thế nào"; câu bố mẹ hay hỏi trước đó là "môn nào đang đuối nhất". Trả lời bằng màn cũ thì phải bấm qua từng môn rồi tự nhớ số — bắt người dùng làm việc so sánh mà máy làm tốt hơn.

  • /child/{id}/chi-so — dashboard chung mọi môn, bốn chỉ số: mức vững (phần đã học thì hiểu chắc tới đâu) · độ phủ (đã đo được bao nhiêu phần của môn) · sẵn sàng (so với mục tiêu đã đặt, còn cách bao xa) · trí nhớ (thứ từng vững có đang phai không). Bản chốt 2026-08-25 xếp một dòng một môn; bố cục sau đó đổi thành một card mỗi môn (SRC-599), bốn chỉ số thì không đổi.
  • Cố ý KHÔNG gộp thành một điểm tổng — đó đúng cái sai mà vòng tròn "59" ở §5.4 mắc phải.
  • /child/{id}/chi-so/{metric}/{subject} — mỗi Ô một URL, để bố mẹ gửi đúng ô đang muốn hỏi thay vì gửi cả trang rồi dặn "nhìn cột thứ ba". Trang này không lặp lại con số mà nói số đó ở đâu ra, bằng số thật của con.
  • Bấm TÊN MÔN thì sang bản đồ mức vững của đúng môn đó (/child/{id}/report/{subject}) — trước đây từ bảng sang báo cáo lại phải tự tìm chip môn một lần nữa.
  • Thiếu dữ liệu thì ô hiện ?, không hiện 0%: 0% nghĩa là đã đo và bằng không, còn đây là chưa đo — hai chuyện khác hẳn với bố mẹ. readiness chỉ có khi đã đặt mục tiêu, retention chỉ có khi con học đủ lâu; cả hai được phép hỏng riêng lẻ, hỏng một môn không kéo sập cả bảng.

Trace ​

Xếp hạng ở §1 dựa trên JTBD-P1…P6 của parent-jtbd.md; không REQ nào bị đổi nghĩa. Site-map §2 hiện thực REQ-PAR-17 (bố mẹ biết việc kế tiếp) và giữ nguyên mọi REQ-PAR-/REQ-VIS- đang live — các màn nội dung không đổi, chỉ đổi đường đi tới chúng.

Các trang ​

Trước SRC-1322 (10.10.2026) toàn bộ tài liệu này nằm trong một file. Nay phần trên là đặc tả chung; các trang dưới đây đọc độc lập được, mỗi trang gom các vòng quyết định theo chủ đề, vòng duyệt cũ ở cuối dưới mục Lịch sử quyết định. Nội dung giữ nguyên chữ, chỉ đổi chỗ.

TrangNội dung
Marlins IA · Khoá học, thư viện sách, trang chỗ học và quizMarlins: card khoá học, khoá cho bố mẹ, Parent Learning System, thư viện sách, câu bố mẹ hay nói, trang chỗ học, Unit, quiz, câu định danh.
Marlins IA · Ảnh khoá học, bìa sách, trang chủ và thanh menuMarlins: ảnh khoá học sinh bằng thuật toán, màu từ sân IELTS, album ảnh, bìa sách chung hệ vẽ, chỉ tiếng Việt, key concept, thanh menu.
Marlins IA · Báo cáo theo môn, hành trình khoá bố mẹ và cổng ba câuMarlins: báo cáo học tập theo môn, khoá bố mẹ thành bảy hành trình, chạy tốt trên điện thoại, khung trang khoá, đọc từng phần và cổng ba câu.