Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。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.