M0
M0: Nền tảng
Cài tool, chạy MySQL trong Docker, viết SQL bằng tay, và dựng shell Next.js với token cùng theme.
Monorepo portfolio/, container MySQL healthy, ghi chú SQL, và trang Next.js placeholder có theme tại /.
Tiến độ
0/4
M1
M1: API đầu tiên
Thêm NestJS, Prisma, endpoint đọc public, contract zod dùng chung, và render trang chủ từ API.
Sửa một dòng seed rồi seed lại thì trang chủ đổi. API tắt thì hiện Error, không crash.
Tiến độ
0/5
M2
M2: Đồ thị nội dung
Model quan hệ, tag, post với content block, query param cho list, và trang public lấy từ data.
Có trang About, projects và blog. Grep chuỗi CV trong web app ra 0 hits.
Tiến độ
0/5
M3
M3: Phía ghi
Thêm CRUD, transaction cho reorder, và index kiểm chứng bằng EXPLAIN.
Mọi route ghi nằm trong api.http. Cố ý fail giữa transaction thì DB không đổi. Query list dùng index.
Tiến độ
0/3
M4
M4: Auth + CMS admin
Auth bằng session, guard và CSRF, rồi shell admin kiểu Linear với table và editor.
Chưa login mà vào /admin thì redirect sang login. Schema zod dùng chung validate cả browser lẫn server.
Tiến độ
0/5
M5
M5: Realtime, media, publish
Form liên hệ với inbox SSE, upload ảnh, và draft/publish kèm revalidate theo nhu cầu.
Gửi form liên hệ thì inbox cập nhật không cần reload. Publish hiện trên trang public dưới 5 giây.
Tiến độ
0/3
M6
M6: Chất lượng
SEO từ CMS, analytics tự host và audit log, test trong CI, rồi audit a11y và hiệu năng.
Lighthouse SEO 100 trên các trang chính. pnpm test xanh. axe báo 0 lỗi serious.
Tiến độ
0/4
M7
M7: Ship
Compose production, hardening và backup, nội dung CMS thật, rồi deploy lên domain riêng.
HTTPS trên domain riêng, deploy khi push lên main, DB production còn 0 hàng placeholder.
Tiến độ
0/4