Architecture
7 rails, running on 8 Cloudflare Workers. No origin server, no container, nothing to patch.
Rails
A rail is a named sequence of stages, each of which may terminate the request and says why when it does. The stages are declared, not implied by the call graph: what can stop a notification is a fact about the product, not an accident of the code.
| Rail | Stages | What it does |
|---|---|---|
| Sending | 13 | The outbound spine. Take a request, decide, write it, deliver it, keep the evidence. |
| Data handling | 12 | One pass over everything that arrives, so only what your contract asked for is ever written down. |
| Templates | 8 | Drafting is a step inside this, never a way around it. A draft is built from what that kind of message already says it must carry, so it references exactly the parameters a real send will carry and nothing it will not — and it still traverses variable validation, preview, review and a recorded approval like any other draft. |
| Preferences and consent | 6 | Quiet hours defer; they do not drop — unless the contract's time limit runs out first, in which case it expires, with the evidence to show why. |
| Delivery | 9 | Queues a written message, keeps it inside your sending limits, picks a provider, sends, and records the receipt. Retries what is worth retrying, holds back what is not, and every attempt is on the record. |
| Documents | 6 | Identifies a document by its own contents on upload, reads it if it carries text, sorts it against the classes you declared, and routes it to a person when it cannot be sure. |
| Reporting | 7 | Turns what actually happened into numbers behind a reporting API, so delivery, engagement and template performance are questions you ask rather than logs you read. |
Workers
| Worker | What it runs |
|---|---|
gateway | |
api | |
comms-engine | |
comms-engine-entry | |
console | |
email-transport | |
contact | |
signer |
Consoles
Four hostnames, one worker: they are four views of one product rather than four products, and each view's authority is declared rather than assumed.
app.notifhq.com— What you sent, what happened to it, and what it proves.dev.notifhq.com— Keys, contracts and the wire format — everything you need to integrate.billing.notifhq.com— Plan, usage and invoices.admin.notifhq.com— Platform operations. Never linked from a customer surface.status.notifhq.com— Whether the estate is answering, measured when you asked.
The contract
Every fact on this page is read from a registry at build time. There is no hand-written description of the architecture in this estate, because a description that can disagree with the system always eventually does.