---
url: https://docs.nemo12.com/product/marlins-ia.md
description: >-
  Marlins IA: xếp hạng JTBD của phụ huynh theo tần suất và độ gấp, site-map ba
  tầng, luật trang điều hướng và các đổi tên có chủ đích.
---

# 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](../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](../parent-jtbd.md).

| Hạng | JTBD | Tần suất | Gấp | Vì sao xếp ở đây |
| --- | --- | --- | --- | --- |
| 1 | **P3 — "tuần này tôi nên làm gì"** | mỗi lần vào | cao | Câ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. |
| 2 | **P1 — "con đang thực sự ở đâu"** | tuần | vừa | Là *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. |
| 3 | **P4 — "đừng để tôi làm sai"** | khi định can thiệp | rất cao lúc xảy ra | Hiế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. |
| 4 | **P2 — "vì sao con gặp khó"** | tháng | vừa | Là 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. |
| 5 | **P6 — "hồ sơ xuyên suốt, con nhắm tới đâu"** | quý | thấp | Mụ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. |
| 6 | **P5 — "cả nhà phối hợp"** | quý | thấp | Mờ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ưa | do Nemo12 gấp, không phải bố mẹ gấp | Khô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ần | thấp | Job 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ới | Vì 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](../../reference/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ật | [6/6/6](../../reference/curriculum-666.md): **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ông | **không** | có |

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](../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ỗ.

| Trang | Nội dung |
| --- | --- |
| [Marlins IA · Khoá học, thư viện sách, trang chỗ học và quiz](./courses-and-pages.md) | Marlins: 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 menu](./art-and-home.md) | Marlins: ả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âu](./journeys-and-gates.md) | Marlins: 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. |
