n8n
Building a content pipeline with Jaina + n8n
Webhook → n8n → Slack, Discord, GitHub Issues, anywhere. A simple recipe for content automation.
The pattern
Jaina fires webhooks on record.created, record.updated, and record.deleted. n8n receives them on an HTTP webhook node and routes them anywhere — Slack, Discord, GitHub Issues, a Google Sheet, a downstream API, your phone.
This is the cheapest possible "content management triggers a workflow" pipeline.
Step 1: an n8n webhook
In n8n, drag a Webhook node onto the canvas. Set:
- HTTP method:
POST - Path:
jaina-records(or whatever you like) - Response mode:
Last Node
Activate the workflow and copy the production URL — something like https://n8n.example.com/webhook/jaina-records.
Step 2: register the webhook in Jaina
In your project settings → Webhooks → New webhook:
- URL: paste your n8n URL
- Events:
record.created,record.updated - Signing secret: leave the auto-generated value (we'll use it in step 3)
Jaina will start delivering signed POST requests on every matching event.
Step 3: verify the signature in n8n
Add a Function node after the webhook with this code:
const crypto = require('crypto');
const secret = $env.JAINA_WEBHOOK_SECRET;
const signature = $request.headers['x-jaina-signature'];
const body = JSON.stringify($json);
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
if (signature !== expected) {
throw new Error('Invalid signature');
}
return $json;
If the signature is valid, the event continues. If not, n8n fails the run.
Step 4: route to wherever
Now do anything with the event. Examples:
- Slack — Slack node → post a message to a channel when a record is created.
- GitHub Issues — GitHub node → open an issue for any record matching a tag.
- Google Sheets — append a row to a tracking sheet.
- Webhook back to your app — call your own backend to invalidate a cache.
Full payload shape
{
"id": "evt_01HXYZ...",
"type": "record.created",
"data": {
"project": { "id": "...", "slug": "my-game" },
"schema": { "id": "...", "slug": "enemy" },
"record": {
"id": "rec_01HXYZ...",
"data": { "name": "Goblin", "hp": 20, "attack": 3 }
}
},
"created_at": "2026-05-04T12:34:56.789Z"
}
What we ship by default
- HMAC-signed payloads (rotatable secrets).
- Exponential backoff retry on 5xx and timeouts, up to 5 attempts over ~15 minutes.
- A delivery log in the dashboard for debugging.
- Per-webhook event filters so you can scope subscriptions.
Whether n8n is the right tool for your shop is a different question. But if it is, this pipeline is roughly an evening of work for a useful "content changes trigger downstream effects" capability.
