← Retour04Projet
Live · 4 agents IA 24/7

Orchestrateur Qwen

Build · Continu depuis 2026-04OllamaQwen3:8bHetzner CCX2348 Edge Functionspg_cronSupabase
Problème

Faire tourner MyCleanHub en solo sans cramer 80% de mes journées sur l'admin, le support, le social et le reporting. Budget OpenAI = zéro.

Solution

VPS Hetzner CCX23 (8 vCPU / 32 Go) + Qwen3:8b en local + 48 Edge Functions + 20 pg_cron + 4 agents IA stratégiques + dashboard live auto-update 15 min.

Résultat

20 pg_cron + 9 crons VPS actifs 24/7, 1 376 prospects scrapés, 94 cold mails envoyés, 38 bookings/sem, ~6h/sem économisées, 0€ coût marginal IA.

root@vps — zsh
$
qwen3:8b · 8 vCPU · 32 GB · 20 pg_cron + 9 VPS crons + 4 agents IA

Le contexte

Faire tourner MyCleanHub en solo sans cramer 80% de mes journées sur de l'admin, du support, du social, du reporting. La réponse : un VPS qui tourne un LLM en local, qui orchestre tout ce qui peut être automatisé, et qui a des agents IA qui analysent en continu ce qui se passe pour me dire quoi faire.

L'infra

  • VPS Hetzner CCX23 — 8 vCPU dédiés, 32 GB RAM (1.7 GB utilisés actuellement, 28 GB libres), IP fixe, 600 Mbps
  • Ollama + Qwen3:8b comme moteur LLM principal (5,2 GB Q4_K_M, suffisant pour les tâches structurées en mode /no_think + format=json)
  • Supabase : 48 Edge Functions actives + 20 pg_cron jobs côté base + 60+ tables PostgreSQL
  • Crons Linux VPS pour les scrapers et agents IA (9 crons actifs)
  • Redis pour les queues et rate-limiting
  • Tesseract / Whisper / Playwright / FFmpeg dispos à la demande
  • n8n pour les workflows visuels d'automation
  • Umami pour les analytics web

Le cerveau : 4 agents IA qui tournent 24/7

Stack ajoutée pour que le système m'envoie des recommandations stratégiques sans que je demande :

| Agent | Fréquence | Mission | |---|---|---| | strategist | toutes les 2h | 3 insights par run (acquisition / monétisation / opérations) | | competitor_watcher | toutes les 6h | diff prix concurrents (Wecasa, Helpling, Yoojo, Ouihelp) | | site_analyzer | toutes les 12h | audit copy/UX/CTA des pages clés (/fondateur, /inscription-pro) | | recommender | toutes les 4h | méta-agent qui synthétise les autres → 1 action prio du jour |

Chaque agent fait 1 à 3 calls à Qwen3:8b en mode /api/generate + format=json (skip thinking sur CPU → ~25-90 s par call). Les insights sont stockés dans mch_agent_insights (Postgres) avec priority 1-3, evidence JSONB, action exécutable. Dedup auto si insight similaire récent.

Dashboard interne — pilotage live

J'ai construit un tableau de bord interne (accès Basic Auth, perso) qui auto-update toutes les 15 min avec 7 onglets de pilotage, 8 sections data :

  • 🤖 Insights IA — derniers insights des 4 agents, boutons ✓ dismiss
  • 🎛️ Centre de commande — 11 boutons pour trigger : scrape PJ par dept, Google Maps IDF, email finder, competitor scrape, cold-send-now, auto-validate, score-now, promote-raw, agent-run, rebuild dashboard
  • 🏥 Health Score — composite 0-100 sur 6 dimensions (tracking, multi-touch, freshness, conversion, reviews, crons)
  • 🔮 Forecast 7j — projection users/pros/bookings via régression sur 14j
  • ❤️ Cron health — dernière activité de chaque job + statut OK/stale
  • 💰 Revenue — CA total complété, ticket moyen, top pros
  • ⭐ Reviews — distribution + radar 4 axes (ponctualité / propreté / communication / valeur)
  • 🎯 Cohortes signups — taux d'activation par semaine ISO

