A centralized alert & notification system for backup jobs. Backup scripts on any server just send a single HTTP request — Notica handles the rest: storing history, showing a dashboard, firing immediate alerts on failure, and sending periodic digest reports over Microsoft Teams.
- Job Registry — register jobs ahead of time with an expected cron schedule; Notica detects overdue jobs proactively, even before a script ever reports back
- Alert Ingestion — backup scripts report a result via a single HTTP POST with a per-job token
- Immediate Mode — an Adaptive Card lands in Teams within seconds of a job failing or warning
- Digest Mode — cron-scheduled summary reports instead of spamming every single alert
- Dashboard — Job Board, Alert History, Analytics (success rate, health by environment, duration trend), Schedule Manager, Contact Manager, Settings
- Multi-language — English/Vietnamese UI, switchable per page, defaults to English
- Optional SSO — connects to an external Keycloak OIDC instance; off by default, no Keycloak required to run Notica
mkdir -p ~/notica && cd ~/notica
curl -O https://raw.githubusercontent.com/yourname/notica/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/yourname/notica/main/.env.example
cp .env.example .env && nano .env # set POSTGRES_PASSWORD and APP_URL
docker compose pull
docker compose up -dOpen http://<server-ip> once containers are healthy (docker compose ps). Full walkthrough, all env vars, and end-to-end setup (Teams contact → job registration → script integration): see the Docs site below.
Backup Scripts (bash / python / ansible / cron)
│
│ POST /api/v1/alerts
▼
┌────────────────────────────────────────────────────────────┐
│ NOTICA │
│ ┌─────────────────┐ ┌─────────────────┐ ┌───────────┐ │
│ │ Ingestion API │ │ Web API │ │ Scheduler │ │
│ │ Validate │ │ Jobs/Alerts/ │ │ Digest │ │
│ │ Store + Notify │ │ Schedules/ │ │ Overdue │ │
│ │ │ │ Contacts CRUD │ │ Retention │ │
│ └────────┬────────┘ └────────┬────────┘ └─────┬─────┘ │
│ └──────────┬─────────┘ │ │
│ ▼ │ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ PostgreSQL 16 — jobs · alerts · schedules · │ │
│ │ contacts · schedule_executions · settings · │ │
│ │ audit_logs │ │
│ └─────────────────────┬───────────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Notification Engine — Immediate mode + │ │
│ │ Digest mode │ │
│ └─────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────┘
│
▼
Teams Workflows Webhook (Adaptive Cards v1.2)
| Layer | Technology |
|---|---|
| Backend | Python 3.12 + FastAPI (async) |
| ORM / Migrations | SQLAlchemy 2.0 async + Alembic |
| Scheduler | APScheduler 3.x — embedded, no Redis/Celery required |
| Database | PostgreSQL 16 |
| Frontend | React 18 + TypeScript + Vite, shadcn/ui + Tailwind |
| Serve | Nginx — /api/* → FastAPI, /* → React SPA |
| Notification | Teams Workflows Webhook, Adaptive Cards v1.2 |
Full guide (English/Vietnamese), served from the app itself:
| Doc | What's there |
|---|---|
| Docs site | Landing page — start here |
| → Installation | Full env var reference |
| → Registering Jobs | Job fields, tokens |
| → Sending Alerts | Bash/Python/Ansible integration examples, API reference |
| → Immediate Notifications | Setting up a Teams contact |
| → Digest & Schedules | Periodic report setup |
| → SSO / Keycloak Setup | Full Keycloak client config |
| → Upgrade Guide | Migration steps, breaking changes per version |
| CHANGELOG.md | Version-by-version change history |
| CONTRIBUTING.md | Dev setup, coding conventions, PR process |
(links left empty on purpose — fill in with the real docs-site URL once it's deployed)
Contributions are welcome — from bug reports to pull requests. See CONTRIBUTING.md to get started.
MIT © Notica Contributors