← Projets Projet · Function-calling

AlpiMonitor

Dashboard hydrologique temps quasi réel du bassin de la Borgne (données ouvertes fédérales via LINDAS/SPARQL), augmenté d'une couche IA : narration ancrée, détection d'anomalies sans LLM et chat en function-calling. arc42, 12 ADR, diagrammes C4.

RôleConception & développement
Année2026
StatutEn ligne
Le problème

Des données hydrologiques ouvertes, mais illisibles

Les mesures hydrologiques du bassin de la Borgne (Val d'Hérens) existent en données ouvertes fédérales, mais restent illisibles pour qui ne manie pas SPARQL et les référentiels LINDAS. Consulter un niveau, repérer une anomalie ou comprendre une tendance suppose une chaîne technique complète — ingestion, stockage, visualisation. Le projet est né comme démonstration technique de bout en bout : construire cette chaîne, proprement, et la tenir en production.

L'approche

Un monostack TypeScript, et l'IA seulement là où elle est fiable

Monorepo pnpm 100 % TypeScript (ADR-001) : front Vue 3 + Tailwind avec cartographie Leaflet et graphiques D3 vanilla, API monolithe Fastify + Prisma sur PostgreSQL. L'ingestion interroge l'endpoint SPARQL LINDAS de la Confédération (graphe hydrologique OFEV) sur un cron interne.

La couche IA (ADR-012) applique un principe de fiabilité : chaque brique utilise le bon outil, pas le LLM par défaut. La détection d'anomalies est purement statistique (z-score désaisonnalisé par heure de la journée, sans LLM, entièrement testable) ; la narration LLM ne parle que sur des features pré-calculées (grounding strict) ; le chat passe par du function-calling sur 4 outils whitelistés derrière un port hexagonal, avec Mistral isolé derrière une interface swappable et une observabilité maison (coûts et appels persistés). Le tout documenté en docs-as-code : arc42 complet sur MkDocs, 12 ADR, diagrammes C4 générés depuis un modèle Structurizr, CI GitHub Actions, et des post-mortems d'incidents de déploiement réels.

Le résultat

En production continue depuis avril 2026

Application, API, Storybook et documentation en ligne (alpimonitor.fr et sous-domaines), déployés en continu via Coolify sur VPS Hetzner — production stable depuis le 20 avril 2026, 130 commits et 8 versions taguées de v1.0.0 à v1.6.0. Un projet qui démontre autant la discipline (arc42, 12 ADR, C4, post-mortems) que la retenue technique : l'IA n'y fait que ce qu'elle sait faire de façon fiable.

Décisions d'architecture

Les choix qui tiennent la maison

Chaque décision structurante est consignée dans un ADR. Quelques-unes qui comptent :

ADR-001

Stack TypeScript unique (monostack)

ADR-002

Méthodologie ABEM pour les classes CSS

ADR-003

Monolithe Fastify plutôt que microservices

ADR-004

Prisma comme ORM

ADR-005

Leaflet pour la cartographie

ADR-006

D3 en vanilla plutôt que via un wrapper Vue

ADR-007

Source de données hydrologiques : LINDAS SPARQL

ADR-008

Transparence du sourcing des stations CREALP

ADR-009

Périmètre Storybook et exclusions présentationnelles

ADR-010

Architecture frontend post-refactor : façades feature-grouped

ADR-011

Infrastructure de documentation : site arc42 MkDocs

ADR-012

Introduction d'une couche IA (narration, observabilité, anomalie, chat)

La stack

Souveraine de bout en bout

TypeScriptVueTailwind CSSLeafletD3FastifyPrismaPostgreSQLMistralDockerCoolify