climb_stairs

商業需求文件 (BRD)

BRD — Ladder Room Online

版本:v1.0

日期:2026-04-21

狀態:Draft

基於:IDEA.md + legacy-PRD v1.4 + legacy-PDD v2.2 + legacy-EDD + legacy-ARCH v1.2 + legacy-API v1.1 + legacy-SCHEMA v1.1


§1 Product Vision & PR-FAQ

§1.1 Hypothetical Press Release

Ladder Room Online 正式上線 — 讓異地多人抽獎公平、透明且充滿樂趣

2026 年春季 — 台灣

今天,Ladder Room Online 宣布正式推出,這是一款基於 LINE 爬樓梯玩法的 HTML5 線上多人互動抽獎遊戲,支援最多 50 位玩家同時從不同地點加入同一場抽獎活動。

活動主持人只需 1 分鐘即可建立房間,分享 6 碼邀請連結,玩家無需安裝任何 App,透過手機或電腦瀏覽器即可加入。獨家 Mulberry32 PRNG 算法確保所有客戶端結果 100% 一致,完全消除舞弊疑慮。主持人可手動逐步揭曉、設定自動揭曉間隔,或一鍵全部揭曉,靈活配合現場節奏。

「我們的目標是讓每一場線上活動的抽獎環節都能像現場一樣令人期待,」開發團隊表示。「從尾牙到直播互動,Ladder Room Online 讓公平、透明與娛樂性三者並存。」

Ladder Room Online 現已可透過瀏覽器存取,主持人無需下載安裝,即可立即建立房間並開始第一場抽獎活動。


§1.2 Internal FAQ

Q1:這個產品解決了什麼核心問題?

A:LINE 原生爬樓梯遊戲在人數超過上限後只顯示結果,不顯示完整走線過程,視覺不完整,且無法獨立部署作為品牌活動頁或大型線上互動玩法。Ladder Room Online 突破這些限制,支援異地多人同房、主持人掌控揭曉節奏、結果公正可驗證。

Q2:目標用戶是誰?

A:兩類:(1) 需要在活動中主持公平多人抽獎的主持人(Host),例如公司活動負責人、直播主、老師;(2) 收到邀請連結、透過瀏覽器參與的玩家(Player)。

Q3:MVP 的技術邊界是什麼?

A:Node.js 20 + Fastify + WebSocket(ws)+ Redis(唯一持久層)+ Vanilla TypeScript + Vite + Kubernetes(Rancher Desktop 本機開發),單一伺服器實例支援 100 並發房間、5,000 WebSocket 連線。

Q4:如何確保抽獎結果公平?

A:採用 Mulberry32 PRNG + djb2 hash seed + Fisher-Yates 洗牌,seed 在 finished 狀態前禁止傳送給任何客戶端,防止預測結果;結果槽以 bijection 確保 N 個起點對應 N 個唯一終點。

Q5:MVP 範圍內不包含哪些功能?

A:不含使用者帳號系統、行動原生 App、觀眾模式、多房間管理後台、自訂獎品名稱、動畫主題自訂、抽獎結果匯出、多語言支援、伺服器端水平擴展(Multi-node)及聲音效果。


§2 Problem Statement

§2.1 Problem & User Needs

問題背景

LINE 爬樓梯遊戲是廣泛使用的抽獎互動形式,但原生版本存在以下限制:

問題說明
人數限制超過一定人數後只顯示結果,不顯示完整走線過程
視覺不完整人數多時畫面顯示不完整,體驗大打折扣
規則僵化難以自訂房間機制與獎項規則
無法獨立部署不適合作為獨立品牌活動頁或大型線上互動玩法
異地參與障礙不支援異地多人同房、主持人掌控揭曉節奏、結果公正可驗證

用戶需求

§2.2 Pain Point Quantification

⚠️ [TODO] §2.2 需補充具體量化數據:如 LINE 爬樓梯月活躍使用次數、台灣線上活動市場規模、主持人痛點調查數據等。


§3 Business Objectives & Success Metrics

§3.1 SMART Goals

