Elements

Channel

reaching humans — Email, SMS, WhatsApp, and push have physics Signal cannot express: consent, locale, receipts, and fallback chains.

Channel is the element for reaching humans.

Email, SMS, WhatsApp, and push have physics Signal cannot express: consent, locale, receipts, and fallback chains.

Governing rule

Reaching a human has physics Signal cannot express: consent, locale, receipts, and fallback chains.

At a glance

Channel

Essence: reaching humans. Replaces: email · SMS · WhatsApp · push.

Drivers available

channel.email

Dev `console` inbox · prod `smtp`.

SMS · WhatsApp · push

Human mediums with consent and fallback chains.

Why this is an element

Why

Channel is an element because human reach has irreducible physics — consent, locale, receipts — that machine messaging does not.

consent

Opt-out and suppression are first-class.

locale

Localized templates and resolution chains.

fallback

Cross-medium chains recorded as chains, not outcomes.

Example from the teaching apps

Claimed fence from provisions — same source the doc-drift gate checks:

examples/provisions/src/channels.ts

import { channel } from "okengine";
import { z } from "zod";

export const mail = channel.email({ from: "Provisions <no-reply@provisions.sa>" });
export const sms  = channel.sms({ sender: "PROVISIONS" });
export const wa   = channel.whatsapp();

export const orderConfirmed = mail.template("order-confirmed", {
  schema: z.object({ name: z.string(), orderId: z.string(), total: z.number() }),
});

export const otpCode = channel.template("otp-code", {   // medium-agnostic
  schema: z.object({ code: z.string() }),
});

Next

On this page