Skip to content
Notifie
Documentation
DocsCore concepts

Core concepts

Data Bank and sources

Name the data a Flow uses, or connect a backend and let Notifie read your schema.

The problem it solves

A Flow references data as {{data.total_cents}}. Getting that name wrong fails quietly: the placeholder renders as empty text and the notification still sends. The Data Bank exists so the names are written down once instead of remembered.

You can declare them by hand, or connect the database that already knows them.

Connect a Supabase project

Open Data Bank → Connect a source and provide the project URL and the anon key.

Notifie reads the project's OpenAPI description and stores the table and column names with their Postgres types. It stores no rows, and it does not hold an open connection to your database.

Using the fields

Discovered columns appear in the Flow builder alongside declared variables and fields observed on real events. Each one is labelled with the table it came from and inserts the key your payload should use.

What the picker shows
orders.total_cents        {{data.total_cents}}
profiles.first_name       {{data.first_name}}
subscriptions.renews_at   {{data.renews_at}}

The label carries the table so you can tell two id columns apart. The key does not, because the key has to match the field your app actually sends.

Sending the values

This is the step the connection does not replace. Discovery told you the field is called total_cents; the event still has to carry it.

Your application
await notifie.track('order_delivered', {
  total_cents: 1299,
  status: 'delivered',
});

At send time {{data.total_cents}} resolves against that payload and renders 1299. A placeholder with no matching field renders as empty text rather than blocking the send, so a missing field costs you a word in the copy, not the notification.

Where each field comes from

  • Data Bank — you declared it by hand.
  • Source — a connected backend says the column exists.
  • Observed — it has actually arrived on a real event, so its type is known.

Where a discovered column and an observed field share a name, the observed one wins: it is evidence rather than a claim.

Keeping it current

Refresh re-reads the schema and replaces it, so columns you dropped disappear rather than lingering. A source that fails to refresh is marked with the error instead of quietly serving a stale schema.

What is not supported yet

Only Supabase is implemented. PostgreSQL and MongoDB need database drivers, and Firebase and plain HTTP APIs have no fixed schema to read, so all four are listed with the reason rather than offered as though they work.

Targeting an audience by a column in your database is also out of scope, because it would require Notifie to read row values at send time.