项目概览
RosettaChat 是一个围绕多语言沟通设计的线上聊天产品。它解决的核心问题很直接:每个参与者都可以自然地使用自己的语言输入,而其他人会用自己的语言阅读同一段对话。翻译不是外部工具,也不是复制粘贴的辅助流程,而是消息交付链路的一部分。
这是一个由我独立企划、设计、编码、部署与维护的 SaaS 产品。产品支持实时群聊、私聊、临时聊天室,并提供开放 API,让开发者可以快速构建线上聊天室,或把自动翻译消息接入自己的产品流程。
架构介绍
- Monorepo 产品结构 — 项目拆分为 Laravel API(
apps/api)、React Router v7 认证 Web App(apps/webapp)与 Astro 营销网站(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 清理。
- 生产部署 —
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 — 开发者可以快速搭建在线聊天室,或把翻译消息能力接入外部工作流。






