Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Actively maintained open-source case management for human services organizations.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗CaseLight is a containerized, modernized fork of OSCaR (Open Source Case-management and Record-keeping), maintained by Lighthouse Nonprofit Technologies for nonprofit case management — tracking individuals, households, programs, assessments, and case notes.
CaseLight runs a modernized, supported stack — backend and frontend. The application was
migrated off the end-of-life Ruby 2.3.3 / Rails 4.2 it inherited from upstream OSCaR up to
current, maintained versions, and the frontend/asset-pipeline EOL set was retired rung-by-rung
in 2026-07 — the whole POAM-017 family is closed (a–g), finishing with the Bootstrap 5.3
migration and the in-house caselight_theme
(docs/compliance/poam-017g-verification.md):
docs/compliance/.Intentionally not carried over from upstream for the current pilot scope: the Khmer locale, the Thredded community forum, and the v1 mobile API.
CaseLight models the real shape of frontline casework — and lets staff reshape it without code.
See the User Guide for a screen-by-screen walkthrough.
docs/pdf/) — a User Guide, an Administrator Guide, and a Brochure; rebuild them from the markdown sources with docs/build-pdfs.js.rake compliance:evidence).CaseLight is a fork of OSCaR — Open Source Case-management and Record-keeping, originally built by Rotati Consulting and Children in Families.
OSCaR is licensed under AGPL-3.0 — stated in the upstream
README's License section
("OSCaR Web Application is released under AGPL"; verified 2026-07-26) — and CaseLight preserves it
(see LICENSE).
The AGPL's network-use clause is important: if you run a modified version of CaseLight
as a network service, you must make your modified source available to its users. Publish
your fork's source accordingly.
| Component | Version | Notes |
|---|---|---|
| Ruby | 4.0.5 | runs inside the Docker image (ruby:4.0, Debian Trixie) |
| Rails | 8.1.3.1 | Rack 3 |
| PostgreSQL | 17 | primary relational store (pg 1.6) |
| MongoDB | 8.0 | change / audit history (Mongoid 9.1) |
| Redis + Sidekiq | redis 7 / sidekiq 8.1 | background jobs |
| Auth | Devise 5 + MFA | TOTP (devise-two-factor) + WebAuthn passkeys (webauthn), password policy (devise-security) |
| App server | puma 8 | behind a TLS reverse proxy (force_ssl + HSTS); replaced thin 2026-07 |
| Asset pipeline | Sprockets 4.4 + dart-sass + ES2015+ (build-time), haml 7.5 | modernized rung-by-rung 2026-07 (POAM-017e closed) |
| Frontend | jQuery 4.0.0, Bootstrap 5.3.8 + in-house caselight_theme (POAM-017g closed; INSPINIA removed), Trix 2.1, Tom Select 2.6, FullCalendar 6.1, formBuilder 3.23, Chart.js 4.4, vanillajs-datepicker 1.3.4, fileinput 5.5.4, Font Awesome 6.7 (v4 shims) | whole POAM-017 family closed (a–g); eval-free rule builder; enforced nonce-based CSP |
Requires Docker and the Docker Compose plugin on a Linux host.
git clone <your-fork-url> caselight
cd caselight
# 1. Create your environment file from the template, then fill in real values.
cp .env.example .env
# Generate strong secrets, e.g.:
# SECRET_KEY_BASE=$(openssl rand -hex 64)
# DATABASE_PASSWORD=$(openssl rand -hex 24)
# Edit .env accordingly. .env is gitignored — never commit it.
# 2. Build the image (compiles native gems; the first build is slow).
docker compose build
# 3. Start the datastores, then create + migrate the database.
docker compose up -d db mongo redis
docker compose run --rm app bundle exec rake db:create db:migrate
# 4. Create your first tenant (OSCaR is multi-tenant by subdomain; the
# short_name is the subdomain label and Postgres schema — lowercase, no underscores).
docker compose run --rm app bundle exec rails runner \
"Organization.create_and_build_tanent(short_name: 'yourorg', full_name: 'Your Organization')"
# 5. Seed reference data, then bring up the app and worker.
docker compose run --rm app bundle exec rake db:seed
docker compose up -d app sidekiq
The app listens on 127.0.0.1:3000. Put a TLS-terminating reverse proxy in front of it
for any non-local use. See Dockerfile and
docker-compose.yml for the full build and service definitions, and
bootstrap.sh for an end-to-end deploy script (clone → build → migrate →
tenant → seed → up); tune the TENANT_SHORT / TENANT_FULL values at the top first. The
operator runbook — deploying, verifying, TLS, backups, containment — is
OPERATIONS.md.
CaseLight has been hardened toward FedRAMP Moderate and SOC 2 (Security · Confidentiality · Privacy) auditability at the application layer — the phased program (0–7) is complete. What's in place:
Authentication & sessions
Transport & application hardening
'self'; violation reports collected at
/csp_reports; ENFORCE_CSP=false falls back to report-only), a
strict security-header set (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, …), and
secure / HttpOnly / SameSite session cookies.support_unencrypted_data=false: a non-ciphertext value in an encrypted
column raises rather than being silently tolerated) — and parameter-log redaction of
credentials and PII.Audit & access logging
lograge emits one JSON line per request, tagged with request_id,
user_id, tenant, and remote_ip. Disabled in test.AccessLog (MongoDB via Mongoid)
records successful reads (show / index) of sensitive resources (Clients, Progress Notes,
Assessments, Case Notes, Household Notes, Household Alerts) via the AccessAudit concern. Only identifiers (resource type/id) and a
denormalized user_email are stored — never record contents. Toggled by
config.x.access_logging_enabled (defaults on; fails safe to on).before_failure hook) and
authorization denials (CanCanCan / Pundit) are written to the same AccessLog, always. Logging never
raises into the request it audits.AccessLog is per-tenant by default_scope (Mongo is a shared
DB) and append-only at the app layer (before_update / before_destroy raise); true WORM is an infra
hand-off.docs/compliance/audit-retention.md;
removed only by the sanctioned rake audit:purge. Control narrative in
docs/compliance/audit-logging.md (FedRAMP AU-2/3/6/9/11/12,
SOC 2 CC7.2/7.3).Authorization & data protection
docs/compliance/drills/).rake compliance:evidence bundle live in docs/compliance/.Secure SDLC
docs/compliance/.Deployment
.env (gitignored); the image ships none, and per-deploy secrets are generated.caselight_theme
(POAM-017g closed; see docs/compliance/poam-017g-verification.md); rebuild the image to
pick up gem/security updates, and keep the edges patched (host OS, proxy, TLS). See
docs/compliance/vulnerability-poam.md
for the itemized ledger, severities, and dated remediation targets.SECURITY.md for the controls required first.