Vigie
Supervision unifiée de mes projets web — analytique sans cookies, monitoring de disponibilité, suivi des tâches planifiées et page de statut publique.
- année
- 2026
- rôle
- Conception et développement full-stack
- statut
- En production
- front
- Vue 3, TypeScript
- back
- AdonisJS, MCP
- données
- PostgreSQL, Redis

Contexte
Le problème
J'avais une dizaine de projets en ligne et aucune vision d'ensemble : est-ce que le cron de la nuit est passé ? Est-ce que l'API répond encore ? Combien de visiteurs cette semaine ? Chaque réponse demandait de se connecter à un serveur différent.
Brancher un service tiers par projet aurait multiplié les comptes, les coûts et les bandeaux de cookies. J'ai préféré construire l'outil unique qui me manquait.
Ce que fait Vigie
- Analytique de visite sans cookie ni identifiant persistant — aucun bandeau de consentement nécessaire
- Surveillance de disponibilité : sondes HTTP régulières avec historique et calcul d'uptime
- Supervision des tâches planifiées : un cron qui ne s'est pas signalé dans sa fenêtre déclenche une alerte
- Suivi des erreurs applicatives remontées par les projets branchés
- Page de statut publique, alimentée par les mêmes données que le tableau de bord interne
Chaque projet supervisé possède sa clé API, et ne voit jamais les données des autres.
Architecture
| Couche | Choix |
|---|---|
| API | AdonisJS v6, TypeScript, Lucid |
| Base | PostgreSQL 17 |
| Interface | Vue 3, Vite, Pinia, TypeScript |
| Déploiement | Docker Compose sur VPS, Caddy en frontal, GitHub Actions sur main |
Tout tourne en conteneurs — postgres, redis, api, worker, web — sans aucun
Node requis sur la machine hôte. Le worker traite les sondes et les agrégations hors
du cycle de requête, ce qui garde l'API réactive quel que soit le nombre de projets
supervisés.
Le greffon côté client
Collecter suppose de poser du code dans la page des autres : un bug ici ne dégrade pas Vigie, il dégrade le site supervisé. Le script tient donc sous deux kilo-octets, sans cookie ni empreinte de navigateur — et le budget est vérifié à la compilation, la construction échoue plutôt que de livrer plus lourd.
Il enveloppe pushState et replaceState pour détecter les navigations d'une
application monopage, puis restaure les méthodes d'origine : rien n'est altéré
durablement pour l'application hôte. Un greffon @vigie/js se branche directement
sur le routeur Vue 3, plutôt que de deviner depuis l'historique.
Un serveur MCP, pour ne pas quitter l'éditeur
Qu'est-ce qui est cassé ? Cette erreur est-elle nouvelle ? Le cron de la nuit est-il passé ? Vigie expose six outils de lecture en MCP, pour répondre à ces questions sans ouvrir le tableau de bord.
Deux partis pris : aucune écriture — un assistant qui lit se trompe de
diagnostic, un assistant qui écrit se trompe de production ; et les codes internes
traduits avant de sortir, cause: "agent muet" plutôt que reason: 5, parce qu'un
modèle face à un code inconnu ne s'arrête pas, il devine.
Ce que j'en retire
Le point dur n'était pas la collecte mais la rétention : conserver des années de points de mesure sans faire exploser la base. La réponse a été l'agrégation progressive — les données fines vieillissent en moyennes horaires, puis journalières.
Architecture
01 · API
AdonisJS v6, TypeScript, Lucid — logique métier et endpoints.
02 · Données
PostgreSQL 17, agrégation progressive (fine → horaire → journalière) pour la rétention.
03 · Interface
Vue 3, Vite, Pinia — tableau de bord et page de statut publique.
04 · Exposition
Docker Compose sur VPS (Caddy, GitHub Actions), et serveur MCP en lecture seule pour interroger la supervision depuis l'éditeur.
Interface



Projet suivant
Pyro Radar