Last updated: 2026-03-30 Service owner: ODS Platform Team Pipeline status: STAGING_VERIFIED
Notification Hub manages multi-channel notifications (email, in-app, webhook) for the ODS Platform. It consumes events from Redpanda, stores notification state in PostgreSQL, and delivers emails via Resend. Supports RS256 JWT verification from OID.
| Property | Value |
|---|---|
| Language | Rust (Actix-web) |
| Container port | 8080 |
| DB schema | notifications on ods database |
| Event bus | redpanda:9092 |
| Email provider | Resend (resend.com) |
| Coolify app UUID | jwgokkggkosokss4ok4wss80 |
Endpoint: GET /health Expected
response: HTTP 200
curl -sf https://notification-hub.staging.orbusdigital.com/healthhttps://notification-hub.staging.orbusdigital.com
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | postgres://ods:***@ods-postgres:5432/ods?search_path=notifications |
SERVER_HOST |
No | Bind address (default 0.0.0.0) |
SERVER_PORT |
No | Listen port (default 8085, mapped to
8080) |
KAFKA_BROKERS |
No | Redpanda broker address |
JWT_SECRET |
Alt | HS256 secret (dev) |
OID_ISSUER |
Yes | https://oid.staging.orbusdigital.com |
OID_AUDIENCE |
No | JWT audience claim |
RESEND_API_KEY |
No | Resend API key for email delivery (unset = emails stay Pending) |
EMAIL_FROM |
No | Sender address (default
ODS Platform <noreply@orbusdigital.com>) |
RUST_LOG |
No | Log level |
SERVICE_NAME |
No | notification-hub |
REDPANDA_BROKERS |
No | redpanda:9092 |
REDPANDA_TOPIC |
No | notifications.events |
JWT_PUBLIC_KEY |
Prod | RSA public key from OID JWKS |
source ~/.env.adlc 2>/dev/null
curl -sf -X POST "https://app.coolify.io/api/v1/applications/jwgokkggkosokss4ok4wss80/restart" \
-H "Authorization: Bearer $COOLIFY_TOKEN"Push to the staging branch of
jniox/ods-notification-hub.
Note: Coolify GitHub OAuth is broken for private repos. The app uses a public git URL. Manual deploy token or SSH key must be configured in Coolify source settings.
# On srv-staging (35.195.54.220):
docker logs --tail 200 -f $(docker ps -qf "label=coolify.applicationId=jwgokkggkosokss4ok4wss80")Symptom: Notifications created but never delivered.
Cause: RESEND_API_KEY not set or
invalid.
Fix: Set a valid Resend API key in Coolify environment variables. Verify with:
curl -sf -X GET "https://api.resend.com/emails" \
-H "Authorization: Bearer $RESEND_API_KEY"Context: Security review verified RS256 JWT support is working. If JWT verification fails, check that OID JWKS endpoint is reachable:
docker exec <container> curl -sf http://oid:8080/.well-known/jwks.jsonSymptom: Build fails with “repository not found” or authentication error.
Fix: Coolify GitHub OAuth is known broken for private repos. Configure SSH deploy key or personal access token in Coolify source settings.
docker restart $(docker ps -qf "label=coolify.applicationId=jwgokkggkosokss4ok4wss80")| Dependency | Type | Details |
|---|---|---|
| PostgreSQL 17 | Database | ods-postgres:5432, schema
notifications |
| Redpanda | Event bus | redpanda:9092, topic
notifications.events |
| OID | Auth | JWKS endpoint for JWT verification |
| Resend | External API | Email delivery (optional – degrades gracefully) |