1052 lines
57 KiB
HTML
Executable File
1052 lines
57 KiB
HTML
Executable File
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>WEVADS — Architecture Globale — 18 Février 2026</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
:root {
|
||
--bg: #0a0b0f;
|
||
--bg2: #12141c;
|
||
--bg3: #1a1d28;
|
||
--border: #2a2d3a;
|
||
--border-bright: #3a3d5a;
|
||
--text: #e2e4f0;
|
||
--text-dim: #8b8ea0;
|
||
--text-muted: #5a5d70;
|
||
--accent-blue: #4a9eff;
|
||
--accent-cyan: #00d4aa;
|
||
--accent-purple: #9b6dff;
|
||
--accent-orange: #ff8a4a;
|
||
--accent-red: #ff4a6a;
|
||
--accent-green: #4aff8a;
|
||
--accent-yellow: #ffd84a;
|
||
--accent-pink: #ff6ab0;
|
||
--glow-blue: rgba(74,158,255,0.15);
|
||
--glow-cyan: rgba(0,212,170,0.12);
|
||
--glow-purple: rgba(155,109,255,0.12);
|
||
}
|
||
* { margin:0; padding:0; box-sizing:border-box; }
|
||
body {
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
font-family: 'DM Sans', sans-serif;
|
||
overflow-x: hidden;
|
||
min-height: 100vh;
|
||
}
|
||
/* HEADER */
|
||
.header {
|
||
padding: 32px 40px 24px;
|
||
border-bottom: 1px solid var(--border);
|
||
background: linear-gradient(180deg, rgba(74,158,255,0.04) 0%, transparent 100%);
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
flex-wrap: wrap; gap: 16px;
|
||
position: sticky; top: 0; z-index: 100;
|
||
backdrop-filter: blur(20px);
|
||
}
|
||
.header-left { display: flex; align-items: center; gap: 20px; }
|
||
.logo {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-weight: 700; font-size: 28px;
|
||
background: linear-gradient(135deg, var(--accent-blue), var(--accent-cyan));
|
||
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
|
||
letter-spacing: -1px;
|
||
}
|
||
.logo-sub { font-size: 13px; color: var(--text-dim); font-weight: 400; margin-top: 2px; }
|
||
.header-meta { display: flex; gap: 24px; align-items: center; flex-wrap: wrap; }
|
||
.meta-chip {
|
||
display: flex; align-items: center; gap: 6px;
|
||
background: var(--bg3); border: 1px solid var(--border);
|
||
border-radius: 20px; padding: 6px 14px;
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 11px; color: var(--text-dim);
|
||
}
|
||
.meta-chip .val { color: var(--accent-cyan); font-weight: 600; }
|
||
.meta-chip .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent-green); animation: pulse 2s infinite; }
|
||
@keyframes pulse { 0%,100% { opacity:1; } 50% { opacity:0.3; } }
|
||
|
||
/* NAV */
|
||
.nav {
|
||
display: flex; gap: 0; border-bottom: 1px solid var(--border);
|
||
padding: 0 40px; overflow-x: auto;
|
||
background: var(--bg2);
|
||
}
|
||
.nav-btn {
|
||
padding: 12px 20px; font-size: 12px; font-weight: 600;
|
||
color: var(--text-dim); border: none; background: none; cursor: pointer;
|
||
border-bottom: 2px solid transparent; transition: all 0.2s;
|
||
white-space: nowrap; text-transform: uppercase; letter-spacing: 0.5px;
|
||
font-family: 'JetBrains Mono', monospace;
|
||
}
|
||
.nav-btn:hover { color: var(--text); background: rgba(255,255,255,0.03); }
|
||
.nav-btn.active { color: var(--accent-blue); border-bottom-color: var(--accent-blue); }
|
||
|
||
/* SECTIONS */
|
||
.content { padding: 0 40px 60px; }
|
||
.section { display: none; padding-top: 32px; }
|
||
.section.active { display: block; }
|
||
.section-title {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 20px; font-weight: 700; margin-bottom: 24px;
|
||
display: flex; align-items: center; gap: 12px;
|
||
}
|
||
.section-title .icon { font-size: 24px; }
|
||
|
||
/* CARDS */
|
||
.grid { display: grid; gap: 16px; }
|
||
.grid-2 { grid-template-columns: repeat(auto-fit, minmax(480px, 1fr)); }
|
||
.grid-3 { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); }
|
||
.grid-4 { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
|
||
|
||
.card {
|
||
background: var(--bg2);
|
||
border: 1px solid var(--border);
|
||
border-radius: 12px;
|
||
padding: 20px;
|
||
transition: all 0.25s;
|
||
}
|
||
.card:hover { border-color: var(--border-bright); transform: translateY(-1px); }
|
||
.card-header {
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
margin-bottom: 14px; padding-bottom: 10px;
|
||
border-bottom: 1px solid rgba(255,255,255,0.04);
|
||
}
|
||
.card-title {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 13px; font-weight: 600;
|
||
display: flex; align-items: center; gap: 8px;
|
||
}
|
||
.badge {
|
||
display: inline-flex; align-items: center; gap: 4px;
|
||
padding: 3px 10px; border-radius: 10px;
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 10px; font-weight: 600;
|
||
}
|
||
.badge-green { background: rgba(74,255,138,0.1); color: var(--accent-green); border: 1px solid rgba(74,255,138,0.2); }
|
||
.badge-blue { background: rgba(74,158,255,0.1); color: var(--accent-blue); border: 1px solid rgba(74,158,255,0.2); }
|
||
.badge-orange { background: rgba(255,138,74,0.1); color: var(--accent-orange); border: 1px solid rgba(255,138,74,0.2); }
|
||
.badge-red { background: rgba(255,74,106,0.1); color: var(--accent-red); border: 1px solid rgba(255,74,106,0.2); }
|
||
.badge-purple { background: rgba(155,109,255,0.1); color: var(--accent-purple); border: 1px solid rgba(155,109,255,0.2); }
|
||
.badge-yellow { background: rgba(255,216,74,0.1); color: var(--accent-yellow); border: 1px solid rgba(255,216,74,0.2); }
|
||
|
||
/* TABLE */
|
||
.tbl { width: 100%; border-collapse: collapse; font-size: 12px; }
|
||
.tbl th {
|
||
text-align: left; padding: 8px 10px; font-weight: 600;
|
||
color: var(--text-dim); border-bottom: 1px solid var(--border);
|
||
font-family: 'JetBrains Mono', monospace; font-size: 10px;
|
||
text-transform: uppercase; letter-spacing: 0.5px;
|
||
}
|
||
.tbl td {
|
||
padding: 7px 10px; border-bottom: 1px solid rgba(255,255,255,0.03);
|
||
font-family: 'JetBrains Mono', monospace; font-size: 11px;
|
||
color: var(--text-dim);
|
||
}
|
||
.tbl tr:hover td { background: rgba(255,255,255,0.02); color: var(--text); }
|
||
.tbl td.val { color: var(--accent-cyan); font-weight: 500; }
|
||
.tbl td.port { color: var(--accent-orange); font-weight: 600; }
|
||
.tbl td.green { color: var(--accent-green); }
|
||
.tbl td.red { color: var(--accent-red); }
|
||
.tbl td.blue { color: var(--accent-blue); }
|
||
.tbl td.purple { color: var(--accent-purple); }
|
||
|
||
/* FLOW DIAGRAM */
|
||
.flow {
|
||
display: flex; align-items: stretch; gap: 0;
|
||
overflow-x: auto; padding: 20px 0;
|
||
}
|
||
.flow-node {
|
||
min-width: 140px; padding: 14px 16px;
|
||
background: var(--bg3); border: 1px solid var(--border);
|
||
border-radius: 10px; text-align: center;
|
||
position: relative; flex-shrink: 0;
|
||
}
|
||
.flow-node .fn-label {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 10px; color: var(--text-dim); margin-bottom: 4px;
|
||
text-transform: uppercase; letter-spacing: 0.5px;
|
||
}
|
||
.flow-node .fn-title { font-size: 13px; font-weight: 600; }
|
||
.flow-node .fn-detail { font-size: 10px; color: var(--text-muted); margin-top: 4px; }
|
||
.flow-arrow {
|
||
display: flex; align-items: center; justify-content: center;
|
||
min-width: 50px; color: var(--text-muted); font-size: 18px;
|
||
flex-shrink: 0; position: relative;
|
||
}
|
||
.flow-arrow::before {
|
||
content: ''; position: absolute; width: 100%; height: 2px;
|
||
background: linear-gradient(90deg, var(--border), var(--accent-blue), var(--border));
|
||
top: 50%; opacity: 0.3;
|
||
}
|
||
.flow-arrow span { position: relative; z-index: 1; background: var(--bg); padding: 0 6px; font-size: 11px; }
|
||
|
||
/* SERVER BOX */
|
||
.server-box {
|
||
border: 2px solid var(--border);
|
||
border-radius: 16px; padding: 24px;
|
||
background: linear-gradient(135deg, var(--bg2) 0%, var(--bg3) 100%);
|
||
position: relative; margin-bottom: 20px;
|
||
}
|
||
.server-box.primary { border-color: rgba(74,158,255,0.3); box-shadow: 0 0 40px var(--glow-blue); }
|
||
.server-box.tracking { border-color: rgba(0,212,170,0.3); box-shadow: 0 0 40px var(--glow-cyan); }
|
||
.server-box.consulting { border-color: rgba(155,109,255,0.3); box-shadow: 0 0 40px var(--glow-purple); }
|
||
.server-label {
|
||
position: absolute; top: -12px; left: 20px;
|
||
background: var(--bg); padding: 2px 14px;
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 11px; font-weight: 700;
|
||
border: 1px solid var(--border); border-radius: 6px;
|
||
}
|
||
.server-box.primary .server-label { color: var(--accent-blue); border-color: rgba(74,158,255,0.3); }
|
||
.server-box.tracking .server-label { color: var(--accent-cyan); border-color: rgba(0,212,170,0.3); }
|
||
.server-box.consulting .server-label { color: var(--accent-purple); border-color: rgba(155,109,255,0.3); }
|
||
|
||
/* STAT ROW */
|
||
.stat-row { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
|
||
.stat {
|
||
background: var(--bg); border: 1px solid var(--border);
|
||
border-radius: 8px; padding: 10px 14px; min-width: 120px;
|
||
}
|
||
.stat-label { font-size: 10px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; }
|
||
.stat-val {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 18px; font-weight: 700; margin-top: 2px;
|
||
}
|
||
.stat-val.blue { color: var(--accent-blue); }
|
||
.stat-val.cyan { color: var(--accent-cyan); }
|
||
.stat-val.green { color: var(--accent-green); }
|
||
.stat-val.orange { color: var(--accent-orange); }
|
||
.stat-val.purple { color: var(--accent-purple); }
|
||
.stat-val.red { color: var(--accent-red); }
|
||
|
||
/* SECTION SPECIFIC */
|
||
.port-group { margin-bottom: 20px; }
|
||
.port-group-title {
|
||
font-family: 'JetBrains Mono', monospace;
|
||
font-size: 12px; font-weight: 600; color: var(--accent-blue);
|
||
margin-bottom: 8px; display: flex; align-items: center; gap: 8px;
|
||
}
|
||
.port-group-title::after {
|
||
content: ''; flex: 1; height: 1px;
|
||
background: linear-gradient(90deg, var(--border), transparent);
|
||
}
|
||
|
||
.cron-list { display: flex; flex-direction: column; gap: 4px; }
|
||
.cron-item {
|
||
display: flex; align-items: center; gap: 10px;
|
||
padding: 6px 10px; border-radius: 6px;
|
||
font-family: 'JetBrains Mono', monospace; font-size: 11px;
|
||
background: rgba(255,255,255,0.01);
|
||
}
|
||
.cron-item:hover { background: rgba(255,255,255,0.03); }
|
||
.cron-freq { color: var(--accent-orange); min-width: 70px; font-weight: 500; }
|
||
.cron-cmd { color: var(--text-dim); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||
.cron-cat { color: var(--accent-purple); min-width: 80px; text-align: right; font-size: 10px; }
|
||
|
||
@media (max-width: 768px) {
|
||
.header, .content { padding-left: 16px; padding-right: 16px; }
|
||
.nav { padding: 0 16px; }
|
||
.grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
|
||
.flow { flex-direction: column; align-items: center; }
|
||
.flow-arrow { transform: rotate(90deg); min-height: 40px; min-width: auto; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- HEADER -->
|
||
<div class="header">
|
||
<div class="header-left">
|
||
<div>
|
||
<div class="logo">WEVADS</div>
|
||
<div class="logo-sub">Architecture Globale — WEVAL Consulting</div>
|
||
</div>
|
||
</div>
|
||
<div class="header-meta">
|
||
<div class="meta-chip"><span class="dot" id="live-dot"></span> <span>LIVE</span> <span class="val live-val" id="live-ts">--:--</span></div>
|
||
<div class="meta-chip">Date <span class="val">18 Fév 2026</span></div>
|
||
<div class="meta-chip">Serveurs <span class="val">3</span></div>
|
||
<div class="meta-chip">Ports <span class="val">22</span></div>
|
||
<div class="meta-chip">DBs <span class="val">6</span></div>
|
||
<div class="meta-chip">APIs <span class="val">653</span></div>
|
||
<div class="meta-chip">Crons <span class="val">42</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- NAV -->
|
||
<div class="nav">
|
||
<button class="nav-btn active" onclick="showTab('overview')">🏗️ Vue Globale</button>
|
||
<button class="nav-btn" onclick="showTab('servers')">🖥️ Serveurs</button>
|
||
<button class="nav-btn" onclick="showTab('ports')">🔌 Ports & Services</button>
|
||
<button class="nav-btn" onclick="showTab('databases')">🗄️ Bases de Données</button>
|
||
<button class="nav-btn" onclick="showTab('apis')">⚡ APIs</button>
|
||
<button class="nav-btn" onclick="showTab('flux')">🔄 Flux E2E</button>
|
||
<button class="nav-btn" onclick="showTab('crons')">⏰ Crons</button>
|
||
<button class="nav-btn" onclick="showTab('external')">🌐 Services Externes</button>
|
||
<button class="nav-btn" onclick="showTab('kpis')">📊 KPIs</button>
|
||
</div>
|
||
|
||
<div class="content">
|
||
|
||
<!-- ================================ VUE GLOBALE ================================ -->
|
||
<div class="section active" id="overview">
|
||
<div class="section-title"><span class="icon">🏗️</span> Architecture Globale — 3 Serveurs, 22 Ports, 6 DBs</div>
|
||
|
||
<!-- PRIMARY SERVER -->
|
||
<div class="server-box primary">
|
||
<div class="server-label">🟦 HETZNER PRIMARY — 89.167.40.150</div>
|
||
<div class="stat-row" style="margin-top:12px;">
|
||
<div class="stat"><div class="stat-label">Apache Ports</div><div class="stat-val blue">14</div></div>
|
||
<div class="stat"><div class="stat-label">APIs</div><div class="stat-val cyan">653</div></div>
|
||
<div class="stat"><div class="stat-label">HTML Pages</div><div class="stat-val green">149</div></div>
|
||
<div class="stat"><div class="stat-label">PostgreSQL DBs</div><div class="stat-val orange">6</div></div>
|
||
<div class="stat"><div class="stat-label">Tables (admin)</div><div class="stat-val purple">625</div></div>
|
||
<div class="stat"><div class="stat-label">Crons</div><div class="stat-val blue">42</div></div>
|
||
</div>
|
||
<div class="grid grid-4" style="margin-top:12px;">
|
||
<div class="card" style="border-left:3px solid var(--accent-blue);">
|
||
<div class="card-title">WEVADS Core <span class="badge badge-blue">:5821</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">326 APIs PHP<br>App principale, Brain, Pipeline</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-purple);">
|
||
<div class="card-title">Arsenal <span class="badge badge-purple">:5890</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">327 APIs PHP<br>149 pages HTML, UI complète</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-cyan);">
|
||
<div class="card-title">WEVAL IA <span class="badge badge-green">:8080/:8443</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">12 providers IA, 3 LIVE<br>Cerebras/Groq/SambaNova</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-orange);">
|
||
<div class="card-title">PowerMTA <span class="badge badge-orange">:25</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">127.0.0.1 local<br>Email delivery engine</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-green);">
|
||
<div class="card-title">PostgreSQL <span class="badge badge-green">:5432</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">6 databases<br>adx_system (625 tables admin)</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-yellow);">
|
||
<div class="card-title">N8N <span class="badge badge-yellow">:5678</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">Workflow automation<br>0 workflows actifs</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-red);">
|
||
<div class="card-title">Redis <span class="badge badge-red">:6379</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">Cache / Queue<br>Local only</div>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--text-muted);">
|
||
<div class="card-title">SSH <span class="badge badge-orange">:49222</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;">Custom port SSH<br>Blocked par Hetzner FW</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- OVH TRACKING -->
|
||
<div class="server-box tracking">
|
||
<div class="server-label">🟩 OVH TRACKING — 151.80.235.110</div>
|
||
<div class="stat-row" style="margin-top:12px;">
|
||
<div class="stat"><div class="stat-label">Domaine</div><div class="stat-val cyan">culturellemejean.charity</div></div>
|
||
<div class="stat"><div class="stat-label">Status</div><div class="stat-val green">HTTP 200</div></div>
|
||
<div class="stat"><div class="stat-label">Rôle</div><div class="stat-val orange">Tracking</div></div>
|
||
</div>
|
||
<div style="font-size:12px;color:var(--text-dim);line-height:1.7;">
|
||
<strong style="color:var(--accent-cyan)">track.php</strong> — Collecte opens/clicks depuis les emails<br>
|
||
<strong style="color:var(--accent-cyan)">click.php</strong> — Redirection click avec tracking sub1/sub2/sub3<br>
|
||
<strong style="color:var(--accent-cyan)">open.php</strong> — Pixel tracking ouvertures<br>
|
||
<strong style="color:var(--accent-cyan)">conversion.php</strong> — Postback endpoint affiliés
|
||
</div>
|
||
</div>
|
||
|
||
<!-- CONSULTING -->
|
||
<div class="server-box consulting">
|
||
<div class="server-label">🟪 CONSULTING — 46.62.220.135</div>
|
||
<div class="stat-row" style="margin-top:12px;">
|
||
<div class="stat"><div class="stat-label">Domaine</div><div class="stat-val purple">weval-consulting.com</div></div>
|
||
<div class="stat"><div class="stat-label">Stack</div><div class="stat-val blue">React/Vite/Docker</div></div>
|
||
<div class="stat"><div class="stat-label">Chatbot</div><div class="stat-val green">WEVAL IA</div></div>
|
||
</div>
|
||
<div style="font-size:12px;color:var(--text-dim);line-height:1.7;">
|
||
<strong style="color:var(--accent-purple)">/solutions</strong> — WEVADS, WEVAL IA, Arsenal (SaaS)<br>
|
||
<strong style="color:var(--accent-purple)">/marketplace</strong> — Catalogue produits + chatbot IA<br>
|
||
<strong style="color:var(--accent-purple)">/contact-us</strong> — Formulaire de contact
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ SERVEURS ================================ -->
|
||
<div class="section" id="servers">
|
||
<div class="section-title"><span class="icon">🖥️</span> Inventaire Serveurs</div>
|
||
<div class="grid grid-3">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<div class="card-title">🟦 Hetzner Primary</div>
|
||
<span class="badge badge-green">● LIVE</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><td>IP</td><td class="val">89.167.40.150</td></tr>
|
||
<tr><td>SSH</td><td class="port">49222</td></tr>
|
||
<tr><td>Credentials</td><td>root / fHH4v7etkX74</td></tr>
|
||
<tr><td>OS</td><td>Ubuntu 24</td></tr>
|
||
<tr><td>rDNS</td><td class="val">mail.wevup.app</td></tr>
|
||
<tr><td>Hostname</td><td>pmta.wevads.local</td></tr>
|
||
<tr><td>Services</td><td>Apache, PostgreSQL, PMTA, N8N, Redis, Ollama, Squid, xRDP</td></tr>
|
||
<tr><td>Apache Ports</td><td class="port">80, 5821-5825, 5888, 5890, 5899, 8080, 8443, 58421-58423</td></tr>
|
||
<tr><td>Domaines</td><td>wevup.app, culturellemejean.charity</td></tr>
|
||
<tr><td>Blacklists</td><td class="red">⚠ Spamhaus CSS (delist pending)</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<div class="card-title">🟩 OVH Tracking</div>
|
||
<span class="badge badge-green">● LIVE</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><td>IP</td><td class="val">151.80.235.110</td></tr>
|
||
<tr><td>SSH</td><td class="port">22</td></tr>
|
||
<tr><td>Credentials</td><td>ubuntu / MX8D3zSAty7k3243242</td></tr>
|
||
<tr><td>Rôle</td><td>Tracking opens/clicks/conversions</td></tr>
|
||
<tr><td>Domaine</td><td class="val">culturellemejean.charity</td></tr>
|
||
<tr><td>SSL</td><td class="green">✅ HTTPS actif</td></tr>
|
||
<tr><td>Scripts</td><td>track.php, click.php, open.php, conversion.php</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<div class="card-title">🟪 Consulting Site</div>
|
||
<span class="badge badge-green">● LIVE</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><td>IP</td><td class="val">46.62.220.135</td></tr>
|
||
<tr><td>Credentials</td><td>root / vr3xjMvwMtWW</td></tr>
|
||
<tr><td>Stack</td><td>React + Vite + Docker + Nginx</td></tr>
|
||
<tr><td>Domaine</td><td class="val">weval-consulting.com</td></tr>
|
||
<tr><td>Container</td><td>weval-frontend</td></tr>
|
||
<tr><td>Chatbot</td><td class="green">WEVAL IA intégré</td></tr>
|
||
<tr><td>Pages</td><td>/solutions, /marketplace, /contact-us</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ PORTS ================================ -->
|
||
<div class="section" id="ports">
|
||
<div class="section-title"><span class="icon">🔌</span> Tous les Ports & Services — 89.167.40.150</div>
|
||
|
||
<div class="port-group">
|
||
<div class="port-group-title">🌐 APACHE VHOSTS (14 ports)</div>
|
||
<table class="tbl">
|
||
<tr><th>Port</th><th>VHost</th><th>Périmètre</th><th>Contenu</th></tr>
|
||
<tr><td class="port">:80</td><td>default + tracking + weval-consulting + weval-simple</td><td>Multi</td><td>Reverse proxy, Sentinel API, tracking local</td></tr>
|
||
<tr><td class="port">:5821</td><td>wevads.local</td><td class="blue">WEVADS Core</td><td>326 APIs PHP — Brain, Pipeline, Send, Bounce, Offers</td></tr>
|
||
<tr><td class="port">:5822</td><td>fmgapp.local</td><td>FMG App</td><td>Application FMG</td></tr>
|
||
<tr><td class="port">:5823</td><td>bcgapp.local</td><td>BCG App</td><td>Application BCG</td></tr>
|
||
<tr><td class="port">:5824</td><td>dkim.local</td><td>DKIM</td><td>DKIM key management</td></tr>
|
||
<tr><td class="port">:5825</td><td>n8n.local</td><td>N8N Proxy</td><td>Apache proxy → N8N :5678</td></tr>
|
||
<tr><td class="port">:5888</td><td>—</td><td>Réservé</td><td>Apache vhost actif</td></tr>
|
||
<tr><td class="port">:5890</td><td>wevads-arsenal</td><td class="purple">Arsenal UI</td><td>327 APIs + 149 pages HTML — Interface complète</td></tr>
|
||
<tr><td class="port">:5899</td><td>bridge</td><td>Data Bridge</td><td>Bridge adx_system ↔ adx_clients (dblink)</td></tr>
|
||
<tr><td class="port">:8080</td><td>hamid.local</td><td class="green">WEVAL IA HTTP</td><td>Interface IA, 12 providers</td></tr>
|
||
<tr><td class="port">:8443</td><td>hamid.local SSL</td><td class="green">WEVAL IA HTTPS</td><td>IA SSL endpoint</td></tr>
|
||
<tr><td class="port">:58421</td><td>wevads-tracking</td><td>Tracking WEVADS</td><td>Open/Click tracking local</td></tr>
|
||
<tr><td class="port">:58422</td><td>fmgapp-tracking</td><td>Tracking FMG</td><td>FMG tracking</td></tr>
|
||
<tr><td class="port">:58423</td><td>bcgapp-tracking</td><td>Tracking BCG</td><td>BCG tracking</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="port-group">
|
||
<div class="port-group-title">⚙️ SERVICES SYSTÈME (8 ports)</div>
|
||
<table class="tbl">
|
||
<tr><th>Port</th><th>Service</th><th>Bind</th><th>Détails</th></tr>
|
||
<tr><td class="port">:25</td><td>PowerMTA (pmtad)</td><td>127.0.0.1</td><td>SMTP delivery engine — local only</td></tr>
|
||
<tr><td class="port">:2525</td><td>Postfix (smtpd)</td><td>::1</td><td>Postfix submission port</td></tr>
|
||
<tr><td class="port">:2526</td><td>Postfix (smtpd)</td><td>::1</td><td>Postfix secondary</td></tr>
|
||
<tr><td class="port">:3128</td><td>Squid Proxy</td><td>0.0.0.0</td><td>HTTP proxy cache</td></tr>
|
||
<tr><td class="port">:3142</td><td>apt-cacher-ng</td><td>0.0.0.0</td><td>APT package cache</td></tr>
|
||
<tr><td class="port">:3389</td><td>xRDP</td><td>0.0.0.0</td><td>Remote Desktop</td></tr>
|
||
<tr><td class="port">:5432</td><td>PostgreSQL 13</td><td>0.0.0.0</td><td>6 databases, admin/admin123</td></tr>
|
||
<tr><td class="port">:5678</td><td>N8N (Node.js)</td><td>0.0.0.0</td><td>Workflow automation, 0 workflows actifs</td></tr>
|
||
<tr><td class="port">:5679</td><td>N8N internal</td><td>127.0.0.1</td><td>N8N worker port</td></tr>
|
||
<tr><td class="port">:6379</td><td>Redis</td><td>127.0.0.1</td><td>Cache / Queue</td></tr>
|
||
<tr><td class="port">:11434</td><td>Ollama</td><td>127.0.0.1</td><td>LLM local inference</td></tr>
|
||
<tr><td class="port">:49222</td><td>OpenSSH</td><td>0.0.0.0</td><td>Custom SSH port (FW blocked by Hetzner)</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ DATABASES ================================ -->
|
||
<div class="section" id="databases">
|
||
<div class="section-title"><span class="icon">🗄️</span> Bases de Données PostgreSQL</div>
|
||
|
||
<div class="grid grid-2">
|
||
<div class="card" style="border-left:3px solid var(--accent-blue);">
|
||
<div class="card-header">
|
||
<div class="card-title">adx_system <span class="badge badge-blue">PRINCIPALE</span></div>
|
||
<span class="badge badge-green">636 tables</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><th>Schema</th><th>Tables</th><th>Contenu clé</th></tr>
|
||
<tr><td class="val">admin</td><td class="val">625</td><td>Core: office_accounts, campaigns, offers, brain_*, warmup, tracking, IA providers</td></tr>
|
||
<tr><td class="val">mta</td><td>4</td><td>ip_rotation, ip_reputation, MTA configs</td></tr>
|
||
<tr><td class="val">public</td><td>7</td><td>Tables système</td></tr>
|
||
<tr><td class="val">production</td><td>—</td><td>Production pipeline</td></tr>
|
||
<tr><td class="val">affiliate</td><td>—</td><td>CX3 Ads + Double M</td></tr>
|
||
<tr><td class="val">lists</td><td>—</td><td>Contact lists management</td></tr>
|
||
<tr><td class="val">actions</td><td>—</td><td>Action tracking</td></tr>
|
||
</table>
|
||
<div style="margin-top:12px;font-size:11px;color:var(--text-dim);">
|
||
<strong style="color:var(--accent-cyan);">Tables clés :</strong>
|
||
office_accounts (1,363) · warmup_accounts (2,036) · seed_accounts (1,275) · brain_seeds (51,454) · brain_send_configs (612) · brain_configs (366) · offers (116) · campaigns (40) · unified_send_log_new (11,944) · email_send_accounts (2,077) · personas (178) · hamid_providers (12) · ia_provider_accounts (41) · offer_creatives (1,285) · affiliate_offers (691) · click_tracking (674) · open_tracking (4,590)
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-cyan);">
|
||
<div class="card-header">
|
||
<div class="card-title">adx_clients <span class="badge badge-cyan" style="background:rgba(0,212,170,0.1);color:var(--accent-cyan);border:1px solid rgba(0,212,170,0.2);">CONTACTS</span></div>
|
||
<span class="badge badge-green">~125 tables</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><th>Schema</th><th>Tables</th><th>ISP</th></tr>
|
||
<tr><td class="val">gmail</td><td>40</td><td>Gmail contacts</td></tr>
|
||
<tr><td class="val">hotmail</td><td>10</td><td>Hotmail/Outlook contacts</td></tr>
|
||
<tr><td class="val">gmx</td><td>7</td><td>GMX contacts</td></tr>
|
||
<tr><td class="val">yahoo</td><td>1</td><td>Yahoo contacts</td></tr>
|
||
<tr><td class="val">webde</td><td>1</td><td>Web.de contacts</td></tr>
|
||
<tr><td class="val">tonline</td><td>1</td><td>T-Online contacts</td></tr>
|
||
<tr><td class="val">videotron</td><td>1</td><td>Videotron contacts</td></tr>
|
||
<tr><td class="val">specials</td><td>1</td><td>Special ISPs</td></tr>
|
||
<tr><td class="val">suppressions</td><td>62</td><td>Suppression lists</td></tr>
|
||
</table>
|
||
<div style="margin-top:10px;font-size:11px;color:var(--text-dim);">
|
||
Accessible via <strong style="color:var(--accent-orange);">dblink bridge</strong> (:5899) — fonctions admin.total_clients(), admin.count_clients()
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">wevads</div><span class="badge badge-blue">43 tables</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);">Application WEVADS legacy data</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">wevads_accounts</div><span class="badge badge-blue">6 tables</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);">Gestion comptes (O365, GSuite)</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">wevads_arsenal</div><span class="badge badge-purple">7 tables</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);">Arsenal UI configuration</div>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">wevads_advanced</div><span class="badge badge-orange">4 tables</span></div>
|
||
<div style="font-size:11px;color:var(--text-dim);">Advanced features / experimental</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ APIS ================================ -->
|
||
<div class="section" id="apis">
|
||
<div class="section-title"><span class="icon">⚡</span> APIs — 653 endpoints PHP</div>
|
||
|
||
<div class="grid grid-2">
|
||
<div class="card" style="border-left:3px solid var(--accent-blue);">
|
||
<div class="card-header">
|
||
<div class="card-title">🔵 WEVADS Core :5821</div>
|
||
<span class="badge badge-blue">326 APIs</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><th>Catégorie</th><th>APIs</th><th>Exemples</th></tr>
|
||
<tr><td>🧠 Brain</td><td class="val">~20</td><td>brain-connector, brain-creative-engine, brain-optimizer</td></tr>
|
||
<tr><td>📧 Send</td><td class="val">~15</td><td>adx-send-bridge, send-factory, send-orchestrator</td></tr>
|
||
<tr><td>📊 Tracking</td><td class="val">~10</td><td>click.php, open.php, conversion.php, bounce-processor</td></tr>
|
||
<tr><td>🤖 IA</td><td class="val">~12</td><td>ai-bridge, ai-copywriter, ai-discovery, ai-failsafe, ai-rotation</td></tr>
|
||
<tr><td>👤 Accounts</td><td class="val">~10</td><td>account-creator, account-factory, auth-wizard</td></tr>
|
||
<tr><td>💰 Affiliate</td><td class="val">~8</td><td>affiliate-monitor, offer-engine, conversions-collector</td></tr>
|
||
<tr><td>🛡️ Security</td><td class="val">~10</td><td>blacklist, reputation, sentinel-brain, vault-guard</td></tr>
|
||
<tr><td>🔧 Infra</td><td class="val">~15</td><td>api-gateway, arsenal-health, auto-surgeon, pipeline-feeder</td></tr>
|
||
<tr><td>📈 Analytics</td><td class="val">~10</td><td>analytics, data-manager, data-drill, world-map</td></tr>
|
||
<tr><td>🔄 Autres</td><td class="val">~216</td><td>captcha, dns, sms, scraping, harvest, fingerprint...</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="card" style="border-left:3px solid var(--accent-purple);">
|
||
<div class="card-header">
|
||
<div class="card-title">🟣 Arsenal :5890</div>
|
||
<span class="badge badge-purple">327 APIs</span>
|
||
</div>
|
||
<table class="tbl">
|
||
<tr><th>Catégorie</th><th>APIs</th><th>Exemples</th></tr>
|
||
<tr><td>📧 Warmup</td><td class="val">~5</td><td>warmup-engine (execute, advance_day)</td></tr>
|
||
<tr><td>💰 Offers</td><td class="val">~5</td><td>offer-engine (import_cx3), affiliate-hamid-check</td></tr>
|
||
<tr><td>🔒 Vault</td><td class="val">~3</td><td>vault-guard (cron, scan, restore)</td></tr>
|
||
<tr><td>👤 Factory</td><td class="val">~8</td><td>account-factory-ia, account-creator, ia-provider-factory</td></tr>
|
||
<tr><td>🔄 Mirror</td><td class="val">~306</td><td>Symlinks/copies des APIs 5821 pour UI Arsenal</td></tr>
|
||
</table>
|
||
<div style="margin-top:10px;font-size:11px;color:var(--text-dim);">
|
||
<strong style="color:var(--accent-purple);">149 pages HTML</strong> — Dashboard complet Arsenal avec sidebar menu, drill-down, stats dynamiques
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card" style="margin-top:16px;border-left:3px solid var(--accent-green);">
|
||
<div class="card-header">
|
||
<div class="card-title">🟢 API Sentinel — :80 (sentinel-brain.php)</div>
|
||
<span class="badge badge-green">EXEC API</span>
|
||
</div>
|
||
<div style="font-size:12px;color:var(--text-dim);line-height:1.8;">
|
||
<code style="color:var(--accent-orange);">POST /api/sentinel-brain.php</code> — action=exec, cmd=... → Remote command execution<br>
|
||
Utilisé par Claude sessions pour déployer/patcher. Tourne en www-data avec sudo passwordless.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ FLUX E2E ================================ -->
|
||
<div class="section" id="flux">
|
||
<div class="section-title"><span class="icon">🔄</span> Flux End-to-End</div>
|
||
|
||
<!-- SEND PIPELINE -->
|
||
<div class="card" style="margin-bottom:20px;">
|
||
<div class="card-header">
|
||
<div class="card-title">📧 Pipeline Email — Send → Open → Click → Conversion → Revenue</div>
|
||
<span class="badge badge-green">● ACTIF</span>
|
||
</div>
|
||
<div class="flow">
|
||
<div class="flow-node" style="border-color:var(--accent-blue);">
|
||
<div class="fn-label">Contacts</div>
|
||
<div class="fn-title" style="color:var(--accent-blue);">2.99M</div>
|
||
<div class="fn-detail">adx_clients (dblink)</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-purple);">
|
||
<div class="fn-label">Brain</div>
|
||
<div class="fn-title" style="color:var(--accent-purple);">brain-productive</div>
|
||
<div class="fn-detail">366 configs, 9 winners</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-orange);">
|
||
<div class="fn-label">Send</div>
|
||
<div class="fn-title" style="color:var(--accent-orange);">Graph API</div>
|
||
<div class="fn-detail">150 senders, 9 tenants O365</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-cyan);">
|
||
<div class="fn-label">Track</div>
|
||
<div class="fn-title" style="color:var(--accent-cyan);">OVH 151.80.*</div>
|
||
<div class="fn-detail">open.php + click.php</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-green);">
|
||
<div class="fn-label">Affiliate</div>
|
||
<div class="fn-title" style="color:var(--accent-green);">CX3 / DoubleM</div>
|
||
<div class="fn-detail">85 offres, $27 moy</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-yellow);">
|
||
<div class="fn-label">Pull</div>
|
||
<div class="fn-title" style="color:var(--accent-yellow);">CAKE/Everflow</div>
|
||
<div class="fn-detail">conversions-collector</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>→</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-red);">
|
||
<div class="fn-label">Revenue</div>
|
||
<div class="fn-title" style="color:var(--accent-red);">$0 (J+0)</div>
|
||
<div class="fn-detail">En attente J+2/J+3</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- SEND METHODS -->
|
||
<div class="card" style="margin-bottom:20px;">
|
||
<div class="card-header">
|
||
<div class="card-title">📨 Méthodes d'Envoi (3 canaux)</div>
|
||
</div>
|
||
<div class="grid grid-3" style="margin-top:8px;">
|
||
<div style="padding:12px;background:var(--bg);border-radius:8px;border:1px solid rgba(74,158,255,0.2);">
|
||
<div style="font-size:11px;color:var(--accent-blue);font-weight:600;font-family:'JetBrains Mono',monospace;">1️⃣ GRAPH API (O365)</div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;line-height:1.6;">
|
||
brain-productive.php → Microsoft Graph API<br>
|
||
150 senders × 9 tenants actifs<br>
|
||
~3,600 emails/jour<br>
|
||
<span style="color:var(--accent-green);">✅ Bypass Spamhaus (via Microsoft)</span>
|
||
</div>
|
||
</div>
|
||
<div style="padding:12px;background:var(--bg);border-radius:8px;border:1px solid rgba(255,138,74,0.2);">
|
||
<div style="font-size:11px;color:var(--accent-orange);font-weight:600;font-family:'JetBrains Mono',monospace;">2️⃣ PMTA (Direct MX)</div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;line-height:1.6;">
|
||
send_batch.sh → PowerMTA → MX direct<br>
|
||
Batch 200 emails<br>
|
||
~4,200 emails/jour<br>
|
||
<span style="color:var(--accent-red);">⚠ Bloqué Spamhaus CSS (delist pending)</span>
|
||
</div>
|
||
</div>
|
||
<div style="padding:12px;background:var(--bg);border-radius:8px;border:1px solid rgba(0,212,170,0.2);">
|
||
<div style="font-size:11px;color:var(--accent-cyan);font-weight:600;font-family:'JetBrains Mono',monospace;">3️⃣ WARMUP ENGINE</div>
|
||
<div style="font-size:11px;color:var(--text-dim);margin-top:6px;line-height:1.6;">
|
||
warmup-engine.php → O365 Graph<br>
|
||
2,036 comptes en warming<br>
|
||
Cap: 77,170/jour<br>
|
||
<span style="color:var(--accent-yellow);">⏳ Montée progressive</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- TRACKING FLOW -->
|
||
<div class="card" style="margin-bottom:20px;">
|
||
<div class="card-header">
|
||
<div class="card-title">📊 Flux Tracking & Conversion</div>
|
||
</div>
|
||
<div class="flow">
|
||
<div class="flow-node" style="border-color:var(--accent-orange);">
|
||
<div class="fn-label">Email envoyé</div>
|
||
<div class="fn-title" style="color:var(--accent-orange);">ADX Tag</div>
|
||
<div class="fn-detail">adx_168_56_186_0 + sub1/2/3</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>pixel</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-cyan);">
|
||
<div class="fn-label">Open</div>
|
||
<div class="fn-title" style="color:var(--accent-cyan);">open.php</div>
|
||
<div class="fn-detail">151.80.235.110</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>click</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-blue);">
|
||
<div class="fn-label">Click</div>
|
||
<div class="fn-title" style="color:var(--accent-blue);">click.php</div>
|
||
<div class="fn-detail">→ e36lbat.com (CX3)</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>redir</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-green);">
|
||
<div class="fn-label">Landing</div>
|
||
<div class="fn-title" style="color:var(--accent-green);">Offer Page</div>
|
||
<div class="fn-detail">CX3: ?offer_id=X&aff_id=10805</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>conv</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-yellow);">
|
||
<div class="fn-label">Pull */30</div>
|
||
<div class="fn-title" style="color:var(--accent-yellow);">CAKE API v2</div>
|
||
<div class="fn-detail">conversions-collector.php</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>$$$</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-red);">
|
||
<div class="fn-label">Revenue</div>
|
||
<div class="fn-title" style="color:var(--accent-red);">revenue_tracker</div>
|
||
<div class="fn-detail">Dashboard Arsenal</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- BRAIN CYCLE -->
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<div class="card-title">🧠 Brain Cycle — Auto-optimisation</div>
|
||
</div>
|
||
<div class="flow">
|
||
<div class="flow-node">
|
||
<div class="fn-label">Configs</div>
|
||
<div class="fn-title">366 configs</div>
|
||
<div class="fn-detail">brain_configs</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>test</span></div>
|
||
<div class="flow-node">
|
||
<div class="fn-label">Send</div>
|
||
<div class="fn-title">612 send_configs</div>
|
||
<div class="fn-detail">brain_send_configs</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>track</span></div>
|
||
<div class="flow-node">
|
||
<div class="fn-label">Score</div>
|
||
<div class="fn-title">inbox_rate</div>
|
||
<div class="fn-detail">open/click/bounce</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>select</span></div>
|
||
<div class="flow-node" style="border-color:var(--accent-green);">
|
||
<div class="fn-label">Winners</div>
|
||
<div class="fn-title" style="color:var(--accent-green);">9 winners</div>
|
||
<div class="fn-detail">Top configs → production</div>
|
||
</div>
|
||
<div class="flow-arrow"><span>loop</span></div>
|
||
<div class="flow-node">
|
||
<div class="fn-label">Mutate</div>
|
||
<div class="fn-title">brain-auto-cycle</div>
|
||
<div class="fn-detail">Nouvelles combinaisons</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ CRONS ================================ -->
|
||
<div class="section" id="crons">
|
||
<div class="section-title"><span class="icon">⏰</span> 42 Crons Actifs</div>
|
||
|
||
<div class="grid grid-2">
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">🔁 Haute Fréquence (*/5 — */15)</div></div>
|
||
<div class="cron-list">
|
||
<div class="cron-item"><span class="cron-freq">*/10min</span><span class="cron-cmd">brain-connector.php sync_brain</span><span class="cron-cat">🧠 Brain</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/10min</span><span class="cron-cmd">html-guardian.sh (alerte only)</span><span class="cron-cat">🛡️ Guard</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">bounce-processor.php?action=process</span><span class="cron-cat">📧 Bounce</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">brain-connector sync_tracking</span><span class="cron-cat">📊 Track</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">warmup-engine execute_warmup batch=20</span><span class="cron-cat">🔥 Warmup</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">send_batch.sh 30 (PMTA)</span><span class="cron-cat">📧 Send</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">IA rate_limited → active cooldown reset</span><span class="cron-cat">🤖 IA</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/15min</span><span class="cron-cmd">process-video-queue.php (YouTube)</span><span class="cron-cat">📹 YT</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">⏱️ Moyenne Fréquence (*/30 — */4h)</div></div>
|
||
<div class="cron-list">
|
||
<div class="cron-item"><span class="cron-freq">*/30min</span><span class="cron-cmd">brain-auto-cycle.sh</span><span class="cron-cat">🧠 Brain</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/30min</span><span class="cron-cmd">mind-autonomous.sh</span><span class="cron-cat">🧠 Mind</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/30min</span><span class="cron-cmd">sentinel-autorepair.sh</span><span class="cron-cat">🛡️ Sentinel</span></div>
|
||
<div class="cron-item"><span class="cron-freq">*/30min</span><span class="cron-cmd">pipeline-feeder.php bounce</span><span class="cron-cat">📧 Bounce</span></div>
|
||
<div class="cron-item"><span class="cron-freq">1h</span><span class="cron-cmd">blacklist-cron.sh</span><span class="cron-cat">🛡️ BL</span></div>
|
||
<div class="cron-item"><span class="cron-freq">1h</span><span class="cron-cmd">affiliate-hamid-check + monitor</span><span class="cron-cat">💰 Aff</span></div>
|
||
<div class="cron-item"><span class="cron-freq">1h</span><span class="cron-cmd">creative-performance-engine.py</span><span class="cron-cat">📈 Perf</span></div>
|
||
<div class="cron-item"><span class="cron-freq">1h</span><span class="cron-cmd">ads-commander monitor-roas-shift</span><span class="cron-cat">📈 Ads</span></div>
|
||
<div class="cron-item"><span class="cron-freq">2h</span><span class="cron-cmd">reputation-cron.sh</span><span class="cron-cat">🛡️ Rep</span></div>
|
||
<div class="cron-item"><span class="cron-freq">2h</span><span class="cron-cmd">pipeline-feeder healing</span><span class="cron-cat">🔧 Heal</span></div>
|
||
<div class="cron-item"><span class="cron-freq">3h</span><span class="cron-cmd">pipeline-feeder crm_sync</span><span class="cron-cat">👤 CRM</span></div>
|
||
<div class="cron-item"><span class="cron-freq">4h</span><span class="cron-cmd">brain-optimizer-cron.sh</span><span class="cron-cat">🧠 Opt</span></div>
|
||
<div class="cron-item"><span class="cron-freq">4h</span><span class="cron-cmd">brain-connector sync_send_data</span><span class="cron-cat">📊 Data</span></div>
|
||
<div class="cron-item"><span class="cron-freq">4h</span><span class="cron-cmd">pipeline-feeder n8n_health + offers</span><span class="cron-cat">🔧 Health</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">📅 Basse Fréquence (6h — Quotidien)</div></div>
|
||
<div class="cron-list">
|
||
<div class="cron-item"><span class="cron-freq">6h</span><span class="cron-cmd">vault-guard cron</span><span class="cron-cat">🔒 Vault</span></div>
|
||
<div class="cron-item"><span class="cron-freq">6h</span><span class="cron-cmd">brain-creative-engine full_cycle</span><span class="cron-cat">🎨 Creative</span></div>
|
||
<div class="cron-item"><span class="cron-freq">6h</span><span class="cron-cmd">pipeline-feeder dns + scraping + supply</span><span class="cron-cat">🔧 Feed</span></div>
|
||
<div class="cron-item"><span class="cron-freq">3j</span><span class="cron-cmd">offer-refresh-cron.sh</span><span class="cron-cat">💰 Offers</span></div>
|
||
<div class="cron-item"><span class="cron-freq">00:00</span><span class="cron-cmd">warmup sent_today=0 reset</span><span class="cron-cat">🔥 Reset</span></div>
|
||
<div class="cron-item"><span class="cron-freq">00:00</span><span class="cron-cmd">warmup-engine advance_day</span><span class="cron-cat">🔥 Warmup</span></div>
|
||
<div class="cron-item"><span class="cron-freq">00:00</span><span class="cron-cmd">ia-provider-factory rotate</span><span class="cron-cat">🤖 IA</span></div>
|
||
<div class="cron-item"><span class="cron-freq">02:00</span><span class="cron-cmd">mega-guardian.sh (alerte only)</span><span class="cron-cat">🛡️ Guard</span></div>
|
||
<div class="cron-item"><span class="cron-freq">03:00</span><span class="cron-cmd">wevads-daily-backup.sh</span><span class="cron-cat">💾 Backup</span></div>
|
||
<div class="cron-item"><span class="cron-freq">03:00</span><span class="cron-cmd">sync-custom-audiences.php</span><span class="cron-cat">📈 Ads</span></div>
|
||
<div class="cron-item"><span class="cron-freq">08:00</span><span class="cron-cmd">daily-trend-scraper.php (YouTube)</span><span class="cron-cat">📹 YT</span></div>
|
||
<div class="cron-item"><span class="cron-freq">23:55</span><span class="cron-cmd">pipeline-feeder analytics</span><span class="cron-cat">📊 Stats</span></div>
|
||
<div class="cron-item"><span class="cron-freq">6j/02:10</span><span class="cron-cmd">offer-engine import_cx3</span><span class="cron-cat">💰 Import</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">📊 Répartition par Catégorie</div></div>
|
||
<table class="tbl">
|
||
<tr><th>Catégorie</th><th>Crons</th><th>Fréquence</th></tr>
|
||
<tr><td>🧠 Brain & Optimizer</td><td class="val">6</td><td>*/10 à */4h</td></tr>
|
||
<tr><td>📧 Send & Bounce</td><td class="val">5</td><td>*/15 à */30</td></tr>
|
||
<tr><td>🔥 Warmup</td><td class="val">3</td><td>*/15 + daily</td></tr>
|
||
<tr><td>📊 Tracking & Analytics</td><td class="val">5</td><td>*/15 à daily</td></tr>
|
||
<tr><td>💰 Affiliate & Offers</td><td class="val">4</td><td>1h à 3j</td></tr>
|
||
<tr><td>🛡️ Guardian & Security</td><td class="val">6</td><td>*/10 à daily</td></tr>
|
||
<tr><td>🤖 IA Providers</td><td class="val">3</td><td>*/15 + daily</td></tr>
|
||
<tr><td>🔧 Infra & Health</td><td class="val">7</td><td>*/30 à 6h</td></tr>
|
||
<tr><td>📹 YouTube & Ads</td><td class="val">3</td><td>*/15 à daily</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ EXTERNAL ================================ -->
|
||
<div class="section" id="external">
|
||
<div class="section-title"><span class="icon">🌐</span> Services Externes & Intégrations</div>
|
||
|
||
<div class="grid grid-3">
|
||
<div class="card" style="border-left:3px solid var(--accent-blue);">
|
||
<div class="card-header"><div class="card-title">☁️ Microsoft O365</div><span class="badge badge-green">ACTIF</span></div>
|
||
<table class="tbl">
|
||
<tr><td>Comptes</td><td class="val">1,363 total</td></tr>
|
||
<tr><td>Tenants principaux</td><td>accoff02-10, mbman, globalmed.cl</td></tr>
|
||
<tr><td>Tenants total</td><td class="val">~550 tenants</td></tr>
|
||
<tr><td>API</td><td>Microsoft Graph API</td></tr>
|
||
<tr><td>Création réelle</td><td class="green">✅ Via Worker</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-green);">
|
||
<div class="card-header"><div class="card-title">💰 CX3 Ads</div><span class="badge badge-green">ACTIF</span></div>
|
||
<table class="tbl">
|
||
<tr><td>Login</td><td>Ymahboub@weval-consulting.com</td></tr>
|
||
<tr><td>Portal</td><td>publisher.cx3ads.com</td></tr>
|
||
<tr><td>Aff ID</td><td class="val">10805</td></tr>
|
||
<tr><td>Tracking</td><td>e36lbat.com</td></tr>
|
||
<tr><td>API</td><td>CAKE API v2 (PULL)</td></tr>
|
||
<tr><td>Offres</td><td class="val">~41 actives</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-purple);">
|
||
<div class="card-header"><div class="card-title">💰 Double M (Everflow)</div><span class="badge badge-green">ACTIF</span></div>
|
||
<table class="tbl">
|
||
<tr><td>Tracking</td><td>rivoweb</td></tr>
|
||
<tr><td>API</td><td>Everflow API (PULL)</td></tr>
|
||
<tr><td>Offres</td><td class="val">50 importées</td></tr>
|
||
<tr><td>Pull</td><td>conversions-collector */30</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-cyan);">
|
||
<div class="card-header"><div class="card-title">🤖 IA Providers</div></div>
|
||
<table class="tbl">
|
||
<tr><td class="green">✅ Cerebras</td><td>llama-3.3-70b</td><td>429ms</td></tr>
|
||
<tr><td class="green">✅ Groq</td><td>llama-3.3-70b</td><td>192ms</td></tr>
|
||
<tr><td class="green">✅ SambaNova</td><td>Meta-Llama-3.3-70B</td><td>800ms</td></tr>
|
||
<tr><td class="red">⚠ Gemini</td><td>Quota 429</td><td>Billing requis</td></tr>
|
||
<tr><td class="red">⚠ DeepSeek</td><td>Balance 402</td><td>Recharger $5</td></tr>
|
||
<tr><td class="red">⚠ Claude</td><td>Crédits 400</td><td>Recharger</td></tr>
|
||
<tr><td class="red">❌ Hyperbolic</td><td>Credentials 401</td><td>Nouvelle clé</td></tr>
|
||
<tr><td style="color:var(--text-muted);">— Mistral</td><td colspan="2">Pas de clé</td></tr>
|
||
<tr><td style="color:var(--text-muted);">— Cohere</td><td colspan="2">Pas de clé</td></tr>
|
||
<tr><td style="color:var(--text-muted);">— Ollama</td><td colspan="2">Local :11434</td></tr>
|
||
<tr><td style="color:var(--text-muted);">— OpenRouter</td><td colspan="2">Pas de clé</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-orange);">
|
||
<div class="card-header"><div class="card-title">🌍 DNS & Domaines</div></div>
|
||
<table class="tbl">
|
||
<tr><td>Cloudflare</td><td class="val">culturellemejean.charity</td></tr>
|
||
<tr><td>MX</td><td>mail.wevup.app → 89.167.40.150</td></tr>
|
||
<tr><td>rDNS</td><td>mail.wevup.app</td></tr>
|
||
<tr><td>SPF</td><td class="green">✅ PASS</td></tr>
|
||
<tr><td>DKIM</td><td class="green">✅ PASS</td></tr>
|
||
<tr><td>DMARC</td><td class="green">✅ PASS</td></tr>
|
||
<tr><td>FreeDNS</td><td>191 domaines (DB only)</td></tr>
|
||
<tr><td>Domaines vérifiés</td><td class="val">288</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-red);">
|
||
<div class="card-header"><div class="card-title">🛡️ Captcha Services</div></div>
|
||
<table class="tbl">
|
||
<tr><td class="green">✅ AntiCaptcha</td><td>242ae14...c1</td><td>Active</td></tr>
|
||
<tr><td class="red">⏳ 2Captcha</td><td>PENDING</td><td>Clé requise</td></tr>
|
||
<tr><td class="red">⏳ CapSolver</td><td>PENDING</td><td>Clé requise</td></tr>
|
||
<tr><td class="red">⏳ CapMonster</td><td>PENDING</td><td>Clé requise</td></tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="card" style="border-left:3px solid var(--accent-yellow);">
|
||
<div class="card-header"><div class="card-title">📱 Alertes Telegram</div></div>
|
||
<table class="tbl">
|
||
<tr><td>Bot Token</td><td style="font-size:9px;">8544624912:AAEm9tt...Qwrs</td></tr>
|
||
<tr><td>Chat ID</td><td class="val">7605775322</td></tr>
|
||
<tr><td>Alertes</td><td>Blacklist, Guardian, Rotation</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ================================ KPIs ================================ -->
|
||
<div class="section" id="kpis">
|
||
<div class="section-title"><span class="icon">📊</span> KPIs Plateforme — 18 Février 2026</div>
|
||
|
||
<div class="stat-row">
|
||
<div class="stat"><div class="stat-label">Envois Jour</div><div class="stat-val blue" id="kpi-sends">--</div></div>
|
||
<div class="stat"><div class="stat-label">Opens</div><div class="stat-val cyan" id="kpi-opens">--</div></div>
|
||
<div class="stat"><div class="stat-label">Clicks</div><div class="stat-val green" id="kpi-clicks">--</div></div>
|
||
<div class="stat"><div class="stat-label">Conversions</div><div class="stat-val orange" id="kpi-conversions">--</div></div>
|
||
<div class="stat"><div class="stat-label">Revenue</div><div class="stat-val red" id="kpi-revenue">--</div></div>
|
||
<div class="stat"><div class="stat-label">Projection 24h</div><div class="stat-val purple" id="kpi-projection">--</div></div>
|
||
</div>
|
||
|
||
<div class="grid grid-3">
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">📧 Infrastructure Email</div></div>
|
||
<table class="tbl">
|
||
<tr><td>O365 Comptes</td><td class="val">1,363</td></tr>
|
||
<tr><td>Warmup Accounts</td><td class="val">2,036</td></tr>
|
||
<tr><td>Seed Accounts</td><td class="val">1,275</td></tr>
|
||
<tr><td>Brain Seeds</td><td class="val">51,454</td></tr>
|
||
<tr><td>Send Pool Senders</td><td class="val">150</td></tr>
|
||
<tr><td>Creatives</td><td class="val">1,285</td></tr>
|
||
<tr><td>Quality OK Configs</td><td class="val">126</td></tr>
|
||
<tr><td>Cap Warmup/jour</td><td class="val">77,170</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">💰 Affiliation</div></div>
|
||
<table class="tbl">
|
||
<tr><td>Offres Actives</td><td class="val">85 (CX3) + 50 (DoubleM)</td></tr>
|
||
<tr><td>Affiliate Offers DB</td><td class="val">691</td></tr>
|
||
<tr><td>Payout Moyen CX3</td><td class="val">$27</td></tr>
|
||
<tr><td>Payout Max</td><td class="val">$265</td></tr>
|
||
<tr><td>Links Actifs</td><td class="val">552</td></tr>
|
||
<tr><td>Modèle</td><td class="val">PULL (pas postback)</td></tr>
|
||
</table>
|
||
</div>
|
||
<div class="card">
|
||
<div class="card-header"><div class="card-title">🏗️ Plateforme</div></div>
|
||
<table class="tbl">
|
||
<tr><td>Screens Arsenal</td><td class="val">149 HTML</td></tr>
|
||
<tr><td>APIs Total</td><td class="val">653</td></tr>
|
||
<tr><td>Crons</td><td class="val">42</td></tr>
|
||
<tr><td>Contacts Valides</td><td class="val">2,995,784</td></tr>
|
||
<tr><td>Contacts Total</td><td class="val">7,354,713</td></tr>
|
||
<tr><td>Personas</td><td class="val">178 (8 pays)</td></tr>
|
||
<tr><td>IA Providers Live</td><td class="val">3/12</td></tr>
|
||
<tr><td>Guardian</td><td class="green">Alerte only (0 auto-fix)</td></tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><!-- content -->
|
||
|
||
<div style="text-align:center;padding:24px;color:var(--text-muted);font-size:11px;font-family:'JetBrains Mono',monospace;border-top:1px solid var(--border);">
|
||
WEVAL Consulting — Yacine Mahboub — Casablanca, Maroc — Architecture WEVADS v2.0 — 18 Février 2026
|
||
</div>
|
||
|
||
<script>
|
||
function showTab(id) {
|
||
document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
|
||
document.querySelectorAll('.nav-btn').forEach(b => b.classList.remove('active'));
|
||
document.getElementById(id).classList.add('active');
|
||
event.target.classList.add('active');
|
||
}
|
||
</script>
|
||
|
||
<script>
|
||
// LIVE DATA REFRESH
|
||
const API = '/api/architecture-live.php';
|
||
let liveData = null;
|
||
|
||
async function fetchLive() {
|
||
try {
|
||
const r = await fetch(API);
|
||
liveData = await r.json();
|
||
updateDashboard(liveData);
|
||
document.getElementById('live-ts').textContent = new Date(liveData.ts).toLocaleTimeString('fr-FR');
|
||
document.getElementById('live-dot').style.background = '#4aff8a';
|
||
} catch(e) {
|
||
document.getElementById('live-dot').style.background = '#ff4a6a';
|
||
}
|
||
}
|
||
|
||
function updateDashboard(d) {
|
||
// Update KPI section stats
|
||
const map = {
|
||
'kpi-sends': d.sends_today,
|
||
'kpi-opens': d.opens_today || d.opens_total,
|
||
'kpi-clicks': d.clicks_today || d.clicks_total,
|
||
'kpi-conversions': d.conversions_today,
|
||
'kpi-revenue': '$' + d.revenue_today,
|
||
'kpi-projection': '~' + Math.round(d.sends_today * (24/new Date().getHours() || 1)/1000) + 'K',
|
||
};
|
||
for(const [id, val] of Object.entries(map)) {
|
||
const el = document.getElementById(id);
|
||
if(el) el.textContent = typeof val === 'number' ? val.toLocaleString() : val;
|
||
}
|
||
|
||
// Update header meta chips
|
||
const chips = document.querySelectorAll('.live-val');
|
||
if(chips.length > 0 && d.sends_today !== undefined) {
|
||
chips[0].textContent = d.sends_today.toLocaleString() + ' sends';
|
||
}
|
||
}
|
||
|
||
// Auto-refresh every 30 seconds
|
||
fetchLive();
|
||
setInterval(fetchLive, 30000);
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|