Problem
大多数聊天产品从账号体系、社交关系和复杂协作功能开始设计。对于几个人在一个安静空间里持续对话,这些能力反而可能成为负担。
VA-11 Chat 选择从最小问题出发:怎样用一个可以自行部署、容易理解的系统,提供按频道隔离的实时对话,同时保留必要的隐私与管理能力。
Role
Creator / Maintainer。
System
- 单进程架构:由一个长驻 Node.js 进程承载 Express API、静态前端与原生 WebSocket 连接。
- 频道隔离:管理员创建频道和用户,访问者使用频道凭据登录,消息只在所属频道内流动。
- 本地持久化:频道配置与最近 100 条消息写入 JSON / JSONL 文件,不依赖数据库或 ORM。
- 加密历史:消息在落盘前使用 AES-256-GCM 加密,并通过独立密钥管理 Cookie 签名与消息解密。
- 轻量防护:登录和发言分别设置内存限速,生产环境启用 Secure Cookie,并明确单实例部署边界。
- 简洁前端:Vite + React 提供响应式登录、聊天与管理界面,不引入组件库。
Impact
项目把实时通信、认证、持久化与部署压缩进一套可审阅的小型代码库,并提供 Vitest 集成测试、Docker Compose 与 GitHub Actions 工作流。它适合少量用户、单实例运行的自托管场景,也让系统的安全边界保持可见。
Why It Matters
简单不等于省略关键问题。VA-11 Chat 的价值在于为每一项复杂度给出明确理由:需要实时性,所以使用 WebSocket;需要历史记录,所以加密落盘;不需要横向扩展,所以保留单进程和本地文件。它是一项关于产品克制与可理解软件的实践。