#目標SpecificMeasurableAchievableRelevantTime-bound
G1技術穩定性建立房間成功率 > 99.5%Server 端請求成功率(排除基礎設施故障期間)單一實例部署,Redis 原子操作確保用戶信任MVP 上線後第 1 個月
G2玩家體驗玩家加入成功率 > 99%玩家加入請求成功率WebSocket 穩定架構降低參與門檻MVP 上線後第 1 個月
G3性能達標Canvas 動畫桌機 ≥ 30fps;手機 ≥ 24fpsChrome DevTools FPS 量測Vanilla TS + requestAnimationFrame抽獎體驗關鍵指標MVP 上線前通過 E2E 測試
G4同步延遲廣播端對端延遲 < 2 秒(P95)WebSocket 打點計算端對端延遲Redis Pub/Sub + ws確保揭曉體驗流暢MVP 上線前通過 k6 壓測
G5結果一致性100% 客戶端結果一致多客戶端結果比對;1,000 次 seed 自動驗證Mulberry32 PRNG,shared 演算法公平性核心承諾MVP 上線前通過自動化測試

§3.2 KPIs

KPI目標值量測方式量測時機優先級
建立房間成功率> 99.5%Server 端日誌統計MVP 上線後第 1 個月P0
玩家加入成功率> 99%Server 端日誌統計MVP 上線後第 1 個月P0
同房間最大人數50 人k6 壓力測試(50 並發連線)MVP 上線前 CIP0
開局後結果一致性100%多客戶端結果比對;1,000 次 seed 自動化驗證MVP 上線前 CI 閘門P0
揭曉動畫流暢度(桌機)≥ 30fpsChrome DevTools,50 人滿員,1080pMVP E2E 測試P1
揭曉動畫流暢度(手機)≥ 24fpsChrome DevTools Moto G4 throttling,10 秒平均MVP E2E 測試P1
房間同步延遲(P95)< 2 秒WebSocket 打點計算端對端延遲k6 壓測P1
重連恢復成功率100%自動化測試模擬 WebSocket 強制斷線MVP E2E 測試P1
重連完成時間(P95)< 3 秒Playwright 量測:DOMContentLoaded 至狀態渲染完成MVP E2E 測試P1
前端 JS bundle(首頁,gzip)< 80KBLighthouse CI bundle 分析每次 PRP1
前端 JS bundle(遊戲頁,gzip)< 150KBLighthouse CI bundle 分析每次 PRP1
FCP(Simulated Slow 4G)< 1.5sLighthouse CI每次 PRP1
LCP(Simulated Slow 4G)< 2.5sLighthouse CI每次 PRP1
CLS< 0.1Lighthouse CI每次 PRP1

§3.3 OKRs (Optional)

Objective:成為台灣線上活動主持人首選的抽獎工具

Key Result量測指標目標時間
KR1:技術基礎可靠建立房間成功率 ≥ 99.5%,連續 30 天MVP 上線後第 1 個月
KR2:用戶體驗順暢P95 玩家加入時間 < 1.5 秒MVP 上線前通過 E2E 測試
KR3:結果公信力主持人與玩家零舞弊投訴(seed 驗證機制確保可事後驗算)MVP 上線後 30 天

⚠️ [TODO] §3.3 OKR 中的 KR 需補充實際業務成長目標(如:月活用戶數、房間創建數量等),目前僅有技術層面指標。

§3.4 RTM(Requirement Traceability Matrix)

