{"id":7649,"date":"2026-01-14T19:06:28","date_gmt":"2026-01-14T18:06:28","guid":{"rendered":"https:\/\/innovacore.group\/?post_type=portfolio&p=7649"},"modified":"2026-03-17T10:43:20","modified_gmt":"2026-03-17T08:43:20","slug":"publication-murale","status":"publish","type":"portfolio","link":"https:\/\/innovacore.group\/fr\/portfolio\/publication-murale\/","title":{"rendered":"Wallpost CRM &#8211; Rationaliser les op\u00e9rations et booster les ventes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wallpost CRM is a comprehensive business management solution designed to bridge the gap between complex operations and customer engagement. Going beyond standard CRM features, it integrates sales automation, detailed analytics, and customer support into a single, intuitive interface. Wallpost empowers businesses to efficiently manage the entire customer lifecycle\u2014from lead to service delivery\u2014while providing a seamless user experience that eliminates data silos and operational inefficiencies.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Plateforme tout-en-un CRM et ERP pour automatiser les ventes et rationaliser les op\u00e9rations.<\/p>\n","protected":false},"featured_media":2369,"parent":0,"template":"","meta":{"inline_featured_image":false,"company_name":"Wallpost CRM","summary":"Rationaliser les Ops & <span class=\"ic-nycd\">Booster les Ventes<\/span>","mission":"<p>Fournir \"une version unique de la v\u00e9rit\u00e9\" pour chaque entreprise. La mission de Wallpost est d\u2019autonomiser les d\u00e9cideurs avec des donn\u00e9es en temps r\u00e9el et des outils automatis\u00e9s, leur permettant de construire des relations clients durables et de g\u00e9rer leur personnel et leurs finances \u00e0 partir d\u2019un tableau de bord centralis\u00e9.<\/p>\n","impact":"<p>Wallpost d\u00e9mocratise l\u2019efficacit\u00e9 de niveau entreprise pour les entreprises en croissance. En combinant le CRM \u00e0 des outils op\u00e9rationnels plus larges (comme les ressources humaines et les finances), il transforme des donn\u00e9es dispers\u00e9es en insights actionnables, r\u00e9duit consid\u00e9rablement la charge administrative et permet aux \u00e9quipes de se concentrer pleinement sur la croissance et la satisfaction client.<\/p>\n","company_logo":"https:\/\/innovacore.group\/wp-content\/uploads\/wallpost-logo-innov-innovacore-optimized.jpg","website_url":"https:\/\/wallpostsoftware.com\/","linkedin_url":"https:\/\/www.linkedin.com\/company\/wallpost-software\/https:\/\/www.linkedin.com\/company\/wallpost-software\/","location":"Irvine, Californie, \u00c9tats-Unis","founded_year":"2021","key_numbers":{"item-0":{"metric_label":"K+ Utilisateurs Actifs","metric_value":"10"},"item-1":{"metric_label":"+ March\u00e9s mondiaux","metric_value":"30"},"item-2":{"metric_label":"+ Partenaires Strat\u00e9giques","metric_value":"70"}},"hiring_status":"furtif","sector":"commerce \u00e9lectronique","company_type":"PME","audience":["b2b"],"geo_scope":["mondial"],"business_model":["saas"],"funding_stage":"non communiqu\u00e9","partnership_type":"cr\u00e9ation","logo_animation":"<div id=\"wallpost-particle-root\">\r\n    <canvas id=\"wallpostCanvas\"><\/canvas>\r\n<\/div>\r\n\r\n<style>\r\n    #wallpost-particle-root {\r\n        width: 100%;\r\n        height: 300px; \/* Hauteur fixe respect\u00e9e *\/\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        background: transparent;\r\n        overflow: hidden;\r\n        cursor: crosshair;\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n(function() {\r\n    const canvas = document.getElementById('wallpostCanvas');\r\n    const ctx = canvas.getContext('2d', { willReadFrequently: true });\r\n    const root = document.getElementById('wallpost-particle-root');\r\n    \r\n    let width, height;\r\n    let particles = [];\r\n    let mouse = { x: -1000, y: -1000 };\r\n    const particleColor = '#f5f5f5'; \/\/ Gris clair Innovacore\r\n    let time = 0;\r\n\r\n    function init() {\r\n        width = root.offsetWidth;\r\n        height = 300;\r\n        \r\n        const dpr = window.devicePixelRatio || 1;\r\n        canvas.width = width * dpr;\r\n        canvas.height = height * dpr;\r\n        canvas.style.width = width + 'px';\r\n        canvas.style.height = height + 'px';\r\n        ctx.scale(dpr, dpr);\r\n\r\n        createLogoParticles();\r\n    }\r\n\r\n    function createLogoParticles() {\r\n        particles = [];\r\n        const cx = width \/ 2;\r\n        const cy = height \/ 2;\r\n        const isMobile = width < 600;\r\n\r\n        \/\/ --- 1. CONFIGURATION ---\r\n        \/\/ Dimensions\r\n        const iconRadius = isMobile ? 35 : 50; \r\n        const fontSizeMain = isMobile ? 35 : 50;\r\n        const fontSizeSub = isMobile ? 12 : 16;\r\n        const gap = 25; \/\/ Espace entre ic\u00f4ne et texte\r\n\r\n        \/\/ On dessine en blanc pour le scan\r\n        ctx.fillStyle = 'white';\r\n        ctx.textAlign = 'center';\r\n        ctx.textBaseline = 'middle';\r\n\r\n        \/\/ Position verticale globale pour centrer le bloc (Icone + Texte + Baseline)\r\n        \/\/ Hauteur approx: (IconRadius*2) + gap + fontSizeMain + fontSizeSub\r\n        const totalHeight = (iconRadius * 2) + gap + fontSizeMain + fontSizeSub;\r\n        const startY = cy - (totalHeight \/ 2) + iconRadius; \/\/ Centre de l'ic\u00f4ne\r\n\r\n        \/\/ --- 2. DESSIN DE L'IC\u00d4NE (Cercle avec W n\u00e9gatif) ---\r\n        const iconY = startY;\r\n        \r\n        \/\/ A. Le Cercle plein\r\n        ctx.beginPath();\r\n        ctx.arc(cx, iconY, iconRadius, 0, Math.PI * 2);\r\n        ctx.fill();\r\n\r\n        \/\/ B. Le \"W\" (Espace n\u00e9gatif)\r\n        ctx.globalCompositeOperation = 'destination-out'; \/\/ Mode \"Gomme\"\r\n        ctx.lineWidth = iconRadius * 0.25; \/\/ \u00c9paisseur des traits du W\r\n        ctx.lineCap = 'round';\r\n\r\n        \/\/ On dessine 3 lignes pour faire le W stylis\u00e9\r\n        \/\/ Ligne 1 (gauche)\r\n        ctx.beginPath();\r\n        ctx.moveTo(cx - iconRadius * 0.4, iconY - iconRadius * 0.3);\r\n        ctx.lineTo(cx - iconRadius * 0.2, iconY + iconRadius * 0.4);\r\n        ctx.stroke();\r\n\r\n        \/\/ Ligne 2 (milieu)\r\n        ctx.beginPath();\r\n        ctx.moveTo(cx, iconY - iconRadius * 0.3);\r\n        ctx.lineTo(cx + iconRadius * 0.2, iconY + iconRadius * 0.4);\r\n        ctx.stroke();\r\n\r\n        \/\/ Ligne 3 (droite - plus courte pour le point ?)\r\n        ctx.beginPath();\r\n        ctx.moveTo(cx + iconRadius * 0.4, iconY - iconRadius * 0.3);\r\n        ctx.lineTo(cx + iconRadius * 0.6, iconY + iconRadius * 0.1); \/\/ Plus court\r\n        ctx.stroke();\r\n\r\n        \/\/ Le petit point de notif\/pin (si pr\u00e9sent dans le W)\r\n        \/\/ On gomme un petit rond\r\n        \/\/ ctx.beginPath();\r\n        \/\/ ctx.arc(cx + iconRadius * 0.5, iconY - iconRadius * 0.4, iconRadius * 0.1, 0, Math.PI*2);\r\n        \/\/ ctx.fill();\r\n\r\n        \/\/ Retour au mode normal\r\n        ctx.globalCompositeOperation = 'source-over';\r\n\r\n\r\n        \/\/ --- 3. DESSIN DU TEXTE ---\r\n        const textY = iconY + iconRadius + gap;\r\n\r\n        \/\/ \"WallPost\"\r\n        ctx.font = `bold ${fontSizeMain}px Arial, Helvetica, sans-serif`;\r\n        ctx.fillText('WallPost', cx, textY);\r\n\r\n        \/\/ Baseline \"Work Smart, Work Fast\"\r\n        const subY = textY + fontSizeMain * 0.8;\r\n        ctx.font = `normal ${fontSizeSub}px Arial, Helvetica, sans-serif`;\r\n        \/\/ On espace un peu les lettres pour la lisibilit\u00e9 de la baseline\r\n        \/\/ Note: letter-spacing ne marche pas bien en canvas standard, on fait simple\r\n        ctx.fillText('Work Smart, Work Fast', cx, subY);\r\n\r\n\r\n        \/\/ --- 4. SCAN DES PIXELS ---\r\n        const density = 4;\r\n        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\r\n        const dataWidth = canvas.width; \r\n\r\n        for (let y = 0; y < canvas.height; y += density) {\r\n            for (let x = 0; x < canvas.width; x += density) {\r\n                if (imageData[(y * dataWidth + x) * 4 + 3] > 128) {\r\n                    const dpr = window.devicePixelRatio || 1;\r\n                    particles.push({\r\n                        x: x \/ dpr,\r\n                        y: y \/ dpr,\r\n                        originX: x \/ dpr,\r\n                        originY: y \/ dpr,\r\n                        vx: 0, \r\n                        vy: 0,\r\n                        size: Math.random() * 1.5 + 0.5,\r\n                        force: Math.random() \r\n                    });\r\n                }\r\n            }\r\n        }\r\n        \r\n        \/\/ Nettoyage\r\n        ctx.clearRect(0, 0, width, height);\r\n    }\r\n\r\n    function draw() {\r\n        ctx.clearRect(0, 0, width, height);\r\n        time += 0.05;\r\n\r\n        ctx.fillStyle = particleColor;\r\n        \r\n        particles.forEach(p => {\r\n            \/\/ 1. Respiration\r\n            const waveX = Math.sin(time * 0.5 + p.y * 0.05) * 2;\r\n            const waveY = Math.cos(time * 0.3 + p.x * 0.05) * 2;\r\n\r\n            \/\/ 2. Interaction\r\n            const dx = mouse.x - p.x;\r\n            const dy = mouse.y - p.y;\r\n            const dist = Math.sqrt(dx*dx + dy*dy);\r\n            const radius = 80;\r\n\r\n            let repelX = 0;\r\n            let repelY = 0;\r\n\r\n            if (dist < radius) {\r\n                const force = (radius - dist) \/ radius;\r\n                const angle = Math.atan2(dy, dx);\r\n                repelX = -Math.cos(angle) * force * 20;\r\n                repelY = -Math.sin(angle) * force * 20;\r\n            }\r\n\r\n            \/\/ 3. Physique\r\n            const targetX = p.originX + waveX;\r\n            const targetY = p.originY + waveY;\r\n\r\n            const ax = (targetX - p.x) * 0.08;\r\n            const ay = (targetY - p.y) * 0.08;\r\n\r\n            p.vx += ax;\r\n            p.vy += ay;\r\n            p.vx += repelX * 0.5;\r\n            p.vy += repelY * 0.5;\r\n            p.vx *= 0.85; \r\n\r\n            p.x += p.vx;\r\n            p.y += p.vy;\r\n\r\n            ctx.beginPath();\r\n            ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);\r\n            ctx.fill();\r\n        });\r\n\r\n        requestAnimationFrame(draw);\r\n    }\r\n\r\n    const updateMouse = (e) => {\r\n        const r = canvas.getBoundingClientRect();\r\n        const cx = e.touches ? e.touches[0].clientX : e.clientX;\r\n        const cy = e.touches ? e.touches[0].clientY : e.clientY;\r\n        mouse.x = cx - r.left;\r\n        mouse.y = cy - r.top;\r\n    };\r\n\r\n    window.addEventListener('resize', init);\r\n    canvas.addEventListener('mousemove', updateMouse);\r\n    canvas.addEventListener('touchmove', updateMouse, {passive: true});\r\n    canvas.addEventListener('mouseleave', () => { mouse.x = -1000; mouse.y = -1000; });\r\n    canvas.addEventListener('touchend', () => { mouse.x = -1000; mouse.y = -1000; });\r\n\r\n    setTimeout(init, 50);\r\n    draw();\r\n})();\r\n<\/script>"},"pt":[],"pipeline":[],"class_list":["post-7649","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/portfolio\/7649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":1,"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/portfolio\/7649\/revisions"}],"predecessor-version":[{"id":7650,"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/portfolio\/7649\/revisions\/7650"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/media\/2369"}],"wp:attachment":[{"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/media?parent=7649"}],"wp:term":[{"taxonomy":"pt","embeddable":true,"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/pt?post=7649"},{"taxonomy":"pipeline","embeddable":true,"href":"https:\/\/innovacore.group\/fr\/wp-json\/wp\/v2\/pipeline?post=7649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}