
Một bảng xếp hạng. Riêng văn phòng bạn.
Mở app là biết mình đang ở đâu — trong nội bộ công ty. Top 3 có podium với hiệu ứng running-light. Còn lại đều có tier badge, từ 🐟 Cá Con đến 👑 Thần Bài, kèm thanh tiến độ tới rank tiếp theo.
Poker văn phòng, có ELO đàng hoàng.
Thói quen poker giờ trưa biến thành web app realtime có ELO ranking — ship trong 2 ngày cuối tuần, vẫn chạy đều mỗi thứ Hai.

Bàn poker giờ trưa có một vấn đề: 30 phút là quá ngắn cho một ván poker đúng nghĩa, anh em hay all-in bất chấp, làm mất luôn chất chiến thuật của trò chơi. Cần một hệ thống tracking dài hạn để mọi người chơi có chiến thuật và có trách nhiệm hơn. Ngoài ra, một lớp gamification hợp lý sẽ làm game tương tác và vui hơn rất nhiều. Sau 2 ngày cuối tuần, Z-Poker lên sóng.

Mở app là biết mình đang ở đâu — trong nội bộ công ty. Top 3 có podium với hiệu ứng running-light. Còn lại đều có tier badge, từ 🐟 Cá Con đến 👑 Thần Bài, kèm thanh tiến độ tới rank tiếp theo.

Ai có email công ty cũng tạo được session trong vòng 10 giây. Chọn buy-in, thêm người ngồi quanh bàn — xong. Cả văn phòng thấy session xuất hiện ngay, không cần refresh.

Mỗi người tự nhập chip của mình từ điện thoại. Một người chỉnh, cả bàn thấy số nhảy theo. Khi tổng chip khớp, host lock bàn.

Khoảnh khắc host nhấn lock, ELO của từng người nhảy lên hoặc xuống ngay trên màn hình — chạy theo thứ tự, có animation, streak bonus sáng lên cho ai đang hot. Đây là lúc cả phòng tự nhiên im bặt.

Trước khi bắt đầu, host chọn một persona MC. Sau khi lock, MC đó viết một bản recap ngắn, đậm chất hype — ai bluff đỉnh, ai bị crack, ai vừa lên tier — và gửi vào mail cả bàn trong vài phút.

Mỗi người có một profile nhớ trọn hành trình — tổng số trận, win rate, phong độ gần đây, đường ELO từ tân binh đến cao thủ. Sáu tier chính, mid tier chia division 50 ELO, nên rank tiếp theo luôn ở rất gần.
Công thức tự viết: K bất đối xứng để thắng thấy đáng, thua không bị nghiền; curve phẳng để top player không bị nghẽn; streak bonus cho ai đang hot. Mọi constant đều có snapshot test.
Tenant = domain công ty (@acme.com), enforce ngay ở auth guard. Data công ty A và công ty B không bao giờ đi chung một query.
Hai luồng SSE — một cho cả domain, một cho từng session — chở mọi cập nhật chip, join, lock. Không socket lib, không pub/sub. Chỉ NestJS Observable.
Khi lock, một prompt Claude viết highlight theo giọng của MC đã chọn. Resend lo phần ship email. Cả vòng lặp chạy xong trong ~30 giây.
Z-Poker từ ý tưởng đến live mất đúng 2 ngày cuối tuần. Nếu bạn có một ý tưởng — dù lớn hay nhỏ, công cụ nội bộ hay sản phẩm thật — mình có thể giúp bạn biến nó thành app chạy được.