[ 'name' => 'Arsenal', 'tagline' => 'Framework ERP Intelligence - Fill-Gap, IA, Reporting', 'suite' => 'WEVAL ERP Intelligence', 'accent' => 'gold', 'badge' => 'FLAGSHIP - Framework ERP en production', 'h1_a' => 'Votre ERP fait 80%.', 'h1_b' => 'Arsenal fait les 20% manquants.', 'desc' => "Framework ERP Intelligence propriétaire WEVAL. 150+ écrans modulaires, Brain Engine IA embarqué, reporting temps réel, orchestration des gaps. Se branche sur n'importe quel ERP (SAP, Oracle, Odoo, Salesforce, custom) pour combler les manques fonctionnels sans remplacer l'existant. Déploiement incrémental, ROI mesuré à chaque écran activé.", 'stats' => [['150+', 'Écrans modulaires'], ['Cross-ERP', 'SAP, Oracle, Odoo...'], ['Brain Engine', '646 configs IA'], ['Déploiement', 'Incrémental']], 'features' => [ ['Écrans modulaires', "Catalogue de 150+ écrans métiers prêts à activer : finance, RH, achats, production, supply, qualité, reporting exécutif."], ['Cross-ERP natif', "Connecteurs SAP (RFC, oData), Oracle, Odoo, Salesforce, APIs REST. Même framework, multi-backends simultanés."], ['Brain Engine IA', "646 configurations IA pré-packagées par secteur et taille. Apprentissage continu sur vos données métier."], ['Reporting temps réel', "Dashboards live, alertes intelligentes, exports multi-formats, intégration Power BI/Tableau/Qlik."], ['Déploiement progressif', "Activation écran par écran, ROI mesuré à chaque étape, pas de big-bang, pas de rupture de service."], ['Gouvernance unifiée', "SSO, RBAC granulaire, audit trail complet, conformité RGPD et AI Act, traçabilité métier native."], ], ], 'wevanalytics' => [ 'name' => 'WEVANALYTICS', 'tagline' => 'Analytics cross-ERP - Du datalake à la décision', 'suite' => 'WEVAL ERP Intelligence', 'accent' => 'gold', 'badge' => 'Analytics Intelligence - Production', 'h1_a' => 'Tous vos systèmes parlent', 'h1_b' => 'un même langage analytique.', 'desc' => "Plateforme analytics cross-ERP et cross-datasources. Unifie vos données issues de SAP, Oracle, Odoo, CRM, datalake, fichiers plats dans un même modèle sémantique. Dashboards self-service, alertes intelligentes, requêtes en langage naturel, prédictions embarquées. Remplace ou complète Power BI, Tableau, Qlik.", 'stats' => [['Cross-ERP', 'Multi-sources unifiées'], ['NL queries', 'Langage naturel'], ['Alertes IA', 'Prédictives'], ['Temps réel', 'Streaming']], 'features' => [ ['Modèle sémantique unifié', "Mappings métiers pré-construits pour SAP, Oracle, Odoo, Salesforce. Une seule définition du CA, du stock, du coût par entité."], ['NL Queries', "Posez vos questions en français ou anglais, obtenez graphiques et tables. Pas besoin de SQL, plus d'intermédiaires techniques."], ['Alertes prédictives IA', "Détection d'anomalies temps réel, prévision de ruptures stock, scoring risque client, alerting proactif au bon niveau."], ['Dashboards self-service', "Glisser-déposer, templates métier, personnalisation par rôle, export PDF/PNG/Excel automatisé."], ['Temps réel & streaming', "Synchronisation CDC depuis ERP, événements Kafka, mise à jour sub-seconde des visualisations critiques."], ['Intégration BI', "Export vers Power BI, Tableau, Qlik en parallèle. Pas de remplacement forcé, enrichissement de l'existant."], ], ], 'agents-gaps' => [ 'name' => 'Agents Gaps', 'tagline' => 'Agents IA spécialisés par lacune ERP', 'suite' => 'WEVAL ERP Intelligence', 'accent' => 'gold', 'badge' => 'IA Agents - Gap Closing', 'h1_a' => 'Un agent IA,', 'h1_b' => 'par gap business.', 'desc' => "Catalogue d'agents IA spécialisés, chacun conçu pour combler une lacune ERP connue. Rapprochement bancaire intelligent, matching fournisseurs-factures, scoring crédit clients, prévision de demande, optimisation stock multi-sites, gestion des exceptions supply chain, réconciliation intercos, audit automatisé. Déploiement par agent, ROI à 3 mois.", 'stats' => [['30+', "Agents catalogue"], ['Cross-ERP', 'API-first'], ['Déploiement', '2 à 6 semaines / agent'], ['ROI', '3 mois moyen']], 'features' => [ ['Rapprochement bancaire', "Agent de matching relevés bancaires vs écritures ERP. Règles apprises, taux auto-rapprochement >95% après 30 jours."], ['Matching fournisseurs-factures', "Agent 3-way matching (PO-BL-facture). Tolérances adaptatives, gestion écarts, workflow de validation intelligent."], ['Scoring crédit clients', "Agent temps réel qui score la solvabilité clients, combine data interne + externe, propose limites et conditions."], ['Prévision demande', "Agent forecasting multi-modèle (ARIMA, Prophet, LSTM ensembles), détection saisonnalités, ajustement promotions."], ['Optimisation stock', "Agent multi-sites qui arbitre réassort, transferts, safety stocks selon SLA et contraintes logistiques."], ['Exceptions supply chain', "Agent de gestion proactive des retards livraison, détection de risques, propositions d'alternatives fournisseurs."], ['Réconciliation intercos', "Agent intercompagnies : détection d'écarts, rapprochement automatique, préparation clôture multi-entités."], ['Audit continu', "Agent audit automatisé sur contrôles clés (ségrégation tâches, accès sensibles, dépassements seuils, dormance comptes)."], ['Extensible via API', "Chaque agent = une API. Intégration webhook, planification cron, orchestration via WEVIA Master possible."], ], ], 'wevia-em' => [ 'name' => 'WEVIA EM', 'tagline' => "Enterprise Model - L'IA souveraine qui orchestre la valeur de bout en bout", 'suite' => 'WEVIA Enterprise', 'accent' => 'purple', 'badge' => 'FLAGSHIP - Enterprise Model - En production', 'h1_a' => "L'IA souveraine qui", 'h1_b' => "orchestre la valeur de bout en bout.", 'desc' => "Plateforme d'orchestration multi-agents IA qui couvre l'intégralité de votre value chain et de vos process métier. Finance, RH, Marketing, Commerce, Supply Chain, Achats, Production, SI, QA et Cyber — un seul Brain Center, piloté par votre comex. Lean Six Sigma et BPMN intégrés, méthodologie DMAIC, déploiement on-premise. Vos données restent chez vous.", 'stats' => [['9', 'Metiers orchestres'], ['-40%', 'Delais de pilotage'], ['ROI', '4 mois moyen'], ['6sigma', 'DMAIC zero regression']], 'features' => [ ['Finance', "P and L, previsions, facturation et audit automatises. Cloture mensuelle accélérée, consolidation multi-entites, alertes derives en temps reel."], ['RH and Talents', "Sourcing, onboarding, formation et gestion des talents. Agents de matching, parcours d'integration, developpement des competences automatises."], ['Marketing', "Ciblage, creation de contenu, campagnes et analytics en continu. Optimisation budget, A/B testing industriel, attribution multi-touch."], ['Commerce', "Qualification de leads, redaction de proposals, CRM et closing. Agents commerciaux specialises par secteur, scoring IA, handover fluide."], ['Supply Chain', "Collecte, enrichissement, routage et livraison. Previsions demande, optimisation stock, suivi transport, alertes rupture."], ['Achats', "RFP, evaluation fournisseurs, negociation et contrats. Sourcing automatise, scoring risque, benchmarks marche continus."], ['Production', "Qualite, assemblage, tests et expedition. Controle qualité vision IA, maintenance predictive, optimisation OEE."], ['SI and Infrastructure', "Monitoring, déploiement, scaling et sécurité. Observability IA, auto-remediation, rightsizing cloud, DevOps augmente."], ['QA and Cybersecurity', "Tests automatises, audits, patching et conformité. SAST/DAST IA, threat intelligence, compliance continue RGPD et AI Act."], ], ], 'wevia-master' => [ '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.'], ], ], 'wevia-life' => [ 'name' => 'WEVIA Life', 'tagline' => 'Classification IA des emails professionnels', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Email Intelligence - En production', 'h1_a' => 'Vos emails,', 'h1_b' => 'classifies et actionnables.', 'desc' => "Agent IA qui analyse vos emails professionnels en continu. Classification multi-axes : opportunités business, risques, actions requises. Chat RAG sur l'historique, extraction automatique de décisions, deadlines, engagements. Intégration IMAP multi-comptes, aucune donnée exposée à l'extérieur.", 'stats' => [['Multi-compte', 'IMAP natif'], ['Classification', 'Opportunite / Risque / Action'], ['RAG chat', 'Historique complet'], ['Souverain', 'Hosting EU']], 'features' => [ ['Classification multi-axes', "Chaque email score sur 3 dimensions : opportunité commerciale, risque business, action requise. Priorisation automatique."], ['Extraction de décisions', 'Détection des engagements pris, deadlines mentionnées, livrables attendus — consolidés dans un journal actionnable.'], ['Chat RAG emails', 'Posez des questions en langage naturel sur votre historique email. Retrouvez contexte, pièces jointes, fils de discussion.'], ['IMAP multi-comptes', 'Connexion native IMAP, support multi-boîtes, synchronisation continue. OAuth2 et app-passwords supportés.'], ['Attachments intelligents', 'OCR et parsing de pièces jointes (PDF, Word, Excel) — contenu indexé et recherchable.'], ['Alerts et digests', 'Notifications ciblées sur opportunités et risques critiques. Digest quotidien synthétique pour le comex.'], ], ], 'wevia-white-label' => [ 'name' => 'WEVIA White-Label', 'tagline' => 'Deployer WEVIA sous votre marque', 'suite' => 'WEVIA Enterprise', 'accent' => 'teal', 'badge' => 'Multi-tenant White-Label - Enterprise', 'h1_a' => 'Votre IA souveraine,', 'h1_b' => 'votre marque.', 'desc' => "Déployez la stack WEVIA sous votre propre branding. Thème custom, domaine dédié, kit de marque intégré, isolation tenant stricte. Idéal pour intégrateurs, éditeurs logiciels, cabinets de conseil qui veulent revendre WEVIA à leurs clients. Gouvernance centralisée, billing unifié.", 'stats' => [['Branding', 'Thème + domaine + logo'], ['Multi-tenant', 'Isolation stricte'], ['Billing', 'Unifie ou per-tenant'], ['Gouvernance', 'Centralisee']], 'features' => [ ['Theming complet', 'Couleurs, typographie, logo, favicon, images marketing personnalisables sans code.'], ['Domaine dedie', 'Chaque déploiement sur votre sous-domaine ou domaine client, SSL automatique, CDN intégré.'], ['Isolation tenant', 'Données, modèles fine-tunés, historique conversations strictement séparés entre tenants.'], ['Kit de marque', 'Emails transactionnels, PDF générés, dashboards exportés adoptent automatiquement votre charte.'], ['Billing flexible', 'Facturation unifiée pour vous ou refacturation au tenant final via API de gestion.'], ['Support partenaire', 'SLA dédié, documentation blanche, onboarding partenaires, programme revenue-share.'], ], ], 'consulting-pro' => [ 'name' => 'Consulting Pro', 'tagline' => 'Conseil senior à la demande — interventions cadrées ROI', 'suite' => 'WEVAL Advisory', 'accent' => 'purple', 'badge' => 'Conseil Senior — Engagement ROI', 'h1_a' => "Un directeur d'expérience", 'h1_b' => 'à votre table de direction.', 'desc' => "Interventions de conseil senior à la demande. Directeurs techniques, architectes IA, DSI transformés. Missions cadrées sur KPIs contractuels, engagement au ROI, livrables mesurables. Idéal pour dé-risquer une transformation, arbitrer une stack technique, ou cadrer un programme stratégique. Facturation au forfait mission ou au jour-homme.", 'stats' => [['10+', 'Années expérience minimum'], ['ROI', 'Contractuel'], ['KPIs', 'Mesurables'], ['Europe', '+ MENA']], 'features' => [ ['Diagnostic flash', 'Audit express 2 à 5 jours pour cartographier enjeux, risques et opportunités. Livrable directeur exécutif actionnable.'], ['Sparring strategique', 'Conseiller senior disponible en continu pour arbitrer décisions critiques : stack IA, governance data, transformation ERP.'], ['Architecture & design', "Revue d'architectures techniques, recommandations d'évolution, validation choix stratégiques par des experts cloud et IA."], ['Program management', "Direction de programme par un PMP senior. Coordination multi-équipes, gestion des risques, reporting executive COMEX."], ['Due diligence', "Due diligence technique sur acquisitions ou investissements tech. Audit code, infrastructure, équipe, dette technique, scalability."], ['Fractional leadership', 'CTO, CIO, CDO à temps partagé pour PME et scale-ups. 2 à 4 jours par semaine, engagement 6 à 12 mois minimum.'], ], ], '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 EM', '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])) { $suite = SUITES[$suite_name]; } else { $found = null; foreach (SUITE_PAGES as $sp_slug => $sp_data) { if ($sp_data['name'] === $suite_name) { $found = [ 'slug' => $sp_slug, 'desc' => $sp_data['intro'], 'siblings' => array_map(function($a){ return isset(PRODUCTS[$a]) ? PRODUCTS[$a]['name'] : ucwords(str_replace('-', ' ', $a)); }, $sp_data['apps']), ]; break; } } if (!$found) return ['ok' => false, 'slug' => $slug, 'error' => 'Unknown suite: ' . $suite_name]; $suite = $found; } $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; } const SUITE_PAGES = [ 'erp-intelligence' => [ 'name' => 'WEVAL ERP Intelligence', 'full_name' => 'WEVAL ERP Intelligence', 'tagline' => "Les 20% manquants de votre ERP", 'hero_a' => "Votre ERP fait 80%.", 'hero_b' => "Nous faisons les 20% manquants.", 'accent' => 'gold', 'badge' => 'SUITE - Fill-Gap ERP', 'intro' => "Suite dédiée aux entreprises avec un ERP en place (SAP, Oracle, Odoo, Salesforce, custom) qui rencontrent des limites fonctionnelles. Arsenal fournit les écrans et workflows manquants, WEVANALYTICS unifie la donnée cross-systèmes, Agents Gaps déploie des IA spécialisées par lacune business connue. Trois angles, un même objectif : amplifier la valeur de votre existant sans tout refaire.", 'value_props' => [ ['Pas de remplacement', "Aucune migration ERP requise. Nous nous branchons sur votre système, comblons les manques, enrichissons la valeur."], ['Déploiement incrémental', "Activation gap par gap, agent par agent, écran par écran. ROI mesuré à chaque étape, pas de big-bang."], ['Cross-ERP natif', "Connecteurs prêts pour SAP (RFC, oData, IDoc), Oracle, Odoo, Salesforce, APIs REST. Multi-backends simultanés supportés."], ['Standards entreprise', "SSO, RBAC, audit trail complet, conformité RGPD et AI Act, hosting souverain Europe, certifications ISO 27001 en cours."], ], 'apps' => ['arsenal', 'wevanalytics', 'agents-gaps'], ], 'wevia-enterprise' => [ 'name' => 'WEVIA Enterprise', 'full_name' => 'WEVIA Enterprise', 'tagline' => "L'ecosysteme d'IA souveraine pour l'entreprise", 'hero_a' => "L'IA souveraine,", 'hero_b' => "orchestree de bout en bout.", 'accent' => 'purple', 'badge' => 'SUITE FLAGSHIP - 11 applications', 'intro' => "Une stack complète d'IA souveraine propriété WEVAL. De l'orchestration multi-agents cross-métiers (WEVIA EM) à l'automatisation desktop (WEVIA Desk), chaque application interopère nativement pour amplifier la valeur des autres. Déploiement on-premise possible, vos données restent chez vous.", 'value_props' => [ ['Souveraineté stricte', "Hosting Europe, zero exfiltration, conformité RGPD et AI Act garanties."], ['Interopérabilité native', "APIs REST, SSE streaming, events bus commun, authentification SSO unifiee."], ['Cohérence méthodologique', "Lean Six Sigma L99, DMAIC, BPMN - un meme standard qualité applique a chaque application."], ['TCO maîtrisé', "Cascade multi-modeles intelligente, GPU dedies, elasticite demande, sans lock-in vendor."], ], 'apps' => ['wevia-em', 'wevia-master', 'wevia-inference', 'wevia-life', 'wevia-white-label', 'projectflow', 'researchflow', 'boardflow', 'stackscan', 'wevia-desk'], ], 'marketing-cloud' => [ 'name' => 'WEVAL Marketing Cloud', 'full_name' => 'WEVAL Marketing Cloud', 'tagline' => 'Arsenal + delivery intelligence', 'hero_a' => 'Le marketing digital,', 'hero_b' => 'livré ou remboursé.', 'accent' => 'gold', 'badge' => 'SUITE - Plateforme marketing digital', 'intro' => 'Plateforme marketing digital complète propriété WEVAL. Envoi haute performance, intelligence IA intégrée, tracking end-to-end, optimisation automatique. Arsenal ERP Intelligence orchestre la couche business, 13 apps spécialisées couvrent delivery, warming, reputation, SMS, ads. Infrastructure qui délivre, inbox rate 97%.', 'value_props' => [ ['Inbox rate garanti', 'Infrastructure PMTA + KumoMTA + Postfix tunée, Brain Engine IA 646 configs, warming automatique, monitoring RBL continu.'], ['Multicanal intégré', 'Email, SMS, ads social, affiliation - une seule stack qui orchestre tous les canaux avec attribution unifiée.'], ['Souveraineté stricte', 'Hosting EU, IPs dédiées, conformité RGPD et CAN-SPAM, zéro partage de données tiers.'], ['ROI mesurable', 'Dashboard temps réel par campagne, par audience, par canal — décisions pilotées par la donnée.'], ], 'apps' => ['arsenal', 'deliverads', 'deliverscore', 'mailstream', 'mailwarm', 'mailforge', 'outreachai', 'smsforge', 'adscontrol', 'reputationai', 'ai-sdr', 'newsletterinsight', 'emailverify', 'blacklistguard'], ], 'advisory' => [ 'name' => 'WEVAL Advisory', 'full_name' => 'WEVAL Advisory', 'tagline' => 'Cabinet et expertise a la demande', 'hero_a' => 'Du diagnostic', 'hero_b' => 'au run opérationnel.', 'accent' => 'purple', 'badge' => 'SUITE - Cabinet de conseil', 'intro' => 'Notre cabinet de conseil. Missions cadrées, livrables mesurables, engagement au ROI. De la stratégie IA à la transformation digitale complète. Méthodologie Lean Six Sigma, BPMN, DMAIC, engagement NonReg 100%. Séniorité garantie, interventions courtes ou longues, partout en Europe et MENA.', 'value_props' => [ ['Expertise senior', 'Tous nos consultants ont 10+ années d\'expérience terrain. Directeurs techniques, architectes IA, DSI transformés.'], ['Livrables mesurables', 'Chaque mission cadrée par KPIs et SLAs contractuels. ROI prouvé ou remboursement partiel négociable.'], ['Méthodologie unifiée', 'Lean Six Sigma L99, DMAIC, BPMN, standards qualité 6σ appliqués à chaque deliverable.'], ['Transfert de compétences', 'Academy intégrée, formation cloud, IA et méthodes. Vos équipes autonomes après la mission.'], ], 'apps' => ['consulting', 'consulting-pro', 'academy', 'leansixsigma', 'auditai', 'cloudcost'], ], 'productivity' => [ 'name' => 'WEVAL Productivity', 'full_name' => 'WEVAL Productivity', 'tagline' => 'IA generative métier', 'hero_a' => 'Vos livrables,', 'hero_b' => 'générés et orchestrés.', 'accent' => 'teal', 'badge' => 'SUITE - Productivite et creation', 'intro' => 'Suite d\'applications IA pour les métiers. De la proposale commerciale au contrat, du design visuel à la présentation, du contenu marketing à la traduction. Chaque app est une IA spécialisée, fine-tunable sur votre domaine métier, déployable en souveraineté.', 'value_props' => [ ['Qualité constante', 'Templates et guardrails métier garantissent un niveau constant, independant de la creativite individuelle.'], ['Intégration workflow', 'Chaque app s intégré dans vos outils existants - Slack, Teams, Google Workspace, Microsoft 365.'], ['Fine-tuning métier', 'Entrainement sur votre corpus pour ton, style, contraintes sectorielles. Resultat indiscernable de votre equipe.'], ['Productivité mesurable', 'Gains 3-5x sur les taches de production, traces et reportes dans un dashboard unifie.'], ], 'apps' => ['proposalai', 'blueprintai', 'contractai', 'presentationai', 'canvasai', 'copyai', 'content-factory', 'creativefactory', 'dashboardai', 'translateai', 'meetingai', 'devforge', 'bizplan', 'esignature'], ], 'commerce-data' => [ 'name' => 'WEVAL Commerce and Data', 'full_name' => 'WEVAL Commerce and Data', 'tagline' => 'E-commerce et lead intelligence', 'hero_a' => 'Du lead', 'hero_b' => 'a la transaction.', 'accent' => 'teal', 'badge' => 'SUITE - Commerce et données B2B', 'intro' => 'Suite dédiée au commerce digital et à l\'intelligence des données. StoreForge pour le e-commerce, StoreAI pour la personalisation, LeadForge pour la génération B2B, Scout Intelligence pour la veille. Données enrichies en continu, intégration native avec CRM et outils marketing.', 'value_props' => [ ['E-commerce clé en main', 'Boutique en 5 minutes, descriptions IA, chatbot WEVIA intégré, paiement international, SEO natif.'], ['Leads B2B vérifiés', 'Base de leads qualifiés et consentis, enrichissement continu, segmentation fine par secteur et taille.'], ['Intelligence continue', 'Veille concurrentielle automatisée, détection de signaux faibles, alerting sur opportunités et menaces.'], ['Intégration CRM native', 'Connecteurs Salesforce, HubSpot, Pipedrive, Zoho — pas de silo, données synchronisées temps réel.'], ], 'apps' => ['storeforge', 'storeai', 'wevalcrm', 'formbuilder', 'leadforge', 'datainsight', 'scoutai', 'youtubefactory'], ], 'cloud-security' => [ 'name' => 'WEVAL Cloud and Security', 'full_name' => 'WEVAL Cloud and Security', 'tagline' => 'Infrastructure et SOC as a Service', 'hero_a' => 'Votre infrastructure,', 'hero_b' => 'souveraine et surveillée.', 'accent' => 'coral', 'badge' => 'SUITE - Cloud et cybersecurite', 'intro' => 'Suite cloud et cybersécurité. Hosting souverain certifié Huawei Cloud et Scaleway, monitoring 24/7, SOC as a Service, FinOps automatisé, cartographie réseau, GPU dédiés pour IA. Conformité RGPD, HDS, AI Act, ISO 27001.', 'value_props' => [ ['Souveraineté certifiée', 'Hosting EU, certifications Huawei Cloud et Scaleway, conformité HDS pour données de santé.'], ['Monitoring 24/7', 'Sentinel surveille SSL, DNS, ports, RBL, OWASP en continu. Alerting Telegram, escalade automatique.'], ['FinOps intégré', 'CloudCost analyse vos factures cloud, identifie les gaspillages, optimise automatiquement le rightsizing.'], ['GPU dédiés IA', 'Infrastructure GPU A100/H100 pour inférence, training, fine-tuning — scaling à la demande.'], ], 'apps' => ['sentinel', 'cloudcost', 'deliverscore', 'inboxtest', 'emailverify', 'cloud-providers', 'huawei-cloud', 'gpu-inference'], ], 'pharma-cloud' => [ 'name' => 'WEVAL Pharma Cloud', 'full_name' => 'WEVAL Pharma Cloud', 'tagline' => "Healthcare intelligence mondiale", 'hero_a' => "La santé,", 'hero_b' => "compliant by design.", 'accent' => 'coral', 'badge' => 'SUITE - Sciences de la vie', 'intro' => "Suite dédiée à l'industrie pharmaceutique et aux sciences de la vie. Base HCP mondiale consent-based, CRM pharma, studio de campagnes compliant, gestion du consentement B2B. Conformité RGPD, HDS, LGPD, CCPA garanties.", 'value_props' => [ ['Consent-based strict', "Opt-in verifie a la source, traçabilité complete, preuve juridique opposable."], ['Couverture mondiale', "Europe, Ameriques, MENA, Asie - specialistes hospitaliers et liberaux."], ['Compliance multi-juridictions', "RGPD europeen, LGPD bresilien, CCPA californien, HDS hebergement sante."], ['Intégration CRM native', "Hooks temps reel vers Salesforce Health Cloud, Veeva, Iqvia OCE et systemes maison."], ], 'apps' => ['reachhcp', 'campaign-studio', 'consent-manager'], ], ]; function get_suite_template(): string { return <<<'HTML2' Suite {{NAME}} - {{TAGLINE}} | WEVAL Consulting
{{BADGE}}
Suite {{SUITE_CODE}}

{{HERO_A}}
{{HERO_B}}

{{INTRO}}

Voir les {{N_APPS}} applications -> Demander une demo
// Pourquoi cette suite

Quatre atouts, une même promesse.

Ce qui distingue la suite {{NAME}} des solutions fragmentees du marche.

{{VALUE_PROPS}}
// Applications de la suite

{{N_APPS}} applications, interopérables.

Chaque application est aussi consommable en standalone. Ensemble, elles constituent la suite {{NAME}} - amplification mutuelle des capacites.

{{APPS_HTML}}
// Commencer

Deployer {{NAME}} chez vous.

POC gratuit 2 semaines. MVP opérationnel en 1 mois. Deploiement Enterprise complet en 3 mois. IA souveraine, données hebergees chez vous.

Réserver un POC -> Voir le catalogue complet
HTML2; } function build_suite_page(string $slug): array { if (!isset(SUITE_PAGES[$slug])) return ['ok' => false, 'slug' => $slug, 'error' => 'Unknown suite slug']; $s = SUITE_PAGES[$slug]; $accent = ACCENTS[$s['accent']]; // Value props HTML $vp_html = ''; foreach ($s['value_props'] as [$t, $d]) { $vp_html .= sprintf('

%s

%s

', htmlspecialchars($t), htmlspecialchars($d)); } // Apps HTML — check file_exists for clickable vs roadmap card $apps_html = ''; foreach ($s['apps'] as $app_slug) { $page_path = "/var/www/html/products/{$app_slug}.html"; $page_exists = file_exists($page_path); // Pull display data : prefer PRODUCTS const, else use slug-derived name if (isset(PRODUCTS[$app_slug])) { $p = PRODUCTS[$app_slug]; $name = $p['name']; $tagline = strip_tags($p['tagline']); $desc = mb_substr(strip_tags($p['desc']), 0, 160); if (mb_strlen(strip_tags($p['desc'])) > 160) $desc .= '...'; } else { // Derive from slug $name = ucwords(str_replace('-', ' ', $app_slug)); $tagline = 'Application de la suite'; $desc = 'Details a venir. Partie integrante de la suite ' . $s['name'] . '.'; } $flagship_cls = ($app_slug === 'wevia-em') ? ' flagship' : ''; $flagship_tag = ($app_slug === 'wevia-em') ? 'FLAGSHIP' : ''; if ($page_exists) { $apps_html .= sprintf( '%s

%s

%s

%s

Voir la fiche produit ->
', $flagship_cls, htmlspecialchars($app_slug), $flagship_tag, htmlspecialchars($name), htmlspecialchars($tagline), htmlspecialchars($desc) ); } else { // Roadmap card — no link, clear expectation setting $apps_html .= sprintf( '
%s

%s

%s

%s

INCLUS DANS LA SUITE - FICHE PRODUIT À VENIR
', $flagship_cls, $flagship_tag, htmlspecialchars($name), htmlspecialchars($tagline), htmlspecialchars($desc) ); } } $desc_short = mb_substr(strip_tags($s['intro']), 0, 140); $html = get_suite_template(); $vars = [ '{{SLUG}}' => $slug, '{{NAME}}' => $s['name'], '{{SUITE_CODE}}' => $s['full_name'], '{{TAGLINE}}' => $s['tagline'], '{{BADGE}}' => $s['badge'], '{{HERO_A}}' => $s['hero_a'], '{{HERO_B}}' => $s['hero_b'], '{{INTRO}}' => $s['intro'], '{{DESC_SHORT}}' => $desc_short, '{{VALUE_PROPS}}' => $vp_html, '{{APPS_HTML}}' => $apps_html, '{{N_APPS}}' => (string)count($s['apps']), '{{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"]; } $target_dir = '/var/www/html/solutions'; if (!is_dir($target_dir)) @mkdir($target_dir, 0755, true); $target = "$target_dir/{$slug}.html"; if (file_exists($target)) { $gold_dir = '/opt/wevads/vault/gold-suite-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 ecrasement']; } $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), 'apps' => count($s['apps'])]; } // ============================================================ // PRODUCTS INDEX BUILDER (/products/index.html) // 4 flagships + 13 produits rebrandes + 7 suites // ============================================================ const FLAGSHIPS = [ ['wevia-em', 'purple', "L'IA souveraine qui orchestre la valeur de bout en bout", "Orchestration multi-agents sur toute la value chain. 930 agents, 9 métiers, POC 2 semaines."], ['wevia-master', 'teal', "L'agent qui exécute", "Agent IA autonome propriétaire. Scanne, exécute, apprend sur votre domaine métier."], ['arsenal', 'gold', "Framework ERP Intelligence", "150+ écrans modulaires. Brain Engine IA. Comble les 20% que votre ERP ne fait pas."], ['reachhcp', 'coral', "Base HCP mondiale consent-based", "Professionnels de santé vérifiés, segmentation fine, conformité RGPD et HDS."], ]; function get_index_template(): string { return <<<'HTMLIDX' Produits WEVAL — {{N_PRODS}} applications IA souveraine et {{N_SUITES}} suites | WEVAL Consulting
Catalogue produits WEVAL

{{N_PRODS}} applications, {{N_SUITES}} suites.
Une stack IA souveraine.

De l'orchestration multi-agents à l'automatisation bureautique, de l'intelligence pharmaceutique au marketing haute performance. Tout est propriété WEVAL, déployable chez vous, conforme RGPD et AI Act.

{{N_PRODS}}
Applications
{{N_SUITES}}
Suites métier
4
Flagships
6sigma
Qualité 6σ
// Flagships

Quatre applications phares, au cœur de notre offre.

Quatre applications structurantes. Chacune se suffit à elle-même. Ensemble, elles forment le cœur de la proposition de valeur WEVAL.

{{FLAGSHIPS_HTML}}
// Toutes les applications

{{N_PRODS}} applications, prêtes à déployer.

Notre gamme complète d’applications IA. Chaque fiche présente le positionnement, les capacités clés, les métriques d’usage et l’intégration dans une suite. Toutes sont éprouvées en production et maintenues sous standard qualité Six Sigma.

{{PRODUCTS_HTML}}
// Suites métier

{{N_SUITES}} suites pour couvrir tous les métiers.

Chaque application est aussi consommable en standalone. Regroupées en suites, elles amplifient mutuellement leur valeur. Choisissez l'entrée qui colle à votre contexte : par produit ou par suite.

{{SUITES_HTML}}

Prêt à tester ?

Démonstration personnalisée sur vos données. Diagnostic cas d'usage, scoping technique, proposition POC en 45 minutes. POC gratuit 2 semaines. MVP 1 mois. Déploiement Enterprise 3 mois.

Réserver un POC -> Voir la marketplace
HTMLIDX; } function build_products_index(): array { // Build FLAGSHIPS html (fetch page data from /products/*.html) $flag_html = ''; $class_map = ['purple' => 'p', 'teal' => 't', 'gold' => 'g', 'coral' => 'c']; foreach (FLAGSHIPS as [$slug, $color, $tagline, $desc]) { $page = "/var/www/html/products/{$slug}.html"; if (!file_exists($page)) continue; // Get display name from PRODUCTS const or derive $name = isset(PRODUCTS[$slug]) ? PRODUCTS[$slug]['name'] : ucwords(str_replace('-', ' ', $slug)); $cls = $class_map[$color] ?? 'p'; $flag_html .= sprintf( '
FLAGSHIP

%s

%s

%s

Voir la fiche produit ->
', $cls, htmlspecialchars($slug), htmlspecialchars($name), htmlspecialchars($tagline), htmlspecialchars($desc) ); } // Build PRODUCTS grid (only rebranded ones from PRODUCTS const, excluding flagships already shown) $flagship_slugs = array_column(FLAGSHIPS, 0); $prod_html = ''; $prod_count = 0; foreach (PRODUCTS as $slug => $p) { if (in_array($slug, $flagship_slugs, true)) continue; $page = "/var/www/html/products/{$slug}.html"; if (!file_exists($page)) continue; $desc_short = mb_substr(strip_tags($p['desc']), 0, 120); if (mb_strlen(strip_tags($p['desc'])) > 120) $desc_short .= '...'; $prod_html .= sprintf( '%s

%s

%s

', htmlspecialchars($slug), htmlspecialchars($p['suite']), htmlspecialchars($p['name']), htmlspecialchars($desc_short) ); $prod_count++; } // Build SUITES grid $accent_map = ['purple' => 'p', 'teal' => 't', 'gold' => 'g', 'coral' => 'c']; $suite_html = ''; $suite_count = 0; // 2 legacy SUITES first (wevia-enterprise, pharma-cloud) then extended SUITE_PAGES foreach (SUITE_PAGES as $slug => $s) { $page = "/var/www/html/solutions/{$slug}.html"; if (!file_exists($page)) continue; $cls = $accent_map[$s['accent']] ?? 'p'; $n_apps = count($s['apps']); $intro_short = mb_substr(strip_tags($s['intro']), 0, 110) . '...'; $suite_html .= sprintf( '
%d APPS

%s

%s

', $cls, htmlspecialchars($slug), $n_apps, htmlspecialchars($s['name']), htmlspecialchars($intro_short) ); $suite_count++; } $html = get_index_template(); $total_prods = count(FLAGSHIPS) + $prod_count; $vars = [ '{{N_PRODS}}' => (string)$total_prods, '{{N_SUITES}}' => (string)$suite_count, '{{FLAGSHIPS_HTML}}' => $flag_html, '{{PRODUCTS_HTML}}' => $prod_html, '{{SUITES_HTML}}' => $suite_html, ]; $html = strtr($html, $vars); // Doctrine 108 check foreach (FORBIDDEN_TERMS as $term) { $pattern = '/\b' . preg_quote($term, '/') . '\b/'; if (preg_match($pattern, $html)) { return ['ok' => false, 'error' => "Forbidden term: $term"]; } } return ['ok' => true, 'html' => $html, 'bytes' => strlen($html), 'flagships' => count(FLAGSHIPS), 'products' => $prod_count, 'suites' => $suite_count]; } 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; case 'build_suite': $slug = $argv[2] ?? null; if (!$slug) { echo "Usage: build_suite SLUG\n"; exit(1); } echo json_encode(build_suite_page($slug), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n"; break; case 'build_all_suites': $ok = 0; $fail = 0; foreach (array_keys(SUITE_PAGES) as $slug) { $r = build_suite_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['apps'] . ' apps') : $r['error']); } echo sprintf("\n=== %d OK - %d FAIL ===\n", $ok, $fail); break; default: case 'build_index': $r = build_products_index(); if (!$r['ok']) { echo json_encode($r) . "\n"; exit(1); } $target = '/var/www/html/products/index.html'; if (file_exists($target)) { $gold_dir = '/opt/wevads/vault/gold-products-index-' . date('Ymd'); if (!is_dir($gold_dir)) @mkdir($gold_dir, 0755, true); @copy($target, $gold_dir . "/index-builder-" . date('His') . '.html'); } // Write alongside — caller must unlock chattr + move to target $tmp = '/opt/weval-l99/tmp-index.html'; file_put_contents($tmp, $r['html']); echo json_encode(['ok' => true, 'tmp' => $tmp, 'bytes' => $r['bytes'], 'flagships' => $r['flagships'], 'products' => $r['products'], 'suites' => $r['suites']], JSON_UNESCAPED_SLASHES) . "\n"; break; echo "wevia-site-builder.php v3 (light+toggle, EM flagship, suites, LinkedIn)\n"; echo " build SLUG | build_all | build_suite SLUG | build_all_suites\n"; echo " list | scan_forbidden | validate SLUG\n"; }