[ 'name' => 'WEVIA Master', 'tagline' => 'IA autonome propriétaire — orchestration multi-agents', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'IA Souveraine · En production', 'h1_a' => "L'agent qui exécute.", 'h1_b' => 'Pas juste répond.', 'desc' => 'Agent IA autonome propriétaire. Ne se contente pas de conseiller : scanne votre infrastructure, exécute des décisions contrôlées, apprend en continu sur votre domaine métier. Cascade multi-modèles intelligente pour combiner performance, coût maîtrisé et souveraineté des données.', 'stats' => [['Multi-model', 'Cascade intelligente'], ['Sovereign', 'EU certified'], ['<200ms', 'Latence médiane'], ['6σ', 'Qualité L99']], 'features' => [ ['Orchestration multi-agents', 'Décompose les demandes complexes en sous-tâches distribuées sur agents spécialisés.'], ['Exécution contrôlée', 'Actions réelles avec journalisation, audit trail complet et gouvernance fine.'], ['Raisonnement métier', 'Fine-tuning possible sur votre domaine pour précision supérieure aux modèles génériques.'], ['Intégration système', 'API REST, webhooks, SSE streaming, hooks dans CRM, ERP, Slack, email, outils internes.'], ['Cascade souveraine', 'Combine plusieurs providers IA avec fallback intelligent, optimisation coût-qualité dynamique.'], ['Monitoring natif', 'Dashboard temps réel, métriques Six Sigma, alerting proactif sur dérive de qualité.'], ], ], 'wevia-inference' => [ 'name' => 'WEVIA Inference', 'tagline' => 'GPU dédié souverain · multi-modèles', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Infrastructure IA · Haute disponibilité', 'h1_a' => 'Inférence IA sans compromis', 'h1_b' => 'sur vos données.', 'desc' => "Plateforme d'inférence IA sur GPU dédiés, hébergée en souveraineté européenne. Déploiement multi-modèles (LLMs, vision, embeddings), API compatible OpenAI, zéro exfiltration, SLA 100%.", 'stats' => [['GPU dédié', 'A100 · H100'], ['EU Sovereign', 'Certifié'], ['API compatible', 'OpenAI spec'], ['100%', 'SLA garanti']], 'features' => [ ['GPUs dédiés premium', 'A100 et H100 allouées exclusivement à vos workloads, aucun partage multi-tenant.'], ['Multi-modèles unifié', "LLMs, vision, audio, embeddings — une seule API pour tous les cas d'usage."], ["API drop-in OpenAI", "Migration depuis OpenAI en changeant uniquement l'URL endpoint, aucun refactor code."], ['Souveraineté stricte', 'Données et modèles hébergés en Europe, conformité RGPD, AI Act et HDS.'], ['Scaling automatique', 'Autoscaling horizontal basé sur la charge, facturation au token consommé.'], ['Fine-tuning intégré', 'Entraînement domaine métier sur vos données, versioning et rollback des modèles.'], ], ], 'projectflow' => [ 'name' => 'ProjectFlow', 'tagline' => 'Orchestration projets & agents IA', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Project Intelligence · Live', 'h1_a' => 'Vos projets,', 'h1_b' => 'orchestrés par IA.', 'desc' => "Plateforme de gestion de projets augmentée par agents IA. Planification, suivi d'objectifs, orchestration d'équipes hybrides humains-agents, reporting temps réel sur avancement et bloquants.", 'stats' => [['Agents IA', 'Spécialisés par rôle'], ['SSE', 'Streaming temps réel'], ['Kanban', '+ Agents'], ['RACI', 'Auto-généré']], 'features' => [ ['Équipes hybrides', 'Humains et agents IA travaillent sur les mêmes tâches, coordination fluide.'], ['Goals & OKRs', "Objectifs mesurables, suivi d'avancement, alertes dérive, boucles de rétroaction."], ['Dashboard temps réel', "Vue directeur de l'avancement global, des risques, des décisions en attente."], ['Auto-RACI', 'Matrice responsabilités générée automatiquement depuis la structure du projet.'], ['Intégration native', "Connecteurs Jira, GitHub, Slack, Gmail, Teams — pas de silo d'information."], ['Audit trail', 'Traçabilité complète des décisions, idéal pour environnements réglementés.'], ], ], 'researchflow' => [ 'name' => 'ResearchFlow', 'tagline' => 'Recherche multi-agents approfondie', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Research Intelligence · Live', 'h1_a' => 'La recherche approfondie,', 'h1_b' => 'automatisée.', 'desc' => 'Moteur de recherche multi-agents. Décompose une question complexe en sous-requêtes, explore sources publiques et internes, synthétise un rapport structuré avec citations vérifiables.', 'stats' => [['Multi-agents', 'Spécialisés'], ['Sources', 'Web + interne'], ['Citations', 'Vérifiables'], ['Markdown', 'Structuré']], 'features' => [ ['Décomposition automatique', "Une question complexe devient un arbre de sous-questions explorées en parallèle."], ['Sources internes & web', 'Combine votre base documentaire privée avec les sources publiques crédibles.'], ['Citations vérifiables', "Chaque affirmation liée à sa source, lien direct, extraction du passage original."], ['Rapport Markdown', "Livrable structuré prêt à l'emploi : exec summary, détails, annexes, bibliographie."], ['Vérification croisée', 'Triangulation automatique des informations entre sources pour fiabilité.'], ['Export multi-format', 'PDF, Word, Notion, Confluence — intégration dans vos flux existants.'], ], ], 'boardflow' => [ 'name' => 'BoardFlow', 'tagline' => 'Whiteboard collaboratif intelligent', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Collaboration · Live', 'h1_a' => 'Le whiteboard', 'h1_b' => 'qui pense avec vous.', 'desc' => "Tableau collaboratif visuel augmenté par IA. Brainstorming, architecture, mind-mapping, process design. L'IA suggère, structure, reformule, détecte les angles morts en temps réel.", 'stats' => [['Temps réel', 'Multi-user'], ['IA intégrée', 'Contextuelle'], ['Templates', 'Design thinking'], ['Export', 'Multi-format']], 'features' => [ ['Canvas infini', 'Espace visuel illimité pour sketches, diagrammes, notes, connexions, structures.'], ['Co-création IA', "L'agent propose, restructure, consolide, détecte les incohérences en temps réel."], ['Templates métier', 'Bibliothèque de patterns : design thinking, BPMN, architecture, product canvas.'], ['Présence multi-user', 'Curseurs temps réel, voix-vidéo embarquée, mode focus ou revue synchrone.'], ['Versioning', 'Historique complet des évolutions, fork et merge de branches créatives.'], ['Intégration outils', 'Import depuis Figma, Lucidchart, Visio ; export multi-format.'], ], ], 'stackscan' => [ 'name' => 'StackScan', 'tagline' => 'Audit & inventaire OSS entreprise', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Open Source Discovery · Live', 'h1_a' => 'Votre stack open source,', 'h1_b' => 'en pleine lumière.', 'desc' => 'Scanner et cartographe de votre écosystème open source. Détecte dépendances, licences, vulnérabilités, versions obsolètes. Recommandations de remédiation priorisées par impact et effort.', 'stats' => [['Licences', 'SPDX complet'], ['CVE', 'Temps réel'], ['SBOM', 'CycloneDX'], ['Priorisation', 'Impact × effort']], 'features' => [ ['SBOM automatique', 'Génération Software Bill of Materials au format CycloneDX ou SPDX, exports continus.'], ['Licences & conformité', "Détection de toutes licences, alertes sur incompatibilités et contraintes juridiques."], ['CVE temps réel', 'Scanning continu des vulnérabilités, alertes proactives, corrélation avec contexte.'], ['Priorisation intelligente', "Impact business × effort de remédiation = file d'attente d'actions claire."], ['Intégration CI/CD', 'Hooks GitHub Actions, GitLab CI, Jenkins — bloque les déploiements non conformes.'], ['Dashboard exécutif', 'Vue directeur du risque OSS, tendances, score santé de chaque composant métier.'], ], ], 'wevia-desk' => [ 'name' => 'WEVIA Desk', 'tagline' => 'Automatisation bureautique par IA', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Desktop Automation · Live', 'h1_a' => "L'agent qui pilote", 'h1_b' => 'votre poste de travail.', 'desc' => "Agent IA desktop. Automatise tâches répétitives : tri d'emails, extraction de données, remplissage de formulaires, génération de livrables. Contrôle des applications natives via API ou vision.", 'stats' => [['Native apps', 'Contrôle direct'], ['Vision IA', 'OCR + reconnaissance'], ['Workflows', 'Low-code'], ['Audit', 'Log complet']], 'features' => [ ['Contrôle natif', "Pilote Excel, Word, Outlook, navigateur, applications métier via API ou automation visuelle."], ['Vision IA intégrée', 'OCR et reconnaissance visuelle pour interagir avec interfaces legacy sans API.'], ['Workflows low-code', "Éditeur visuel pour orchestrer des séquences complexes sans savoir coder."], ['Déclencheurs contextuels', 'Actions lancées sur email reçu, fichier déposé, heure, événement calendrier.'], ['Mode supervisé', "Validation humaine requise pour actions sensibles, audit trail exhaustif."], ['Déploiement groupé', 'Rollout sur parc de postes avec gouvernance centrale, policies par rôle.'], ], ], 'reachhcp' => [ 'name' => 'ReachHCP', 'tagline' => 'Base HCP mondiale · consent-based', 'suite' => 'WEVAL Pharma Cloud', 'accent' => 'coral', 'badge' => 'Healthcare Intelligence · Live', 'h1_a' => 'Les professionnels de santé,', 'h1_b' => 'atteints dans les règles.', 'desc' => "Base de données de professionnels de santé vérifiés, consent-based, couverture mondiale. Segmentation fine par spécialité, zone, typologie d'exercice. Conformité RGPD, HDS, exports auditables.", 'stats' => [['Mondial', 'Multi-continents'], ['Consent', 'Opt-in vérifié'], ['RGPD', '+ HDS'], ['Update', 'Continu']], 'features' => [ ['Couverture mondiale', "Europe, Amériques, MENA, Asie — spécialistes hospitaliers et libéraux, tous secteurs."], ['Consent-based strict', 'Opt-in vérifié source, traçabilité complète, retrait à tout moment, conformité maximale.'], ['Segmentation fine', "Spécialité, sous-spécialité, zone géographique, typologie d'exercice, affiliation."], ['Enrichissement continu', 'Mises à jour en continu, détection automatique des changements, déduplication ML.'], ['Exports auditables', "Logs complets de chaque extraction, justification du consent, preuves horodatées."], ['API temps réel', 'REST et GraphQL pour intégration CRM, automation marketing, analytics.'], ], ], 'campaign-studio' => [ 'name' => 'Campaign Studio', 'tagline' => 'Création & orchestration campagnes pharma', 'suite' => 'WEVAL Pharma Cloud', 'accent' => 'coral', 'badge' => 'Pharma Campaigns · Live', 'h1_a' => 'La campagne omnicanale,', 'h1_b' => 'compliant by design.', 'desc' => "Studio de création et orchestration de campagnes pharma. Assets conformes (validation médicale embarquée), multicanal (email, print, meetings, digital), tracking conforme, reporting exécutif.", 'stats' => [['Multicanal', 'Email · Print · Live'], ['Validation', 'Médicale auto'], ['Compliance', 'Track complet'], ['ROI', 'Vue exec']], 'features' => [ ['Studio de création', "Éditeur visuel avec bibliothèque d'assets, templates validés, versioning complet."], ['Validation médicale', 'Workflow de relecture obligatoire, audit trail, signature électronique des MRL.'], ['Orchestration multicanal', 'Une séquence = email + courrier + meeting + push — cadencement intelligent.'], ['Tracking compliant', "Attribution fine conforme RGPD, pas de cookies tiers, pixels propriétaires."], ['Dashboard ROI', "Vue exécutive par campagne, par produit, par territoire, par spécialité."], ['A/B testing rigoureux', "Plans d'expérience statistiquement signifiants, significance testing intégré."], ], ], 'consent-manager' => [ 'name' => 'Consent Manager', 'tagline' => 'Gestion du consentement B2B healthcare', 'suite' => 'WEVAL Pharma Cloud', 'accent' => 'coral', 'badge' => 'B2B Consent · Live', 'h1_a' => 'Le consentement professionnel,', 'h1_b' => 'géré comme un asset.', 'desc' => "Plateforme de gestion du consentement B2B pour les interactions avec professionnels de santé. Collecte, stockage horodaté, retrait, audit, preuve légale. Conformité RGPD, LPD, LGPD, CCPA.", 'stats' => [['Multi-juridictions', 'RGPD · LPD · LGPD'], ['Preuve', 'Horodatée'], ['Retrait', 'Un clic'], ['Audit', 'Exports complets']], 'features' => [ ['Collecte multi-canal', "Formulaires web, mobile, print avec QR, signature électronique, validation téléphonique."], ['Stockage horodaté', "Chaque consent ou refus daté, sourcé, signé — preuve juridique opposable."], ['Retrait en un clic', "Liens de désinscription dans chaque communication, propagation immédiate aux systèmes."], ['Audit trail complet', "Qui, quoi, quand, depuis où — exports complets à la demande d'un régulateur."], ['Conformité multi-juridictions', 'RGPD européen, LPD suisse, LGPD brésilien, CCPA californien, mises à jour continues.'], ['API temps réel', 'Hooks vers CRM, marketing automation, data warehouse — synchro sub-seconde.'], ], ], ]; const SUITES = [ 'WEVIA Enterprise' => [ 'slug' => 'wevia-enterprise', 'desc' => "L'écosystème d'IA souveraine propriétaire WEVAL. Agent autonome, inférence GPU dédiée, orchestration multi-agents, whiteboard collaboratif, audit de stack, automatisation desktop — une stack complète, interopérable, souveraine.", 'siblings' => ['WEVIA Master', 'WEVIA Inference', 'WEVIA Life', 'WEVIA White-Label', 'ProjectFlow', 'ResearchFlow', 'BoardFlow', 'Blade AI', 'StackScan', 'WEVIA Desk'], ], 'WEVAL Pharma Cloud' => [ 'slug' => 'pharma-cloud', 'desc' => "Suite dédiée aux sciences de la vie et à l'industrie pharmaceutique. Base HCP mondiale consent-based, CRM pharma, studio de campagnes compliant, gestion du consentement, dashboard exécutif.", 'siblings' => ['ReachHCP', 'ReachHCP API', 'Healthcare CRM', 'Campaign Studio', 'HCP Dashboard', 'Consent Manager'], ], ]; // Light + Dark accent palettes (per suite) const ACCENTS = [ 'teal' => ['light' => '#0d9488', 'dark' => '#00c9a7', 'soft_l' => 'rgba(13,148,136,.08)', 'soft_d' => 'rgba(0,201,167,.12)'], 'purple' => ['light' => '#6f5cff', 'dark' => '#7c5cfc', 'soft_l' => 'rgba(111,92,255,.08)', 'soft_d' => 'rgba(124,92,252,.12)'], 'gold' => ['light' => '#b88a2e', 'dark' => '#f0c674', 'soft_l' => 'rgba(184,138,46,.08)', 'soft_d' => 'rgba(240,198,116,.12)'], 'coral' => ['light' => '#dc3e3e', 'dark' => '#ff6b6b', 'soft_l' => 'rgba(220,62,62,.08)', 'soft_d' => 'rgba(255,107,107,.12)'], ]; function get_template(): string { return <<<'HTML' {{NAME}} — {{TAGLINE}} | WEVAL Consulting
{{BADGE}}

{{H1_A}}
{{H1_B}}

{{DESC}}

Demander une démo → Explorer la suite
▸ Composant de la suite {{SUITE}}
// Métriques clés

La performance, chiffrée.

{{STATS_HTML}}
// Capacités

Ce que {{NAME}} fait pour vous.

Fonctionnalités clés, livrées en production. Chaque capacité est éprouvée en conditions réelles et maintenue sous standard Six Sigma L99.

{{FEATURES_HTML}}
// Écosystème

Intégré dans {{SUITE}}.

{{NAME}} s'inscrit dans la suite {{SUITE}}, conçue pour l'interopérabilité. Chaque application de la suite communique nativement, partage données et événements, amplifie la valeur des autres.

Suite {{SUITE}}

{{SUITE_DESC}}

Voir la suite complète →
{{SIBLING_TAGS}}
// Commencer

Prêt à essayer {{NAME}} ?

Démonstration personnalisée sur vos données. Diagnostic cas d'usage, scoping technique, proposition de déploiement en 45 minutes.

Réserver une démo → Voir le catalogue complet
HTML; } function build_page(string $slug): array { if (!isset(PRODUCTS[$slug])) return ['ok' => false, 'slug' => $slug, 'error' => 'Unknown slug']; $p = PRODUCTS[$slug]; $suite_name = $p['suite']; if (!isset(SUITES[$suite_name])) return ['ok' => false, 'slug' => $slug, 'error' => 'Unknown suite: ' . $suite_name]; $suite = SUITES[$suite_name]; $accent = ACCENTS[$p['accent']]; $stats_html = ''; foreach ($p['stats'] as [$v, $l]) { $stats_html .= sprintf('
%s
%s
', htmlspecialchars($v), htmlspecialchars($l)); } $features_html = ''; foreach ($p['features'] as [$title, $text]) { $features_html .= sprintf('

%s

%s

', htmlspecialchars($title), htmlspecialchars($text)); } $sibling_tags = ''; foreach ($suite['siblings'] as $sib) { $cls = ($sib === $p['name']) ? 'apptag self' : 'apptag'; $sibling_tags .= sprintf('%s', $cls, htmlspecialchars($sib)); } $desc_short = mb_substr(strip_tags($p['desc']), 0, 140); $html = get_template(); $vars = [ '{{SLUG}}' => $slug, '{{NAME}}' => $p['name'], '{{TAGLINE}}' => $p['tagline'], '{{BADGE}}' => $p['badge'], '{{H1_A}}' => $p['h1_a'], '{{H1_B}}' => $p['h1_b'], '{{DESC}}' => $p['desc'], '{{DESC_SHORT}}' => $desc_short, '{{SUITE}}' => $suite_name, '{{SUITE_SLUG}}' => $suite['slug'], '{{SUITE_DESC}}' => $suite['desc'], '{{STATS_HTML}}' => $stats_html, '{{FEATURES_HTML}}' => $features_html, '{{SIBLING_TAGS}}' => $sibling_tags, '{{A_LIGHT}}' => $accent['light'], '{{A_DARK}}' => $accent['dark'], '{{A_SOFT_L}}' => $accent['soft_l'], '{{A_SOFT_D}}' => $accent['soft_d'], ]; $html = strtr($html, $vars); foreach (FORBIDDEN_TERMS as $term) { $pattern = '/\b' . preg_quote($term, '/') . '\b/'; if (preg_match($pattern, $html)) { return ['ok' => false, 'slug' => $slug, 'error' => "Forbidden term: $term"]; } } if (!str_contains($html, '')) return ['ok' => false, 'slug' => $slug, 'error' => 'Missing DOCTYPE']; if (!str_contains($html, '')) return ['ok' => false, 'slug' => $slug, 'error' => 'Missing closing html']; $target = "/var/www/html/products/{$slug}.html"; if (file_exists($target)) { $gold_dir = '/opt/wevads/vault/gold-site-pages-' . date('Ymd'); if (!is_dir($gold_dir)) @mkdir($gold_dir, 0755, true); @copy($target, $gold_dir . "/{$slug}-" . date('His') . '.html'); return ['ok' => false, 'slug' => $slug, 'error' => 'File exists — zero écrasement doctrine']; } $ok = @file_put_contents($target, $html); if ($ok === false) return ['ok' => false, 'slug' => $slug, 'error' => 'Write failed']; return ['ok' => true, 'slug' => $slug, 'file' => $target, 'bytes' => strlen($html), 'features' => count($p['features']), 'theme' => 'light+toggle']; } function scan_forbidden(string $dir = '/var/www/html'): array { $hits = []; $exts = ['html', 'htm']; $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS)); foreach ($rii as $f) { if (!in_array(strtolower($f->getExtension()), $exts, true)) continue; $path = $f->getPathname(); if (str_contains($path, '/node_modules/') || str_contains($path, '/.git/')) continue; $content = @file_get_contents($path); if ($content === false) continue; foreach (['SAP Gold', 'Gold Partner'] as $t) { $pattern = '/\b' . preg_quote($t, '/') . '\b/'; if (preg_match($pattern, $content)) $hits[] = ['file' => $path, 'term' => $t]; } } return $hits; } if (PHP_SAPI !== 'cli') { http_response_code(403); echo "CLI only"; exit; } $action = $argv[1] ?? 'help'; switch ($action) { case 'build': $slug = $argv[2] ?? null; if (!$slug) { echo "Usage: build SLUG\n"; exit(1); } echo json_encode(build_page($slug), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n"; break; case 'build_all': $ok = 0; $fail = 0; foreach (array_keys(PRODUCTS) as $slug) { $r = build_page($slug); if ($r['ok']) { $ok++; } else { $fail++; } echo sprintf("[%s] %-20s %s\n", $r['ok'] ? 'OK' : 'XX', $slug, $r['ok'] ? ($r['bytes'] . 'B, ' . $r['features'] . ' features, theme=' . $r['theme']) : $r['error']); } echo sprintf("\n=== %d OK · %d FAIL ===\n", $ok, $fail); break; case 'list': foreach (PRODUCTS as $s => $p) echo sprintf("%-20s | %-25s | %s\n", $s, $p['suite'], $p['tagline']); break; case 'scan_forbidden': $hits = scan_forbidden('/var/www/html'); if (!$hits) { echo "Aucune occurrence interdite trouvée.\n"; exit(0); } foreach ($hits as $h) echo sprintf("FOUND: %s in %s\n", $h['term'], $h['file']); echo sprintf("\n=== %d fichiers à nettoyer ===\n", count($hits)); break; case 'validate': $slug = $argv[2] ?? null; if (!$slug) { echo "Usage: validate SLUG\n"; exit(1); } $target = "/var/www/html/products/{$slug}.html"; if (!file_exists($target)) { echo "NOT FOUND: $target\n"; exit(1); } $c = file_get_contents($target); $report = [ 'exists' => true, 'size' => strlen($c), 'has_doctype' => str_contains($c, ''), 'has_title' => str_contains($c, ''), 'has_og' => str_contains($c, 'og:title'), 'has_suite_link' => str_contains($c, '/solutions/'), 'has_theme_toggle' => str_contains($c, 'weval-theme'), 'light_by_default' => str_contains($c, 'data-theme="light"'), 'forbidden_hits' => [], ]; foreach (FORBIDDEN_TERMS as $t) { $pattern = '/\b' . preg_quote($t, '/') . '\b/'; if (preg_match($pattern, $c)) $report['forbidden_hits'][] = $t; } $report['doctrine_108_pass'] = empty($report['forbidden_hits']); echo json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n"; break; default: echo "wevia-site-builder.php v2 (light default + toggle)\n"; echo " build SLUG | build_all | list | scan_forbidden | validate SLUG\n"; }