Trang này đồng bộ tự động từ
_shared/product-feature-catalogue.md. Sửa ở repo saboarena-shared, đừng sửa trực tiếp tại đây — lần chạynpm run docs:synckế tiếp sẽ ghi đè.
Mục đích: Catalogue tính năng cho CEO, marketing, sales, onboarding — app có những gì, ai dùng, vào từ đâu.
Không dùng file này để claim “đã live / đã bán được”. Claim đó nằm ởproduct-capability-registry.md.
Cập nhật: 2026-09-03 · sourcemain2.0.15+88 trên Flutter webapp.saboarena.com. Native App Store / Play không cùng build này.
Hai file khác nhau:
| File | Trả lời câu | Dùng khi |
|---|---|---|
| Catalogue này | App có những tính năng nào? | Brief ads, landing, sales deck, training |
| Capability registry | Hôm nay có được claim live / E2E / sellable không? | Trước khi viết copy “đã sẵn sàng”, onboard CLB ngoài, pitch B2B |
SPA = điểm thưởng trong hệ sinh thái, không phải tiền mặt / cược tiền.
1. Bề mặt sản phẩm
| Bề mặt | URL / store | Ai dùng |
|---|---|---|
| Flutter iOS | App Store | Player + chủ CLB + nhân sự |
| Flutter Android | Google Play | như trên |
| Flutter Web (app đã login) | https://app.saboarena.com | như trên + khách quét QR gọi món |
| Website công cộng | https://saboarena.com | Public SEO / discovery — repo website riêng, không nằm trong catalogue app này |
| Admin website | https://admin.saboarena.com | Nội bộ — website riêng |
Ngôn ngữ app: Tiếng Việt + English (lib/l10n/).
2. Bản đồ người dùng
Khách vãng lai (không login)
└─ Quét QR bàn → /order gọi món vào phiên đang mở
Player (5 tab dưới)
├─ Home / Feed
├─ Tìm đối thủ
├─ Giải đấu
├─ CLB (thư mục + profile CLB)
└─ Hồ sơ
Chủ CLB / quản lý (shell riêng, 5 tab)
├─ Vận hành quán (POS)
├─ Dashboard CLB
├─ Quản lý giải
├─ Hội viên
└─ Cài đặt CLB
Nhân sự quán (club_staff, vào /club/operations)
├─ Staff: sơ đồ bàn, báo cáo ca, doanh thu ca mình, chấm công
├─ Trưởng ca: thêm chốt ca, duyệt báo cáo, chip quản lý giải / nhập điểm (nếu được cấp quyền)
└─ Quản lý / chủ: đủ POS + kho + thu chi + lịch ca + cấu hình
Admin hệ thống (AdminGate)
└─ Duyệt CLB, user, giải, SPA, cài hệ thống
Đăng nhập: SĐT + OTP (Zalo/SMS qua Edge), Google / Apple / Facebook. Quên mật khẩu + OTP + đặt lại mật khẩu. Onboarding + setup hồ sơ sau đăng ký.
3. Player — 5 tab chính
3.1 Home / Bảng tin
Vào: tab Home.
- Bảng tin Gần bạn / Đang theo dõi
- Đăng bài: ảnh, album, text, poll; nền bài tùy chỉnh
- Like, comment, share
- Tìm kiếm người / nội dung
- Quét QR header → nhận mã giới thiệu (referral)
- Banner nhắc chủ chưa có CLB đăng ký quán
- Coach marks lần đầu (đã rút gọn)
- Realtime nghe thách đấu / matchmaking khi đang ở feed
3.2 Tìm đối thủ
Vào: tab Tìm đối.
| Sub-tab | Tính năng |
|---|---|
| Tìm đối | Danh sách cơ thủ, lọc, bật hàng chờ ghép trận (ELO + bán kính), gửi thách đấu |
| Cộng đồng | Thách xã hội / friendly |
| Của tôi | Kèo đang chờ, đã nhận, lịch sử |
| Bản đồ | Đối thủ trên map (nếu có quyền vị trí) |
- Tạo kèo: chấp điểm theo hạng/ELO, hẹn giờ, điều kiện trận
- Nhận / từ chối / lên lịch lại
- Head-to-head giữa hai cơ thủ (khi mở chi tiết)
- QR scanner trên tab này đang tắt chờ App Store (comment in code)
3.3 Giải đấu (player)
Vào: tab Giải đấu.
- Danh sách: sắp diễn ra / đang diễn ra / kết thúc; tìm kiếm; lọc; ưu tiên gần bạn
- Chi tiết giải — 5 tab: Tổng quan · Sơ đồ · VĐV · Điều lệ · Kết quả
- Đăng ký giải, thanh toán lệ phí (QR CLB / MoMo path tùy cấu hình), rút lui
- Xem bracket (SE, DE, SABO DE16/24/32/64, free DE)
- Overlay tỷ số live (MATCH POINT / HILL-HILL) khi đang xem trận
- Deep link
/tournament/{id}và/tournament/{id}/results - Demo bracket trong list = UI demo, không phải giải thật — không dùng cho marketing như “chơi demo giải”
Chủ/manager tạo giải từ tab này (wizard) nếu có quyền CLB.
3.4 CLB (player)
Vào: tab CLB.
- Thư mục CLB, tìm, lọc, CLB gần bạn (GPS)
- Profile CLB: ảnh, giờ mở cửa, nội quy, giải đang chạy, thành viên
- Xin vào CLB / xem CLB của tôi
- Đăng ký mở CLB mới (wizard chủ quán)
- Đặt bàn (reservation) từ phía player khi CLB bật
- Deep link
/club/{id}
3.5 Hồ sơ
Vào: tab Hồ sơ.
- Avatar / cover (upload nén JPEG), QR cá nhân, chia sẻ / copy link
- Hạng SABO + ELO (user mới chưa có hạng đến khi đăng ký hạng được duyệt)
- Thống kê trận, thành tích, bài viết của mình
- Lịch sử: trận, giải, ELO, hạng, SPA / điểm thưởng, thu nhập giải
- Bạn bè / follow
- Menu: quản lý CLB (nếu là chủ), chế độ player, tài khoản, thông báo, ngôn ngữ, trợ giúp, đăng xuất
- Quét QR referral (cùng luồng header Home)
Hạng sản phẩm: thang SABO (K → E+ và các bậc +). Không đăng ký hạng thì không vào BXH ranked.
3.6 Tính năng player nằm ngoài 5 tab
| Tính năng | Vào từ |
|---|---|
| Chat / tin nhắn trực tiếp | Messaging, DM |
| Thông báo | Chuông → danh sách; FCM sau login |
| Bảng xếp hạng | Route /leaderboard + profile |
| Quản lý / thống kê hạng | /rank_management, /rank_statistics |
| Đăng ký hạng (nộp video/chứng cứ) | Rank registration |
| Gói hội viên CLB (player mua) | Membership plans |
| Đặt bàn của tôi | My reservations |
| Ưu đãi / promotion của user | /user_promotion |
| Lịch sử thanh toán | Payment history |
| Điều khoản / bảo mật | Legal screens |
| Bài đã lưu | Saved posts |
| Lịch sử giới thiệu | Referral history |
| Check-in CLB + SPA từ bill | Club check-in (QR tại quán) |
Referral live policy (CEO 2026-09-02): người mới +100 SPA, người giới thiệu +100 SPA. UI E2E vẫn TO_VERIFY trên registry.
4. Chủ CLB / quản lý — shell 5 tab
Vào: chọn CLB → dashboard chủ (/club_dashboard) hoặc Cài đặt → quản lý. Chỉ owner hoặc manager (club_staff.staff_role map admin) thấy thanh dưới này. Nhân sự thường vào thẳng Vận hành quán, không thấy đủ 5 tab quản trị.
| Tab | Tên trên UI | Làm gì |
|---|---|---|
| 0 | Vận hành quán | POS — mục 5 |
| 1 | Dashboard | Tổng quan CLB, việc cần xử lý, hoạt động, thẻ doanh thu SABOHUB (nếu link), check-in, báo cáo, khuyến mãi |
| 2 | Giải đấu | Trung tâm quản lý giải |
| 3 | Hội viên | 4 sub-tab: Hội viên · Duyệt hạng · Gói thẻ · Thống kê |
| 4 | Cài đặt | Cấu hình CLB — mục 4.4 |
4.1 Dashboard CLB
- Số liệu thành viên / giải / hoạt động
- Cần xử lý hôm nay: duyệt hạng, video chờ, thanh toán gói thẻ, thông báo (tự ẩn khi = 0)
- Check-in hội viên tại quán
- Hub khuyến mãi / voucher / đổi thưởng (3 sub-tab — mục 4.3)
- Báo cáo CLB
- Marketing CLB (nội dung giải / share)
- Lịch sử hoạt động + lọc
- Live / quản lý trận CLB (màn
club_live,club_match_management— dùng nội bộ CLB, không claim livestream công cộng trừ khi registry promote)
4.2 Trung tâm giải đấu (club)
- Danh sách giải CLB: lọc mở / đang / xong / lỗi; tìm
- Wizard tạo giải (format, lệ phí, giải thưởng nhiều phần thưởng vật lý, pool SPA)
- Mời VĐV
- Quản lý VĐV, duyệt/từ chối, thanh toán lệ phí
- Tạo / xem bracket (
UnifiedBracketService) - Nhập điểm trận, xử lý bỏ cuộc / walkover
- Bảng xếp hạng giải
- Hoàn thành giải → thưởng SPA/ELO theo UI capture
- Sửa giải, tùy chọn bài đăng giải
- Gate SABO PRO trên một số hạn mức (số giải, dung lượng)
4.3 Hội viên & thưởng
Hội viên hub
- Danh sách hội viên, phân quyền thành viên (không dùng
club_members.rolelàm authz POS) - Duyệt đăng ký hạng (video)
- Gói thẻ: loại hội viên, duyệt thanh toán mua gói (modal duyệt — CTA đã sửa clip)
- Thống kê / analytics hội viên
- Chính sách membership
Ưu đãi & điểm thưởng (ClubPromotionHub)
- Khuyến mãi & giờ vàng (CTKM, happy hour, giảm giờ bàn / combo)
- Voucher & giải đấu (voucher VND, phát hành đợt, đối soát giải thưởng)
- Quầy đổi thưởng: quét mã, quà SPA, lịch sử đổi
- CLB cấp SPA tay cho hội viên
- Check-in bill → cộng điểm (
award_points_from_bill)
4.4 Cài đặt CLB
| Nhóm | Mục |
|---|---|
| Hỗ trợ | Gói SABO PRO, hướng dẫn vận hành, Vận hành quán, Nhân sự CLB (club_staff) |
| Chung | Sửa thông tin, giờ mở cửa, nội quy |
| Tài chính | Bảng giá giờ bàn, phương thức thanh toán, hóa đơn / VietQR |
| Giao diện | Logo, ảnh cover/profile, màu (PRO), card giải (PRO), social links |
| Thành viên | Quyền thành viên, chính sách hội viên |
| Tích hợp | Liên kết SABO-ID / SABOHUB registry (PRO), Facebook sync |
| Hệ thống | Thông báo, analytics, reset số liệu, backup, bảo mật |
Nhân sự CLB: thêm/sửa staff, 4 cờ quyền vận hành (kèm can_manage_tournaments / can_enter_scores → chip UI trưởng ca).
5. Vận hành quán (POS) — lib/bida/
Cửa vào duy nhất: /club/operations (Cài đặt CLB → Vận hành quán, hoặc tab 0 shell chủ).
Danh tính: auth.uid() = public.users. Không bảng employees.
Tenant: company_id = clubs.id.
Quyền server: owner + club_staff active (is_active + terminated_at IS NULL) + admin, qua can_access_service_company.
5.1 Theo vai trò (tab dưới)
Nhân viên
- Sơ đồ bàn
- Báo cáo ca
- Doanh thu ca mình (phiên do mình mở)
- Chấm công (check-in / out)
Trưởng ca — như staff, thêm chốt ca / duyệt báo cáo ca; chip Quản lý giải / Nhập điểm nếu được cấp.
Quản lý / chủ — 5 tab POS:
- Sơ đồ bàn — trống / đang chơi / đặt trước / bảo trì
- Hóa đơn & BC — lịch sử bill, lọc ngày, F&B line items, kết ca
- Đội ngũ & việc — danh bạ
club_staff, giao việc ưu tiên - Chấm công & ca — roster tuần
staff_shifts, duyệt công - Tổng quan / Quản lý — shortcut kho, thu chi, giá, đối tác, cấu hình bàn
5.2 Phiên bàn (mọi role được phép)
- Một UI bắt đầu phiên: sheet bàn trống = QR hội viên + tìm khách + walk-in (không còn form vàng tách)
- Timer giờ chơi, tạm tính theo block phút CLB
- Gọi món F&B (ảnh qua
wsrv.nlWebP) - Checkout: tiền giờ + món + chiết khấu hội viên; tiền mặt / VietQR / thẻ
- In nhiệt ESC/POS 58/80mm
- Đóng phiên, số phiên unique
- QR bàn → khách mở
https://app.saboarena.com/order?club=&table=&session=(UUID đầy đủ)
5.3 Quản lý (shortcut “Quản lý”)
- Bán hàng / danh sách phiên
- Block nhảy tiền (cấu hình block giờ)
- Tồn kho, nhập kho, tồn đầu, xuất, đổi trả, HH ngừng bán
- Kiểm kê kho
- Thu–chi ngày
- Tính giá xuất kho
- Khách ARENA, nhà cung cấp
- Thực đơn (CRUD món)
- Cài đặt bàn (loại Standard/VIP/Carom/Snooker, giá)
- Báo cáo / duyệt báo cáo ca
- Lịch phân ca
5.4 Khách (không login)
- Scan QR bàn →
GuestTableOrderPage - Xem context phiên + đặt món vào session đang mở (
table_qr_get_context/table_qr_place_order)
6. Admin hệ thống (nội bộ)
Vào: /admin_main sau AdminGate (users.role admin / super_admin). Không phải tab player.
- Tổng quan hệ thống
- Duyệt CLB mới
- Quản lý giải (toàn hệ)
- Quản lý user
- SPA / rewards admin
- Cài đặt hệ thống
- Analytics thông báo
- (More) công cụ nội bộ — AI image generator, cache; không đưa vào copy khách
7. Tích hợp / nền không hiện thành “tính năng app”
| Hạng mục | Ghi chú cho marketing |
|---|---|
| Push FCM + Sentry | Hạ tầng, không bán như feature riêng |
| PWA / icon web | Web app; Lighthouse CanvasKit không phải KPI product |
| SABOHUB executive projection | Hub đọc Arena — nội bộ CEO SABO, không phải tính năng player |
sabohub_registry SABO-ID | Liên kết 1 CLB với Hub; ops không login Hub |
can_access_service_company | Cổng RLS, không hiện UI |
8. Không phải năng lực sản phẩm (đừng bán)
demo_bracket/**— demo UI- Route test / screenshot
- Tutorial archived
- Tab “Học tập” / token Hub — không port sang Arena
- Code
employee_*leftover Dart (service chết) — identity staff =club_staff - Website
saboarena.comSEO — catalogue website riêng - Đồng bộ realtime hai chiều Arena ↔ Hub — không có; ops SoT = Arena
9. One-liner theo audience (copy an toàn)
Dùng câu này trong deck. Mọi câu “đã triển khai cho CLB ngoài / đã E2E” phải đối chiếu registry.
Player
Mạng xã hội bida: bảng tin, tìm đối, thách đấu, giải đấu có nhánh, CLB, hạng ELO, điểm SPA, giới thiệu bạn.
Chủ CLB
Một app: trang CLB + hội viên + giải + POS quán (bàn, món, bill, ca) + nhân sự club_staff.
Khách quán
Quét QR bàn, gọi món không cần cài app (web).
Nội bộ SABO
Admin duyệt CLB/user/giải; Hub đọc doanh thu Arena qua projection (cần env Hub).
10. Đối chiếu registry (hàng hay bị overclaim)
| Catalogue nói “có” | Registry (2026-09-03) |
|---|---|
| Vận hành quán trên web | club-operations-entry = DEPLOYED 2.0.15+88; UI E2E = TO_VERIFY |
| Native store cùng feature | release-ios / release-android không rebuild 2.0.15 |
| Bán gói POS cho CLB ngoài | Club ops CUSTOMER-FACING, SELLABLE = TO_VERIFY (#28 / #32) |
| Referral 100/100 | RPC live; redeem UI E2E = TO_VERIFY |
Guest /order | DEPLOYED trên web; E2E = TO_VERIFY |
11. Cách giữ catalogue không chết
Sau mỗi ship có màn hình / tab / cửa vào mới:
- Thêm/sửa mục trong file này (inventory).
- Sửa hàng tương ứng trong
product-capability-registry.md(live/sellable). - Không copy
FEATURE_ARCHITECTURE.mdnhư SSoT — file đó mô tả miền kỹ thuật, có chỗ lệch production (ví dụ QR bàn hiện là URL session, không phải HMAC 300s).
Handoff kỹ thuật: _DOCS/00-PRODUCTION-TRUTH.md + docs/SESSION_HANDOFF.md.