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.