/** * rChats module — encrypted community messaging. * * Stub module: landing page + "Coming Soon" dashboard. * Real chat functionality (Automerge CRDT, channels, threads) will come later. */ import { Hono } from "hono"; import { renderShell } from "../../server/shell"; import { getModuleInfoList } from "../../shared/module"; import type { RSpaceModule } from "../../shared/module"; import { renderLanding } from "./landing"; const routes = new Hono(); // ── Hub page (Coming Soon dashboard) ── routes.get("/", (c) => { const space = c.req.param("space") || "demo"; return c.html(renderShell({ title: `rChats — ${space} | rSpace`, moduleId: "rchats", spaceSlug: space, modules: getModuleInfoList(), styles: ``, body: `

rChats

Encrypted community messaging — channels, threads, and bridges

🗨️ Coming Soon

Encrypted Community Chat

Real-time messaging with channels and threads, end-to-end encrypted via EncryptID. Local-first with Automerge CRDTs — works offline, syncs seamlessly.

🔐 E2E Encrypted

Messages encrypted with EncryptID passkeys. The server never sees plaintext.

💬 Channels & Threads

Organize conversations by topic. Threaded replies keep the main feed clean.

🔗 Chat Bridges

Connect Slack, Discord, Matrix, Telegram, and Mattermost into one unified view.

📡 Local-First

Built on Automerge CRDTs. Send messages offline and sync when reconnected.

`, })); }); // ── Module export ── export const chatsModule: RSpaceModule = { id: "rchats", name: "rChats", icon: "🗨️", description: "Encrypted community messaging", scoping: { defaultScope: "space", userConfigurable: false }, routes, landingPage: renderLanding, };