需求 ID需求描述來源文件對應 User Story對應功能需求對應 NFR驗收標準
REQ-01建立唯一 6 碼 Room CodePDD §7.1US-H01FR-01-1, FR-01-2NFR-02AC-H01-1, AC-H01-4
REQ-02設定中獎名額 W(1 ≤ W ≤ N-1)PDD §6.2, §6.3US-H02FR-01-3-AC-H02-1, AC-H02-2
REQ-03開始遊戲(N ≥ 2 且 W 已設定)PDD §6.2US-H03FR-04-1NFR-01, NFR-03AC-H03-1~AC-H03-5
REQ-04手動逐步揭曉PRD §US-H04US-H04FR-05-1NFR-01AC-H04-1~AC-H04-5
REQ-05自動揭曉(T 1-30 秒)PRD §US-H05US-H05FR-05-2NFR-01AC-H05-1~AC-H05-3
REQ-06一鍵全揭PRD §US-H06US-H06FR-05-3NFR-01AC-H06-1~AC-H06-3
REQ-07踢除玩家(waiting 狀態)PDD §7.1US-H07FR-09-1~FR-09-3NFR-05AC-H07-1~AC-H07-5
REQ-08再玩一局PRD §US-H08US-H08FR-08-1~FR-08-3-AC-H08-1~AC-H08-4
REQ-09複製邀請連結(Clipboard API + fallback)PRD FR-11-3US-H09FR-11-3-AC-H09-1~AC-H09-3
REQ-10玩家加入(暱稱 + 6 碼碼)PDD §7.1US-P01FR-02-1~FR-02-3NFR-01AC-P01-1~AC-P01-6
REQ-11URL 預填房號 + localStorage 暱稱預填PRD FR-11-2, FR-11-4US-P01FR-11-2, FR-11-4-AC-P01-5, AC-P01-6
REQ-12即時玩家列表更新(< 2 秒)PRD §US-P02US-P02FR-02-4NFR-01AC-P02-1, AC-P02-2
REQ-13路徑揭曉動畫(Canvas)PRD §US-P03US-P03FR-10-1~FR-10-4NFR-01AC-P03-1, AC-P03-2
REQ-14中獎結果確認PRD §US-P04US-P04FR-12-1, FR-12-2NFR-03AC-P04-1, AC-P04-2
REQ-15斷線重連(< 3 秒恢復)PDD §8US-P05FR-07-1~FR-07-3NFR-04AC-P05-1~AC-P05-3
REQ-16被踢通知與 localStorage 清除PDD §7.1US-P06FR-09-2, FR-09-3NFR-05AC-P06-1, AC-P06-2
REQ-17Mulberry32 PRNG + Fisher-Yates bijectionPRD FR-03US-H03FR-03-1~FR-03-4NFR-03, NFR-05AC-H03-3, NFR-03
REQ-18JWT 認證(Host 操作)PRD NFR-05US-H01~US-H09FR-01-4NFR-05NFR-05
REQ-19WebSocket 訊息大小上限 64KBEDD §0全部 WS 操作FR-06-3NFR-05-
REQ-20Kubernetes + Redis 部署EDD §2全部-NFR-02, NFR-04k6 壓測

§3.5 Benefits Realization Plan

效益實現條件量測時間點負責方
主持人可在 1 分鐘內建立並開始一場抽獎活動MVP 上線且通過 E2E 測試MVP 上線後第 1 個月產品 + QA
玩家無需安裝 App,10 秒內完成加入P99 加入時間 < 1.5sMVP 上線後 E2E 量測前端 + QA
所有客戶端抽獎結果 100% 一致,消除舞弊疑慮1,000 次 seed 自動化驗證MVP 上線前 CI 閘門後端 + QA
支援尾牙/直播等大型活動(50 人同房)k6 壓測通過 100 房間 × 50 人MVP 上線前壓測後端 + DevOps

§4 Target Users

§4.1 User Segments

角色使用情境核心需求規模
主持人(Host)尾牙、直播互動、線上活動、課堂點名、會議抽獎快速建立活動(1 分鐘內開局)、即時掌握人員狀態、結果公平可展示每場 1 人
玩家(Player)收到邀請連結、透過瀏覽器參與10 秒內完成加入、不需安裝 App、手機電腦均可、感受抽獎期待感每房間 2~50 人

使用規模:正常活動規模支援 30 人,系統設計上限 50 人;單一伺服器實例支援 100 個並發房間、5,000 個 WebSocket 連線。

§4.2 User Personas

Persona 1:Annie — 企業活動主持人(Host)

Persona 2:Bob — 直播主(Host)

Persona 3:Carol — 活動參與者(Player)


§5 Scope

§5.1 In Scope

主持人功能(Host)

  1. 建立房間:生成唯一 6 碼 Room Code(32 字元集,排除視覺混淆字元),2 秒內完成,房間 TTL 4 小時
  2. 設定中獎名額:設定 W(1 ≤ W ≤ N-1),可在 waiting 狀態隨時調整;房間名稱(title,0~50 字)
  3. 開始遊戲:驗證 N ≥ 2 且 W 已設定後,狀態轉為 running,凍結玩家名單
  4. 手動逐步揭曉:每次點擊「下一位」廣播 REVEAL_INDEX,逐格播放路徑動畫
  5. 自動揭曉:設定間隔 T(1 ≤ T ≤ 30 秒整數),伺服器自動定時廣播
  6. 一鍵全揭:廣播 REVEAL_ALL,所有客戶端 2 秒內完成全部動畫渲染
  7. 踢除玩家:僅在 waiting 狀態有效,被踢玩家同局不可重連
  8. 再玩一局:finished 後剔除離線玩家,重置房間狀態為 waiting
  9. 複製邀請連結:Clipboard API 一鍵複製 {origin}/?room={roomCode};不可用時 fallback 為可全選 <input>

