Aller au contenu
← projets / Vigie

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.

Fiche
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
Vigie — vue carte plein écran
Vigie — vue d'ensemble

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

CoucheChoix
APIAdonisJS v6, TypeScript, Lucid
BasePostgreSQL 17
InterfaceVue 3, Vite, Pinia, TypeScript
DéploiementDocker 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

Erreurs applicatives — regroupées par empreinte, avec dernières occurrences et trace.
Tâches planifiées — état, historique d'exécution et incident en cas d'échec.
Disponibilité — surveillance d'URL avec temps de réponse et historique 30 jours.

Projet suivant

Pyro Radar

Continuer