adventure-table

Adventure Table — 技術棧討論

本文件只用來討論 Adventure Table 的基礎技術棧,不是全專案架構規格,也不是任何 Phase 的實作設計。

討論完成後,正式採用的基礎技術選型會寫入對應的 開發設計方針.md;各 Phase 的資料模型、API、權限、事件、Snapshot、Combat、Tactical 等實作細節,等該 Phase 開工時再設計。

若本文件與 規格企劃.md 衝突,以產品規格為準。

最後更新:2026-08-29


一、目前要決定的範圍

現在只先決定:

現在不提前決定

這些會在對應 Phase 的 開發設計方針.md 再決定。


二、目前推薦技術棧

領域 目前推薦 備註
Frontend React + TypeScript + Vite 高互動 SPA;不需要 SEO / SSR
Routing React Router 或同級方案 實作時再定
UI Styling Tailwind CSS 可替換
Server State TanStack Query 可替換
Local UI State React state / context;必要時 Zustand Zustand 非必需
Backend Python + FastAPI 適合規則邏輯、API、WebSocket
Validation Pydantic 適合 structured rules / action / content data
Database PostgreSQL 關聯資料與 transaction 需求明顯
ORM SQLAlchemy 可替換,但目前優先
Migration Alembic 與 SQLAlchemy 搭配
AI Integration MCP Python SDK 外部 AI 透過 MCP / Site Tools 接入;網站本身不接 LLM API
Python Tests pytest Rules / backend 主測試工具
Frontend Tests Vitest Component / utility
E2E Playwright 真實 UI workflow
Deployment Docker Compose 第一版朋友私用,避免過度架構

版本號不在本文件鎖死;真正開工時使用當下受支援的 stable / LTS line。


三、為什麼 Frontend 選 React + TypeScript + Vite

Adventure Table 是高度互動的 Web Application,主要畫面會包含:

React 適合大量重複、互動式 UI component;TypeScript 可以降低欄位與 API contract 的錯誤。

目前選 Vite 而不是 Next.js,主要因為:

如果之後真的出現 Next.js 才能明顯解決的需求,再重新評估即可。


四、為什麼 Backend 選 Python + FastAPI + Pydantic

P0 / P1 會有大量 D&D 5e 規則與結構驗證,例如:

Python 可讀性高、測試方便,也符合現有技能。

FastAPI 提供:

Pydantic 則適合大量結構化資料驗證。

MCP 並不是 Python 獨有優勢;選 Python 的主要原因仍是 Rules / validation / data processing 與維護性。


五、為什麼 Database 選 PostgreSQL

Adventure Table 後續會有大量彼此有關聯的持久資料,例如 Character、Campaign、Session、Seat、Combat、Timeline 等。

需要的能力包括:

因此目前 PostgreSQL 比 MongoDB 更適合作為主要 DB。

實際 table、JSONB 邊界、ID strategy 等全部留到各 Phase 的開發設計再決定。


六、AI Integration 基本方向

產品規格已確定:

因此目前只先選擇 MCP Python SDK 作為 AI adapter 的候選實作工具。

MCP Tool 的具體拆法、Join Token、Seat scope、reconnect、visibility 等,等 P2 / P3 開發設計時再定。


七、目前保留的全域工程原則

這些不是某個 library choice,而是產品規格直接要求的開發原則:

  1. Server 是唯一 Game State truth。
  2. Human UI 與 AI Tool 共用同一套 backend game logic。
  3. 秘密由 Server 隔離,不靠 UI 隱藏或 Prompt 約束。
  4. Frontend 不單獨持有正式 Game State。
  5. 第一版優先 Modular Monolith,不主動拆 Microservices。
  6. 不要因為未來可能需要,就提前建立 Redis / Kafka / Kubernetes 等基礎設施。

至於這些原則在某個 Phase 具體怎麼落地,由該 Phase 的 開發設計方針.md 決定。


八、現在刻意延後的選擇

以下沒有必要在 P0 前決定:


九、目前結論

如果現在開始 P0,基礎開發環境暫定:

Frontend
React + TypeScript + Vite

Backend
Python + FastAPI + Pydantic

Database
PostgreSQL + SQLAlchemy + Alembic

AI
MCP Python SDK
External AI only

Testing
pytest + Vitest + Playwright

Deployment
Docker Compose

這份文件到這裡就足夠。

下一步不是繼續設計全專案架構,而是進入 P0 的實作規格與開發設計