APMATHS — Báo cáo Đợt 3B–5 (ngày 12/10/2026)
CẬP NHẬT 13/10/2026: PR #4 đã merge vào
main, squash commite1f337b7ceddc914222b70936d34732742953e7d. Người dùng đã kết nối tên miềnapmaths.io.vnvới Cloudflare Pages. Chưa xác minh độc lập deployment Production mới và nghiệm thu E2E. Chưa Cloudinary, thanh toán hoặc chuyển hướng domain cũ. Xem checklist chốt phiên sau merge.
Mốc quan trọng
| Đợt | Đã làm | Còn chờ |
|---|---|---|
| 3B — Đăng ký giáo viên | Supabase 2: hồ sơ giáo viên + Admin [email protected] đã xác minh và cấp platform_admin, giao diện /platform/ |
Auth allowed redirects/Email config, CAPTCHA và E2E đăng ký bằng tài khoản thật |
| 3C — Lớp/học sinh | Workspace, tạo/đổi tên/lưu trữ lớp, mã mời, ghi danh, rời lớp và xóa học sinh | Test browser thực tế và tải đồng thời; nâng cấp quản lý trợ giảng |
| 3D — Ngân hàng/kiểm tra | platform_question_banks, platform_questions, platform_exams, platform_exam_questions, platform_exam_attempts; UI /platform/exams/; server grading |
E2E, import/export đề, CLO, tự luận, cấu hình đề nâng cao |
| 3E — Guest thu hút traffic | /practice/try/ 24 câu Đại số tuyến tính, offline-in-browser, từ PR #3; link từ /practice/ |
Mở rộng ngân hàng công khai có duyệt, SEO/content và đo tải thực |
| 3F — Khóa học của bạn | Supabase 1: 4 bảng thương mại, thêm ràng buộc liên kết personal_courses.subject_id tới môn AI-CLO đã có. /courses/apmaths/ giới thiệu; sinh viên xem Khóa học của tôi ngay trong AI-CLO từ state.subjects |
Chưa thanh toán/đối soát hay tự động cấp membership sau mua; giữ nguyên môn cũ |
| 4 — Thương mại | Supabase 2: platform_service_plans, platform_workspace_subscriptions, platform_usage_events; tự cấp gói free khi tạo workspace |
Chốt giá, nhà cung cấp thanh toán, webhook/đối soát, chi phí và enforce hạn mức |
| 5 — Website/tên miền | Trên repo Private mới: _config.yml canonical về apmaths.io.vn; robots/sitemap từ Jekyll; noindex trang quản lý, bổ sung liên kết cổng |
Xác minh DNS/Cloudflare domain, Preview browser, kiểm tra canonical/sitemap thực tế, URL mapping và thực hiện redirect sau duyệt |
Ranh giới hai Supabase
- Supabase 1
yhfburffwzvcayjadskr: AI-CLO cá nhân, đề thi thử công khai, sinh viên/học sinh và khóa học do bạn trực tiếp giảng dạy. Không mở Auth giáo viên bên ngoài ở base 1. - Supabase 2
mhgsvxsjrzaeafvifydu: giáo viên bên ngoài và học sinh của họ; class/workspace/questions/exams tách tenant. Admin[email protected]được cấp quyền trong base 2, không chuyển sang base 1. - AI-CLO PTITHCM
rraooqedkpyhokattwdz: hoàn toàn độc lập; không sao chép dữ liệu cá nhân hay đề bảo mật.
Điều kiện để phát hành
- Auth: xác thực email, URL allowlist, CAPTCHA và hạn mức signup/rpc; thử ít nhất Admin, giáo viên đã duyệt, giáo viên chưa duyệt, hai giáo viên khác nhau, học sinh.
- Thi bảo mật: kiểm thử browser thật để khẳng định học sinh không nhìn thấy đáp án trước nộp, không thể sửa điểm hoặc xem bài làm của người khác.
- Guest: đảm bảo JSON 24 câu chỉ là nội dung công khai; thực hành không gọi backend. Khi mở rộng ngân hàng đề có bản quyền, xây đường xuất bản riêng.
- Gói học: không cho trình duyệt tự đánh dấu paid; chỉ cấp quyền sau đối soát thanh toán bằng backend khi đã tích hợp provider.
- Website: GitHub Actions Node+Jekyll pass; Cloudflare Preview thực tế, kiểm tra mobile, 404, CSS/JS, Auth redirects; xác nhận
apmaths.io.vntrước khi thay đổi đường dẫn công khai. - Quyền riêng tư: giảm thiểu dữ liệu học sinh chưa thành niên; quy trình xóa dữ liệu, hỗ trợ, thời hạn lưu.
- Rollback/backup: lấy snapshot và kiểm tra dữ liệu ở mỗi project trước khi sửa sâu; 2 Supabase có folder migration riêng.
Mục tiêu chuyển URL — chỉ là kế hoạch
| Đường dẫn | Phương án |
|---|---|
apmaths.github.io/ |
Khi kiểm thử miền chính hoàn tất, có thể chuyển sang apmaths.io.vn/ |
apmaths.github.io/knowledge/... |
Chuyển từng trang qua URL nội dung tương ứng; không redirect mù |
apmaths.github.io/courses/... |
Chỉ chuyển trang có mapping và không phá link lớp cũ |
apmaths.github.io/ai-clo/ cùng toàn bộ đường dẫn con |
Giữ nguyên, không redirect |
apmaths.github.io/tools/ cùng toàn bộ đường dẫn con |
Giữ nguyên, không redirect |
Không có redirect mới nào được áp dụng trong PR #4; không sửa repository Public cũ.
Dấu vết triển khai và kiểm thử
- Base 2: 8 migration
apmaths_platform_* v1...v8, lưu ởsupabase/migrations/. - Base 1: 2 migration
apmaths_personal_classes_and_offers_v1vàapmaths_personal_link_existing_subjects_v2, lưu ởsupabase-personal/migrations/. - Đã PASS SQL transaction/rollback: Admin role, teacher A/B isolation, bank/exam, grading, expired exam, free-plan workspace; base 1 admin-only course/guest read restrictions. Thêm kiểm thử cấm xuất bản khóa chưa gắn môn, cấm trùng môn và cấm đổi liên kết sau công bố; không thay đổi 2 môn AI-CLO và 1 bản ghi thành viên hiện có.
- Trước phát hành phải chạy
node --test practice/try/test-guest.mjs,node --test tests/test-personal-course-bridge.mjsvà E2E browser với tài khoản thật. - Security Advisor: một số cảnh báo INFO do bảng nội bộ deny-all. Base 1 vẫn còn các cảnh báo cũ (SECURITY DEFINER, extension trong public) cần audit theo từng hàm trước khi mở quyền Auth rộng. Không xóa/chỉnh bừa các chức năng AI-CLO cũ.
Trạng thái nghiệm thu: Mã nguồn đã merge vào main và schema đã được triển khai; chưa nghiệm thu đầy đủ môi trường Cloudflare production/đăng nhập/luồng kiểm tra, chưa thu phí. Theo dõi các bước còn lại tại docs/10.