Card templates
A template is just a name that picks which card the app draws. You send data; the app already has the design built in. Pick one of the three below and fill in the fields — the cards here are rendered by the exact same component the app uses.
text — the everyday notification
The simple one, and what you get for any unknown template name — so a message always shows up, never disappears.
| field | type | notes |
|---|---|---|
title | string | defaults to "Notification" |
body | string | optional extra text |
icon | string | optional emoji |
accent | string | optional hex color |
{
"template": "text",
"data": {
"title": "Nightly backup complete",
"body": "412 MB uploaded to R2 in 38s.",
"icon": "🌙"
}
}🌙
412 MB uploaded to R2 in 38s.
deploy — build & deploy status
Made for CI: a clear pass/fail badge with branch, commit and how long it took.
| field | type | notes |
|---|---|---|
title | string | defaults to "Deploy" |
status | "ok" | "fail" | sets the color, icon and badge |
branch | string | optional, monospace |
commit | string | optional, monospace |
duration | string | optional, monospace |
{
"template": "deploy",
"data": {
"title": "Build finished",
"branch": "main",
"commit": "a1b2c3d",
"status": "ok",
"duration": "2m13s"
}
}alert — something needs attention
For monitors and warnings. The level sets how loud it looks, from a calm info to a red critical.
| field | type | notes |
|---|---|---|
level | "info" | "warn" | "critical" | sets the color and icon |
title | string | defaults to "Alert" |
message | string | optional body |
source | string | optional footnote |
{
"template": "alert",
"data": {
"level": "critical",
"title": "Disk usage above 90%",
"message": "Volume /dev/sda1 on web-01 is at 93% capacity.",
"source": "node-exporter"
}
}🚨
Volume /dev/sda1 on web-01 is at 93% capacity.
Source: node-exporter
Tweaking the look
Any card takes an optional style object: accent recolors the edge, icon swaps the emoji, and urgency hints how attention- grabbing the pop-up should be. Leave it out and the template's own defaults apply.