尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗��# GuildOS
A community-and-events platform for student & professional guilds. Communities host events, members attend with verified check-in/check-out, earn verifiable certificates (QR + serial), build reputation ("Guild Score") and AI-assisted CVs while organizers monetize through event sponsorships and premium customization.
npm workspaces monorepo:
| Workspace | Stack | Purpose |
|---|---|---|
backend/ | Express 4 � Mongoose 8 � TypeScript � WebSockets (ws) | REST API, realtime, schedulers, payments, email |
frontend/ | Next.js 14 (App Router) � React 18 � Tailwind CSS | Web app (app/), shared UI in components/guildos/ |
mobile/ | Expo / React Native | Mobile app (early stub) |
docs/ | Markdown | PRDs per feature, BACKLOG.md, CHANGELOG.md |
mongodb://127.0.0.1:27017/guildos) or a connection string# from the repo root
npm install
# copy env template and fill in values
# backend/.env (see table below)
# run frontend + backend + mobile together
npm run dev
# or individually
npm run dev:backend # API on http://localhost:3001
npm run dev:frontend # web on http://localhost:3000
backend/.env)Defined in backend/src/config.ts. Everything is optional in dev unless marked required.
| Variable | Default | Notes |
|---|---|---|
PORT | 3001 | API port |
MONGODB_URI | mongodb://127.0.0.1:27017/guildos | Required in production |
JWT_SECRET | dev-secret-change-me | Change in production |
CORS_ORIGIN | http://localhost:3000 | Frontend origin |
FRONTEND_URL | http://localhost:3000 | Used in emails / redirects |
COOKIE_DOMAIN | Set for cross-subdomain auth in prod | |
ADMIN_EMAIL / ADMIN_PASSWORD / ADMIN_NAME | Seeds the platform admin account |
| Variable | Notes |
|---|---|
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS | Nodemailer transport (e.g. Gmail) |
EMAIL_FROM | Sender, default GuildOS <[email protected]> |
One gateway is active at a time toggled by the admin at /dashboard/admin/communities.
| Variable | Notes |
|---|---|
PAYSTACK_SECRET_KEY / PAYSTACK_PUBLIC_KEY | Paystack; webhook at POST /api/payments/paystack/webhook |
FLUTTERWAVE_SECRET_KEY / FLUTTERWAVE_PUBLIC_KEY / FLUTTERWAVE_SECRET_HASH | Flutterwave; webhook at POST /api/payments/flutterwave/webhook |
Payments stay disabled (paymentsEnabled=false) until the active gateway has a secret key set.
All five must be set, otherwise uploads fall back to local backend/uploads/:
R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET, R2_PUBLIC_BASE_URL
Set a CORS policy on the R2 bucket allowing the frontend origin the certificate canvas draws logos/signatures cross-origin.
| Variable | Notes |
|---|---|
OPENAI_API_KEY / OPENAI_MODEL | Assistant, CV builder, certificate wording (template fallback without key) |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET / GOOGLE_REDIRECT_URI | Google OAuth login |
OPPORTUNITY_SYNC_ENABLED | true to enable opportunity ingestion |
ADZUNA_APP_ID / ADZUNA_APP_KEY / ADZUNA_COUNTRY | Adzuna jobs provider |
JOOBLE_API_KEY / JOOBLE_KEYWORDS / JOOBLE_LOCATION | Jooble jobs provider |
OPPORTUNITY_RSS_FEEDS | Comma-separated RSS feed URLs |
From the repo root:
| Command | What it does |
|---|---|
npm run dev | frontend + backend + mobile concurrently |
npm run build:all | Build all workspaces |
npm test | Backend Vitest suite (unit tests: fee math, password hashing, JWT) |
Backend one-off scripts (run with tsx, e.g. npx tsx backend/smoke-test.ts): smoke-test.ts, seed-demo-events.ts, seed-cert.ts, verify-community.ts, cleanup-live.ts.
Certificate model, rendered client-side on canvas via frontend/components/guildos/certificate-canvas.ts (12 designs, themes, signatures, sponsor strips), verified publicly at /certificates/[serial]./uploads/<key> paths, resolved at request time.npm test # run once
npm run test:watch -w backend
Tests live next to sources as *.test.ts (excluded from the production build). Current coverage is unit-level only; integration tests (certificate/attendance chain, payment gating) are the next planned layer see docs/BACKLOG.md.