{"id":7224,"date":"2026-01-14T11:58:28","date_gmt":"2026-01-14T10:58:28","guid":{"rendered":"https:\/\/innovacore.group\/?post_type=portfolio&p=7224"},"modified":"2026-03-16T11:19:30","modified_gmt":"2026-03-16T09:19:30","slug":"source-agency-jedyne-wsparcie-marketingowe-skoncentrowane-na-wynikach","status":"publish","type":"portfolio","link":"https:\/\/innovacore.group\/pl\/portfolio\/source-agency-jedyne-wsparcie-marketingowe-skoncentrowane-na-wynikach\/","title":{"rendered":"Source Agency \u2013 Jedyne Wsparcie Marketingowe Skoncentrowane na Wynikach"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Source Agency (Source Group Marketing) is a global digital and creative marketing partner helping ambitious brands enter new markets and scale internationally. We unite strategy, branding, web, SEO\/SEA, social and paid media with AI-assisted insights and automation to test faster, personalize journeys and convert more. The result: clear positioning, qualified leads and sustainable growth.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Marketing wzrostowy nap\u0119dzany AI dla marek rozwijaj\u0105cych dzia\u0142alno\u015b\u0107 na rynkach mi\u0119dzynarodowych.<\/p>\n","protected":false},"featured_media":2369,"parent":0,"template":"","meta":{"inline_featured_image":false,"company_name":"Source Agency","summary":"Jedyne <span class=\"ic-nycd\">Wsparcie Marketingowe Skoncentrowane na Wynikach<\/span>","mission":"<p>Misja: Pomaga\u0107 wizjonerskim przedsi\u0119biorcom i zespo\u0142om odnie\u015b\u0107 globalny sukces dzi\u0119ki spersonalizowanym strategiom wej\u015bcia na rynek i wzrostu. \u0141\u0105czymy ludzk\u0105 kreatywno\u015b\u0107 z analiz\u0105 wspomagan\u0105 AI, szybkie eksperymenty i automatyzacj\u0119, aby budowa\u0107 widoczno\u015b\u0107, generowa\u0107 popyt i poprawia\u0107 rentowno\u015b\u0107.<\/p>\n","impact":"<p>Wp\u0142yw: Szybsze decyzje i bardziej efektywne kampanie dzi\u0119ki danym i testowaniu wspomaganemu AI. Lepsza jako\u015b\u0107 ruchu, wy\u017cszy wska\u017anik konwersji i silniejsza obecno\u015b\u0107 marki na rynkach. Zautomatyzowane piel\u0119gnowanie lead\u00f3w i procesy gotowe do CRM przekszta\u0142caj\u0105 potencjalnych klient\u00f3w w klient\u00f3w oraz wspieraj\u0105 d\u0142ugoterminowy, wymierny wzrost.<\/p>\n","company_logo":"https:\/\/innovacore.group\/wp-content\/uploads\/source-logo-core-innovacore-optimized.jpg","website_url":"https:\/\/sourcegroup.marketing","linkedin_url":"https:\/\/www.linkedin.com\/company\/sourceagency\/","location":"Miami","founded_year":"2020","key_numbers":{"item-0":{"metric_label":"+M$ wygenerowanych","metric_value":"300"},"item-1":{"metric_label":"+ aktywowanych rynk\u00f3w","metric_value":"20"},"item-2":{"metric_label":"+% wzrostu","metric_value":"30"}},"hiring_status":"rekrutacja","sector":"inny","company_type":"M\u015aP","audience":["B2B","B2B2C"],"geo_scope":["globalny"],"business_model":["us\u0142ugi"],"funding_stage":"nieujawniony","partnership_type":"utworzenie","logo_animation":"<div id=\"source-particle-root\">rn    <canvas id=\"sourceCanvas\"><\/canvas>rn<\/div>rn<\/html>rn<style>rn    #source-particle-root {rn        width: 100%;rn        height: 300px; \/* Hauteur fixe respect\u00e9e *\/rn        display: flex;rn        justify-content: center;rn        align-items: center;rn        background: transparent; \/* Fond transparent pour s'int\u00e9grer \u00e0 ton site *\/rn        overflow: hidden;rn        cursor: crosshair; \/* Invite \u00e0 l'interaction *\/rn    }rn<\/style>rnrn<script>rn(function() {rn    const canvas = document.getElementById('sourceCanvas');rn    const ctx = canvas.getContext('2d', { willReadFrequently: true });rn    const root = document.getElementById('source-particle-root');rn    rn    let width, height;rn    let particles = [];rn    let mouse = { x: -1000, y: -1000 };rn    const particleColor = '#f5f5f5'; \/\/ Gris clair pour ressortir sur ton fond sombrern    let time = 0;rnrn    function init() {rn        width = root.offsetWidth;rn        height = 300;rn        rn        const dpr = window.devicePixelRatio || 1;rn        canvas.width = width * dpr;rn        canvas.height = height * dpr;rn        canvas.style.width = width + 'px';rn        canvas.style.height = height + 'px';rn        ctx.scale(dpr, dpr);rnrn        createLogoParticles();rn    }rnrn    function createLogoParticles() {rn        particles = [];rn        rn        \/\/ 1. Configuration du texte \"source.\"rn        \/\/ Taille adaptative : plus petit sur mobile (60px) vs desktop (130px)rn        const fontSize = width < 600 ? 60 : 130; rnrn        ctx.font = `bold ${fontSize}px \"Times New Roman\", Times, serif`;rn        ctx.fillStyle = 'white'; \/\/ Couleur technique pour le scan (invisible \u00e0 la fin)rn        ctx.textAlign = 'center';rn        ctx.textBaseline = 'middle';rn        rn        \/\/ Dessin au centre exactrn        ctx.fillText('source.', width \/ 2, height \/ 2);rnrn        \/\/ 2. Scan des pixelsrn        const density = 4; \/\/ \u00c9chantillonnage (4 = bon \u00e9quilibre perf\/qualit\u00e9)rn        const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height).data;rn        const dataWidth = canvas.width; rnrn        for (let y = 0; y < canvas.height; y += density) {rn            for (let x = 0; x < canvas.width; x += density) {rn                \/\/ Si le pixel n'est pas transparentrn                if (imageData[(y * dataWidth + x) * 4 + 3] > 128) {rn                    const dpr = window.devicePixelRatio || 1;rn                    particles.push({rn                        x: x \/ dpr,rn                        y: y \/ dpr,rn                        originX: x \/ dpr,rn                        originY: y \/ dpr,rn                        vx: 0, rn                        vy: 0,rn                        size: Math.random() * 1.5 + 0.5, \/\/ Taille variable naturellern                        force: Math.random() \/\/ Variation individuellern                    });rn                }rn            }rn        }rn        rn        \/\/ Nettoyage imm\u00e9diat du texte statique pour ne laisser que les particulesrn        ctx.clearRect(0, 0, width, height);rn    }rnrn    function draw() {rn        ctx.clearRect(0, 0, width, height);rn        time += 0.05;rnrn        ctx.fillStyle = particleColor;rn        rn        particles.forEach(p => {rn            \/\/ --- 1. Mouvement naturel (Respiration) ---rn            const waveX = Math.sin(time * 0.5 + p.y * 0.05) * 2;rn            const waveY = Math.cos(time * 0.3 + p.x * 0.05) * 2;rn            rn            \/\/ --- 2. Interaction Souris ---rn            const dx = mouse.x - p.x;rn            const dy = mouse.y - p.y;rn            const dist = Math.sqrt(dx*dx + dy*dy);rn            const radius = 80;rn            rn            let repelX = 0;rn            let repelY = 0;rnrn            if (dist < radius) {rn                const force = (radius - dist) \/ radius;rn                const angle = Math.atan2(dy, dx);rn                repelX = -Math.cos(angle) * force * 20;rn                repelY = -Math.sin(angle) * force * 20;rn            }rnrn            \/\/ --- 3. Physique (Retour \u00e9lastique) ---rn            const targetX = p.originX + waveX;rn            const targetY = p.originY + waveY;rnrn            const ax = (targetX - p.x) * 0.08;rn            const ay = (targetY - p.y) * 0.08;rnrn            p.vx += ax;rn            p.vy += ay;rn            p.vx += repelX * 0.5;rn            p.vy += repelY * 0.5;rn            p.vx *= 0.85; \/\/ Frictionrn            p.vy *= 0.85;rnrn            p.x += p.vx;rn            p.y += p.vy;rnrn            ctx.beginPath();rn            ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);rn            ctx.fill();rn        });rnrn        requestAnimationFrame(draw);rn    }rnrn    const updateMouse = (e) => {rn        const r = canvas.getBoundingClientRect();rn        const cx = e.touches ? e.touches[0].clientX : e.clientX;rn        const cy = e.touches ? e.touches[0].clientY : e.clientY;rn        mouse.x = cx - r.left;rn        mouse.y = cy - r.top;rn    };rnrn    window.addEventListener('resize', init);rn    canvas.addEventListener('mousemove', updateMouse);rn    canvas.addEventListener('touchmove', updateMouse, {passive: true});rn    canvas.addEventListener('mouseleave', () => { mouse.x = -1000; mouse.y = -1000; });rn    canvas.addEventListener('touchend', () => { mouse.x = -1000; mouse.y = -1000; });rnrn    \/\/ Petit d\u00e9lai pour assurer le chargement de la policern    setTimeout(init, 50);rn    draw();rn})();rn<\/script>"},"pt":[],"pipeline":[],"class_list":["post-7224","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/portfolio\/7224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":1,"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/portfolio\/7224\/revisions"}],"predecessor-version":[{"id":7225,"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/portfolio\/7224\/revisions\/7225"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/media\/2369"}],"wp:attachment":[{"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/media?parent=7224"}],"wp:term":[{"taxonomy":"pt","embeddable":true,"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/pt?post=7224"},{"taxonomy":"pipeline","embeddable":true,"href":"https:\/\/innovacore.group\/pl\/wp-json\/wp\/v2\/pipeline?post=7224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}