Yêu cầu phi chức năng (Non-functional)
Ký hiệu REQ-N-*·(Pn).
NA. Kiến trúc & nền tảng
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-ARC-01 | P0 | Dữ liệu sống PHẢI nằm trên Cloudflare D1 duy nhất (Cloudflare-only invariant). PHẢI KHÔNG thêm phụ thuộc Supabase mới. |
| REQ-N-ARC-02 | P0 | Frontend Tokyo PHẢI deploy trên Cloudflare Pages; API trên api.conan.school (Workers). |
| REQ-N-ARC-03 | P0 | UI PHẢI truy cập API qua same-origin /api proxy để mang cookie member. |
| REQ-N-ARC-04 | P1 | Truy cập D1 NÊN qua client chuẩn của nền tảng (bảng legacy dùng tiền tố legacy_); dữ liệu Course Information dùng bảng riêng, không phá pipeline curriculum cũ. |
NB. Hiệu năng
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-PERF-01 | P1 | Trang chính (home, courses, my-journey) NÊN có First Contentful Paint < 2.5s trên 4G tầm trung. |
| REQ-N-PERF-02 | P1 | Phản hồi /api/user/me NÊN < 300ms p95 ở edge. |
| REQ-N-PERF-03 | P2 | Tài nguyên tĩnh NÊN được cache ở CDN với chiến lược bất biến theo hash. |
NC. Bảo mật & quyền riêng tư
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-SEC-01 | P0 | Phân quyền PHẢI thực thi ở backend theo entitlement_group; UI chỉ là lớp trình bày. |
| REQ-N-SEC-02 | P0 | Cookie phiên PHẢI là HttpOnly, Secure, SameSite phù hợp; không lộ token ra JS/URL. |
| REQ-N-SEC-03 | P0 | Dữ liệu cá nhân (số điện thoại, thanh toán) PHẢI KHÔNG xuất hiện trong query string/log. |
| REQ-N-SEC-04 | P1 | Đối soát thanh toán PHẢI dựa trên tiền thật về + khớp số điện thoại; model vision bị license-gate PHẢI KHÔNG nằm trên đường kích hoạt tự động. |
ND. Độ tin cậy & vận hành
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-OPS-01 | P0 | Deploy PHẢI tự động qua GitHub Actions khi push main (một workflow cho mỗi app; path-filter theo thư mục). |
| REQ-N-OPS-02 | P1 | Trial lazy-init PHẢI idempotent: nhiều request đồng thời không tạo trạng thái mâu thuẫn. |
| REQ-N-OPS-03 | P1 | Lỗi backend NÊN suy giảm mềm: người dùng thấy thông báo thân thiện, không trắng trang. |
NE. Khả dụng & i18n
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-UX-01 | P1 | Giao diện Builder PHẢI dùng tiếng Việt là ngôn ngữ chính; thuật ngữ theo chuẩn naming (Builder, Tokyo). |
| REQ-N-UX-02 | P1 | Ứng dụng NÊN responsive tốt trên mobile (đa số Builder truy cập bằng điện thoại). |
| REQ-N-UX-03 | P2 | Tài liệu (site này) NÊN có tìm kiếm cục bộ và điều hướng theo nhóm rõ ràng. |
NF. Khả năng mở rộng tài liệu
| ID | Ưu tiên | Yêu cầu |
|---|---|---|
| REQ-N-DOC-01 | P1 | Cấu trúc docs PHẢI cho phép bổ sung hệ thống khác (www, admin, api) mà không phá điều hướng hiện có. |
| REQ-N-DOC-02 | P2 | Mỗi tài liệu NÊN truy vết được về User Story và mục SDD tương ứng. |