把「社交 + 競品 Roadmap」和「整體架構藍圖」合併成一個看板,依進度分三欄:已完成 / 進行中 / 待開發。上架前不做的半成品收進下方「暫停區」,策略藍圖收在最底可展開。隨時回來看最新狀態。
2026-06-28 更新:Android 背景推播端到端已驗收(正確 package 重註冊 Firebase,鎖屏實收 sent:1)+ 隊伍全域 Slice 5a(我的戰隊跨館)+ 全域球員身分 5c(他人檔 per-sport 戰績);館間賽營運(P-A~P-G)+ 代表隊體系 + 通知 + 預約/賽事 UI 對齊。狀態皆對照實際 codebase + git。
打正常場即時累積天梯分、升段;規模權重、每日上限、重複對手衰減全上線。
ELO 評分 + 七段位;本館 / 全國排行榜(即時)。
出席/爽約決定可開場額度、停權保護,鼓勵守約。
只算正常場、裁判≠球員、每日規模賺分上限、重複對手衰減。
10 級獎勵軌(免費+進階)、XP 累積、領取/升級。
裁判 / 雙計分板 / 第一發球 / 性別平衡分隊 / 開賽前拖移換位。
場次卡顯示即時站位+比分;走進場館圍欄自動進場。
掃入場 QR 加入、把觀戰路人拉進等待區、整隊拖入。
轉播卡即時站位+裁判+比分(VenueSessionCard)、隊伍場單向降級為路人場、路人/隊伍兩種拖人補位皆可。含 walkin gate 測試。
單擊球員開 4 區小選單(候補接手/換隊/與已準備者交換/確認排下輪)+拖移到底自動捲。抽 PlayerMoveGates(21 測試)+Orchestrator。
發起人/館長可結束場次;跳出整場次結果:各場比分/勝方/MVP/名單。
勝敗、評分變化、同場球員戰績 + 讚 + 追蹤、時間區間。
發起賽事選參數 → 邀請他館 → 收件匣接受/婉拒 → 自動入賽。單淘汰/雙淘汰(4·8隊)/分組淘汰/循環賽 對陣表渲染 + 記分 + 結算 + 館際 Elo。
每個參賽館自選方式:館方指定 / 辦館內初賽。後台「代表隊設定」欽點一軍(每運動唯一)/二軍(可多支)。指定 picker 候選池=現任代表隊置頂 + 本館最常出沒的隊。一支隊只能代表一個場館(已擋重複)。
戰隊只要有部分成員出席本館場次(連路人場都算)就計一次出沒;跨館用 user_profile_id 認同一人。只用於選代表隊候選排序,不影響戰隊頁對戰計數。
舉辦賽事/辦館內初賽都選具體場地+時間,與一般預約共用同一本場地時段;同一塊場地不論辦什麼活動都不時間衝突(DB 排他約束硬保證)。辦初賽直接彈場次預約表。
最少報名隊數 + 報名截止後才能產生對陣表/開賽;不達標時「產生對陣表」擋住並提示原因。館內賽/友誼賽精靈都可設。
邀請(優先曾任)+ 收件匣接受 + 比賽日報到 + 備用區按接受順序每場輪值 + 每場需裁判+線審才能開賽 + 賽後發初/中/高級徽章。
掃球員證跨館報到(該員本賽事所有隊);賽後戰報:冠軍 + 參賽隊 + 服務過的裁判/線審徽章 + 總場次。對陣表格顯示代表隊名(大)+場館名(小)。
戰隊詳情顯示已報名賽事卡(賽程/賽制/狀態)+ 查看賽事(對陣表/賽事資訊)+ 安排站位/職位(先做排球,半場拖頭像排陣)。
賽事 / 預約場次 / 館內初賽 都可自由命名,卡片標題下顯示類型(館間聯誼賽/館內賽/館內初賽/預約場次)。
別館邀館間賽→受邀館 館主+管理員;被邀裁判/線審→本人;被指定代表隊→該隊成員。寫進通知中心(realtime 紅點),文案含 哪場賽+哪間館。
整個「預約/賽事」(入口 + 場次詳情 + 投票 + 預約精靈 + 建賽精靈)從孤兒 Meadow 風轉成與全 App 一致的 AC 共用元件,移除孤兒設計系統。
arena-test.html 一頁走完館間賽生命週期(建賽/代表隊/刷卡報到/記分/戰報),不需實機。
建館間賽報名截止日必填;主辦在賽事詳情對陣樹「每一場」各自排日期+時間段(只列空檔,共用 gym_sessions DB 排他約束,不可被搶)。比賽日當天:地圖該館冒紅色「今日賽事·直播中」徽章 + 館內當日場次列表頂部直播卡 → 點進賽事;觀眾看現場比分,計分/報到只給主辦/裁判/線審(沿用內部權限 Gate)。每場各自的場次 → 現場計分用對的 session。
互相追蹤 = 球友;個人頁、他人檔案可看。
同場/同隊即時聊天;隊伍頁顯示最新訊息預覽。
賽後互投 MVP、給好球/好隊友/風度佳正向聲望。
創建/職位/隊服/QR入隊/審核/隊伍戰績/隊伍聊天。
比賽頁從球友名單邀請來這場(M2)。
今日戰報對同場球員:追蹤/讚/加好友 + 約下一次打球 + 邀入戰隊(officer);戰隊正式邀請走通知卡接受入隊。比賽畫面「今日成績」鈕隨時開。
本館 / 好友 / 戰隊 / 全國 切換(好友=我追蹤的人+我、戰隊=我隊成員)。LeaderboardGates 純規則 + 範圍化空狀態。
追蹤/場次邀請/戰隊邀請/館間賽三條邀請集中,DB trigger 自動寫入 + realtime,首頁鈴鐺紅點 + 點一則/全部已讀。背景推播 FCM 已通(見下卡)。
iOS + Android 雙平台端到端已驗收 ✅:通知→扇出 trigger(pg_net)→send-arena-push→FCM→裝置鎖屏(伺服器 sent:1、兩台手機實收)。Android 2026-06-28 修好:之前 Firebase app 註冊駝峰 package、實際 applicationId 是底線 com.chefsmate.arena_mate → 用正確 package 重註冊(新 appId)+ google-services + gradle plugin + POST_NOTIFICATIONS。⚠️ 僅 iOS production APNs key slot 待填(TestFlight/上架才需)。
戰隊真正全域、不綁主場館。✅ gym_teams.gym_id 語意=創隊起源館(非擁有,代表某館走 gym_rep_teams 名冊);✅「我的戰隊」跨館顯示(myTeamsProvider);✅ createTeam 無 ownership 邏輯;✅ 後台代表隊指定候選改「本館相關戰隊=建在本館∪常來本館打」(別館真隊也指定得到)。純 Gate team_scope+測。戰隊排行維持本地榜。
9 徽章(初勝/常勝/場次 10·50·100/段位 銀金白金鑽石)依賽季統計達標解鎖,個人檔案徽章牆(已解鎖彩色/未解鎖灰)。
走進場館即累積連續出席天數(同日只算一次、斷一天歸 1),個人檔案火焰 chip + 最佳紀錄。純裝飾不給 SLP。
今日戰報一鍵截圖分享 IG/LINE,卡內含 ArenaMate 品牌條拉新。(單場/戰隊專屬版型為後續)
我追的人+我的戰績/成就時間軸,賽後 MVP 自動貼 + 按讚 + 留言 + 手動發文。首頁「動態」入口。
依常一起打球(共打場數)推薦可追蹤的人,動態牆頂「你可能認識」橫向卡 + 一鍵追蹤。arena_coplayer_recos RPC + RecommendGates。
個人頁加好友入口,像 LINE:出示我的 QR / 掃描對方 QR → 追蹤(互追=球友)。in-app 掃描 + 系統相機 deep link 都支援。
session 改存 iOS Keychain / Android 加密儲存(原本 SharedPreferences 重裝會被清 → 每次重登)。重裝 App 不再被登出;舊 session 自動遷移免一次重登。
直播手選鏡頭位置開播(LiveKit 發布相機)、所有人可「觀看現場直播」、多鏡頭左右滑/點位置切換、子母畫面(站位)點擊互換。token 走 livekit-token edge fn(密鑰在 Supabase secrets)。
角色換裝、戰隊隊服套用(Q版骨架版)。
Apple / Google 錢包球員證,段位升級卡面升級。
網站開測試場、假人進場/報到/分隊,測全流程。+ 游渝伯手機瞬移進/出體育館(測 geofence 自動報到/進場)。
POS 設定兌換餐點/折扣/折價 + 段位門檻 + 兌換次數上限;鏈已通。ArenaMate 端上架前先隱藏。
捏麵黏土風套滿全頁:首頁/個人/戰隊/比賽/後台/審核/結算/優惠/賽事/排行/預約/行事曆。
對陣表接 match_tab 現場計分 + YouTube 直播 已寫好,但旗標 kArenaTournamentLiveScoringEnabled 預設關;待實機 dogfood 驗 match_tab + YT 憑證後開啟。雙淘汰目前支援 4/8 隊。2026-06-28 已 build+裝機 iPhone(旗標仍關)。
gym_athletes 每館一份 → 降級成「在這館的角色」,戰績/RP 搬全域 arena_player_sport(每運動一本不分館)。✅ 結算雙寫全域 RP;✅ 個人 RP 已全改 per-sport(老闆 2026-06-28 拍板):個人檔頭/首頁牌位/他人檔顯示「主運動」那一本(可點選要顯示哪本,單一數字處讓使用者選),他人檔誤導聚合卡已移除。剩:today_report 每日 RP per-sport + SLP/段位/信任/XP 改全域 per-sport 收尾。
Apps/arena_mate/docs/待開發功能規格.md;P1–P3 是商業階段(密度到位才啟動)。標籤 已有規格 代表可直接動工。各館仍有測試控制台建的假人 athletes(真隊「銘展青果行」已留、測試甲乙丙隊+重複海邊館已清)。其餘假人視需要再清。
球友私下傳訊(互追才可),從檔案/結算頁發起。重用 chat 模式 + dm_threads/messages。
發貼文招募、留言/舉手報名,不只靠時段表。與 Feed 合流 + recruit_signups。
戰隊對戰隊約戰,結果計入隊伍戰績/排名。新表 team_challenges + ChallengeGates。
雲端觀看者在轉播卡丟表情/留言。重用 chat(session)+ rate limit。
Auth log 每小時 token_revoked(rotation 開著),跟 POS 反覆登出同雷。老闆到 Supabase 後台 → Authentication → Sessions 關掉 rotation(比照 POS)。配合 Keychain 持久化一起解「一直要重登」。
裝置關聯偵測、GPS spoof 交叉檢查、大獎綁實體現場核身。等天梯獎品有價值(P1+)再做。
單城夠多場館 → 場館辦區域賽 + 場館訂閱 SaaS 變現。
App 方辦全國賽 + 全國排行榜,門票/報名抽成 + 贊助。
申請制掛牌大賽 + 現場核身,申請費/抽成/通行證/飯圈廣告。
這份是「上架前 must-do」總表。平時 dogfood 沒差、但**正式上架前**要逐項處理。狀態:🔴 還沒做 · 🟡 進行中/待驗 · ✅ 已完成。
lib/feature_flags.dart)— 上架前逐個確認| 旗標 | 現況 | 上架前要怎樣 | 狀態 |
|---|---|---|---|
| kArenaTournamentLiveScoringEnabled | true(2026-06-28 老闆「直接翻」已開) | 現場 dogfood match_tab 計分/結算/YT;若流程有問題改回 false(一秒 kill switch) | 🟢 已開·dogfood中 |
| kArenaYoutubeBroadcastEnabled | true(dogfood 預覽開著) | 後端若沒全驗證完 → 改回 false 再上架(別讓使用者開播失敗) | 🟡 待確認 |
| kArenaExternalCameraEnabled / UsbEnabled | true(dogfood 預覽) | 確認外接相機鏈路驗過,否則改回 false | 🟡 待確認 |
| kArenaOffersEnabled | false(關) | 等合作店家 + POS 會員優惠就緒;上架前維持關 | 🔴 商業階段 |
| kArenaBroadcastModerationEnabled | false(關) | 餵圖管線 + Vision API 未接;維持關 | 🔴 未接 |
| 項目 | 說明 | 狀態 |
|---|---|---|
| iOS / Android 端到端 | 兩平台都已驗收(鎖屏實收 sent:1) | ✅ 已完成 |
| iOS production APNs key | Firebase 只填了 development slot;TestFlight/上架要把同一把 .p8 再上傳 production slot | 🔴 上架前 |
| service account .p8 JSON | 還在 ~/Downloads(已設成 Supabase secret)→ 可刪 | 🟡 可清 |
| 項目 | 說明 | 狀態 |
|---|---|---|
| 個人 RP 全改 per-sport | 個人檔頭(toy_profile)/首頁牌位(toy_home)/他人檔(other_profile)已改顯「主運動」那一本全域 RP(我選的/打最多場),可點選要顯示哪一本(arena_player_prefs.display_sport_type);他人檔誤導聚合卡已移除。剩:today_report 每日 RP 仍是單館聚合 → 老闆選版型(a):一天一張卡、卡內分運動列(排球那行/籃球那行),待做 | 🟡 待裝機驗 |
| RP 重置 | 趁未上架把舊測試 RP 清乾淨,之後不再隨便重置(戰績神聖) | 🔴 上架前 |
| SLP / XP 改全域 per-sport | 老闆「照建議做」→ 排下一步 slice。信任已全域(免改)、段位由 RP 衍生已 per-sport(免改);真正要做的只有 SLP+XP:athlete_season_stats / athlete_pass_progress 兩表沒 sport_type 欄 → schema migration + 結算寫分帶運動 + 顯示。三指標說明見 /arena-metrics.html | 🔴 待續(下一 slice) |
| 項目 | 說明 | 狀態 |
|---|---|---|
| 我的戰隊跨館顯示(5a) | 已上線 | ✅ 已完成 |
| createTeam 去擁有 | 已驗證:createTeam 只把 gym_id 寫成「創隊起源館」,無 ownership 邏輯 | ✅ 已完成 |
| 代表隊指定候選改 affinity | 後台代表隊指定改用「本館相關戰隊=建在本館 ∪ 常來本館打」(gymBoardTeamsProvider),別館建立的真隊也能被指定。戰隊排行維持本地榜(per-sport affinity fan-out 太重) | ✅ 已完成 |
| gym_id schema 收斂 | D1 定案=保留 gym_id 當 origin(不 drop、不改 nullable);end-state 已達成 | ✅ 已完成 |
| 項目 | 說明 | 狀態 |
|---|---|---|
| 假人 athletes | 各館測試控制台建的假人(真隊「銘展青果行」已留、測試甲乙丙隊已清)。上架前清掉測試假人 | 🔴 上架前 |
| 測試館間賽 / 測試隊殘留 | arena-test.html 建的測試賽事/隊伍 | 🔴 上架前 |
| 項目 | 說明 | 狀態 |
|---|---|---|
| Apple Sign in client secret | 2026-12-09 到期 → rotate = 用 .p8 重簽一段新 JWT(Apple console 不用動,.p8 還在 ~/Downloads),貼進 Supabase → Auth → Apple provider 的 Secret。可請 Claude 直接簽好再貼 | 🟡 有期限 |
| Play 上傳金鑰 | 每次上傳 versionCode +1;keystore 只在老闆 Mac(gitignored) | 🟡 流程 |
這兩件先擱著,不影響上架。等時機到(合作店家就緒 / 老闆建模完成)再回來收尾。
主體已做+上架前隱藏(等合作店家+POS)。待:兌換次數的兩裝置 race、套用後棄單漏額度 → 需 server RPC(付款成功才記)。
老闆自建中;建模規格(分件/骨架/Mixamo/匯出)已給,完成後接進 App。
ArenaMate = 業餘運動員的「天梯人生」:真實場館打球 → 累積段位與生涯 → 段位變成在地特權(飯圈優惠)與賽事門票,最終由 App 方統籌全國賽事與獎勵經濟。
| 階段 | 開放 | 變現 |
|---|---|---|
| P0 冷啟動 | 全免費:揪團/配對/計分/段位 | 無(衝密度) |
| P1 區域賽 | 場館辦區域賽 | 場館訂閱 SaaS |
| P2 全國賽 | App 辦全國賽 + 排行榜 | 門票/報名抽成 + 贊助 |
| P3 大型賽 | 申請制掛牌大賽 | 申請費 + 抽成 + 通行證 + 飯圈廣告 |
| 指標 | 用途 | 好不好洗 |
|---|---|---|
| 技術分 ELO | 配對 / 平衡分隊 | 零和,難洗 |
| 天梯分 SLP | 解鎖段位 + 真獎品(每季軟重置) | 靠公式 + 防制把關 |
| 裝飾幣 / XP | 賣裝飾 / 爽度 | 不影響公平 |
單場SLP = base(勝8/負3) × 規模(野1/區2.5/全5) × 對手品質 × 信任(0.3–1) × 重複對手衰減(0.7ⁿ),再套每日規模上限;練習場 = 0。
重用 ChefsMate 現成鐵軌(Wallet 卡、loyalty、餐廳端、推播):數位球證 = Wallet 卡(段位升級卡面升級);飯圈 = 場館 10km 內合作店家(憑球證享優惠);身分綁 customer_loyalty_id(嚴禁電話比對);餐廳消費只回饋裝飾幣,永不給 SLP。
※ 完整原文見舊頁 arena-blueprint / arena-social-roadmap(已合併到本看板)。