# ntfy-bridge — Roadmap ## Phase 1 : MVP (core engine) — v0.1.0 Objectif : daemon qui compile, lit une config, écoute des webhooks et envoie vers Ntfy. - [ ] `main.v` — CLI args (`--config`, `--version`, `--validate`) - [ ] `config.v` — Chargement + validation du YAML - [ ] `server.v` — HTTP server sur `:9090` avec routing basique - [ ] `event.v` — Types de données : `Event`, `Config`, `Source` - [ ] `ntfy.v` — Client HTTP POST vers Ntfy (topic, message, priority, tags) - [ ] `sources/generic.v` — Webhook passe-partout (POST raw → Ntfy) - [ ] `log.v` — Logging structuré (timestamp, level, message) - [ ] `ntfy-bridge.example.yaml` — Config d'exemple complète et commentée **Sortie** : `ntfy-bridge` compile, accepte un webhook générique et l'envoie vers Ntfy. ## Phase 2 : Sources spécialisées — v0.2.0 - [ ] `sources/gitea.v` — Transformer Gitea (push, PR, issues, releases) - Parse le JSON webhook Gitea - Format : `🔨 [repo] auteur action: "message" (sha)` - Priority map par type d'événement - [ ] `sources/uptime_kuma.v` — Transformer Uptime Kuma - Parse le JSON webhook Kuma (heartbeat) - Format : `🚨 monitor is DOWN — status — since time` - Priority 5 pour DOWN, 1 pour UP - [ ] `sources/docker.v` — Watcher socket Docker - Connexion au socket Docker (local + distant TCP) - Filtrage par événements (die, health_status, oom) - Template de message configurable - Multi-hôtes (plusieurs sockets dans la config) - [ ] `sources/http_poll.v` — Poller HTTP - Goroutine de polling périodique (intervalle configurable) - Vérification status code + timeout - State machine up/down avec notification uniquement au changement - [ ] `dedup.v` — Déduplication basique - Cache LRU avec TTL (5 min par défaut) - Clé de déduplication : source + type + cible **Sortie** : Toutes les sources majeures sont intégrées et fonctionnelles. ## Phase 3 : Robustesse — v0.3.0 - [ ] `dedup.v` amélioré — Rate limiting global par topic - [ ] Signature webhooks — Vérification HMAC-SHA256 optionnelle (Gitea) - [ ] Retry logic — Retry avec backoff exponentiel vers Ntfy (3 tentatives) - [ ] Graceful shutdown — SIGTERM → drain des événements en cours - [ ] Health endpoint — `GET /health` → 200 + uptime + stats basiques - [ ] Stats endpoint — `GET /stats` → compteurs par source - [ ] Config reload — `SIGHUP` → reload config sans redémarrage - [ ] Tests unitaires — `config_test.v`, `gitea_test.v`, `dedup_test.v` **Sortie** : Le daemon est prêt pour la production homelab. ## Phase 4 : Qualité de vie — v0.4.0 - [ ] Template engine avancé — Support des variables dans les messages ``` "🐳 {container_name} → {status} (exit: {exit_code}) on {host}" ``` - [ ] Silence rules — `POST /api/silence?duration=30m` mute temporaire - [ ] Grouping — Regrouper N notifications similaires en une seule - [ ] Webhook secret validation — HMAC pour tous les webhooks - [ ] Docker Compose example — `docker-compose.yml` prêt à l'emploi - [ ] systemd unit file — `ntfy-bridge.service` - [ ] CI/CD via Gitea Actions — build + test automatique **Sortie** : Expérience utilisateur complète et agréable. ## Phase 5 : Futures idées — v0.5.0+ - [ ] Web UI minimale — Page de statut des sources + historique récent - [ ] Filtres avancés — Expressions conditionnelles par source ```yaml filters: - match: { container_name: "test-*" } action: drop ``` - [ ] Notifications structurées — Support des actions Ntfy (boutons click) - [ ] Intégration Prometheus — Métriques exposées au format OpenMetrics - [ ] Webhook sortant — Forwarder les événements vers un autre webhook (Slack, Discord) - [ ] Support multi-utilisateurs — ACLs par webhook_path - [ ] Fichier d'état — Persistance de l'état up/down des health checks - [ ] Plugin system — Sources customisables via dll/.so (futur lointain) ## Suivi des versions | Version | Date cible | Contenu | |---------|-----------|---------| | v0.1.0 | — | Moteur core + webhook générique | | v0.2.0 | — | Sources Gitea, Uptime Kuma, Docker, HTTP poll | | v0.3.0 | — | Robustesse, tests, health check, rate limiting | | v0.4.0 | — | Templates, silence rules, grouping, CI/CD | | v0.5.0+ | — | Web UI, Prometheus, plugins |