{"id":8741,"date":"2026-01-15T08:37:16","date_gmt":"2026-01-15T07:37:16","guid":{"rendered":"https:\/\/innovacore.group\/?post_type=portfolio&p=8741"},"modified":"2026-03-17T15:49:07","modified_gmt":"2026-03-17T13:49:07","slug":"alloenergia","status":"publish","type":"portfolio","link":"https:\/\/innovacore.group\/it\/portfolio\/alloenergia\/","title":{"rendered":"alloenergy &#8211; Energia Domestica, Chiarita"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">alloenergy brings radical transparency to domestic energy maintenance. Moving away from industry jargon and vague promises, they ensure solar panels and heat pumps perform to their full potential through continuous monitoring and rapid diagnostics. Their hybrid model combines digital simplicity for the user with rigorous, traceable field operations. By prioritizing proof and reactivity, alloenergy guarantees that equipment not only lasts but actively produces the energy it was designed for.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manutenzione trasparente, monitorata e affidabile per sistemi energetici domestici ad alte prestazioni.<\/p>\n","protected":false},"featured_media":2369,"parent":0,"template":"","meta":{"inline_featured_image":false,"company_name":"alloenergy","summary":"Energia Domestica, <span class=\"ic-nycd\">Chiarita<\/span>","mission":"<p>Per rendere la manutenzione energetica intelligibile e affidabile. alloenergy mira a eliminare lone dellioritura post-installazione, assicurando che lattore fornito dallacility sia realmente allinalit\u00e0. Forniscono ai proprietari dati chiari e soluzioni rapide, massimizzando lattiva utilit\u00e0 energetica pur gestendo tutte le complessit\u00e0 tecniche.<\/p>\n","impact":"<p>alloenergy sta professionalizzando il panorama del \"post-vendita\" dellorza verde. Spostandosi da ripari reattivi a supervisione proattiva basata sui dati, trasformano direttamente potenziali guasti tecnici in risparmi energetici e finanziari recuperabili. Il loro approccio garantisce il ROI per i proprietari e prosegue significativamente la vita utile delle infrastrutture sostenibili.<\/p>\n","company_logo":"https:\/\/innovacore.group\/wp-content\/uploads\/alloenergy-logo-inn ov-innovacore-optimized.jpg","website_url":"","linkedin_url":"","location":"Ginevra, Svizzera","founded_year":"2026","key_numbers":{"item-0":{"metric_label":"kWh Recuperati","metric_value":"953248"},"item-1":{"metric_label":".-CHF Perdite Evitate","metric_value":"190"},"item-2":{"metric_label":"Ton CO\u2082 Risparmiate","metric_value":"76"}},"hiring_status":"assunzioni","sector":"energia","company_type":"azienda","audience":["b2b_a_b2c"],"geo_scope":["continentale"],"business_model":["abbonamento"],"funding_stage":"pre_seed","partnership_type":"creation","logo_animation":"<div id=\"alloenergy-particle-root\">\r\n    <canvas id=\"alloenergyCanvas\"><\/canvas>\r\n<\/div>\r\n\r\n<style>\r\n    #alloenergy-particle-root {\r\n        width: 100%;\r\n        height: 300px; \/* Hauteur fixe *\/\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('alloenergyCanvas');\r\n    const ctx = canvas.getContext('2d', { willReadFrequently: true });\r\n    const root = document.getElementById('alloenergy-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        \/\/ On dessine en blanc pur pour le scan\r\n        ctx.fillStyle = 'white';\r\n        ctx.strokeStyle = 'white';\r\n\r\n        \/\/ Dimensions relatives\r\n        const iconSize = isMobile ? 60 : 90;   \/\/ Taille du cercle\/ic\u00f4ne\r\n        const fontSize = isMobile ? 30 : 50;   \/\/ Taille du texte\r\n        const gap = isMobile ? 15 : 25;        \/\/ Espace vertical Icone <-> Texte\r\n\r\n        \/\/ Centrage vertical global\r\n        \/\/ Hauteur totale = Icone + Gap + Texte\r\n        const totalContentHeight = iconSize + gap + fontSize;\r\n        const startY = (height - totalContentHeight) \/ 2 + (iconSize \/ 2); \/\/ Centre de l'ic\u00f4ne\r\n\r\n        \/\/ --- 2. DESSIN DE L'IC\u00d4NE (Cercle travers\u00e9 par l'\u00e9clair) ---\r\n        const ix = cx;\r\n        const iy = startY;\r\n        const r = iconSize \/ 2;\r\n\r\n        \/\/ A. Le Cercle de base (l'anneau \u00e9pais)\r\n        ctx.beginPath();\r\n        ctx.arc(ix, iy, r, 0, Math.PI * 2);\r\n        ctx.fill();\r\n\r\n        \/\/ B. L'\u00c9clair en espace n\u00e9gatif (Gomme)\r\n        ctx.globalCompositeOperation = 'destination-out';\r\n        ctx.lineCap = 'round';\r\n        ctx.lineJoin = 'round';\r\n        ctx.lineWidth = iconSize * 0.18; \/\/ \u00c9paisseur de la coupure\r\n\r\n        ctx.beginPath();\r\n        \/\/ On dessine un Z stylis\u00e9 qui traverse le cercle\r\n        \/\/ Point bas gauche\r\n        ctx.moveTo(ix - r * 0.6, iy + r * 0.6);\r\n        \/\/ Vers le centre (l\u00e9g\u00e8rement d\u00e9cal\u00e9)\r\n        ctx.lineTo(ix - r * 0.1, iy + r * 0.1);\r\n        \/\/ Petit d\u00e9crochement horizontal vers la gauche pour le style \u00e9clair\r\n        ctx.lineTo(ix + r * 0.1, iy - r * 0.1);\r\n        \/\/ Point haut droit\r\n        ctx.lineTo(ix + r * 0.6, iy - r * 0.6);\r\n        ctx.stroke();\r\n        \r\n        \/\/ Retour au mode normal pour le texte\r\n        ctx.globalCompositeOperation = 'source-over';\r\n\r\n\r\n        \/\/ --- 3. DESSIN DU TEXTE \"alloenergy\" ---\r\n        const textY = iy + r + gap + (fontSize \/ 2);\r\n        \r\n        ctx.textAlign = 'center';\r\n        ctx.textBaseline = 'middle';\r\n        \/\/ Police g\u00e9om\u00e9trique arrondie proche du logo (Montserrat, Poppins, ou Arial Rounded)\r\n        ctx.font = `bold ${fontSize}px \"Montserrat\", \"Poppins\", \"Arial Rounded MT Bold\", sans-serif`;\r\n        \r\n        \/\/ Comme tout est de la m\u00eame couleur en particules, on \u00e9crit tout le mot d'un coup\r\n        ctx.fillStyle = 'white';\r\n        ctx.fillText('alloenergy', cx, textY);\r\n\r\n\r\n        \/\/ --- 4. SCAN DES PIXELS ---\r\n        \/\/ Densit\u00e9 4 pour la s\u00e9curit\u00e9 et la fluidit\u00e9\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                    });\r\n                }\r\n            }\r\n        }\r\n        \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        \r\n        \/\/ --- PHYSIQUE DOUCE (Slow & Smooth) ---\r\n        time += 0.02; \/\/ Vitesse d'ondulation lente\r\n\r\n        ctx.fillStyle = particleColor;\r\n        \r\n        particles.forEach(p => {\r\n            \/\/ Ondulation\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            \/\/ Interaction Souris\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                \/\/ R\u00e9pulsion tr\u00e8s douce (force 8)\r\n                repelX = -Math.cos(angle) * force * 8;\r\n                repelY = -Math.sin(angle) * force * 8;\r\n            }\r\n\r\n            const targetX = p.originX + waveX;\r\n            const targetY = p.originY + waveY;\r\n\r\n            \/\/ Retour tr\u00e8s souple (0.03)\r\n            const ax = (targetX - p.x) * 0.03;\r\n            const ay = (targetY - p.y) * 0.03;\r\n\r\n            p.vx += ax;\r\n            p.vy += ay;\r\n            p.vx += repelX * 0.3;\r\n            p.vy += repelY * 0.3;\r\n            \r\n            \/\/ Friction \u00e9lev\u00e9e pour glisser (0.90)\r\n            p.vx *= 0.90; \r\n            p.vy *= 0.90;\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    \/\/ D\u00e9lai de s\u00e9curit\u00e9 pour le chargement des polices\r\n    setTimeout(init, 100);\r\n    draw();\r\n})();\r\n<\/script>"},"pt":[],"pipeline":[],"class_list":["post-8741","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/portfolio\/8741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":1,"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/portfolio\/8741\/revisions"}],"predecessor-version":[{"id":8742,"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/portfolio\/8741\/revisions\/8742"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/media\/2369"}],"wp:attachment":[{"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/media?parent=8741"}],"wp:term":[{"taxonomy":"pt","embeddable":true,"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/pt?post=8741"},{"taxonomy":"pipeline","embeddable":true,"href":"https:\/\/innovacore.group\/it\/wp-json\/wp\/v2\/pipeline?post=8741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}