♠️

Z-Poker

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.

Next.jsNestJSTypeScriptTailwindPostgreSQLClerkSSEResend
Z-Poker

Vì sao mình làm cái này

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.

Bảng xếp hạng Z-Poker với podium top 3 và tier badges
01

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.

Form tạo session với buy-in và danh sách active session
02

Buy-in, chọn người, vào bàn.

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àn hình session đang active với input chip và banner waiting
03

Chip cập nhật realtime. Khỏi cần spreadsheet.

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.

Session đã lock với ranking winner và animated ELO delta
04

Lock bàn. Nhìn ELO chạy.

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.

AI recap highlight session trong màn hình session
05

MC AI viết highlight. Gửi thẳng vào mail.

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.

Profile người chơi với tier badge, lịch sử và đường ELO
06

Từ Tay Non lên Thần Bài.

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.

Phía sau màn hình

ELO tune riêng cho văn phòng 20 người

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.

Một tenant cho mỗi domain email

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.

Realtime, không cần WebSocket

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.

AI recap, gửi qua email

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.

Tech stack & con số

v1.0
Phiên Bản Hiện Tại
2 ngày
Từ MVP Đến Ra Mắt
Đang chạy & cập nhật
Bản Cập Nhật Lớn

Bạn cũng đang ấp ủ một ý tưởng?

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.