> For the complete documentation index, see [llms.txt](https://codemash.gitbook.io/codemash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codemash.gitbook.io/codemash/cloud/concepts.md).

# Concepts

Modules, cross-cutting features, and how a message gets from an event to a phone or an inbox.

> A **module** is one part of a Norbix project. A **cross-cutting feature** is built once and used by many modules. This section explains the four cross-cutting features once, so the module pages only have to say what is different.

## What a module is

A Norbix project is made of modules. Each module has its own place in Cloud, its own permissions and its own endpoints: [Membership](/codemash/cloud/membership.md), [Database](/codemash/cloud/database.md), [Files](/codemash/cloud/files.md), [Code](/codemash/cloud/code.md), [Email](/codemash/cloud/emails.md), [Push](/codemash/cloud/push.md), [SMS](/codemash/cloud/sms.md), [Payments](/codemash/cloud/payments.md), [Tasks (Scheduler)](/codemash/cloud/tasks.md) and [Logs](/codemash/cloud/logs.md). AI integrations sit under [Project](/codemash/cloud/ai/integrations.md).

## What a cross-cutting feature is

Some features are not owned by one module. They are built once, and many modules use them. Each one has:

* **a shared part** — the rules, the data shape and the screens that are the same everywhere;
* **per-module parts** — the events, providers or fields that only one module has.

The shared part is described once, on a concept page. A module page describes only its own part and links to the concept page.

| Feature                                                            | Shared part                                                                               | Used by                                                                           |
| ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| [Integrations](/codemash/cloud/concepts/integrations.md)           | one provider form, the default provider, environments, test and confirm                   | Membership, Database, Files, Code, Email, Push, SMS, Payments, Logs, AI, Webhooks |
| [Triggers](/codemash/cloud/concepts/triggers.md)                   | the trigger shape (when, action, delivery settings), the seven actions, "needs attention" | Membership, Database, Files, Payments, AI                                         |
| [Campaigns](/codemash/cloud/concepts/campaigns.md)                 | audiences, batches, statuses, stop, send now or later                                     | Email, SMS, Push                                                                  |
| [Message templates](/codemash/cloud/concepts/message-templates.md) | translations per project language, the token rule, preview link                           | Email, SMS, Push                                                                  |

## How they fit together

```
a person (Send now / Send later)  ─┐
a scheduler task (cron)           ─┼─►  campaign  ─►  template  +  integration  ─►  recipient
a trigger (an event happened)     ─┘
```

* **Three things start a campaign:** a person on the campaign page, a [scheduler task](/codemash/cloud/tasks.md) on its cron schedule, or a [trigger](/codemash/cloud/concepts/triggers.md) whose action is Email, SMS or Push.
* **Scheduler and Triggers start campaigns; they do not own them.** The campaign a task or a trigger starts appears in the channel's campaign list like any other, with its batches and message log.
* **A campaign sends one template through one integration.** The [template](/codemash/cloud/concepts/message-templates.md) says what to send, the [integration](/codemash/cloud/concepts/integrations.md) is the provider that delivers it, and the campaign says to whom and when.

## Related

* [Tokens binding](/codemash/cloud/concepts/tokens-binding.md) — the `@Model.…` values a template can use
* [Notification preview link](/codemash/cloud/concepts/message-templates/preview-link.md) — open one sent message
