Aller au contenu

Outil interne

SignalOS — un cockpit de veille piloté par des règles

Cockpit personnel qui ingère des sources ouvertes, filtre et note les signaux par règles, puis n'appelle l'IA que sur les meilleurs candidats, sous plafond de budget.

Nature
Outil interne
Stack
Next.jsNestJSPrismaPostgreSQLBullMQRedisTypeScriptTurborepo

Les outils de veille qui envoient chaque article à un modèle de langage coûtent cher et produisent surtout du bruit. SignalOS inverse l'ordre : des règles déterministes trient d'abord, l'IA n'intervient qu'ensuite, sur un petit nombre de candidats, avec un plafond de dépense.

Ce que fait l'outil

  • Ingestion de sources (Hacker News, flux RSS, offres freelance à distance, cours crypto via CoinGecko, saisie manuelle) : 23 sources configurables, activables une à une.
  • Pipeline en étapes : récupération, normalisation, validation, empreinte, dédoublonnage, pré-score par règles, puis analyse IA des meilleurs candidats.
  • Radar tech, recherche de missions avec score d'adéquation, suivi de marché, coach nutrition et entraînement.
  • Brief quotidien limité à sept éléments, avec historique navigable.
  • Centre d'actions : une action passe de proposée à acceptée puis terminée.
  • Garde-fou de budget IA (plafond journalier et mensuel) et espace d'administration : files d'attente, utilisateurs, exécutions de sources, configuration.

Stack et architecture

Monorepo pnpm et Turborepo : un front Next.js (App Router), une API NestJS, un worker BullMQ sur Redis, et des paquets partagés (schéma Prisma sur PostgreSQL, types et schémas Zod, moteur de scoring, registre de sources, abstraction de fournisseur IA). Le fournisseur IA se choisit par configuration : mock par défaut, puis OpenAI, Anthropic, Gemini ou Ollama. La lecture des variables d'environnement passe par un seul paquet de configuration validé. Le dépôt contient aussi les fichiers de déploiement (Docker Compose, nginx, scripts de sauvegarde).

Ce qui a été difficile

Le pipeline échouait en silence : une source pouvait tomber sans qu'aucun brief ne le signale. Les correctifs de l'historique le montrent : activation explicite de l'ingestion de toutes les sources, erreurs remontées au lieu d'être avalées, brief à zéro signal expliqué à l'écran au lieu d'une carte vide. Le second chantier a été le budget IA : le plafond global ne comptait pas correctement les appels du worker, et les tâches périodiques reposaient sur des setInterval, remplacés par des jobs répétables BullMQ, qui survivent à un redémarrage.

État du projet

Usage personnel, environ 23 000 lignes de TypeScript, 16 commits entre mai et juin 2026. Les tests unitaires et de bout en bout existent, une intégration continue est en place.