尚未偵測到更新。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 |