Quality — Non-Functional Requirements
Các yêu cầu về tốc độ, độ tin cậy, bảo mật và khả năng truy cập cho mọi domain của danghong.me. Cột Hiện trạng ghi rõ điều gì đã đạt, điều gì mới là mục tiêu, để tài liệu không mô tả thứ chưa có.
1. HIỆU NĂNG
| Yêu cầu | Mục tiêu | Hiện trạng |
|---|---|---|
| Lighthouse (Performance, A11y, Best Practices, SEO) | ≥ 90 mọi mục | Chưa đo định kỳ |
| LCP | < 2.5s (lý tưởng < 1.2s) | Chưa đo định kỳ |
| INP | < 200ms | Chưa đo định kỳ |
| CLS | < 0.1 | Chưa đo định kỳ |
| Không có server lúc chạy cho website, docs, media | Static export | ✅ Đạt |
| Thời gian phản hồi API ở edge | < 50ms | API chưa chạy (xem Infrastructure) |
2. ĐỘ TIN CẬY
- Hosting: Cloudflare Pages và Workers, không tự quản lý máy chủ. ✅
- Khôi phục: Code và tài liệu nằm trong Git; site nào hỏng thì deploy lại từ
main. Nội dung nằm trong D1 (Time Travel 30 ngày) và R2 (chưa có sao lưu, xem Infrastructure I4). ⚠️ - Kiểm tra trước khi phát hành: CI chạy lint và build cho website, docs, media trên mọi PR. ✅
3. BẢO MẬT & QUYỀN RIÊNG TƯ
| Yêu cầu | Hiện trạng |
|---|---|
| Không bắt đăng nhập (Trial-all), không lưu dữ liệu người dùng phía server | ✅ Đạt. Tương tác cá nhân chỉ lưu localStorage |
| HTTPS cho mọi domain | ✅ Đạt (SSL tự động của Cloudflare) |
Header bảo mật X-Frame-Options, X-Content-Type-Options, Referrer-Policy | ❌ Chưa có. website/public/_headers mới chỉ có header cache |
| API kiểm tra dữ liệu đầu vào (schema validation) | ❌ Chưa có. POST /api/v1/contact mới kiểm tra các trường bắt buộc |
| Không commit secret | ✅ .env*, api/.dev.vars nằm trong .gitignore |
4. KHẢ NĂNG TRUY CẬP & SEO
- Tương phản màu: tối thiểu 4.5:1 cho chữ thường (WCAG 2.1 AA).
- Bàn phím: mọi menu, nút, modal dùng được bằng Tab/Enter/Esc.
- HTML ngữ nghĩa: dùng
<header>,<main>,<nav>,<article>,<footer>. - SEO: mỗi trang có
title,description, Open Graph.
Các mục này là chuẩn bắt buộc cho trang mới; chưa có đợt kiểm tra tổng thể nào trên toàn website.
5. TIÊU CHUẨN TÍNH NĂNG (CHUNG)
- Interactive Evidence: site không phải CV tĩnh. Người xem "Chạm - Bấm - Thấy kết quả" ngay.
- Outcome-Driven: một yêu cầu chỉ được chấp nhận nếu có Outcome (kết quả người dùng nhận), Path (lộ trình Home → Action → Result) và Evidence (bằng chứng).
- Frictionless Trial: ưu tiên dùng thử không cần đăng nhập.
Áp đầy đủ cho danghong.me. Site cửa sổ (ai, ielts, nextstep) theo mục tiêu ghi trong brief của site.
6. CỔNG KIỂM DOCS
| Cổng | Lệnh | Bắt |
|---|---|---|
| QG-001 Frontmatter | cd docs && npm run check | Thiếu trường, description quá 160 ký tự, status sai, ngày không tuyệt đối |
| QG-002 Link | npm run check và npm run build | Link chết, link trỏ ra ngoài docs/ |
| QG-003 Cỡ trang | npm run check | Trên 40 KB cảnh báo, trên 80 KB lỗi |
| QG-004 Docs đi cùng code | CI docs-sync | PR sửa website/, media/, api/ mà không sửa docs/ |