Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A shared multi-tenant church management SaaS built with Node.js, Express,
PostgreSQL, and Prisma. One deployment serves many churches; every tenant-owned
record carries churchId, and database access is scoped centrally through
tenantDb(churchId).
SESSION_SECRETnpm install
cp .env.example .env
npx prisma generate
npx prisma db push
npm start
Set DATABASE_URL and SESSION_SECRET before starting the app. Open
http://localhost:3000; the public landing page lets a church create its own
tenant and first administrator.
lib/tenant.js exports:
db: raw Prisma client for genuine global concerns such as login and signuptenantDb(churchId): the application client used for tenant-owned dataThe tenant client injects churchId into supported reads and writes. Raw SQL is
checked separately:
npm run check:raw-sql-tenant-scoping
Every new route must include cross-tenant tests. Application scoping is the primary isolation boundary; do not query tenant models through the raw client without a documented reason.
npm test
npm run check:raw-sql-tenant-scoping
The integration suite uses the configured PostgreSQL database and starts temporary localhost HTTP servers. Use a dedicated non-production database.
Required:
| Variable | Purpose |
|---|---|
DATABASE_URL | PostgreSQL connection string |
SESSION_SECRET | Signs sessions; must remain stable across deployments |
NODE_ENV=production | Enables production cookie/security behavior |
PUBLIC_URL | Public origin used for check-in, RSVP, and email links |
Common optional configuration:
| Variable | Purpose |
|---|---|
PHOTO_DIR | Persistent member-photo directory |
ARKESEL_API_KEY / ARKESEL_SENDER | SMS delivery; empty key keeps dry-run mode |
SMTP_HOST / SMTP_USER / SMTP_PASS / SMTP_FROM | SMTP email delivery |
RESEND_API_KEY | Resend email delivery |
SUPPORT_EMAIL / ALERT_EMAIL / ALERT_WEBHOOK_URL | Support and monitoring |
The production app runs on Fly.io using fly.toml and Dockerfile.
flyctl secrets set DATABASE_URL='postgresql://...'
flyctl secrets set SESSION_SECRET="$(openssl rand -hex 32)"
flyctl deploy -a church-management-system
After deployment, verify:
curl -fsS https://church-management-system.fly.dev/healthz
curl -fsS https://church-management-system.fly.dev/readyz
./scripts/prod-sanity.sh https://church-management-system.fly.dev
See docs/RELEASE_CHECKLIST.md for the complete release and rollback process.
| Path | Purpose |
|---|---|
server.js | Postgres multi-tenant application bootstrap |
prisma/schema.prisma | PostgreSQL schema |
lib/tenant.js | Central Prisma tenant-scoping layer |
lib/tenant-http.js | Express application assembly |
routes-pg/ | JSON/action routes |
routes-pg-html/ | Server-rendered product routes |
test/ | RBAC, tenant-isolation, finance, and feature integration tests |
The older SQLite modules remain temporarily as rollback/reference material and must not be used for new production features.