Monorepo gồm:
- Backend: Node.js
- Web Admin: React Vite
- Mobile App: Expo
Lưu ý: Để đảm bảo codebase sạch, đồng nhất và tận dụng tối đa AI (Cursor/GitHub Copilot), mọi thành viên BẮT BUỘC đọc kỹ và làm theo hướng dẫn dưới đây trước khi code.
Dự án là Monorepo với nhiều stack (Node.js, React, React Native). Nếu AI không được "dạy" đúng context, có thể sinh ra code sai (ví dụ: nhét <div> vào code Mobile).
ĐÃ CÓ SẴN các file ngữ cảnh AI_CONTEXT.md ở từng thư mục để "huấn luyện" AI quy tắc code riêng cho từng phần.
- Cursor tự nhận diện file
.cursorrules(có thể rename từAI_CONTEXT.md). - Chỉ cần mở file code trong thư mục nào, Cursor sẽ tự áp dụng luật của thư mục đó.
- Khi mở khung Chat để nhờ AI viết code, hãy @-mention file
AI_CONTEXT.mdtương ứng với thư mục bạn đang làm việc.- Ví dụ: Đang code App Mobile, gõ vào chat:
@apps/mobile/AI_CONTEXT.md Viết cho tôi component hiển thị giỏ hàng bằng Zustand.
- Ví dụ: Đang code App Mobile, gõ vào chat:
⚠️ Quy tắc tối thượng: Không nhờ AI viết code chung chung. Luôn ép AI tuân thủ file Context để giữ chuẩn đặt tên (camelCase, snake_case) và kiến trúc thư mục.
Dự án áp dụng Conventional Commits để dễ review và theo dõi lịch sử. Đã có sẵn file .gitmessage ở thư mục gốc.
Mở Terminal tại thư mục gốc và chạy:
git config --local commit.template .gitmessageTừ giờ, KHÔNG dùng git commit -m "...". Thay vào đó:
git commit -e -F .gitmessageLúc này, Terminal (hoặc VSCode/IntelliJ) sẽ tự động mở file template. Bạn chỉ cần:
- Bỏ dấu # ở dòng đầu tiên và điền thông tin (VD:
feat(mobile): add shopping cart UI). - Điền thêm mô tả chi tiết ở phần [Body] nếu logic phức tạp.
- Lưu file và đóng cửa sổ editor (nếu dùng Nano: Ctrl+O, Enter, Ctrl+X). Git sẽ tự động hoàn tất commit!
- 🚫 KHÔNG BAO GIỜ code hay push trực tiếp lên nhánh
mainhoặcdevelop. main: Nhánh production (chỉ Leader được merge).develop: Nhánh gom code để test. Tất cả thành viên phải rẽ nhánh từ đây.
- Đứng ở nhánh
developvà pull code mới nhất:git checkout develop git pull origin develop
- Tạo nhánh làm việc mới:
- Tên nhánh theo format:
<type>/<scope>-<tên-task> - Ví dụ:
feat/admin-login-page,fix/mobile-cart-bug,chore/web-update-readme - Lệnh tạo nhánh:
git checkout -b feat/admin-login-page
- Tên nhánh theo format:
- Code và Commit (nhớ dùng
git commitđể bật template). - Đẩy code lên remote:
git push -u origin <tên-nhánh-của-bạn>
- Tạo Pull Request (PR) trên GitHub để merge vào
develop. Nhờ thành viên khác review & approve.
| Loại (type) | Ý nghĩa | Ví dụ |
|---|---|---|
| feat | Thêm mới tính năng | feat/mobile-cart |
| fix | Sửa bug | fix/web-login-bug |
| chore | Công việc phụ trợ (update doc, config, ...) | chore/update-readme |
| refactor | Cải tổ code, không đổi chức năng | refactor/backend-auth |
| test | Thêm/sửa test | test/api-user |
scope: Chỉ rõ module/phần ảnh hưởng (mobile, web, backend, admin, ...)
tên-task: Mô tả ngắn gọn task (bằng tiếng Anh hoặc Việt không dấu)
Ví dụ tổng hợp:
feat/mobile-cart-addfix/web-login-bugchore/backend-update-envrefactor/admin-user-table