Files
html/architecture-map.html

565 lines
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>WEVAL — Architecture Complète & Plan Scalabilité</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&family=Outfit:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
:root{
--bg:#09090b;--s1:#111113;--s2:#1a1a1f;--s3:#242429;
--acc:#00e5ff;--acc2:#7c3aed;--g:#22c55e;--r:#ef4444;--o:#eab308;--p:#a78bfa;
--coral:#f97066;--teal:#2dd4bf;--blue:#3b82f6;--pink:#f472b6;
--t:#f4f4f5;--dim:#a1a1aa;--dim2:#71717a;
--border:rgba(255,255,255,.06);
--hf:'JetBrains Mono',monospace;--bf:'Outfit',system-ui,sans-serif;
--radius:10px}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:var(--bf);background:var(--bg);color:var(--t);overflow-x:hidden;line-height:1.5}
::selection{background:rgba(0,229,255,.2)}
::-webkit-scrollbar{width:5px}::-webkit-scrollbar-thumb{background:var(--dim2);border-radius:3px}
.wrap{max-width:1400px;margin:0 auto;padding:20px 24px}
/* HEADER */
.hdr{display:flex;align-items:center;justify-content:space-between;padding:16px 0;border-bottom:1px solid var(--border);margin-bottom:24px}
.hdr h1{font-size:1.4rem;font-weight:700;letter-spacing:-.02em}
.hdr h1 span{color:var(--acc);font-family:var(--hf)}
.hdr .meta{font-size:.7rem;color:var(--dim);font-family:var(--hf)}
.hdr a{color:var(--acc);text-decoration:none;font-size:.75rem;font-family:var(--hf);border:1px solid rgba(0,229,255,.3);padding:4px 12px;border-radius:6px;transition:.2s}
.hdr a:hover{background:rgba(0,229,255,.1)}
/* KPI BAR */
.kpi-bar{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:28px}
.kpi{background:var(--s1);border:1px solid var(--border);border-radius:var(--radius);padding:12px;text-align:center}
.kpi .v{font-size:1.3rem;font-weight:700;font-family:var(--hf);color:var(--acc)}
.kpi .l{font-size:.6rem;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin-top:2px}
/* SECTIONS */
.sec{margin-bottom:28px}
.sec-title{font-size:.85rem;font-weight:600;color:var(--t);padding:8px 0;border-bottom:1px solid var(--border);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.sec-title .tag{font-size:.55rem;font-family:var(--hf);background:rgba(0,229,255,.12);color:var(--acc);padding:2px 8px;border-radius:4px}
/* GRID */
.g{display:grid;gap:8px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
.g5{grid-template-columns:repeat(5,1fr)}
.g6{grid-template-columns:repeat(6,1fr)}
@media(max-width:900px){.g3,.g4,.g5,.g6{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.g2,.g3,.g4,.g5,.g6{grid-template-columns:1fr}}
/* CARDS */
.cd{background:var(--s1);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;transition:.2s;position:relative;overflow:hidden}
.cd:hover{border-color:rgba(255,255,255,.12);transform:translateY(-1px)}
.cd .name{font-size:.75rem;font-weight:600;margin-bottom:2px}
.cd .desc{font-size:.6rem;color:var(--dim);line-height:1.4}
.cd .badge{position:absolute;top:8px;right:8px;font-size:.5rem;font-family:var(--hf);padding:2px 6px;border-radius:3px;font-weight:600}
.cd .dot{width:6px;height:6px;border-radius:50%;display:inline-block;margin-right:4px}
/* Colors */
.cd.purple{border-left:3px solid var(--p)}.cd.purple .name{color:var(--p)}
.cd.coral{border-left:3px solid var(--coral)}.cd.coral .name{color:var(--coral)}
.cd.teal{border-left:3px solid var(--teal)}.cd.teal .name{color:var(--teal)}
.cd.blue{border-left:3px solid var(--blue)}.cd.blue .name{color:var(--blue)}
.cd.green{border-left:3px solid var(--g)}.cd.green .name{color:var(--g)}
.cd.amber{border-left:3px solid var(--o)}.cd.amber .name{color:var(--o)}
.cd.pink{border-left:3px solid var(--pink)}.cd.pink .name{color:var(--pink)}
.cd.red{border-left:3px solid var(--r)}.cd.red .name{color:var(--r)}
.cd.gray{border-left:3px solid var(--dim2)}
.up{background:rgba(34,197,94,.15);color:var(--g)}
.down{background:rgba(239,68,68,.15);color:var(--r)}
.warn{background:rgba(234,179,8,.15);color:var(--o)}
/* PIPELINE */
.pipeline{display:flex;align-items:center;gap:0;overflow-x:auto;padding:4px 0}
.pipeline .step{background:var(--s2);border:1px solid var(--border);padding:8px 14px;font-size:.65rem;font-weight:500;white-space:nowrap;position:relative}
.pipeline .step:first-child{border-radius:var(--radius) 0 0 var(--radius)}
.pipeline .step:last-child{border-radius:0 var(--radius) var(--radius) 0}
.pipeline .arrow{color:var(--dim2);font-size:.7rem;margin:0 -1px;z-index:1}
/* PLAN */
.plan-item{display:flex;gap:10px;padding:8px 12px;background:var(--s1);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:6px;align-items:flex-start}
.plan-item .num{font-family:var(--hf);font-size:.7rem;font-weight:700;color:var(--acc);min-width:20px}
.plan-item .txt{font-size:.68rem;color:var(--dim);line-height:1.5}
.plan-item .txt strong{color:var(--t);font-weight:600}
.plan-item .pri{font-size:.5rem;font-family:var(--hf);padding:2px 6px;border-radius:3px;margin-left:auto;white-space:nowrap}
.pri.p0{background:rgba(239,68,68,.15);color:var(--r)}
.pri.p1{background:rgba(234,179,8,.15);color:var(--o)}
.pri.p2{background:rgba(59,130,246,.15);color:var(--blue)}
/* ANIM */
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.sec{animation:fadeIn .4s ease both}
.sec:nth-child(2){animation-delay:.05s}
.sec:nth-child(3){animation-delay:.1s}
.sec:nth-child(4){animation-delay:.15s}
.sec:nth-child(5){animation-delay:.2s}
</style>
<script src="/widgets/audit-banner.js" defer></script>
</head>
<body>
<div class="wrap">
<div class="hdr">
<h1><span>WEVAL</span> Architecture Map</h1>
<div style="text-align:right">
<div class="meta">14 avril 2026 · Session Opus</div>
<a href="/architecture.html">Control Center</a>
</div>
</div>
<!-- KPIs -->
<div class="kpi-bar">
<div class="kpi"><div class="v">346</div><div class="l">Tools</div></div>
<div class="kpi"><div class="v" style="color:var(--g)">13</div><div class="l">Providers IA</div></div>
<div class="kpi"><div class="v" style="color:var(--coral)">141K</div><div class="l">HCPs Ethica</div></div>
<div class="kpi"><div class="v" style="color:var(--o)">150+</div><div class="l">Écrans Arsenal</div></div>
<div class="kpi"><div class="v" style="color:var(--p)">0€</div><div class="l">Coût IA</div></div>
<div class="kpi"><div class="v" style="color:var(--teal)">3.5M</div><div class="l">Pipeline MAD</div></div>
<div class="kpi"><div class="v" style="color:var(--pink)">870</div><div class="l">Agents</div></div>
<div class="kpi"><div class="v" style="color:var(--g)">150/152</div><div class="l">NonReg</div></div>
</div>
<!-- ═══ SECTION 1: APPS FRONTEND ═══ -->
<div class="sec">
<div class="sec-title">Applications frontend <span class="tag">22 apps</span></div>
<div class="g4">
<div class="cd purple"><div class="name">wevia.html</div><div class="desc">Chatbot IA public · Cloudflare-AI · SSE streaming</div><div class="badge up">LIVE</div></div>
<div class="cd purple"><div class="name">wevia-master.html</div><div class="desc">Master AI · 346 tools · FastPath · Resolver v8</div><div class="badge up">LIVE</div></div>
<div class="cd purple"><div class="name">wevia-cortex.html</div><div class="desc">Cortex v2.1 · Multi-agent · 669 agents</div><div class="badge up">LIVE</div></div>
<div class="cd purple"><div class="name">wevia-arena.html</div><div class="desc">Arena multi-LLM · A/B test providers</div><div class="badge up">LIVE</div></div>
<div class="cd coral"><div class="name">growth-engine-v2.html</div><div class="desc">GE v3 · 8 verticaux · Pipeline 3.5M MAD</div><div class="badge up">LIVE</div></div>
<div class="cd coral"><div class="name">blade-ai.html</div><div class="desc">Blade IA GODMODE 10/10 · 421L 30KB</div><div class="badge up">LIVE</div></div>
<div class="cd coral"><div class="name">office-workflow.php</div><div class="desc">CRM + process automation · 65KB</div><div class="badge up">LIVE</div></div>
<div class="cd coral"><div class="name">architecture.html</div><div class="desc">Control Center · scan LIVE infra</div><div class="badge up">LIVE</div></div>
<div class="cd green"><div class="name">Ethica Dashboard</div><div class="desc">6 modules · HCP manager · consent · SMS · drill</div><div class="badge up">LIVE</div></div>
<div class="cd green"><div class="name">l99-saas.html</div><div class="desc">L99 SaaS · 1113 files indexed</div><div class="badge up">LIVE</div></div>
<div class="cd green"><div class="name">agents-archi.html</div><div class="desc">3D agents visualization · 94KB</div><div class="badge warn">301</div></div>
<div class="cd green"><div class="name">director-center.html</div><div class="desc">Director + Monitoring Kuma</div><div class="badge up">LIVE</div></div>
<div class="cd teal"><div class="name">WEDROID</div><div class="desc">Factory IA · callCloud cascade</div><div class="badge up">LIVE</div></div>
<div class="cd teal"><div class="name">OpenClaw</div><div class="desc">Code agent · terminal web</div><div class="badge up">LIVE</div></div>
<div class="cd teal"><div class="name">WEVCODE</div><div class="desc">IDE souverain · Monaco editor</div><div class="badge up">LIVE</div></div>
<div class="cd teal"><div class="name">Nuclei</div><div class="desc">Security scanner · vuln detection</div><div class="badge warn">IDLE</div></div>
<div class="cd blue"><div class="name">WEVADS IA (ADX)</div><div class="desc">Email pipeline · 6.6M contacts · Brain Engine</div><div class="badge up">LIVE</div></div>
<div class="cd blue"><div class="name">WEVIA Life</div><div class="desc">Session sync · chat history · wevialife-sync.php</div><div class="badge up">CRON</div></div>
<div class="cd blue"><div class="name">consent.wevup.app</div><div class="desc">RGPD landing · optin/optout tokens</div><div class="badge up">LIVE</div></div>
<div class="cd blue"><div class="name">Paperclip</div><div class="desc">870 agents · 6 projets actifs · 2484 skills</div><div class="badge up">LIVE</div></div>
<div class="cd pink"><div class="name">MiroFish :5001</div><div class="desc">Flask AI agent · CEO layer</div><div class="badge up">LIVE</div></div>
<div class="cd pink"><div class="name">enterprise-model.html</div><div class="desc">669 agents · 22 depts · 3D rooms</div><div class="badge up">LIVE</div></div>
</div>
</div>
<!-- ═══ SECTION 2: CASCADE IA SOUVERAINE ═══ -->
<div class="sec">
<div class="sec-title">Cascade IA souveraine <span class="tag">13 providers · 0€</span></div>
<div style="background:var(--s1);border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin-bottom:10px">
<div style="font-size:.7rem;font-family:var(--hf);color:var(--acc);margin-bottom:8px">sovereign-api.py :4000 — auto-cascade · primary: Cerebras-fast</div>
<div style="font-size:.6rem;color:var(--dim);margin-bottom:4px">Tier 1 — Ultra-rapide (&lt;0.5s)</div>
<div class="g4" style="margin-bottom:8px">
<div class="cd coral"><div class="name">Cerebras-fast</div><div class="desc">llama-3.3-70b · 0.25s · PRIMARY</div><div class="badge up">UP</div></div>
<div class="cd coral"><div class="name">Cerebras-think</div><div class="desc">Qwen3-235B · Chain-of-Thought</div><div class="badge up">UP</div></div>
<div class="cd coral"><div class="name">Groq</div><div class="desc">llama-3.1-8b-instant · 0.23s</div><div class="badge up">UP</div></div>
<div class="cd coral"><div class="name">Cloudflare AI</div><div class="desc">Workers AI · 10K req/j free GPU</div><div class="badge up">UP</div></div>
</div>
<div style="font-size:.6rem;color:var(--dim);margin-bottom:4px">Tier 2 — Rapide (&lt;2s)</div>
<div class="g5" style="margin-bottom:8px">
<div class="cd amber"><div class="name">Gemini</div><div class="desc">2.0-flash free</div><div class="badge up">UP</div></div>
<div class="cd amber"><div class="name">SambaNova</div><div class="desc">DeepSeek-V3.2</div><div class="badge up">UP</div></div>
<div class="cd amber"><div class="name">NVIDIA NIM</div><div class="desc">Llama 3.1 free</div><div class="badge up">UP</div></div>
<div class="cd amber"><div class="name">Mistral</div><div class="desc">open-nemo free</div><div class="badge up">UP</div></div>
<div class="cd amber"><div class="name">GitHub Models</div><div class="desc">API free tier</div><div class="badge up">UP</div></div>
</div>
<div style="font-size:.6rem;color:var(--dim);margin-bottom:4px">Tier 3 — Fallback</div>
<div class="g4">
<div class="cd gray"><div class="name">HF Space</div><div class="desc">weval-brain-v4 fine-tuné</div><div class="badge up">UP</div></div>
<div class="cd gray"><div class="name">HF Router</div><div class="desc">Qwen2.5-72B serverless</div><div class="badge up">UP</div></div>
<div class="cd gray"><div class="name">OpenRouter</div><div class="desc">Free tier multi-model</div><div class="badge up">UP</div></div>
<div class="cd red"><div class="name">Ollama (LOCAL)</div><div class="desc">DISABLED · RAM killer · 6 modèles</div><div class="badge down">OFF</div></div>
</div>
</div>
</div>
<!-- ═══ SECTION 3: GPU FREE COMPUTE ═══ -->
<div class="sec">
<div class="sec-title">GPU free compute <span class="tag">fine-tune + inference</span></div>
<div class="g3">
<div class="cd blue"><div class="name">Kaggle T4/P100</div><div class="desc">30h/sem GPU gratuit · fine-tune LoRA · notebooks configurés</div><div class="badge up">READY</div></div>
<div class="cd blue"><div class="name">HF Space vLLM</div><div class="desc">yace222/weval-vllm · cpu-basic (GPU=PRO) · commit 5b4b422</div><div class="badge warn">CPU</div></div>
<div class="cd blue"><div class="name">Google Colab</div><div class="desc">T4 free 12h/session · notebooks prêts</div><div class="badge up">READY</div></div>
<div class="cd teal"><div class="name">CF Workers AI</div><div class="desc">10K req/jour · GPU edge Cloudflare · Llama 3.1</div><div class="badge up">LIVE</div></div>
<div class="cd teal"><div class="name">HF fine-tune</div><div class="desc">yace222/weval-brain-v4 · LoRA adapter · Qwen2.5</div><div class="badge up">TRAINED</div></div>
<div class="cd teal"><div class="name">Render / Railway</div><div class="desc">Free tier configuré · backup deploy</div><div class="badge warn">STANDBY</div></div>
</div>
</div>
<!-- ═══ SECTION 4: ETHICA B2B ═══ -->
<div class="sec">
<div class="sec-title">Ethica B2B Pharma <span class="tag">141K HCPs</span></div>
<div class="kpi-bar" style="grid-template-columns:repeat(6,1fr);margin-bottom:12px">
<div class="kpi"><div class="v" style="color:var(--g)">131,214</div><div class="l">HCPs total</div></div>
<div class="kpi"><div class="v" style="color:var(--teal)">109,692</div><div class="l">Emails</div></div>
<div class="kpi"><div class="v" style="color:var(--blue)">121,940</div><div class="l">Téléphones</div></div>
<div class="kpi"><div class="v" style="color:var(--o)">34</div><div class="l">Spécialités</div></div>
<div class="kpi"><div class="v" style="color:var(--p)">DZ 88K</div><div class="l">Algérie</div></div>
<div class="kpi"><div class="v" style="color:var(--coral)">MA+TN 36K</div><div class="l">Maroc + Tunisie</div></div>
</div>
<div class="pipeline" style="margin-bottom:10px">
<div class="step" style="border-left:3px solid var(--g)">Scrapers (CNAM+DabaDoc+Rich)</div><div class="arrow"></div>
<div class="step" style="border-left:3px solid var(--teal)">Validator DNS/MX</div><div class="arrow"></div>
<div class="step" style="border-left:3px solid var(--blue)">MA Boost 4x/j</div><div class="arrow"></div>
<div class="step" style="border-left:3px solid var(--o)">Consent wevup.app</div><div class="arrow"></div>
<div class="step" style="border-left:3px solid var(--coral)">Campagnes O365+PMTA</div><div class="arrow"></div>
<div class="step" style="border-left:3px solid var(--p)">Tracking open.php</div>
</div>
<div class="g3">
<div class="cd green"><div class="name">10 senders O365</div><div class="desc">3 tenants Graph API · 97% inbox</div></div>
<div class="cd green"><div class="name">10 SMS providers</div><div class="desc">130K SMS/jour capacité</div></div>
<div class="cd green"><div class="name">WhatsApp Meta WA</div><div class="desc">Business API configuré</div></div>
</div>
</div>
<!-- ═══ SECTION 5: INFRA SERVEURS ═══ -->
<div class="sec">
<div class="sec-title">Infrastructure serveurs <span class="tag">2 serveurs + 4 ECS</span></div>
<div class="g2" style="margin-bottom:8px">
<div class="cd blue" style="padding:14px">
<div class="name" style="font-size:.85rem">S204 — 204.168.152.13</div>
<div class="desc" style="margin-bottom:6px">10.1.0.2 · MTA + WEVIA + Ethica · RAM 32GB · Disk 67%</div>
<div class="g3" style="gap:4px">
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> nginx :443</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> Apache :8443</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> PHP 8.4 FPM</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> Docker (10)</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> Sovereign :4000</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--r)"></span> Ollama OFF</div>
</div>
</div>
<div class="cd teal" style="padding:14px">
<div class="name" style="font-size:.85rem">S95 — 95.216.167.89</div>
<div class="desc" style="margin-bottom:6px">10.1.0.3 · Hetzner · WEVADS prod · Arsenal · Sentinel</div>
<div class="g3" style="gap:4px">
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> PG :5432 (6.6M)</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> Sentinel :5890</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> Arsenal :5890</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> PMTA :25</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> KumoMTA :587</div>
<div style="background:var(--s2);padding:4px 8px;border-radius:4px;font-size:.58rem;color:var(--dim)"><span style="color:var(--g)"></span> ADX :5821</div>
</div>
</div>
</div>
<div class="cd amber" style="padding:10px">
<div class="name" style="font-size:.8rem">4 ECS Huawei — PMTA 4.5r8</div>
<div class="g4" style="margin-top:6px;gap:4px">
<div style="background:var(--s2);padding:6px 8px;border-radius:4px;font-size:.6rem;text-align:center"><span style="color:var(--o);font-family:var(--hf)">SER_6</span><br><span style="color:var(--dim)">110.239.84.121</span></div>
<div style="background:var(--s2);padding:6px 8px;border-radius:4px;font-size:.6rem;text-align:center"><span style="color:var(--o);font-family:var(--hf)">SER_7</span><br><span style="color:var(--dim)">110.239.65.64</span></div>
<div style="background:var(--s2);padding:6px 8px;border-radius:4px;font-size:.6rem;text-align:center"><span style="color:var(--o);font-family:var(--hf)">SER_8</span><br><span style="color:var(--dim)">182.160.55.107</span></div>
<div style="background:var(--s2);padding:6px 8px;border-radius:4px;font-size:.6rem;text-align:center"><span style="color:var(--o);font-family:var(--hf)">SER_9</span><br><span style="color:var(--dim)">110.239.86.68</span></div>
</div>
</div>
</div>
<!-- ═══ SECTION 6: PIPELINE E2E ═══ -->
<div class="sec">
<div class="sec-title">Pipeline E2E email marketing <span class="tag">PULL model</span></div>
<div class="pipeline">
<div class="step" style="background:var(--s2);border-left:3px solid var(--g)">Brain Engine<br><span style="font-size:.5rem;color:var(--dim)">646 configs · 9 winners</span></div><div class="arrow"></div>
<div class="step" style="background:var(--s2);border-left:3px solid var(--blue)">Send O365/PMTA<br><span style="font-size:.5rem;color:var(--dim)">97% inbox</span></div><div class="arrow"></div>
<div class="step" style="background:var(--s2);border-left:3px solid var(--teal)">Open (open.php)<br><span style="font-size:.5rem;color:var(--dim)">S204 tracking</span></div><div class="arrow"></div>
<div class="step" style="background:var(--s2);border-left:3px solid var(--o)">Click<br><span style="font-size:.5rem;color:var(--dim)">552 links actifs</span></div><div class="arrow"></div>
<div class="step" style="background:var(--s2);border-left:3px solid var(--coral)">Conversion<br><span style="font-size:.5rem;color:var(--dim)">CAKE/Everflow</span></div><div class="arrow"></div>
<div class="step" style="background:var(--s2);border-left:3px solid var(--p)">PULL collector<br><span style="font-size:.5rem;color:var(--dim)">cron 30min</span></div>
</div>
</div>
<!-- ═══ SECTION 7: AGENTS + SERVICES ═══ -->
<div class="sec">
<div class="sec-title">Agents + services internes <span class="tag">Docker + systemd</span></div>
<div class="g4">
<div class="cd pink"><div class="name">Paperclip</div><div class="desc">870 agents · 2484 skills · 6 projets actifs</div><div class="badge up">LIVE</div></div>
<div class="cd pink"><div class="name">MiroFish :5001</div><div class="desc">Flask AI agent · CEO layer</div><div class="badge up">LIVE</div></div>
<div class="cd pink"><div class="name">Qdrant :6333</div><div class="desc">5 collections · 16K vecteurs</div><div class="badge up">LIVE</div></div>
<div class="cd pink"><div class="name">SearXNG</div><div class="desc">Moteur de recherche privé</div><div class="badge up">LIVE</div></div>
<div class="cd gray"><div class="name">Listmonk</div><div class="desc">Email marketing self-hosted</div><div class="badge up">LIVE</div></div>
<div class="cd gray"><div class="name">Uptime Kuma</div><div class="desc">Monitoring 24/7</div><div class="badge up">LIVE</div></div>
<div class="cd gray"><div class="name">Wiki (1194)</div><div class="desc">JSON knowledge base</div><div class="badge up">LIVE</div></div>
<div class="cd gray"><div class="name">Vault GOLD (424)</div><div class="desc">Backup auto + checksums</div><div class="badge up">LIVE</div></div>
</div>
</div>
<!-- ═══ SECTION 8: CLOUDFLARE + DNS ═══ -->
<div class="sec">
<div class="sec-title">Cloudflare + DNS <span class="tag">41 comptes · 16 zones</span></div>
<div class="g4">
<div class="cd amber"><div class="name">weval-consulting.com</div><div class="desc">Site principal + API + WEVIA</div></div>
<div class="cd amber"><div class="name">wevup.app</div><div class="desc">consent.wevup.app + DNS Hetzner</div></div>
<div class="cd amber"><div class="name">culturellemejean.charity</div><div class="desc">Tracking domain · open.php</div></div>
<div class="cd amber"><div class="name">41 comptes CF Brahim</div><div class="desc">Rotation + multi-zone</div></div>
</div>
</div>
<!-- ═══ SECTION 9: PARTENARIATS ═══ -->
<div class="sec">
<div class="sec-title">Partenariats actifs <span class="tag">4 deals</span></div>
<div class="g4">
<div class="cd purple"><div class="name">Vistex (SAP)</div><div class="desc">Maghreb retail/pharma · litige lead protection Section 6.c.i</div></div>
<div class="cd purple"><div class="name">Scaleway / Arrow</div><div class="desc">ArrowSphere onboarding · cloud MSP</div></div>
<div class="cd purple"><div class="name">Huawei Cloud</div><div class="desc">4 ECS PMTA · litige billing actif</div></div>
<div class="cd purple"><div class="name">Ethica (Kaouther)</div><div class="desc">HCP Maghreb 2027 · email prêt</div></div>
</div>
</div>
<!-- ═══ SECTION 10: PLAN D'ACTION OPTIMISATION + SCALABILITÉ ═══ -->
<div class="sec">
<div class="sec-title">Plan d'action — optimisation + scalabilité <span class="tag">15 actions</span></div>
<div class="plan-item"><div class="num">01</div><div class="txt"><strong>HF Space GPU upgrade</strong> — passer yace222/weval-vllm de cpu-basic à GPU free (T4) quand HF PRO dispo. Objectif : inference vLLM souveraine 0€</div><div class="pri p0">P0</div></div>
<div class="plan-item"><div class="num">02</div><div class="txt"><strong>Kaggle fine-tune pipeline</strong> — automatiser le fine-tune weval-brain-v5 sur Kaggle T4 avec les données wiki+KB (1194 entries). Objectif : modèle souverain amélioré</div><div class="pri p0">P0</div></div>
<div class="plan-item"><div class="num">03</div><div class="txt"><strong>Ethica gap 21K emails</strong> — enrichir les 21,522 HCPs sans email via scrapers CNAM v3 + SearXNG + DabaDoc deep. Objectif : 120K+ emails</div><div class="pri p0">P0</div></div>
<div class="plan-item"><div class="num">04</div><div class="txt"><strong>Campagne consent pilot</strong> — lancer pilot 500 DZ + 500 MA après validation Kaouther. Safety lock actif. Objectif : premiers consentements réels</div><div class="pri p0">P0</div></div>
<div class="plan-item"><div class="num">05</div><div class="txt"><strong>Ollama selective restart</strong> — réactiver Ollama avec 1 seul modèle léger (qwen3:4b, 5GB) sur schedule cron (ON 8h-20h, OFF nuit). Objectif : inference locale sans crash RAM</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">06</div><div class="txt"><strong>WEVIA Life auto-sync</strong> — wevialife-sync.php enrichi avec session context + conversation memory → Qdrant. Objectif : mémoire persistante cross-session</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">07</div><div class="txt"><strong>NonReg 152/152</strong> — investiguer les 2 tests skip. Probablement dépendance S151 décommissionné. Objectif : 100% pass</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">08</div><div class="txt"><strong>S95 disk cleanup</strong> — disk à 85%. Purger logs, Docker images, old backups. Objectif : &lt;70%</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">09</div><div class="txt"><strong>GitHub PAT renouvellement</strong> — le token expire bientôt. Renouveler manuellement via github.com/settings/tokens</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">10</div><div class="txt"><strong>Scaleway 5 POC</strong> — déployer les 5 POC cloud (ArrowSphere). Objectif : 240K MAD pipeline</div><div class="pri p1">P1</div></div>
<div class="plan-item"><div class="num">11</div><div class="txt"><strong>Multi-region PMTA</strong> — ajouter 2 ECS Europe (Hetzner) pour améliorer inbox EU. Objectif : 99% inbox Europe</div><div class="pri p2">P2</div></div>
<div class="plan-item"><div class="num">12</div><div class="txt"><strong>Whisper.cpp local</strong> — réactiver voice-to-text souverain sur S204 CPU. Objectif : transcription audio WEVIA</div><div class="pri p2">P2</div></div>
<div class="plan-item"><div class="num">13</div><div class="txt"><strong>DeerFlow réactivation</strong> — restart quand RAM stabilisée. Objectif : workflow automation</div><div class="pri p2">P2</div></div>
<div class="plan-item"><div class="num">14</div><div class="txt"><strong>S204 RAM upgrade</strong> — passer de 16GB à 32GB pour supporter Ollama + Docker + FPM sans crash. Objectif : stabilité définitive</div><div class="pri p2">P2</div></div>
<div class="plan-item"><div class="num">15</div><div class="txt"><strong>Sovereign API v4</strong> — ajouter Llama 4 Scout (Groq), DeepSeek-R1 (SambaNova), Qwen3-235B-think (Cerebras). Objectif : 15/15 providers</div><div class="pri p2">P2</div></div>
</div>
<!-- FOOTER -->
<div style="text-align:center;padding:20px 0;border-top:1px solid var(--border);margin-top:20px">
<div style="font-size:.65rem;color:var(--dim)">WEVAL Consulting · Casablanca · 14 avril 2026</div>
<div style="font-size:.6rem;color:var(--dim2);margin-top:4px">Session Opus directeur de projet · 346 tools · 13 providers · 141K HCPs · 0€ IA</div>
</div>
</div>
<!-- NL-AutoWire-badge-v1 -->
<a href="/nl-autowire-status.html" id="nlAutowireBadge" style="position:fixed;bottom:8px;right:8px;background:#1a3d2c;color:#56d364;padding:4px 10px;border-radius:12px;font-size:0.78em;font-family:-apple-system,sans-serif;text-decoration:none;z-index:99999;border:1px solid rgba(86,211,100,0.5);box-shadow:0 2px 8px rgba(0,0,0,0.3);">NL-AutoWire &check;</a>
<!-- CARTO_REMOVED -->
<!-- CARTO_BANNER_V1 -->
<div style="position:fixed;bottom:20px;right:20px;z-index:9999;background:linear-gradient(135deg,#141931,#2d1b5e);border:1px solid #64ffda;border-radius:12px;padding:12px 18px;box-shadow:0 4px 20px rgba(100,255,218,.3);font-family:-apple-system,Segoe UI,sans-serif;font-size:13px">
<a href="/cartographie-screens.html" style="color:#64ffda;text-decoration:none;font-weight:600;display:flex;align-items:center;gap:8px" title="Cartographie exhaustive de tous les ecrans live">
<span style="font-size:18px">&#128506;</span> Cartographie live
<span id="carto-banner-count" style="color:#8892b0;font-size:11px">3914 ecrans</span>
</a>
</div>
<script>
(function(){
fetch('/api/screens-health.php?_='+Date.now(),{cache:'no-store'}).then(r=>r.json()).then(d=>{
const c=d.counts||{}; const up=c.UP||0; const slow=c.SLOW||0; const br=c.BROKEN||0;
const el=document.getElementById('carto-banner-count');
if(el) el.innerHTML=`<span style="color:#22c55e">${up} UP</span> / <span style="color:#f59e0b">${slow} Lent</span> / <span style="color:#ef4444">${br} 5xx</span>`;
}).catch(()=>{});
})();
</script>
<!-- /CARTO_BANNER_V1 -->
<!-- WTP-GAP-FILL-V1 (doctrine 90-v2 gap-fill showcase, 18avr 2026) -->
<style>
.wtp-gapfill-banner{position:fixed;bottom:0;left:0;right:0;z-index:99999;background:linear-gradient(90deg,#05060a,#0b0d15 20%,#181d2e 50%,#0b0d15 80%,#05060a);border-top:2px solid #14b8a6;color:#e2e8f0;padding:10px 16px;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:11.5px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;box-shadow:0 -10px 30px rgba(20,184,166,.28)}
.wtp-gapfill-banner a{color:#5eead4;text-decoration:none;font-weight:600;transition:color .15s}
.wtp-gapfill-banner a:hover{color:#22d3ee}
.wtp-gapfill-banner .pill{padding:2px 9px;background:rgba(99,102,241,.14);color:#a5b4fc;border-radius:10px;font-size:10.5px;font-family:JetBrains Mono,monospace;font-weight:600}
.wtp-gapfill-banner .pill.new{background:rgba(20,184,166,.22);color:#5eead4}
.wtp-gapfill-banner .pill.hot{background:rgba(236,72,153,.22);color:#f472b6}
.wtp-gapfill-banner .close{margin-left:auto;cursor:pointer;color:#64748b;padding:0 8px;font-size:16px;line-height:1;border:1px solid #334155;border-radius:4px}
.wtp-gapfill-banner .close:hover{color:#e2e8f0;border-color:#64748b}
.wtp-gapfill-banner.hidden{display:none}
@media(max-width:768px){.wtp-gapfill-banner{font-size:10px;padding:7px 10px;gap:8px}}
</style>
<div class="wtp-gapfill-banner" id="wtpGapFillBanner">
<span>🎯 <strong>WEVAL Agents Gap-Fill ERP</strong></span>
<span class="pill hot">45 gaps</span>
<span class="pill">SAP · Oracle · NetSuite · Dynamics</span>
<span class="pill new">🆕 Meeting Rooms</span>
<span class="pill new">🆕 Lean 6 Sigma</span>
<span id="wtp-gfb-metrics" class="pill">— chargement —</span>
<a href="/weval-technology-platform.html">→ WTP Portal (16 mod)</a>
<a href="/enterprise-model.html">Enterprise Model</a>
<a href="/api/weval-agents-gap-fill-manifest.json" target="_blank">📋 Manifest</a>
<span class="close" onclick="document.getElementById("wtpGapFillBanner").classList.add("hidden");localStorage.setItem("wtpGapFillHidden","1")">×</span>
</div>
<script>
(async()=>{
if(localStorage.getItem("wtpGapFillHidden")==="1"){document.getElementById("wtpGapFillBanner").classList.add("hidden");return;}
try{
const r=await fetch("/api/source-of-truth.json?t="+Date.now());
const d=await r.json();
const el=document.getElementById("wtp-gfb-metrics");
if(el)el.textContent=(d.ethica_total||"?")+" HCPs · "+(d.nonreg||"?")+" · "+(d.providers_count||"?")+" IA · "+(d.agents_count||"?")+" agents · "+(d.docker_running||"?")+" 🐳";
}catch(e){}
})();
</script>
<!-- WTP-D90V2-ENRICH-BANNER (doctrine 90-v2, 17avr 2026) -->
<style>
.wtp-enrich-banner{position:fixed;bottom:0;left:0;right:0;z-index:9999;background:linear-gradient(90deg,#0b0d15,#181d2e,#0b0d15);border-top:2px solid #14b8a6;color:#e2e8f0;padding:9px 18px;font-family:'JetBrains Mono',monospace,-apple-system,system-ui;font-size:11.5px;display:flex;align-items:center;gap:14px;flex-wrap:wrap;box-shadow:0 -8px 24px rgba(20,184,166,.25)}
.wtp-enrich-banner a{color:#14b8a6;text-decoration:none;font-weight:600}
.wtp-enrich-banner a:hover{color:#22d3ee}
.wtp-enrich-banner .pill{padding:2px 8px;background:rgba(99,102,241,.15);color:#a5b4fc;border-radius:10px;font-size:10.5px}
.wtp-enrich-banner .pill.new{background:rgba(20,184,166,.2);color:#5eead4}
.wtp-enrich-banner .close{margin-left:auto;cursor:pointer;color:#64748b;padding:0 6px;font-size:14px}
.wtp-enrich-banner .close:hover{color:#e2e8f0}
.wtp-enrich-banner.hidden{display:none}
@media(max-width:768px){.wtp-enrich-banner{font-size:10px;padding:6px 10px}}
</style>
<div class="wtp-enrich-banner" id="wtpEnrichBanner">
<span>🏛️ <strong>Enterprise Model 16 depts</strong></span>
<span class="pill new">🆕 Meeting Rooms</span>
<span class="pill new">🆕 Lean 6 Sigma</span>
<span id="wtp-eb-metrics" class="pill">— chargement —</span>
<a href="/weval-technology-platform.html">→ WEVAL Technology Platform (16 modules)</a>
<a href="/enterprise-model.html">Enterprise Model</a>
<a href="/wevia-master.html">WEVIA Master</a>
<span class="close" onclick="document.getElementById('wtpEnrichBanner').classList.add('hidden')">×</span>
</div>
<script>
(async()=>{try{const r=await fetch('/api/source-of-truth.json?t='+Date.now());const d=await r.json();const el=document.getElementById('wtp-eb-metrics');if(el)el.textContent=(d.ethica_total||'?')+' HCPs · '+(d.nonreg||'?')+' · '+(d.providers_count||'?')+' IA · '+(d.docker_running||'?')+' 🐳 · '+(d.subdomains_live||'?')+' subdomains';}catch(e){}})();
</script>
<script>
/* V75 AVATAR UNIFIER — Meeting-rooms emoji style (Opus 19avr) */
(function() {
if (window.__WEVAL_AVATAR_V75) return;
window.__WEVAL_AVATAR_V75 = true;
const REG_URL = '/api/agent-avatars-v75.json';
const SVG_EP = '/api/agent-avatar-svg.php';
function emojiSVGUrl(name, emoji) {
return SVG_EP + '?n=' + encodeURIComponent(name) + '&e=' + encodeURIComponent(emoji);
}
fetch(REG_URL + '?t=' + Date.now()).then(r => r.json()).then(REG => {
function getAvatarUrl(name) {
const rec = REG[name];
if (!rec) return null;
if (typeof rec === 'object' && rec.svg) return rec.svg;
if (typeof rec === 'object' && rec.emoji) return emojiSVGUrl(name, rec.emoji);
return typeof rec === 'string' ? rec : null;
}
function findCI(key) {
const lower = key.toLowerCase();
for (const k of Object.keys(REG)) if (k.toLowerCase() === lower) return k;
return null;
}
function apply() {
document.querySelectorAll('img').forEach(img => {
const key = img.alt || img.dataset.agent || img.dataset.name || img.title || '';
if (!key) return;
let url = getAvatarUrl(key);
if (!url) { const alt = findCI(key); if (alt) url = getAvatarUrl(alt); }
if (url && img.src !== url && !img.src.endsWith(url)) {
img.src = url;
img.setAttribute('data-weval-v75', '1');
}
});
document.querySelectorAll('[data-agent]:not([data-weval-v75-applied])').forEach(el => {
const name = el.dataset.agent;
const url = getAvatarUrl(name);
if (!url) return;
const img = document.createElement('img');
img.src = url; img.alt = name; img.title = name;
img.className = 'v75-avatar';
img.style.cssText = 'width:32px;height:32px;border-radius:50%;object-fit:cover;vertical-align:middle;background:transparent';
el.setAttribute('data-weval-v75-applied', '1');
el.prepend(img);
});
}
apply();
setTimeout(apply, 400); setTimeout(apply, 1200); setTimeout(apply, 3000);
const mo = new MutationObserver(() => apply());
mo.observe(document.body, {childList: true, subtree: true});
setTimeout(() => mo.disconnect(), 20000);
console.log('[V75 AvatarUnifier] applied from', Object.keys(REG).length, 'agents');
}).catch(e => console.warn('[V75] fetch failed', e));
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN v1 19avr — append-only, doctrine #14 === -->
<script>
(function(){
if (window.__opusUniversalDrill) return; window.__opusUniversalDrill = true;
var d = document;
var m = d.createElement('div');
m.id = 'opus-udrill';
m.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:99995;padding:20px;cursor:pointer';
var inner = d.createElement('div');
inner.id = 'opus-udrill-in';
inner.style.cssText = 'max-width:900px;width:100%;max-height:90vh;overflow:auto;background:#0b0d15;border:1px solid rgba(99,102,241,0.35);border-radius:14px;padding:28px;cursor:default;box-shadow:0 20px 60px rgba(0,0,0,0.6);color:#e2e8f0;font:14px/1.55 Inter,system-ui,sans-serif';
inner.addEventListener('click', function(e){ e.stopPropagation(); });
m.appendChild(inner);
m.addEventListener('click', function(){ m.style.display='none'; });
d.addEventListener('keydown', function(e){ if(e.key==='Escape') m.style.display='none'; });
(d.body || d.documentElement).appendChild(m);
function openCard(card) {
// Clone card content + show close btn + increase font-size
var html = '<div style="display:flex;justify-content:flex-end;margin-bottom:14px"><button id="opus-udrill-close" style="padding:6px 14px;background:#171b2a;border:1px solid rgba(99,102,241,0.25);color:#e2e8f0;border-radius:8px;cursor:pointer;font-size:12px">✕ Fermer (Esc)</button></div>';
html += '<div style="transform-origin:top left;font-size:1.05em">' + card.outerHTML + '</div>';
inner.innerHTML = html;
d.getElementById('opus-udrill-close').onclick = function(){ m.style.display='none'; };
m.style.display = 'flex';
}
function wire(root) {
var sels = '.card,[class*="card"],.kpi,[class*="kpi"],.stat,[class*="stat"],.tile,[class*="tile"],.metric,[class*="metric"],.widget,[class*="widget"]';
var cards = root.querySelectorAll(sels);
for (var i = 0; i < cards.length; i++) {
var c = cards[i];
if (c.__opusWired) continue;
if (c.closest('button, a, input, select, textarea, #opus-udrill')) continue;
var r = c.getBoundingClientRect();
if (r.width < 60 || r.height < 40) continue;
c.__opusWired = true;
c.style.cursor = 'pointer';
c.setAttribute('role','button');
c.setAttribute('tabindex','0');
c.addEventListener('click', function(ev){
// If a more-specific drill is already active (e.g. pp-card custom), let it handle
if (ev.target.closest('[data-pp-id]') && window.__opusDrillInit) return;
if (ev.target.closest('a,button,input,select')) return;
ev.preventDefault(); ev.stopPropagation();
openCard(this);
});
c.addEventListener('keydown', function(ev){ if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();openCard(this);} });
}
}
// Initial + mutation observer
var initRun = function(){ wire(d.body || d.documentElement); };
if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', initRun);
else initRun();
var mo = new MutationObserver(function(muts){
var newCard = false;
for (var i=0;i<muts.length;i++) if (muts[i].addedNodes.length) { newCard = true; break; }
if (newCard) initRun();
});
mo.observe(d.body || d.documentElement, {childList:true, subtree:true});
})();
</script>
<!-- === OPUS UNIVERSAL DRILL-DOWN END === -->
<script src="/api/a11y-auto-enhancer.js" defer></script>
<!-- WTP_UDOCK_V1 (Opus 21-avr t32b4) --><script src="/wtp-unified-dock.js" defer></script>
</body>
</html>