專案概覽
RosettaChat 是一個圍繞多語言溝通設計的線上聊天產品。它處理的核心問題很明確:每位參與者都可以自然地使用自己的語言輸入,而其他人會用自己的語言閱讀同一段對話。翻譯不是外部工具,也不是複製貼上的輔助流程,而是訊息交付流程的一部分。
這是一個由我獨立企劃、設計、編碼、部署與維護的 SaaS 產品。產品支援即時群聊、私聊、臨時聊天室,並提供開放 API,讓開發者可以快速建立線上聊天室,或把自動翻譯訊息接入自己的產品流程。
架構介紹
- Monorepo 產品結構 — 專案拆分為 Laravel API(
apps/api)、React Router v7 authenticated Web App(apps/webapp)與 Astro marketing website(apps/website)。 - API-first 後端 — Laravel 12 後端同時服務 Web App 與外部整合,包含 Sanctum authentication、API token、webhook、Scribe API docs、Laratrust 權限與 Cashier billing 支援。
- 聊天領域模型 — Workspace、Channel、Message、Thread、Direct Conversation、Temporary Room、Invite、Usage Quota 與 Attachment 都是後端一等模組,而不是只存在於前端 UI 的概念。
- 翻譯管線 — 訊息建立後透過 Redis Queue 派發翻譯任務。Workspace 頻道訊息使用 workspace language set,私聊訊息使用接收者 preferred language。譯文與原文分表儲存,完成後透過即時通道推回介面。
- 即時層 — Laravel Reverb 負責 WebSocket 更新,用於頻道訊息、翻譯完成、typing 與 presence 類互動。
- 加密與保留策略 — Workspace 與 Direct Chat 使用應用層 envelope encryption 邊界保護內容;排程任務負責 retention、過期臨時房間、譯文、附件與 guest session 清理。
- Production deployment —
rosettachat.app與app.rosettachat.app部署在 Cloudflare Pages,api.rosettachat.app透過 Cloudflare Tunnel 進入 VPS。後端使用 GHCR 預建 Docker image,由 Docker Compose 執行 Caddy、PHP-FPM、Reverb、queue worker、scheduler、PostgreSQL 與 Redis。
核心功能
- 多語言即時聊天 — 參與者不需要統一使用某一種團隊語言。
- 原文與譯文切換 — 使用者可以優先閱讀譯文,同時保留查看原文的入口。
- 私聊與臨時房間 — 同時支援長期溝通與輕量、短期的會話場景。
- 工作區頻道 — 支援公開、私密、密碼保護等頻道組織方式。
- 開放 API — 開發者可以快速建立線上聊天室,或把翻譯訊息能力接入外部工作流。






