// 作品 / 詳情

ChataaS

Multi-tenant chat infrastructure,設計為可被任何產品嵌入的聊天底層。

技術棧
elixirphoenixashtypescript
SCREENSHOT_001.png

一句話

Business-logic agnostic 的聊天基礎設施。只認 identity、channel、message,不認業務語意。

為什麼做這個

手上有多個產品需要聊天功能,但每個產品的業務邏輯完全不同。與其在每個產品裡重寫 WebSocket 連線、訊息排序、斷線補漏、已讀狀態,不如抽出一層通用的聊天基礎設施。

設計原則

  • 聊天服務只認 identity / channel / message,不認業務語意
  • 主系統透過 JWT token + opaque mention metadata 兩個薄介面串接
  • 如果聊天服務開始需要 call 主系統 API,那就是耦合回去的信號

架構

Backend: Elixir + Phoenix + Ash,PostgreSQL schema-per-tenant multi-tenancy。

SDK: TypeScript SDK(@chataas/sdk),封裝 WebSocket 連線、channel 抽象、optimistic UI、斷線補漏。前端不碰 Phoenix Channel protocol。

關鍵設計

  • DB-backed sequence: 每個 channel 維護單調遞增 seq,在 message insert 的同一個 transaction 內遞增,不用 GenServer
  • Single write path: WS channel push 和 REST POST 走同一個 Ash action,序列化也共用,payload 格式一致
  • Idempotency: client nonce + unique constraint per channel,斷線 retry 不會產生重複訊息
  • Read cursor: per-channel per-user 的 last_read_seq,upsert 模式,切到前景時才送

狀態

進行中。Phase 0(Transport)開發中,預計到 Phase 3 產出可被嵌入的最小產品。