auto-sync-2320
This commit is contained in:
BIN
api/playwright-v94-final/01-wtp-home.png
Normal file
BIN
api/playwright-v94-final/01-wtp-home.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 297 KiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-20T21:16:03+00:00",
|
||||
"ts": "2026-04-20T21:19:25+00:00",
|
||||
"summary": {
|
||||
"total_categories": 7,
|
||||
"total_kpis": 56,
|
||||
|
||||
@@ -2604,116 +2604,5 @@ if (typeof window.navigateTo === 'function'){
|
||||
<script src="/api/v72-drilldown-universal.js" defer></script>
|
||||
<script src="/api/archi-meta-badge.js" defer></script>
|
||||
|
||||
<!-- V94 CATALOG AUTO-DISCOVERY -->
|
||||
<style>
|
||||
.v94-catalog-section{margin:48px auto;max-width:1600px;padding:0 24px;font-family:-apple-system,BlinkMacSystemFont,sans-serif}
|
||||
.v94-cat-h2{color:#6ba3ff;font-size:28px;border-bottom:2px solid #1e3a8a;padding-bottom:12px;margin-bottom:8px}
|
||||
.v94-cat-sub{color:#9ca8d3;font-size:14px;margin-bottom:20px}
|
||||
.v94-live-bar{display:flex;gap:16px;flex-wrap:wrap;background:linear-gradient(135deg,#141933,#1e2549);border:1px solid #263161;padding:16px;border-radius:10px;margin-bottom:24px}
|
||||
.v94-live-item{flex:1;min-width:140px}
|
||||
.v94-live-num{font-size:22px;font-weight:700;color:#6ba3ff}
|
||||
.v94-live-lbl{font-size:11px;color:#9ca8d3;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}
|
||||
.v94-cat-filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}
|
||||
.v94-cat-tab{padding:6px 14px;background:#141933;border:1px solid #263161;border-radius:20px;color:#9ca8d3;cursor:pointer;font-size:12px;transition:.15s}
|
||||
.v94-cat-tab:hover{border-color:#6ba3ff;color:#fff}
|
||||
.v94-cat-tab.active{background:#6ba3ff;color:#0a0e27;border-color:#6ba3ff;font-weight:600}
|
||||
.v94-cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;margin-top:12px}
|
||||
.v94-cat-card{background:#141933;border:1px solid #263161;border-radius:8px;padding:12px;text-decoration:none;color:#e4e8f7;transition:.15s;display:block;font-size:13px}
|
||||
.v94-cat-card:hover{border-color:#6ba3ff;background:#1a2045;transform:translateY(-1px)}
|
||||
.v94-cat-cardname{font-weight:600;color:#fff;margin-bottom:6px;word-break:break-all}
|
||||
.v94-cat-cardmeta{display:flex;gap:8px;font-size:10px;color:#9ca8d3;align-items:center}
|
||||
.v94-cat-badge{padding:2px 6px;border-radius:8px;font-size:9px;text-transform:uppercase;font-weight:600}
|
||||
.v94-bd-core{background:#10b98122;color:#10b981}
|
||||
.v94-bd-dashboards{background:#6ba3ff22;color:#6ba3ff}
|
||||
.v94-bd-agents{background:#c084fc22;color:#c084fc}
|
||||
.v94-bd-blade_ops{background:#f59e0b22;color:#f59e0b}
|
||||
.v94-bd-products{background:#ec489922;color:#ec4899}
|
||||
.v94-bd-business{background:#06b6d422;color:#06b6d4}
|
||||
.v94-bd-crm_sales{background:#8b5cf622;color:#8b5cf6}
|
||||
.v94-bd-ai{background:#84cc1622;color:#84cc16}
|
||||
.v94-bd-admin_sec{background:#ef444422;color:#ef4444}
|
||||
.v94-bd-wiki_docs{background:#64748b22;color:#94a3b8}
|
||||
.v94-bd-legacy{background:#71717a22;color:#71717a;text-decoration:line-through}
|
||||
.v94-bd-other{background:#4b556322;color:#94a3b8}
|
||||
.v94-search{padding:8px 14px;width:300px;background:#141933;border:1px solid #263161;border-radius:6px;color:#e4e8f7;font-size:13px;margin-left:auto}
|
||||
.v94-search:focus{outline:0;border-color:#6ba3ff}
|
||||
</style>
|
||||
<section class="v94-catalog-section">
|
||||
<h2 class="v94-cat-h2">🗂️ WEVALTECH Catalog — Point d'entrée unifié</h2>
|
||||
<p class="v94-cat-sub">Toutes les pages de l'archi, auto-découvertes depuis le système de fichiers. Aucune ne reste orpheline. Chiffres live rafraîchis.</p>
|
||||
|
||||
<div class="v94-live-bar" id="v94-live-bar"><span class="v94-live-item">Chargement...</span></div>
|
||||
|
||||
<div class="v94-cat-filters" id="v94-cat-filters"></div>
|
||||
<div id="v94-cat-count" class="v94-cat-sub"></div>
|
||||
<div class="v94-cat-grid" id="v94-cat-grid"></div>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
const grid = document.getElementById('v94-cat-grid');
|
||||
const filters = document.getElementById('v94-cat-filters');
|
||||
const liveBar = document.getElementById('v94-live-bar');
|
||||
const countEl = document.getElementById('v94-cat-count');
|
||||
let allItems = [];
|
||||
let activeCat = 'all';
|
||||
let search = '';
|
||||
|
||||
const catLabels = {
|
||||
all:'Tous', core:'⚡ Core', dashboards:'📊 Dashboards', agents:'🤖 Agents',
|
||||
blade_ops:'🛠️ Ops', products:'📦 Products', business:'💼 Business',
|
||||
crm_sales:'💰 CRM', ai:'🧠 AI', admin_sec:'🔐 Admin', wiki_docs:'📚 Docs',
|
||||
legacy:'🗄️ Legacy', other:'📁 Other'
|
||||
};
|
||||
|
||||
function render() {
|
||||
const term = search.toLowerCase().trim();
|
||||
const filtered = allItems.filter(it =>
|
||||
(activeCat === 'all' || it.category === activeCat) &&
|
||||
(!term || it.file.toLowerCase().includes(term))
|
||||
);
|
||||
countEl.textContent = `${filtered.length} pages / ${allItems.length} total`;
|
||||
grid.innerHTML = filtered.map(it => `
|
||||
<a class="v94-cat-card" href="${it.url}" target="_blank">
|
||||
<div class="v94-cat-cardname">${it.file}</div>
|
||||
<div class="v94-cat-cardmeta">
|
||||
<span class="v94-cat-badge v94-bd-${it.category}">${it.category}</span>
|
||||
<span>${it.size_kb}K</span><span>•</span><span>${it.updated}</span>
|
||||
</div>
|
||||
</a>`).join('');
|
||||
}
|
||||
|
||||
fetch('/api/wevaltech-catalog.php').then(r => r.json()).then(d => {
|
||||
allItems = d.catalog || [];
|
||||
// Live bar
|
||||
const ls = d.live_state || {};
|
||||
liveBar.innerHTML = `
|
||||
<div class="v94-live-item"><div class="v94-live-num">${ls.l99_score}/100</div><div class="v94-live-lbl">L99 score</div></div>
|
||||
<div class="v94-live-item"><div class="v94-live-num">${ls.l99_pass}/${ls.l99_total}</div><div class="v94-live-lbl">NonReg</div></div>
|
||||
<div class="v94-live-item"><div class="v94-live-num">${ls.kpi_ok} / ${ls.kpi_warn} / ${ls.kpi_fail}</div><div class="v94-live-lbl">KPIs ok / warn / fail</div></div>
|
||||
<div class="v94-live-item"><div class="v94-live-num">${ls.completeness_pct}%</div><div class="v94-live-lbl">Completeness</div></div>
|
||||
<div class="v94-live-item"><div class="v94-live-num">${ls.tools_total}</div><div class="v94-live-lbl">Tools (${ls.tools_exec} exec)</div></div>
|
||||
<div class="v94-live-item"><div class="v94-live-num">${d.stats.total}</div><div class="v94-live-lbl">Pages (${d.stats.legacy} legacy)</div></div>
|
||||
<input class="v94-search" id="v94-search" placeholder="Rechercher..." type="search">`;
|
||||
document.getElementById('v94-search').addEventListener('input', e => { search = e.target.value; render(); });
|
||||
|
||||
// Filters
|
||||
const cats = ['all'].concat(Object.keys(d.stats.by_cat).sort());
|
||||
filters.innerHTML = cats.map(c => `<div class="v94-cat-tab" data-cat="${c}">${catLabels[c] || c} (${c==='all' ? allItems.length : (d.stats.by_cat[c]||0)})</div>`).join('');
|
||||
filters.querySelectorAll('.v94-cat-tab').forEach(t => {
|
||||
t.addEventListener('click', () => {
|
||||
filters.querySelectorAll('.v94-cat-tab').forEach(x => x.classList.remove('active'));
|
||||
t.classList.add('active');
|
||||
activeCat = t.dataset.cat;
|
||||
render();
|
||||
});
|
||||
});
|
||||
filters.querySelector('[data-cat="all"]').classList.add('active');
|
||||
render();
|
||||
}).catch(e => { grid.innerHTML = '<p style="color:#ef4444">Catalog unavailable: ' + e + '</p>'; });
|
||||
})();
|
||||
</script>
|
||||
<!-- END V94 CATALOG -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user