尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A private messaging web app with end-to-end encryption. Sign in with email or Google, find people, chat one-to-one or in groups, and share files and voice notes. Message contents are encrypted in your browser and the server only ever stores ciphertext.
Built with Next.js 15, React 19, TypeScript, Tailwind CSS and Supabase (Auth, Postgres, Realtime, Storage).查看完整 README ↗A private messaging web app with end-to-end encryption. Sign in with email or Google, find people, chat one-to-one or in groups, and share files and voice notes. Message contents are encrypted in your browser and the server only ever stores ciphertext.
Built with Next.js 15, React 19, TypeScript, Tailwind CSS and Supabase (Auth, Postgres, Realtime, Storage).
Status: pre-production (documentation last brought up to date September 2026). The messaging, encryption, auth and file pipelines are implemented and covered by automated tests, and the database security rules were reviewed and tested against a real Postgres. Not everything has been exercised end to end against a live Supabase project, and some features are still on the roadmap. See Known limitations and
SECURITY_AUDIT.mdbefore relying on it.
Picking this project up after a long time, or for the first time? Read the Maintainer guide first. It explains the ideas, the layout, how to rebuild everything, and what to re-check as the underlying products age. Everything else is linked from the documentation index.
Accounts
Messaging
sending, sent, failed with retry (never marked delivered when the server rejected it)Encryption (details in docs/E2EE.md)
People, groups, settings
Platform features (need migrations 011 to 029; see Roadmap for what has and has not been tested)
Security and abuse protection (details in docs/SECURITY.md and SECURITY_AUDIT.md)
Local demo mode: run the UI with no backend for development (see Demo mode). It can never run in a production build.
You need Node.js 20+, npm, and a free Supabase project.
git clone https://github.com/Rhytam23/social.git
cd social
npm install
cp .env.example .env.local # then fill in the three Supabase values
.env.local.database/migrations/ once, in strict numeric order (001 to 029). Each needs the ones before it. 017 and 018 carry security fixes; 020 is a performance improvement the app works without.http://localhost:3000/auth/confirm to the Redirect URLs. Make sure Realtime Authorization is set up so typing indicators and calls work (see Setup).npm run dev # http://localhost:3000
The full walkthrough, including Google sign-in, is in docs/SETUP.md. If something goes wrong, see docs/TROUBLESHOOTING.md.
| Variable | Required | Notes |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Yes | Project URL. Public. |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Yes | Public anon key. |
SUPABASE_SERVICE_ROLE_KEY | Yes (server) | Secret. Bypasses row level security. Never prefix it with NEXT_PUBLIC_ and never commit it. |
UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN | No | Shared rate limiting across multiple server instances. Without them, limits are kept in memory per instance. |
NEXT_PUBLIC_* values are baked into the build. After changing them on a host such as Vercel, redeploy.
With no Supabase variables set, npm run dev runs a local demo with seeded example people and messages (clearly labelled as demo data, not encrypted). In a production build, missing variables make the server return HTTP 500 instead of silently running without authentication.
| Command | What it does |
|---|---|
npm run dev | Development server on port 3000 |
npm run build | Production build |
npm run start | Serve the production build |
npm run lint | ESLint |
npm test | Vitest test suite |
npx tsc --noEmit | Type check |
npm audit | Known-vulnerability check of the dependencies |
Browser Supabase
┌───────────────────────────────┐ ┌──────────────────────────┐
│ React UI + ChatStore │ ciphertext only │ Postgres (RLS on every │
│ MessagingCrypto (libsodium) ├───────────────────►│ table), Auth, Realtime, │
│ IndexedDB: your private key │◄───────────────────┤ Storage (private bucket) │
└───────────────────────────────┘ Next.js /api/* └──────────────────────────┘
ciphertext and nonce.More in docs/ARCHITECTURE.md and docs/E2EE.md.
app/ Next.js routes: pages, /api route handlers, /auth/confirm
middleware.ts First flood limit, session refresh, route protection, security headers
components/ UI by area: auth, chat, messages, groups, community, calls, settings, landing, layout, ui, ...
crypto/ Browser encryption: keys, 1:1, groups, attachments, backup (libsodium, WebCrypto)
lib/ store/ (ChatStore), messaging/ (crypto orchestration, envelopes), api/ (shared route security helpers),
rate-limit/, supabase/, auth/, calls/, realtime/, ui/ (theme)
database/ SQL migrations 001-029: the only definition of the schema
docs/ Documentation (start at docs/README.md or docs/MAINTAINER_GUIDE.md)
hooks/ React hooks
tests/ Vitest suites (tests/security runs the real migrations on an in-process Postgres)
types/ Shared TypeScript types, database types
npx tsc --noEmit && npm run lint && npm test && npm run build && npm audit
495 automated tests (at the time of writing) cover the encryption layer, the database security rules (the real migrations run on an in-process Postgres and attacked as several users), API route security, device linking, flood limits, the message store and the UI logic. They do not cover the UI in a real browser, two real browsers linking a device, or anything that needs a live Supabase project (Realtime delivery, real email, Realtime Authorization). docs/TESTING.md has manual checklists for those.
Deploy to Vercel (or any Node host): set the three Supabase variables (mark the service-role key as sensitive) and NEXT_PUBLIC_SITE_URL (your production address, used for canonical links, the sitemap and link previews), add your production URL to Supabase's Site URL and Redirect URLs, and redeploy after any NEXT_PUBLIC_* change. Put a firewall in front for abuse protection: the app's own limits stop cheap floods, not a volumetric DDoS. See docs/DEPLOYMENT.md and Security.
The complete list, and what is planned, is in docs/ROADMAP.md.
This project is source-available, not open source. The Nook Non-Commercial Learning License lets you clone, run, read and modify it for your own personal, non-commercial learning and testing. You may not use it commercially, not use it in any hackathon, competition or contest, not run it as a service for other people, and not publish or redistribute it or a modified copy. Using it in a way the license does not allow ends your permission and may lead to action against you.
For any other use, email [email protected] and ask first.
| Document | What's in it |
|---|---|
| Maintainer guide | Start here when returning after a long time: ideas, repository map, glossary, rebuild steps, runbook, what will age |
| Setup | Supabase project, migrations, auth settings, Google sign-in, first run, linking a second device |
| Deployment | Vercel, environment, release checklist, rollback |
| Design | Design tokens, shared components, the landing page and its performance rules |
| Architecture | Components, data flows, routes, state |
| E2EE | Cryptographic design and its limits |
| Database | Tables, functions, security rules, storage, migrations |
| API | Route reference |
| Security | Threat model, controls, denial-of-service layers, rules and known gaps |
| Security audit | The September 2026 review: vulnerabilities found and fixed, tests, remaining risks, credentials to rotate |
| Testing |
| Automated tests and the manual checklist |
| Troubleshooting | Fixes for problems people actually hit |
| Decisions | Why things are built this way |
| Roadmap | What is planned |
| Changelog | History |
| Contributing | Workflow and rules |
| V1 status | The V1 audit report |