Open-source leerlingvolgsysteem (LVS) + leeromgeving (LMS) for Nextcloud
Scholiq is a compliance-training and learning management app for organisations and schools. It ships as a Nextcloud app built manifest-first on OpenRegister — every entity, lifecycle, notification, and dashboard widget is declared in a JSON schema register, not hand-coded in PHP services.
Scholiq replaces the deprecated learniq and edudesk concept apps. Its Path A — compliance-audit MVP (Wave 2) delivers:
- Course + Lesson management — lifecycle-gated publishing (draft → published → archived); cmi5/xAPI/SCORM content runtime; lesson player in-app.
- Enrolment engine — mandatory training assignment; bulk-enrol by group or role; T-30/T-7/T-1 due-date reminders; RAG status per enrolment.
- Certification — Open Badges 3.0 credentials auto-issued on completion; RS256-signed; public verify URL; tiered expiry alerts; renewal auto-enrolment.
- Compliance-audit wedge — Regulation objects (NIS2, AVG, BIO, …); coverage-% aggregation over live Enrolment/Attestation/Credential data; officer alerts on coverage drop; attestation signing (HMAC-SHA256); audit-pack ZIP export.
- EU AI Act gate — every AI feature is a disabled-by-default schema object; enabling requires explicit DPO acknowledgement.
The wedge targets compliance officers at organisations subject to NIS2 / Cyberbeveiligingswet, AVG, or BIO2. The critical workflow:
- Compliance officer creates a Regulation (e.g.
NIS2) and links mandatory Courses. - HR bulk-enrols a cohort; due dates are assigned.
- Learners complete lessons, sign attestations; credentials auto-issue.
- Compliance officer views real-time coverage %, exports an audit pack for an external auditor.
| Dependency | Version |
|---|---|
| Nextcloud | 28 – 33 |
| PHP | 8.1+ |
| Node.js | 20+ |
| OpenRegister | latest |
| OpenConnector | latest |
# 1. Enable the app
docker exec nextcloud php occ app:enable scholiq
# 2. Register the scholiq register (manual step — auto-bootstrap pending openregister#1487)
# Import lib/Settings/scholiq_register.json via the OpenRegister admin UI, or:
docker exec nextcloud php occ openregister:register:import /var/www/html/custom_apps/scholiq/lib/Settings/scholiq_register.jsonThe automatic register-bootstrap on
app:enableis blocked by openregister#1487 (tracked in scholiq#35). Until that is resolved, the manual import step above is required after every fresh install.
cd /var/www/html/custom_apps
git clone https://codeberg.org/Conduction/scholiq.git scholiq
cd scholiq
npm install && npm run build
make dev-link # creates the scholiq -> nextcloud-scholiq symlink if needed
docker exec nextcloud php occ app:enable scholiq| Document | Description |
|---|---|
| Architecture | Schema model, ADR chain, PHP exception inventory |
| User guide | Learner / Manager / Compliance-Officer walkthroughs |
| Admin guide | Install, register bootstrap, signing keys, troubleshooting |
| API reference | OR endpoints, scholiq-specific endpoints, examples |
| Specs | Links to the 6 applied OpenSpec changes |
# PHP
composer check:strict # PHPCS, PHPMD, Psalm, PHPStan, PHPUnit
# Frontend
npm run lint # ESLint
npm run stylelint # CSS linting
npm run check:manifest # validates src/manifest.json against nc-vue schemanpm run dev # watch mode
npm run build # production build| Layer | Technology |
|---|---|
| Frontend | Vue 3.5, @nextcloud/vue 9, @conduction/nextcloud-vue CnAppRoot (Tier 4) |
| Data model | src/manifest.json + lib/Settings/scholiq_register.json |
| Build | Webpack 5, @nextcloud/webpack-vue-config |
| Backend | PHP 8.1+, Nextcloud App Framework |
| Data | OpenRegister (PostgreSQL JSON objects) |
| Quality | PHPCS, PHPMD, Psalm, PHPStan, ESLint, Stylelint |
| Branch | Purpose |
|---|---|
main |
Stable releases |
beta |
Pre-release builds |
development |
Active development — merge target for feature branches |
- WCAG 2.2 AA (Dutch government requirement)
- EU AI Act Regulation 2024/1689 — high-risk feature gate via
AiFeatureschema - Open Badges 3.0 (W3C VC-aligned) — issued credentials
- xAPI 1.0.3 / cmi5 — content runtime and LRS
- EUPL-1.2 license
- OpenRegister — required object-store foundation
- OpenConnector — required for external adapters
Contact support@conduction.nl for support. For an SLA, contact sales@conduction.nl.
EUPL-1.2 — Built by Conduction.