{
  "schema": "nhanhtri-hub-catalog/0",
  "version": "0.1.0",
  "updated": "2026-10-21",
  "age_rating_note": "Sếp 21/10: Hub bỏ chọn lớp, chỉ có nhãn tuổi age_rating (NĐ 147/2024; hiện mọi game 00+) để lọc/tìm. grades, grade_note, skills, skill_codes là dữ liệu nội bộ cho bộ lọc/tìm kiếm sau này, chưa hiện cho bé.",
  "note": "Chữ tên thẻ và dòng mô tả lấy đúng HUB_CONSOLE_SPEC §4 (= REVIEW_C05 §2.5). Lớp của Trà Sữa theo spec §8.3 (Maya §4.6: Lớp 2–3). Mã kỹ năng theo spec §8.3 (TAX.games); kiểm bằng scripts/sync_taxonomy.cjs.",
  "config": {
    "play_url": {
      "tra-sua": "/choi/tra-sua/game/"
    },
    "play_url_note": "Kai chốt 21/10: bản game nằm ở /choi/tra-sua/game/ (SW của game có scope /choi/tra-sua/game/, không chặn trang Hub). File game do scripts/assemble_site.cjs ghép từ commit đã QA, không nằm trong site/. Gate G5 chạy trên bản ghép (HUB_SITE=<gói>/public). Nút Chơi giữ nguyên tham số utm_*.",
    "pending_paths": [],
    "class_codes": [
      [
        "gv01",
        "Giáo viên cố vấn"
      ],
      [
        "gv02",
        "Giáo viên thứ 2"
      ],
      [
        "gv03",
        "Giáo viên thứ 3"
      ],
      [
        "tt01",
        "Trung tâm dạy thêm"
      ]
    ],
    "class_link_base": "nhanhtri.com/z/"
  },
  "shelves": [
    {
      "id": "nham",
      "name": "Tính nhẩm",
      "color": "--k-nham",
      "topics": [
        "MATH.NUM",
        "MATH.ADDSUB",
        "MATH.MULDIV",
        "MATH.MENTAL",
        "MATH.EXPR"
      ]
    },
    {
      "id": "tien",
      "name": "Tiền và mua bán",
      "short": "Tiền",
      "color": "--k-tien",
      "topics": [
        "MATH.MONEY"
      ]
    },
    {
      "id": "hinh",
      "name": "Hình học và không gian",
      "short": "Hình",
      "color": "--k-hinh",
      "topics": [
        "MATH.SHAPE",
        "MATH.SPACE",
        "MATH.GEOM",
        "MATH.SYM",
        "MATH.MEAS"
      ]
    },
    {
      "id": "quy",
      "name": "Quy luật và logic",
      "short": "Quy luật",
      "color": "--k-quy",
      "topics": [
        "GEN.PATTERN",
        "GEN.LOGIC",
        "MATH.ALG",
        "CS"
      ]
    },
    {
      "id": "nho",
      "name": "Trí nhớ",
      "color": "--k-nho",
      "topics": [
        "GEN.MEMORY"
      ]
    },
    {
      "id": "doc",
      "name": "Đọc hiểu",
      "color": "--k-doc",
      "topics": [
        "VIET",
        "MATH.WORD"
      ]
    },
    {
      "id": "gio",
      "name": "Thời gian",
      "color": "--k-gio",
      "topics": [
        "MATH.TIME",
        "MATH.CAL"
      ]
    },
    {
      "id": "khoa",
      "name": "Khoa học quanh em",
      "short": "Khoa học",
      "color": "--k-khoa",
      "topics": [
        "SCI"
      ]
    }
  ],
  "games": [
    {
      "tile_id": "tra-sua",
      "title": "Tiệm Trà Sữa Loi Nhoi",
      "status": "live",
      "age_rating": "00+",
      "skills": [
        "tien",
        "nham"
      ],
      "grades": [
        2,
        3
      ],
      "grade_note": "Maya đối chiếu chương trình 21/10",
      "subject": "MATH",
      "minutes_max": 15,
      "minutes_note": "ước tính, chưa đo trên trẻ",
      "line": "Bé tập thối tiền, nhận biết tiền Việt, cộng trừ nhẩm.",
      "shots": [
        {
          "src": "/assets/img/tra-sua-cover.jpg",
          "alt": "Quán trà sữa có khách đang chờ",
          "thumb": "/assets/img/tra-sua-cover-t.jpg"
        },
        {
          "src": "/assets/img/tra-sua-cash.jpg",
          "alt": "Két tiền: bé chọn tờ tiền để thối"
        },
        {
          "src": "/assets/img/tra-sua-door.jpg",
          "alt": "Cửa quán lúc gần đóng cửa"
        }
      ],
      "skill_codes": [
        "MATH.MONEY.G2",
        "MATH.MONEY.G3",
        "MATH.ADDSUB.G2"
      ],
      "since": "2026-10-20",
      "art": {
        "card": "/assets/img/thumb/tra-sua-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "tach-gop-so",
      "title": "Tách gộp số",
      "status": "live",
      "age_rating": "00+",
      "icon": "tgs",
      "skills": [
        "nham"
      ],
      "grades": [
        1,
        2
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "8 gồm 3 và mấy? Nền tảng để cộng trừ nhẩm",
      "skill_codes": [
        "MATH.NUM.G1",
        "MATH.ADDSUB.G1",
        "MATH.NUM.G2",
        "MATH.ADDSUB.G2",
        "MATH.NUM.G3",
        "MATH.MONEY.G3",
        "MATH.MENTAL.G4"
      ],
      "learning": {
        "game_title": "Đom Đóm Về Nhà",
        "build": "v1, 20 màn, bậc 1–2, hình đã duyệt (APPROVAL_CD), solver 20/20",
        "template": "TPL.TACHGOP",
        "one_line": "Bé tách một số thành 2 phần và gộp lại, trong phạm vi 10 rồi 20, dùng khung mười.",
        "goals": [
          {
            "grade": 1,
            "text": "Tách một số ≤ 10 (sau đó ≤ 20) thành 2 phần và gộp lại, ≥ 8/10 màn cuối gói đúng ngay lần đầu, không dùng gợi ý nấc 3."
          },
          {
            "grade": 2,
            "text": "Cộng qua 10 bằng cách gộp cho tròn chục (9 + 4 = 10 + 3), trong phạm vi 20."
          }
        ],
        "skills_in_build": [
          {
            "code": "MATH.NUM.G1",
            "grade": 1
          },
          {
            "code": "MATH.ADDSUB.G1",
            "grade": 1
          },
          {
            "code": "MATH.ADDSUB.G2",
            "grade": 2
          }
        ],
        "data": "Không tài khoản, không analytics; tiến độ chỉ lưu trên máy.",
        "detail": "projects/tach-gop-so/game/SOURCES.json"
      },
      "sources": {
        "path": "A",
        "path_name": "Chỉ học ý tưởng",
        "policy": "company/learning/SOURCE_LIBRARY.md §0",
        "curriculum": [
          {
            "id": "V1",
            "title": "Chương trình GDPT môn Toán (Thông tư 32/2018/TT-BGDĐT)",
            "grades": [
              1,
              2
            ],
            "use": "Dùng thẳng (văn bản nhà nước)"
          }
        ],
        "research": [
          {
            "id": "R1",
            "cite": "Byrge, Smith & Mix (2014), Child Development 85(2)",
            "error": "Viết số theo lời đọc (giá trị theo vị trí)"
          },
          {
            "id": "R2",
            "cite": "Carpenter & Moser (1983/1984)",
            "error": "Đếm lại từ 1 thay vì đếm tiếp"
          }
        ],
        "design": [
          {
            "id": "S1",
            "title": "DragonBox Numbers",
            "use": "A, chỉ học ý"
          }
        ]
      },
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/tach-gop-so/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/tach-gop-so-shot1.jpg",
          "thumb": "/assets/img/tach-gop-so-shot1-t.jpg",
          "alt": "Tách gộp số - màn hình 1"
        },
        {
          "src": "/assets/img/tach-gop-so-shot2.jpg",
          "alt": "Tách gộp số - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/tach-gop-so-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "tua-ngay",
      "title": "Tua Ngày",
      "status": "live",
      "age_rating": "00+",
      "icon": "dhl",
      "skills": [
        "gio"
      ],
      "grades": [
        1,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Xoay kim, xem giờ và ngày trong một ngày ở xóm",
      "skill_codes": [
        "MATH.TIME.G1",
        "MATH.TIME.G2",
        "MATH.TIME.G3",
        "MATH.CAL.G1",
        "MATH.CAL.G2"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/tua-ngay/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/tua-ngay-shot1.jpg",
          "thumb": "/assets/img/tua-ngay-shot1-t.jpg",
          "alt": "Tua Ngày - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/tua-ngay-card.jpg",
        "banner": "/assets/img/thumb/tua-ngay-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "chuoi-nhac",
      "title": "Chuỗi Nhạc Hội Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "qlt",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Tìm nhịp lặp còn thiếu trong dây đèn",
      "skill_codes": [
        "GEN.PATTERN",
        "MATH.MULDIV.G2"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/chuoi-nhac/content/SOURCES.json",
      "since": "2026-10-21T11:21",
      "shots": [
        {
          "src": "/assets/img/chuoi-nhac-shot1.jpg",
          "thumb": "/assets/img/chuoi-nhac-shot1-t.jpg",
          "alt": "Chuỗi Nhạc Hội Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/chuoi-nhac-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "mo-hinh-thanh",
      "title": "Thanh Đèn Lồng",
      "status": "live",
      "age_rating": "00+",
      "icon": "mht",
      "skills": [
        "nham",
        "doc"
      ],
      "grades": [
        2,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Vẽ thanh để hiểu đề, không đoán phép tính",
      "skill_codes": [
        "MATH.WORD.G1",
        "MATH.WORD.G2",
        "MATH.MULDIV.G2",
        "MATH.WORD.G3",
        "MATH.EXPR.G3",
        "MATH.FRAC.G3",
        "MATH.WORD.G4",
        "MATH.FRAC.G4",
        "MATH.WORD.G5",
        "MATH.PCT.G5",
        "MATH.RATIO.G7",
        "MATH.ALG.G8",
        "MATH.ALG.G9"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/mo-hinh-thanh/content/SOURCES.json",
      "since": "2026-10-21T13:09",
      "shots": [
        {
          "src": "/assets/img/mo-hinh-thanh-shot1.jpg",
          "thumb": "/assets/img/mo-hinh-thanh-shot1-t.jpg",
          "alt": "Thanh Đèn Lồng - màn hình 1"
        },
        {
          "src": "/assets/img/mo-hinh-thanh-shot2.jpg",
          "alt": "Thanh Đèn Lồng - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/mo-hinh-thanh-card.jpg",
        "banner": "/assets/img/thumb/mo-hinh-thanh-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "tangram",
      "title": "Ghép Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "tan",
      "skills": [
        "hinh"
      ],
      "grades": [
        1,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Ghép 7 mảnh giấy cho bóng đèn sáng lên",
      "skill_codes": [
        "MATH.SHAPE.G1",
        "MATH.SHAPE.G2",
        "MATH.SPACE.G1",
        "MATH.MEAS.G3"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/tangram/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/tangram-shot1.jpg",
          "thumb": "/assets/img/tangram-shot1-t.jpg",
          "alt": "Ghép Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/tangram-card.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "sudoku-mini",
      "title": "Thắp Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "oso",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Điền đèn vào lưới, mỗi hàng mỗi cột một lần",
      "skill_codes": [
        "GEN.LOGIC",
        "GEN.PATTERN"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/sudoku-mini/content/SOURCES.json",
      "since": "2026-10-21T11:21",
      "shots": [
        {
          "src": "/assets/img/sudoku-mini-shot1.jpg",
          "thumb": "/assets/img/sudoku-mini-shot1-t.jpg",
          "alt": "Thắp Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/sudoku-mini-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "tri-nho",
      "title": "Trí nhớ Xóm Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "tnh",
      "skills": [
        "nho"
      ],
      "grades": [
        1,
        9
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Nhớ và tìm nhanh, tập trung lâu hơn",
      "skill_codes": [
        "GEN.MEMORY",
        "MATH.SHAPE.G1",
        "VIET.PHON.G1",
        "VIET.SPELL.G2",
        "VIET.VOCAB.G3"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/tri-nho/content/SOURCES.json",
      "since": "2026-10-21T11:21",
      "shots": [
        {
          "src": "/assets/img/tri-nho-shot1.jpg",
          "thumb": "/assets/img/tri-nho-shot1-t.jpg",
          "alt": "Trí nhớ Xóm Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/tri-nho-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "can-thang-bang",
      "title": "Cân Thăng Bằng",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "nham",
        "quy"
      ],
      "grades": [
        2,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Cân nghiêng hay thăng bằng? Tìm vật nặng hơn",
      "skill_codes": [
        "MATH.MEAS.G2",
        "MATH.EXPR.G3",
        "MATH.EXPR.G4"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/can-thang-bang/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/can-thang-bang-shot1.jpg",
          "thumb": "/assets/img/can-thang-bang-shot1-t.jpg",
          "alt": "Cân Thăng Bằng - màn hình 1"
        },
        {
          "src": "/assets/img/can-thang-bang-shot2.jpg",
          "alt": "Cân Thăng Bằng - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/can-thang-bang-card.jpg",
        "banner": "/assets/img/thumb/can-thang-bang-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "que-diem",
      "title": "Que Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "nham",
      "skills": [
        "nham",
        "quy"
      ],
      "grades": [
        1,
        2
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Dời một que cho phép tính đúng",
      "skill_codes": [
        "MATH.NUM.G1",
        "MATH.ADDSUB.G1",
        "MATH.ADDSUB.G2"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/que-diem/content/SOURCES.json",
      "since": "2026-10-21T11:21",
      "shots": [
        {
          "src": "/assets/img/que-diem-shot1.jpg",
          "thumb": "/assets/img/que-diem-shot1-t.jpg",
          "alt": "Que Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/que-diem-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "thap-ha-noi",
      "title": "Tháp Đèn Lồng",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        3,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Dời tháp đèn sang cột sao, đèn to nằm dưới",
      "skill_codes": [
        "CS.STEPS.G3",
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/thap-ha-noi/content/SOURCES.json",
      "since": "2026-10-21",
      "shots": [
        {
          "src": "/assets/img/thap-ha-noi-shot1.jpg",
          "thumb": "/assets/img/thap-ha-noi-shot1-t.jpg",
          "alt": "Tháp Đèn Lồng - màn hình 1"
        },
        {
          "src": "/assets/img/thap-ha-noi-shot2.jpg",
          "alt": "Tháp Đèn Lồng - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/thap-ha-noi-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "truot-so",
      "title": "Ô Trượt",
      "status": "live",
      "age_rating": "00+",
      "icon": "oso",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Trượt ô để xếp lại tranh và dãy số",
      "skill_codes": [
        "GEN.LOGIC",
        "GEN.PATTERN"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/truot-so/content/SOURCES.json",
      "since": "2026-10-21T10:51",
      "shots": [
        {
          "src": "/assets/img/truot-so-shot1.jpg",
          "thumb": "/assets/img/truot-so-shot1-t.jpg",
          "alt": "Ô Trượt - màn hình 1"
        },
        {
          "src": "/assets/img/truot-so-shot2.jpg",
          "alt": "Ô Trượt - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/truot-so-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "giai-cuu-xe",
      "title": "Giải Cứu Xe",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        2,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Trượt các xe để xe đèn lồng ra cổng",
      "skill_codes": [
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/giai-cuu-xe/content/SOURCES.json",
      "since": "2026-10-21",
      "shots": [
        {
          "src": "/assets/img/giai-cuu-xe-shot1.jpg",
          "thumb": "/assets/img/giai-cuu-xe-shot1-t.jpg",
          "alt": "Giải Cứu Xe - màn hình 1"
        },
        {
          "src": "/assets/img/giai-cuu-xe-shot2.jpg",
          "alt": "Giải Cứu Xe - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/giai-cuu-xe-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "tat-den",
      "title": "Đảo Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Chạm đèn để cả dãy cùng sáng",
      "skill_codes": [
        "GEN.LOGIC",
        "GEN.PATTERN"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/tat-den/content/SOURCES.json",
      "since": "2026-10-21",
      "shots": [
        {
          "src": "/assets/img/tat-den-shot1.jpg",
          "thumb": "/assets/img/tat-den-shot1-t.jpg",
          "alt": "Đảo Đèn - màn hình 1"
        },
        {
          "src": "/assets/img/tat-den-shot2.jpg",
          "alt": "Đảo Đèn - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/tat-den-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "robot-di-duong",
      "title": "Robot Đi Đường",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Ra lệnh từng bước cho robot đến đích",
      "skill_codes": [
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/robot-di-duong/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/robot-di-duong-shot1.jpg",
          "thumb": "/assets/img/robot-di-duong-shot1-t.jpg",
          "alt": "Robot Đi Đường - màn hình 1"
        },
        {
          "src": "/assets/img/robot-di-duong-shot2.jpg",
          "alt": "Robot Đi Đường - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/robot-di-duong-card.jpg",
        "banner": "/assets/img/thumb/robot-di-duong-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "noi-den",
      "title": "Nối Dây Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        2,
        8
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Nối đèn cùng màu, dây phủ kín lưới",
      "skill_codes": [
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/noi-den/content/SOURCES.json",
      "since": "2026-10-21",
      "shots": [
        {
          "src": "/assets/img/noi-den-shot1.jpg",
          "thumb": "/assets/img/noi-den-shot1-t.jpg",
          "alt": "Nối Dây Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/noi-den-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "mat-ma",
      "title": "Mật Mã Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        3,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Đoán dãy đèn bí mật nhờ gợi ý sao và vòng",
      "skill_codes": [
        "GEN.LOGIC",
        "GEN.PATTERN",
        "CS.COND.G3"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/mat-ma/content/SOURCES.json",
      "since": "2026-10-21T10:51",
      "shots": [
        {
          "src": "/assets/img/mat-ma-shot1.jpg",
          "thumb": "/assets/img/mat-ma-shot1-t.jpg",
          "alt": "Mật Mã Đèn - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/mat-ma-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "boc-soi",
      "title": "Bốc Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy",
        "nham"
      ],
      "grades": [
        2,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Cùng Ông Rùa bốc đèn, ai bốc cuối thì thắng",
      "skill_codes": [
        "GEN.LOGIC",
        "MATH.MULDIV.G3",
        "MATH.NUM.G2"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/boc-soi/content/SOURCES.json",
      "since": "2026-10-21T10:51",
      "shots": [
        {
          "src": "/assets/img/boc-soi-shot1.jpg",
          "thumb": "/assets/img/boc-soi-shot1-t.jpg",
          "alt": "Bốc Đèn - màn hình 1"
        },
        {
          "src": "/assets/img/boc-soi-shot2.jpg",
          "alt": "Bốc Đèn - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/boc-soi-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "dem-hinh",
      "title": "Đếm Hình Bí Ẩn",
      "status": "live",
      "age_rating": "00+",
      "icon": "tan",
      "skills": [
        "hinh"
      ],
      "grades": [
        2,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Đếm hết tam giác, hình vuông ẩn trong hình",
      "skill_codes": [
        "MATH.SHAPE.G1",
        "MATH.SHAPE.G2",
        "MATH.DATA.G2"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/dem-hinh/content/SOURCES.json",
      "since": "2026-10-21T10:51",
      "shots": [
        {
          "src": "/assets/img/dem-hinh-shot1.jpg",
          "thumb": "/assets/img/dem-hinh-shot1-t.jpg",
          "alt": "Đếm Hình Bí Ẩn - màn hình 1"
        },
        {
          "src": "/assets/img/dem-hinh-shot2.jpg",
          "alt": "Đếm Hình Bí Ẩn - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/dem-hinh-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "ai-o-nha-nao",
      "title": "Ai Ở Nhà Nào",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        2,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Đọc manh mối để biết ai ở nhà nào",
      "skill_codes": [
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/ai-o-nha-nao/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/ai-o-nha-nao-shot1.jpg",
          "thumb": "/assets/img/ai-o-nha-nao-shot1-t.jpg",
          "alt": "Ai Ở Nhà Nào - màn hình 1"
        },
        {
          "src": "/assets/img/ai-o-nha-nao-shot2.jpg",
          "alt": "Ai Ở Nhà Nào - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/ai-o-nha-nao-card.jpg",
        "banner": "/assets/img/thumb/ai-o-nha-nao-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "bang-nhan",
      "title": "Xếp Đèn Đêm Hội",
      "status": "live",
      "age_rating": "00+",
      "icon": "nham",
      "skills": [
        "nham"
      ],
      "grades": [
        2,
        3
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Xếp đèn thành hàng đều, tìm phép nhân",
      "skill_codes": [
        "MATH.MULDIV.G2",
        "MATH.MULDIV.G3",
        "GEN.PATTERN"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/bang-nhan/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/bang-nhan-shot1.jpg",
          "thumb": "/assets/img/bang-nhan-shot1-t.jpg",
          "alt": "Xếp Đèn Đêm Hội - màn hình 1"
        },
        {
          "src": "/assets/img/bang-nhan-shot2.jpg",
          "alt": "Xếp Đèn Đêm Hội - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/bang-nhan-card.jpg",
        "banner": "/assets/img/thumb/bang-nhan-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "chinh-ta",
      "title": "Cổng Chữ Xóm Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "doc",
      "skills": [
        "doc"
      ],
      "grades": [
        1,
        2
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Chọn c hay k, g hay gh, ng hay ngh",
      "skill_codes": [
        "VIET.SPELL.G1"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/chinh-ta/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/chinh-ta-shot1.jpg",
          "thumb": "/assets/img/chinh-ta-shot1-t.jpg",
          "alt": "Cổng Chữ Xóm Đèn - màn hình 1"
        },
        {
          "src": "/assets/img/chinh-ta-shot2.jpg",
          "alt": "Cổng Chữ Xóm Đèn - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/chinh-ta-card.jpg",
        "banner": "/assets/img/thumb/chinh-ta-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "nha-cua-ai",
      "title": "Nhà Của Ai?",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "khoa"
      ],
      "grades": [
        2,
        3
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Đưa các bạn động vật về đúng nhà",
      "skill_codes": [
        "SCI.LIVING.G2",
        "GEN.CLASSIFY"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/nha-cua-ai/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/nha-cua-ai-shot1.jpg",
          "thumb": "/assets/img/nha-cua-ai-shot1-t.jpg",
          "alt": "Nhà Của Ai? - màn hình 1"
        },
        {
          "src": "/assets/img/nha-cua-ai-shot2.jpg",
          "alt": "Nhà Của Ai? - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/nha-cua-ai-card.jpg",
        "banner": "/assets/img/thumb/nha-cua-ai-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "duong-day-dom-dom",
      "title": "Đường Dây Đom Đóm",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "khoa"
      ],
      "grades": [
        4,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Nối mạch điện cho đèn sáng, nhớ an toàn",
      "skill_codes": [
        "SCI.ELEC.G5",
        "SCI.SAFETY.ELEC.G5"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/duong-day-dom-dom/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/duong-day-dom-dom-shot1.jpg",
          "thumb": "/assets/img/duong-day-dom-dom-shot1-t.jpg",
          "alt": "Đường Dây Đom Đóm - màn hình 1"
        },
        {
          "src": "/assets/img/duong-day-dom-dom-shot2.jpg",
          "alt": "Đường Dây Đom Đóm - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/duong-day-dom-dom-card.jpg",
        "banner": "/assets/img/thumb/duong-day-dom-dom-banner.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "am-tra-ong-rua",
      "title": "Ấm Trà Ông Rùa",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "khoa"
      ],
      "grades": [
        3,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Vật nào giữ nóng, vật nào dẫn nhiệt",
      "skill_codes": [
        "SCI.HEAT.G4",
        "GEN.TRANSITIVE"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/am-tra-ong-rua/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/am-tra-ong-rua-shot1.jpg",
          "thumb": "/assets/img/am-tra-ong-rua-shot1-t.jpg",
          "alt": "Ấm Trà Ông Rùa - màn hình 1"
        },
        {
          "src": "/assets/img/am-tra-ong-rua-shot2.jpg",
          "alt": "Ấm Trà Ông Rùa - màn hình 2"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/am-tra-ong-rua-card.jpg",
        "from": "art"
      }
    },
    {
      "tile_id": "trang-oi",
      "title": "Trăng Ơi Trăng Đi Đâu?",
      "status": "live",
      "age_rating": "00+",
      "icon": "gio",
      "skills": [
        "khoa"
      ],
      "grades": [
        3,
        4
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Xem trăng tròn khuyết, ngày và đêm",
      "skill_codes": [
        "SCI.SKY.G3"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/trang-oi/content/SOURCES.json",
      "since": "2026-10-21T13:53",
      "shots": [
        {
          "src": "/assets/img/trang-oi-shot1.jpg",
          "thumb": "/assets/img/trang-oi-shot1-t.jpg",
          "alt": "Trăng Ơi Trăng Đi Đâu? - màn hình 1"
        }
      ],
      "art": {
        "card": "/assets/img/thumb/trang-oi-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "album-anh-ech",
      "title": "Album Hồi Bé Của Anh Ếch",
      "status": "coming_soon",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "khoa"
      ],
      "grades": [
        3,
        5
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Xếp vòng đời con vật, cây đúng thứ tự",
      "skill_codes": [
        "GEN.PATTERN"
      ],
      "has_game": true,
      "approval": {
        "luna": "OK",
        "maya": "OK",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/album-anh-ech/content/SOURCES.json"
    },
    {
      "tile_id": "day-thung",
      "title": "Đẩy Thùng Đèn",
      "status": "live",
      "age_rating": "00+",
      "icon": "quy",
      "skills": [
        "quy"
      ],
      "grades": [
        3,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "GEN",
      "line": "Đẩy thùng đèn về kho, nhìn trước vài bước",
      "skill_codes": [
        "GEN.LOGIC"
      ],
      "has_game": true,
      "approval": {
        "luna": "COND",
        "maya": "COND",
        "ok": true
      },
      "source_note": "Luật chơi dân gian hoặc tự làm, học ý tưởng (đường A). Chi tiết: projects/day-thung/content/SOURCES.json",
      "since": "2026-10-21T12:41",
      "shots": [
        {
          "src": "/assets/img/day-thung-shot1.jpg",
          "thumb": "/assets/img/day-thung-shot1-t.jpg",
          "alt": "Đẩy Thùng Đèn - màn hình 1"
        },
        {
          "src": "/assets/img/day-thung-shot2.jpg",
          "alt": "Đẩy Thùng Đèn - màn hình 2"
        }
      ],
      "art": {
        "banner": "/assets/img/thumb/day-thung-banner.jpg",
        "card": "/assets/img/thumb/day-thung-card.jpg",
        "from": "shot"
      }
    },
    {
      "tile_id": "quy-luat",
      "title": "Tìm quy luật",
      "status": "coming_soon",
      "age_rating": "00+",
      "icon": "qlt",
      "skills": [
        "quy"
      ],
      "grades": [
        1,
        6
      ],
      "grade_note": "dự kiến",
      "subject": "MATH",
      "line": "Dãy hình, dãy số: cái gì tiếp theo?",
      "skill_codes": [
        "MATH.NUM.G1",
        "MATH.CAL.G1",
        "MATH.MULDIV.G2",
        "MATH.MULDIV.G3",
        "MATH.NUM.G4",
        "MATH.DATA.G4",
        "MATH.NUM.G6",
        "CS.STEPS.G3",
        "GEN.PATTERN"
      ]
    }
  ]
}