玩家功能(Player)

  1. 加入房間:輸入暱稱(1~20 Unicode 字元,同房唯一)及 6 碼房間碼,1.5 秒內進入等待畫面
  2. URL 預填房號:透過邀請連結自動帶入 Room Code
  3. localStorage 暱稱記憶:自動預填上次暱稱(key: ladder_last_nickname
  4. 即時玩家列表:等待大廳即時顯示其他玩家加入/離線狀態,廣播更新 < 2 秒
  5. 路徑揭曉動畫:Canvas 高亮自己路徑,桌機 ≥ 30fps,手機 ≥ 24fps
  6. 中獎結果確認:路徑抵達底部後即時顯示「恭喜中獎!」或「未中獎」
  7. 斷線重連:帶 playerId 自動重連,3 秒內恢復狀態快照,不重播已完成動畫
  8. 被踢通知:收到 PLAYER_KICKED 後立即提示、清除 localStorage、提供「回首頁」按鈕

遊戲核心機制

技術交付

§5.2 Out of Scope

  1. 使用者帳號系統:MVP 不實作登入、註冊、歷史紀錄查詢;主持人身份以一次性 JWT token 管理
  2. 行動原生 App(iOS / Android):MVP 僅支援行動瀏覽器(Mobile Web)
  3. 觀眾模式(Spectator):MVP 不支援純觀看不參與的角色
  4. 多房間管理後台:MVP 不提供管理員儀表板
  5. 自訂獎品名稱或分組抽獎:MVP 結果槽僅區分「中獎」與「未中獎」
  6. 動畫主題或皮膚自訂:MVP 使用單一視覺主題
  7. 抽獎結果匯出(PDF / CSV):MVP 不提供結果下載功能
  8. 國際化(i18n)多語言支援:MVP 以繁體中文為唯一介面語言
  9. 多 Pod 水平擴展(HPA Multi-node):MVP 以單一 Kubernetes Pod 部署,不啟用 HPA 自動水平擴展;K8s 部署設定本身在 MVP 範圍內(單 Pod),HPA 多 Pod 動態擴展為 Post-MVP 功能
  10. 聲音效果與背景音樂:MVP 不包含音效

§5.3 Assumptions & Dependencies

假設

依賴

依賴項類型說明
Node.js 20 LTS技術依賴Runtime 環境
Redis 6+基礎設施依賴唯一持久層,需支援 WATCH/MULTI/EXEC
Kubernetes(Rancher Desktop)基礎設施依賴本機開發環境
GitHub ActionsCI/CD 依賴自動化測試與部署
GitHub Pages部署依賴前端靜態資源 CDN
Vitest測試依賴後端覆蓋率目標 ≥ 80%,前端 ≥ 70%
Playwright測試依賴E2E 測試,覆蓋所有 P0 User Story

§6 Market & Context

§6.1 Market Size

目標市場

⚠️ [TODO] §6.1 需補充具體市場規模數據:台灣線上活動工具市場規模(TAM/SAM/SOM)、LINE 月活用戶數、年度尾牙活動場次估計等。

§6.2 Competitive Landscape

競品優勢劣勢與本產品差異
LINE 原生爬樓梯零進入門檻,用戶熟悉人數上限、視覺不完整、不可獨立部署Ladder Room Online 突破人數限制,支援完整走線動畫
Mentimeter / Slido功能豐富,投票/問答不支援爬樓梯玩法,訂閱制付費專注爬樓梯核心玩法,免費 MVP
其他線上抽獎工具各有特色多數缺乏爬樓梯走線動畫走線動畫是核心差異化體驗

⚠️ [TODO] §6.2 需補充更多競品分析,包含:抽獎輪盤工具(Wheel of Names 等)、日本/韓國同類工具,及定價策略比較。


§7 Functional Requirements Overview

(高層次功能列表,詳細規格請參考 docs/req/legacy-PRD.md)

主持人功能(P0 優先)

FR ID功能優先級
FR-01房間建立與管理(Room Code 生成、JWT token)P0
FR-03樓梯生成算法(Mulberry32 PRNG、Fisher-Yates)P0
FR-04房間狀態機(waiting → running → revealing → finished)P0
FR-05揭曉控制(手動/自動/一鍵全揭)P0
FR-06WebSocket 事件規格P0

玩家功能(P0 優先)

FR ID功能優先級
FR-02玩家加入與身份管理(playerId、暱稱唯一性)P0
FR-10Canvas 動畫渲染(requestAnimationFrame,FPS 達標)P1
FR-11房間碼輸入體驗(URL 預填、localStorage 暱稱、複製邀請)P2
FR-12得獎名單展示P2

可靠性功能(P1)

FR ID功能優先級
FR-07斷線重連(3 秒內恢復、Ghost Player 處理)P1
FR-08再玩一局(剔除離線玩家、W 越界重設)P1
FR-09踢除玩家(waiting 狀態限定、kickedPlayerIds 持久化)P1

§8 Non-Functional Requirements

§8.1 Performance

指標目標值量測方式
Canvas 動畫 FPS(桌機)≥ 30fpsChrome DevTools,50 人滿員房間,1080p Chrome
Canvas 動畫 FPS(手機)≥ 24fpsChrome DevTools Moto G4 throttling profile,10 秒錄製平均值
WebSocket 廣播延遲(P95)< 2 秒伺服器發出到客戶端狀態更新完成
房間建立 API 回應(P99)< 2 秒Server 端計時
玩家加入 WebSocket 握手(P99)< 1.5 秒Playwright 量測:click 至 waiting 元素可見
斷線重連時間(P95)< 3 秒頁面 DOMContentLoaded 至狀態快照渲染完成
FCP(Simulated Slow 4G)< 1.5 秒Lighthouse CI
LCP(Simulated Slow 4G)< 2.5 秒Lighthouse CI
CLS< 0.1Lighthouse CI

§8.2 Availability

指標目標值
建立房間成功率> 99.5%(排除基礎設施故障)
玩家加入成功率> 99%
重連恢復成功率100%
主持人斷線容忍主持人斷線後 60 秒內重連,其他玩家連線不中斷

§8.3 Scalability

指標目標值說明
並發房間數100 個單一伺服器實例
每房間玩家數50 人系統設計上限
WebSocket 連線數5,000 個單一伺服器實例
Redis 記憶體~8.8 MB(100 房間)每房間 ~88 KB

水平擴展策略(Post-MVP):MVP 以單一 Pod 部署;Post-MVP 啟用 Kubernetes HPA 依 WebSocket 連線數自動擴展後端 Pod;Traefik Ingress 做 sticky session;Redis 作為唯一共享狀態層解耦 Pod 間狀態依賴。

§8.4 Security

安全需求規格來源
JWT 認證所有 Host 操作需 JWT Bearer token;非法/過期回傳 401;非 Host 回傳 403PRD NFR-05
playerId 不可猜測UUID v4PRD NFR-05
踢除禁令持久化kickedPlayerIds 存於 Redis,同局有效PRD NFR-05
WebSocket 訊息大小限制上限 64KB,超過則拒絕並關閉連線EDD §0
seed 防洩漏seed 及完整樓梯資料在 status=finished 前禁止傳送給任何客戶端PRD NFR-05
自動揭示間隔驗證T 非整數或超出 1~30 秒範圍時回傳 INVALID_AUTO_REVEAL_INTERVALPRD NFR-05
前端 Bundle 預算首頁 JS < 80KB gzip;遊戲頁 < 150KB gzip;CSS < 30KBPRD NFR-06

§9 Compliance & Data Governance

§9.1 Legal & Regulatory

⚠️ [TODO] §9.1 需確認適用法規:台灣個人資料保護法(PDPA)對暱稱/playerId 的適用性;若有涉及抽獎法規(如促銷活動相關規定),需請法務確認。

目前已知

§9.2 Data Privacy

資料類型存放位置TTL說明
暱稱(nickname)Redis room:{code}24h(waiting/running/revealing),1h(finished)非強制真實身份
playerId(UUID v4)Redis + 客戶端 localStorageRedis 同上;localStorage 無過期,用戶可清除不可猜測 UUID
JWT token客戶端記憶體(非 localStorage)連線 session 期間Host 專屬,一次性
樓梯結構(ladderMap)Redis room:{code}:ladder同 room:{code}遊戲結束後隨房間過期

隱私原則

§9.3 Audit Requirements

⚠️ [TODO] §9.3 需確認是否需要更正式的操作審計日誌(如:誰在何時踢除了哪位玩家),以及日誌保留策略。


§10 Stakeholders

§10.1 RACI Matrix

活動前端工程師後端工程師QA設計師產品負責人DevOps
BRD 定義IIIIA/RI
PRD 撰寫CCCCA/R-
系統架構設計CA/RI-IC
前端開發(Canvas + Vanilla TS)A/RICCI-
後端開發(Fastify + WS + Redis)IA/RC-IC
shared 模組開發(PRNG/狀態機)CA/RC-I-
K8s 部署設定-CI-IA/R
CI/CD PipelineICC-IA/R
單元/整合測試CA/RR-I-
E2E 測試CCA/R-I-
性能測試(k6/Lighthouse)CCA/R-IC
安全審查CA/RC-IC

利害關係人角色說明

角色職責範圍備註
產品負責人BRD/PRD 定義、優先序決策、Go/No-Go 判斷單一決策點
前端工程師Vanilla TS + Vite + HTML5 Canvas 開發需熟悉 requestAnimationFrame
後端工程師Fastify + WebSocket + Redis + shared 模組需熟悉 Clean Architecture
QAE2E 測試、k6 壓測、Lighthouse CI、安全審查負責 Go/No-Go 驗證
設計師UI/UX 設計、Canvas 動畫視覺規格提供設計稿
DevOpsK8s 部署、CI/CD Pipeline、GitHub Actions負責基礎設施

⚠️ [TODO] §10.1 需補充實際人員名單及聯絡資訊,並確認各角色是否有具體負責人。


§11 Business Model (Optional)

⚠️ [TODO] §11 MVP 階段無商業模式設計。後續版本可考慮:免費基礎版(房間人數上限 15 人)+ 付費進階版(50 人上限 + 自訂主題 + 歷史紀錄);或面向企業的 SaaS 授權模式。需產品負責人確認商業模式方向。


§12 Risks & Mitigations

§12.1 Risk Register

風險 ID風險描述影響發生機率嚴重程度緩解策略
R-01WebSocket 大規模斷線(如 CDN 或網路故障)所有玩家同時斷線,遊戲中斷Redis 持久化房間狀態;支援 3 秒內快速重連恢復;Kubernetes readiness probe
R-02Redis 服務中斷無法讀取/寫入房間狀態,所有操作失敗Redis StatefulSet 部署;liveness/readiness probe;POST-MVP 考慮 Redis Sentinel
R-03Mulberry32 PRNG 碰撞導致結果不一致客戶端結果不同,公信力喪失極低極高1,000 次自動化 seed 驗證;shared 模組前後端共用同一實作;CI 強制閘門
R-0450 人房間 Canvas 動畫性能不達標手機 FPS 低於 24fps,視覺體驗差requestAnimationFrame 渲染;Lighthouse CI 監控;Moto G4 throttling 測試
R-05Room Code 碰撞(10 次重試仍失敗)建立房間失敗極低最多重試 10 次;超過回傳 ROOM_CODE_GENERATION_FAILED;32 字元集 6 碼 ≈ 10 億組合
R-06JWT token 洩漏導致 Host 操作被仿冒未授權操作房間JWT 簽章驗證;token 僅在連線 session 使用;WsServer.handleUpgrade 前置驗證
R-07前端 bundle 超出預算(> 150KB gzip)低速網路首次載入過慢,用戶流失Vanilla TS + Vite(無 UI 框架);Lighthouse CI 阻擋超標版本
R-08再玩一局後 W 越界導致無法開始主持人不知道需要重設 W自動重設 W 為 null 並通知主持人;前端顯示明確提示
R-09Ghost Player(localStorage 遺失)占用槽位同一物理玩家雙重抽獎機會MVP 不自動阻止;Host 可踢除斷線玩家;Lobby 明確顯示離線標記

§12.2 Go/No-Go Criteria

Go 條件(全部必須滿足)

No-Go 條件(任一觸發即阻止上線)


§13 Roadmap Overview

MVP(當前版本)

目標:完整的爬樓梯抽獎核心功能上線

里程碑功能範圍優先級預估週期
M1:基礎架構專案腳手架(Monorepo、TypeScript、Vite)、Redis 連線、K8s 本機環境P0Sprint 1(Week 1-2)
M2:核心遊戲邏輯packages/shared(PRNG、狀態機、樓梯生成)、後端 API 骨架P0Sprint 2(Week 3-4)
M3:房間系統建立/加入房間、WebSocket 連線、玩家列表同步P0Sprint 3(Week 5-6)
M4:遊戲流程開始遊戲、揭曉控制(手動/自動/全揭)、結果展示P0Sprint 4(Week 7-8)
M5:可靠性斷線重連、踢除玩家、再玩一局P1Sprint 5(Week 9-10)
M6:用戶體驗邀請連結、localStorage 暱稱記憶、Canvas 動畫優化P2Sprint 6(Week 11)
M7:品質閘門E2E 測試、k6 壓測、Lighthouse CI、安全審查P0/CISprint 6-7(Week 11-12)

Post-MVP 規劃

⚠️ [TODO] §13 Post-MVP 路線圖需產品負責人確認優先序。候選功能包含:觀眾模式、多語言支援、自訂獎品名稱、抽獎結果匯出、商業模式實作(付費方案)。


Appendix A: Glossary

術語定義
Room Code6 碼唯一房間代碼,字元集為 ABCDEFGHJKLMNPQRSTUVWXYZ23456789(排除視覺混淆字元 O、I、0、1)
Host建立房間的主持人,擁有 JWT token,可控制遊戲開局與揭曉節奏
Player透過 Room Code 加入房間的參與者(含 Host 本人)
playerIdServer 生成的 UUID v4,存於客戶端 localStorage,用於身份驗證與斷線重連
waiting房間狀態:等待玩家加入,Host 可編輯設定
running房間狀態:遊戲進行中(START_GAME 後,BEGIN_REVEAL 前)
revealing房間狀態:揭曉進行中
finished房間狀態:本局結束,seed 可選擇性公開
seed樓梯生成的隨機種子,由 UUID hex 以 djb2 hash 轉 uint32 初始化
Mulberry32本系統使用的 PRNG(偽隨機數生成器),確保所有客戶端結果 100% 一致
PRNGPseudo-Random Number Generator,偽隨機數生成器
bijection一一對應:N 個起點對應 N 個唯一終點,確保抽獎公平性
rowCount樓梯行數,公式:clamp(N×3, 20, 60)
startColumn玩家對應的起始垂直線(由左至右從 0 編號)
Ghost PlayerlocalStorage 已清除、以無 playerId 身分訪問的玩家
kickedPlayerIdsRedis Set,記錄本局被踢除的玩家 ID,同局有效
TTLTime-To-Live,Redis 鍵的自動過期時間
N當前房間玩家數(含 isOnline=false 的斷線玩家)
W中獎名額(1 ≤ W ≤ N-1)

Appendix B: References

文件版本說明
docs/req/legacy-PRD.mdv1.4完整使用者故事(US-H01~US-H09、US-P01~US-P06)、功能需求(FR-01~FR-12)、非功能需求(NFR-01~NFR-08)及驗收標準
docs/req/legacy-PDD.mdv2.2產品背景、角色定義、核心玩法規則、房間系統詳規、斷線重連、防作弊需求
docs/req/legacy-EDD.md-技術棧定義、Clean Architecture 分層結構、系統架構圖、資料流圖
docs/req/legacy-ARCH.mdv1.2Clean Architecture 各層職責、套件依賴關係、packages/shared 輸出清單、模組職責說明
docs/req/legacy-API.mdv1.1Base URL 策略、JWT 認證、10 個 HTTP REST 端點、完整 WebSocket 事件規格
docs/req/legacy-SCHEMA.mdv1.1Redis 設計決策、5 種 Redis Key 結構、TTL 策略、Room 物件 JSON 結構
docs/IDEA.md-BRD 生成主要輸入,含 Appendix C 指向 legacy docs