VoidAccess
提出一个问题,VoidAccess 便并行搜索 12+ 个 Tor 搜索引擎、GitHub 与安全订阅源,然后返回可供 STIX、MISP 或 Sigma 使用的行动者、钱包、泄露凭证和 IOCs。Open so
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A cyber-safety platform for South African learners, built with C3SA (a non-profit). Learners can take short modules and quizzes, read scam guides, share and read moderated community reports, find emergency contacts, and chat with CyberBot on WhatsApp about cyberbullying and online scams.
flowchart LR
L[Learner on phone/browser] -->|HTTPS| W[Web app<br/>Next.js PWA<br/>Vercel]
L -->|WhatsApp| M[Meta WhatsApp<br/>Cloud API]
M -->|signed webhook| B[CyberBot<br/>Node/Express<br/>Render]
B -->|chat completion| G[Groq API<br/>gpt-oss-120b]
W -->|supabase-js<br/>anon key + user JWT| S[(Supabase<br/>Postgres + Auth + Storage<br/>Row Level Security)]
A[Admin / teacher] --> W
B -. "ask for a person" .-> C3[C3SA staff WhatsApp]
There is no separate application server. The web app talks to Supabase directly, and the database enforces who may do what:
submit_quiz() grades a quiz and is the only way progress is saved.check_quiz_answer() reveals the correct answer for one question after it is answered.admin_save_learning_content() saves a module and its quiz in one transaction.validate_new_post() rejects reports that are too short or too long, or carry oversized images.post_flags records "Report post" flags (one per person per post). Admins see them under the "flagged" filter in /admin/community.set_post_display_name() sets a post's public name from the author's username, so it cannot be faked.auto_hide_reported_post() returns a post to review after 3 reports.post_like_counts is a view that gives public "helpful" counts without revealing who liked what.is_admin() is the shared role check used by policies.learner, teacher, admin) live in profiles and cannot be changed from the browser.posts with status pending. Only the author can see it, marked "Pending review"./admin/community, reads it, and approves or removes it.pending automatically. When an admin re-approves it, only new reports count.The server enforces this, not just the screens: signed-out visitors cannot insert posts, nobody can approve their own post, and the public name is set from the author's username by the database (or "Anonymous" if they ticked that box). Admins can still see who wrote an anonymous post.
Comments work differently from posts, on purpose. A review queue for every reply would make a conversation unusable, so comments appear straight away and safety comes from other controls:
/admin/community, Comments tab. The default view is "Reported". They can restore, hide or remove a comment. Removed comments stay in the database for records.| Path | What it is |
|---|---|
apps/web | Next.js 15 / React 19 web app (installable PWA). Pages are in src/app/*. |
whatsapp-bot | CyberBot: Express webhook + Groq. index.js (server), bot-logic.js (AI + safety), commands.js (typed commands), security.js (webhook signature check), test/ (automated tests). |
supabase | schema.sql (initial schema), migrations/ (dated changes), seed_*.sql (starter content). |
cd apps/web
npm install
cp .env.example .env.local # then fill in the two values below
npm run dev # http://localhost:3000
| Variable | Where to find it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API (the anon/public key only) |
Without these the app still starts in a demo mode so the UI can be worked on.
cd whatsapp-bot
npm install
npm test # 27 automated tests, no API keys needed
npm start
| Variable | Purpose |
|---|---|
GROQ_API_KEY | Groq API key for the AI replies |
WHATSAPP_TOKEN | Meta permanent access token |
PHONE_NUMBER_ID | WhatsApp phone number ID from Meta |
VERIFY_TOKEN | Any secret string; must match what you enter in Meta's webhook setup |
APP_SECRET | Meta app secret. Required: the bot refuses to start without it |
STAFF_WHATSAPP | C3SA staff number (international format, no +) that receives "talk to a person" requests |
STAFF_TEMPLATE_NAME | Recommended. Name of an approved WhatsApp message template with one body variable (the learner's number). WhatsApp only delivers plain text to a number that messaged the bot in the last 24 hours, so without a template the staff message can fail. If it fails, the learner is told honestly and given the helplines. |
STAFF_TEMPLATE_LANG | Language code of that template (default en) |
PORT | Optional, defaults to 3000 |
ALLOW_UNSIGNED_WEBHOOKS | true skips the signature check. Local testing only, never in production |
Webhook URL for Meta: https://<your-render-url>/webhook.
supabase/schema.sql in the SQL Editor, then the files in supabase/migrations/ in filename order, then the seed_*.sql files.update public.profiles set role = 'admin' where id = '<user uuid>';
Known gap in the SQL files. The
"Quizz"table, the"Tier"type, and a few columns onmoduleswere created in the Supabase dashboard and are not inschema.sql, so the SQL files alone cannot rebuild a database from scratch. To fix this, export the real schema from the production project and commit it as the new baseline:supabase db dump --schema public -f supabase/baseline.sql.
| Part | Host | Notes |
|---|---|---|
| Web app | Vercel | Root directory apps/web; set the two NEXT_PUBLIC_* variables. |
| CyberBot | Render | Start command npm start; set all bot variables. A deploy without APP_SECRET fails on purpose and the previous version keeps running. |
| Database | Supabase | Apply new files from supabase/migrations/ in order. |
/admin.STAFF_WHATSAPP points to a staffed number, set up a WhatsApp template and STAFF_TEMPLATE_NAME, test "Talk to a person" once, and agree response times.https://<your-domain>/reset-password to the Redirect URLs. Password reset emails do not work without it.