Skip to content

Commit 145d78c

Browse files
authored
docs: align with canonical product-pages structure (#77)
* chore(openspec): add docs-product-pages-conformance change artifacts * docs: align with canonical product-pages structure - Create canonical folders: Features/, Technical/, UseCases/, Integrations/ - Rename tutorials/ to user-guide/ (11 files + screenshots) - Move 7 root MDs to canonical locations (FEATURES, ARCHITECTURE, etc.) - Create installation.md with App Store + manual install steps - Create UseCases/index.md + Integrations/index.md stubs (#73) - Em-dash sweep: 0 remaining across all docs files (closes #76) - Fix internal links in intro.md to new canonical paths - Add redocusaurus@^2.0.0 to package.json; mount at /api (/api) (#75) - Create static/oas/scholiq.json placeholder OAS 3.0.3 stub - Add API Documentation navbar link - Scaffold i18n/nl/ directory tree for Dutch translation (#74) - NL locale escape hatch applied: SSR race on Docusaurus 3.9.2; reverted to en-only with TODO #74 comment
1 parent 4e15f2d commit 145d78c

37 files changed

Lines changed: 1842 additions & 331 deletions
Lines changed: 66 additions & 66 deletions
Large diffs are not rendered by default.

docs/Integrations/index.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
sidebar_position: 1
3+
draft: true
4+
---
5+
6+
# Integrations
7+
8+
This section is under construction. Integration guides for Scholiq are being authored in [GitHub issue #73](https://github.com/ConductionNL/scholiq/issues/73).
9+
10+
Planned integrations include:
11+
12+
- **OpenRegister**: data layer (required)
13+
- **OpenConnector**: BRON/ROD, UWLR, OSO, Edukoppeling, Studielink, Digikoppeling adapters (required)
14+
- **MyDash**: student and credential analytics surfaces (recommended)
15+
- **DocuDesk**: diploma and certificate document templating (optional)
16+
- **SURFconext**: SSO federation for higher education
17+
- **DUO BRON/ROD**: student registration exchange
18+
19+
Follow [#73](https://github.com/ConductionNL/scholiq/issues/73) for progress.
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Scholiq Admin Guide
1+
# Scholiq, Admin Guide
22

33
This guide covers installation, register bootstrapping, signing key configuration, and troubleshooting for Nextcloud administrators.
44

@@ -31,14 +31,14 @@ Or via the Nextcloud App Store: search for **Scholiq**, click **Download and ena
3131

3232
Auto-bootstrap of the register on `app:enable` is blocked by openregister#1487, tracked in scholiq#35. Until that is resolved, you must import the register manually after every fresh install.
3333

34-
**Option A OCC command:**
34+
**Option A, OCC command:**
3535

3636
```bash
3737
docker exec nextcloud php occ openregister:register:import \
3838
/var/www/html/custom_apps/scholiq/lib/Settings/scholiq_register.json
3939
```
4040

41-
**Option B OpenRegister admin UI:**
41+
**Option B, OpenRegister admin UI:**
4242

4343
1. Open Nextcloud as admin.
4444
2. Go to **OpenRegister** > **Registers** > **Import**.
@@ -49,16 +49,16 @@ docker exec nextcloud php occ openregister:register:import \
4949

5050
Open **OpenRegister** > **Schemas** and confirm you see all 9 scholiq schemas listed.
5151

52-
If any are missing, re-run the import. If the import fails, check the OpenRegister version scholiq requires `openregister ^v0.2.10`.
52+
If any are missing, re-run the import. If the import fails, check the OpenRegister version, scholiq requires `openregister ^v0.2.10`.
5353

5454
---
5555

5656
## Configure tenant signing keys
5757

5858
Scholiq uses RSA key pairs for two purposes:
5959

60-
- **Credential signing** `CredentialSigningService` RS256-signs Open Badges 3.0 assertions.
61-
- **Attestation HMAC** `AttestationSigningGuard` uses the tenant key for HMAC-SHA256.
60+
- **Credential signing**, `CredentialSigningService` RS256-signs Open Badges 3.0 assertions.
61+
- **Attestation HMAC**, `AttestationSigningGuard` uses the tenant key for HMAC-SHA256.
6262

6363
Keys are stored via Nextcloud's `ICrypto` interface (encrypted at rest).
6464

@@ -78,7 +78,7 @@ This generates a new RSA-2048 key pair and stores it in `IAppConfig` under the `
7878

7979
### Rotate keys
8080

81-
Key rotation does not invalidate existing signatures each signed object stores the `signingKeyId` used at signing time.
81+
Key rotation does not invalidate existing signatures, each signed object stores the `signingKeyId` used at signing time.
8282

8383
```bash
8484
docker exec nextcloud php occ scholiq:keys:generate --rotate
@@ -143,17 +143,17 @@ docker exec nextcloud php occ openregister:register:import \
143143

144144
**Symptom:** Learners do not receive due-date reminders or completion notifications.
145145

146-
**Check 1 NC cron:** Nextcloud's background job runner must be active. Check:
146+
**Check 1, NC cron:** Nextcloud's background job runner must be active. Check:
147147
```bash
148148
docker exec nextcloud php occ background-job:run --list
149149
```
150150

151-
**Check 2 OR notification worker:** OpenRegister's notification dispatch depends on its own cron hook. Verify OR's background jobs are not stalled:
151+
**Check 2, OR notification worker:** OpenRegister's notification dispatch depends on its own cron hook. Verify OR's background jobs are not stalled:
152152
```bash
153153
docker exec nextcloud php occ background-job:run OCA\\OpenRegister\\BackgroundJob\\NotificationJob
154154
```
155155

156-
**Check 3 User preferences:** Notifications are gated by user preference keys (`notify_assignments`, `notify_due_dates`). Check that these are not disabled in the user's Scholiq settings.
156+
**Check 3, User preferences:** Notifications are gated by user preference keys (`notify_assignments`, `notify_due_dates`). Check that these are not disabled in the user's Scholiq settings.
157157

158158
### Attestation signing fails
159159

docs/API.md renamed to docs/Technical/api.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
# Scholiq API Reference
1+
# Scholiq, API Reference
22

33
Scholiq exposes two categories of API surface:
44

5-
1. **OpenRegister object API** all CRUD and lifecycle operations on the 9 schemas go through OR's REST API. Scholiq does not wrap these with its own controllers.
6-
2. **Scholiq-specific endpoints** thin PHP controllers for operations OR cannot yet express declaratively: public credential verification, audit-pack ZIP export, admin key management, and health diagnostics.
5+
1. **OpenRegister object API**, all CRUD and lifecycle operations on the 9 schemas go through OR's REST API. Scholiq does not wrap these with its own controllers.
6+
2. **Scholiq-specific endpoints**, thin PHP controllers for operations OR cannot yet express declaratively: public credential verification, audit-pack ZIP export, admin key management, and health diagnostics.
77

88
Base URL (local dev): `http://localhost:8080/index.php/apps`
99

@@ -19,13 +19,13 @@ Scholiq uses the standard OR objects API. The register slug is `scholiq`.
1919
GET /openregister/api/objects?register=scholiq&schema={schema-slug}
2020
```
2121

22-
**Example list all published courses:**
22+
**Example, list all published courses:**
2323

2424
```
2525
GET /openregister/api/objects?register=scholiq&schema=course&lifecycle=published
2626
```
2727

28-
**Example list mandatory enrolments for a learner:**
28+
**Example, list mandatory enrolments for a learner:**
2929

3030
```
3131
GET /openregister/api/objects?register=scholiq&schema=enrolment&learnerId=alice&mandatory=true
@@ -78,7 +78,7 @@ Content-Type: application/json
7878
}
7979
```
8080

81-
**Example publish a course:**
81+
**Example, publish a course:**
8282

8383
```
8484
POST /openregister/api/objects/{course-uuid}/transition
@@ -87,7 +87,7 @@ POST /openregister/api/objects/{course-uuid}/transition
8787

8888
If the `CoursePublishGuard` check fails (no published lessons), the response is `422 Unprocessable Entity` with an error message.
8989

90-
**Example sign an attestation:**
90+
**Example, sign an attestation:**
9191

9292
```
9393
POST /openregister/api/objects/{attestation-uuid}/transition
@@ -119,7 +119,7 @@ All endpoints below require an authenticated Nextcloud session unless marked `@P
119119

120120
Verifies a credential by ID. Returns validity status and the Open Badges 3.0 payload. Writes a `credential.verified` audit entry via OR.
121121

122-
**Response 200 valid credential:**
122+
**Response 200, valid credential:**
123123

124124
```json
125125
{
@@ -138,7 +138,7 @@ Verifies a credential by ID. Returns validity status and the Open Badges 3.0 pay
138138
}
139139
```
140140

141-
**Response 200 revoked credential:**
141+
**Response 200, revoked credential:**
142142

143143
```json
144144
{
@@ -254,8 +254,8 @@ Generates a new RSA key pair and stores it via `ICrypto`. Equivalent to `occ sch
254254

255255
User and admin settings endpoints backed by `SettingsController`.
256256

257-
`GET /scholiq/api/settings` returns current user's Scholiq preferences.
258-
`POST /scholiq/api/settings` updates preferences.
257+
`GET /scholiq/api/settings`, returns current user's Scholiq preferences.
258+
`POST /scholiq/api/settings`, updates preferences.
259259

260260
**User preference keys:**
261261

0 commit comments

Comments
 (0)