Sandbox/Version demo
From OHC Network Wiki
More languages
More actions
Older versions: Sandbox/Version demo/3.0  Sandbox/Version demo/2.0  Sandbox/Version demo/1.0
ℹ️ Sandbox page
This page demonstrates the wiki's copy-on-write versioning system. It is not real documentation. The frozen forks below show how content evolves across releases without duplicating the entire tree.
Notification system (v4.0 — current)
The notification system handles all outbound communication from the platform to users, providers, and external systems.
Channels
| Channel | Added in | v4.0 changes |
|---|---|---|
| 1.0 | MJML templates + AMP for interactive emails | |
| In-app | 2.0 | Unified inbox with thread grouping |
| SMS | 2.0 | Smart routing (cost-optimized per region) |
| Push (mobile) | 3.0 | Rich media attachments, action buttons |
| Webhook | 3.0 | Now supports HMAC signing + retry policies |
| 4.0 | Via official Business API | |
| Slack/Teams | 4.0 | Org-configurable bot integrations |
Scheduling & orchestration
New in v4.0 — notifications can be scheduled, cancelled, and A/B tested:
{
"template": "appointment_reminder",
"recipients": ["patient:uuid-123"],
"channels": ["email", "whatsapp"],
"schedule": {
"send_at": "2026-07-10T08:00:00Z",
"cancel_if": "appointment.status == 'cancelled'"
},
"variants": {
"control": { "subject": "Appointment tomorrow" },
"test_a": { "subject": "See you tomorrow, {{patient.first_name}}!" }
}
}
Per-organization configuration
Organizations can now override global channel settings:
| Setting | Scope | Description |
|---|---|---|
| Enabled channels | Per org | Which channels are active |
| Sender identity | Per org | From address, WhatsApp number, bot name |
| Quiet hours | Per org | Suppress non-urgent sends during configured windows |
| Fallback chain | Per org | e.g. try Push → SMS → Email in order |
Architecture (v4.0)
Action / Scheduler / API
↓
Orchestrator (evaluates schedule, cancel_if, variant selection)
↓
Fan-out (per recipient × channel, respects fallback chain)
↓
Queue (Redis Streams, partitioned by priority)
↓
Workers (channel-specific adapters, batch-aware)
↓
Delivery tracker (status, attempts, receipts, analytics)
Evolution summary
| Version | Key additions | Pages in Docusaurus model | Pages in wiki model |
|---|---|---|---|
| 1.0 | Email only, sync | 1 page × 1 version = 1 | 1 frozen fork |
| 2.0 | Async, SMS, in-app, preferences | copy entire tree = 2 total | 1 frozen fork |
| 3.0 | Templates, push, webhooks, tracking, batching | copy entire tree = 3 total | 1 frozen fork |
| 4.0 | WhatsApp, Slack, scheduling, A/B, per-org config | copy entire tree = 4 total | 1 canonical page (you're reading it) |
| Total file/page count | 4 full copies | 4 pages (1 current + 3 forks) | |
📝 Note
In a real doc site with 100 pages, Docusaurus would store 400 files for 4 versions (most identical). This wiki stores 103 pages — the 100 canonical pages plus only the 3 that actually diverged.
How the versioning works
- Canonical page = latest. You are reading it.
- Fork only when content changes. Unchanged pages span all versions implicitly (their
IntroducedInfield covers the full range). - Version switcher (the pill strip below the title ↑) is auto-generated:
{{Version switcher}}queries Cargo for subpages withStatus=frozen. - Frozen banner on old pages links readers back to this canonical page.
- "What changed in version X?" is a single Cargo query:
{{#cargo_query: tables=Docs | where=IntroducedIn='4.0'}}
Live query: all versions of this page
| Page | Introduced | Deprecated | Status |
|---|---|---|---|
| Sandbox/Version demo/1.0 | 1.0 | 2.0 | frozen |
| Sandbox/Version demo/2.0 | 2.0 | 3.0 | frozen |
| Sandbox/Version demo/3.0 | 3.0 | 4.0 | frozen |
| Sandbox/Version demo | 4.0 | current |