Workflows automatisés

Cold outreach (Gmail SMTP)

Pipeline complète :

  1. Scrapers VPS (3x/sem) : Pages Jaunes par dept IDF, Google Maps Places (dim 5h), enrichissement Pappers, email finder fast mode (MX + contact@ → 89 % de taux récup)
  2. Validation auto (xx:40, pg_cron) : règles email pro + ville IDF + source whitelist → débloque les prospects en to_validate
  3. Scoring heuristique (xx:50, pg_cron) : note 0-10 par prospect (ville premium IDF +3, email pro +2, phone +2, etc.)
  4. send-cold-email (toutes les 10 min) : tire le prospect score le plus élevé, multi-touch J+7 / J+14, 3 subject variants par touch, UTM auto-tag, qwen-personalized opening, daily cap warm-up 15→30→50
  5. Tracking : pixel d'ouverture + redirect clic via Edge Functions Supabase

SMS Tracker

Page interne pour le tracking SMS des prospects, persistance cross-device via Supabase :

  • Table sms_tracker_events (append-only, RLS)
  • Edge function sms-tracker-event avec shared secret
  • Hook JS qui POST chaque clic de statut (todo/sent/yes/callback/signed/no/dead)
  • Vue sms_tracker_latest (DISTINCT ON dernier statut par prospect)

Briefing matinal (8h chaque jour)

Cron déclenche un script qui agrège les KPIs des dernières 24h → push à Qwen → mail récap + Telegram.

Posts FB groupes (7h15 + 19h45)

Cron send-fb-posts-telegram tire 3 angles sur 9 templates rotatifs, insère le compteur fondateurs live, m'envoie les posts prêts à copier dans Telegram.

Posts Instagram auto (cron 5h)

Pipeline pubgen → queue JSON → cron 5min → worker → Cloudinary → Graph API.

Relances inactifs (9h chaque jour)

Détecte pros sans dispo 7+ j, clients sans booking 14+ j, leads froids → drafte un mail personnalisé Qwen → envoie ou drafts.

Cancel rate monitor (8h UTC daily)

Surveille le taux d'annulation 7j glissants. Si > 20 % → insight auto inséré dans mch_agent_insights avec priorité 1.

Auto contact reply (toutes les 10 min)

Cron mch-qwen-contact-reply-draft drafte les réponses aux contact_messages non-traités via qwen-contact-reply.

Stats actuelles

  • 20 pg_cron jobs actifs sur Supabase + 9 crons VPS côté Hetzner
  • 1 376 prospects en base, 983 prêts à envoyer, dont 114 score 9/10
  • 94 cold mails envoyés, multi-touch J+7/J+14 actif
  • 304 messages outbound total cross-canaux (cold mail · DM in-app · relances · Insta DM)
  • 78 bookings dont 33 completed, CA 2 196 €, ticket moyen 66 €, note moyenne 4,77 / 5
  • 22 pros actifs, 63 users, +38 bookings sur 7 jours (croissance forte)
  • ~6h/semaine économisées sur l'admin et le social

Ce que j'aime de cette stack

Tout est rejouable et auditable. Les Edge Functions logguent dans Supabase. Les crons Linux dans /var/log/. Les agents IA insèrent leur raisonnement (evidence JSONB) dans la DB. Si une auto m'envoie un mail bizarre, je peux retracer la décision Qwen via le prompt + la réponse.

Et surtout : le VPS est le mien. Pas de quota OpenAI, pas de coupure surprise quand un provider change ses prix. Coût marginal d'une décision IA = ~0 €.

Le bon enseignement

Qwen3:8b en CPU sur /api/chat rentre en mode "thinking" qui mange tous les num_predict tokens et renvoie du vide. Bascule sur /api/generate + format=json + /no_think keyword → JSON propre en 25-90 s. Indispensable à savoir pour faire tenir un agent IA sur CPU.