{"id":8621,"date":"2026-01-14T20:49:24","date_gmt":"2026-01-14T19:49:24","guid":{"rendered":"https:\/\/innovacore.group\/?post_type=portfolio&p=8621"},"modified":"2026-03-17T15:33:25","modified_gmt":"2026-03-17T13:33:25","slug":"shopisan","status":"publish","type":"portfolio","link":"https:\/\/innovacore.group\/de\/portfolio\/shopisan\/","title":{"rendered":"Shopisan &#8211; Belebung des lokalen Einzelhandels"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Shopisan is the first private &#8222;local attention operator&#8220; dedicated to revitalizing city center commerce. By combining physical event management with a digital platform (Live &amp; Replay), they transform passive retail spaces into dynamic, traffic-generating hubs. Their B2B model aligns the interests of merchants, cities, and private partners to create &#8222;Shopisan Weeks&#8220;\u2014industrialized promotional events that boost footfall and sales while digitizing local inventory.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der europ\u00e4ische Standard f\u00fcr die Aktivierung des lokalen Einzelhandels, die physische Veranstaltungen mit Live-Shopping verbindet.<\/p>\n","protected":false},"featured_media":2369,"parent":0,"template":"","meta":{"inline_featured_image":false,"company_name":"Shopisan","summary":"<span class=\"ic-nycd\">Belebung<\/span> Lokaler Einzelhandel","mission":"<p>Die Krise des lokalen Einzelhandels in ein nachhaltiges Asset verwandeln. Shopisan soll den operativen Arm darstellen, den \u00f6ffentliche Verwaltungen fehlen, und eine schl\u00fcsselfertige L\u00f6sung bieten, die Geselligkeit, digitale Sichtbarkeit und wirtschaftliche Dynamik wieder in die Stadtzentren bringt und unabh\u00e4ngige H\u00e4ndler sowie lokale Gemeinschaften gleicherma\u00dfen unterst\u00fctzt.<\/p>\n","impact":"<p>Shopisan adressiert die \u201estille Krise\u201c leerstehender Einzelhandelsfl\u00e4chen, indem es vorhandene Gewerbeimmobilien maximiert statt neue Geb\u00e4ude zu errichten (Bodenst\u00e4ndigkeit). Indem sie die F\u00f6rderung des lokalen Handels professionalisieren, verlagern sie den Konsum, unterst\u00fctzen nachhaltige Segmente (Second-Hand, lokale Handwerker) und bauen soziale Verbindungen in st\u00e4dtischen Gebieten wieder auf.<\/p>\n","company_logo":"https:\/\/innovacore.group\/wp-content\/uploads\/shopisan-logo-innov-innovacore-optimized.jpg","website_url":"","linkedin_url":"","location":"Paris, Frankreich","founded_year":"2026","key_numbers":{"item-0":{"metric_label":"K+ Verkaufsstellen-Ziel","metric_value":"270"},"item-1":{"metric_label":"% B2B & B2C Modell","metric_value":"100"},"item-2":{"metric_label":"% EBITDA-Ziel","metric_value":"20"}},"hiring_status":"Personalsuche","sector":"Marktplatz","company_type":"Startup","audience":["b2b_a_b2c"],"geo_scope":["national"],"business_model":["Marktplatz","Dienstleistungen"],"funding_stage":"in Bearbeitung","partnership_type":"Erstellung","logo_animation":"<div id=\"shopisan-particle-root\">rn    <canvas id=\"shopisanCanvas\"><\/canvas>rn<\/div>rnrn<style>rn    #shopisan-particle-root {rn        width: 100%;rn        height: 300px;rn        display: flex;rn        justify-content: center;rn        align-items: center;rn        background: transparent;rn        overflow: hidden;rn        cursor: crosshair;rn    }rn<\/style>rnrn<script>rn(function() {rn    const canvas = document.getElementById('shopisanCanvas');rn    const ctx = canvas.getContext('2d', { willReadFrequently: true });rn    const root = document.getElementById('shopisan-particle-root');rn    rn    let width, height;rn    let particles = [];rn    let mouse = { x: -1000, y: -1000 };rn    const particleColor = '#f5f5f5';rn    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        const cx = width \/ 2;rn        const cy = height \/ 2;rn        const isMobile = width < 600;rnrn        \/\/ --- 1. CONFIGURATION ---rn        ctx.fillStyle = 'white';rn        ctx.strokeStyle = 'white';rn        rn        const iconSize = isMobile ? 60 : 90;rn        const fontSize = isMobile ? 35 : 60;rn        const separatorH = isMobile ? 50 : 80;rn        const gap = isMobile ? 20 : 35;rnrn        ctx.font = `bold ${fontSize}px Arial, Helvetica, sans-serif`;rn        const textMetrics = ctx.measureText('SHOPISAN');rn        const textWidth = textMetrics.width;rnrn        const totalWidth = iconSize + gap + 2 + gap + textWidth;rn        const startX = cx - (totalWidth \/ 2);rnrn        \/\/ --- 2. DESSIN DU GABARIT (Invisible) ---rn        const ix = startX + (iconSize \/ 2);rn        const iy = cy - (iconSize * 0.1);rn        const radius = iconSize * 0.35;rn        rn        ctx.lineWidth = iconSize * 0.08;rn        ctx.lineCap = 'round';rn        ctx.lineJoin = 'round';rnrn        \/\/ Srn        ctx.font = `bold ${iconSize * 0.5}px Arial, sans-serif`;rn        ctx.textAlign = 'center';rn        ctx.textBaseline = 'middle';rn        ctx.fillText('S', ix, iy);rnrn        \/\/ Arcsrn        ctx.beginPath();rn        ctx.arc(ix, iy, radius * 0.8, Math.PI, 0); rn        ctx.stroke();rn        ctx.beginPath();rn        ctx.arc(ix, iy, radius * 1.3, Math.PI, 0); rn        ctx.stroke();rnrn        \/\/ Pointern        ctx.beginPath();rn        ctx.moveTo(ix - radius * 0.8, iy + 5);rn        ctx.lineTo(ix, iy + iconSize * 0.5);rn        ctx.lineTo(ix + radius * 0.8, iy + 5);rn        ctx.stroke();rn        ctx.beginPath();rn        ctx.moveTo(ix - radius * 1.3, iy + 5);rn        ctx.lineTo(ix, iy + iconSize * 0.8);rn        ctx.lineTo(ix + radius * 1.3, iy + 5);rn        ctx.stroke();rnrn        \/\/ Barrern        const lineX = startX + iconSize + gap;rn        ctx.lineWidth = 2;rn        ctx.beginPath();rn        ctx.moveTo(lineX, cy - separatorH \/ 2);rn        ctx.lineTo(lineX, cy + separatorH \/ 2);rn        ctx.stroke();rnrn        \/\/ Textern        const textX = lineX + gap;rn        ctx.textAlign = 'left';rn        ctx.fillStyle = 'white';rn        ctx.font = `bold ${fontSize}px Arial, Helvetica, sans-serif`;rn        ctx.fillText('SHOPISAN', textX, cy);rnrn        \/\/ --- 3. SCAN ---rn        const density = 4;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                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,rn                        force: Math.random() rn                    });rn                }rn            }rn        }rn        ctx.clearRect(0, 0, width, height);rn    }rnrn    function draw() {rn        ctx.clearRect(0, 0, width, height);rn        rn        \/\/ MODIF 1 : Animation de vague beaucoup plus lentern        time += 0.02; \/\/ Avant c'\u00e9tait 0.05rnrn        ctx.fillStyle = particleColor;rn        rn        particles.forEach(p => {rn            \/\/ Vague doucern            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;rnrn            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;rnrn            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                rn                \/\/ MODIF 2 : R\u00e9pulsion beaucoup plus douce (8 au lieu de 20)rn                repelX = -Math.cos(angle) * force * 8;rn                repelY = -Math.sin(angle) * force * 8;rn            }rnrn            const targetX = p.originX + waveX;rn            const targetY = p.originY + waveY;rnrn            \/\/ MODIF 3 : Retour \u00e0 la position tr\u00e8s souple (0.03 au lieu de 0.08)rn            const ax = (targetX - p.x) * 0.03;rn            const ay = (targetY - p.y) * 0.03;rnrn            p.vx += ax;rn            p.vy += ay;rn            p.vx += repelX * 0.3; \/\/ On applique aussi moins de force sourisrn            p.vy += repelY * 0.3;rn            rn            \/\/ MODIF 4 : Friction plus \u00e9lev\u00e9e pour que \u00e7a \"glisse\" (0.90 au lieu de 0.85)rn            p.vx *= 0.90; rn            p.vy *= 0.90;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    setTimeout(init, 50);rn    draw();rn})();rn<\/script>"},"pt":[],"pipeline":[],"class_list":["post-8621","portfolio","type-portfolio","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/portfolio\/8621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/portfolio"}],"about":[{"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/types\/portfolio"}],"version-history":[{"count":1,"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/portfolio\/8621\/revisions"}],"predecessor-version":[{"id":8622,"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/portfolio\/8621\/revisions\/8622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/media\/2369"}],"wp:attachment":[{"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/media?parent=8621"}],"wp:term":[{"taxonomy":"pt","embeddable":true,"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/pt?post=8621"},{"taxonomy":"pipeline","embeddable":true,"href":"https:\/\/innovacore.group\/de\/wp-json\/wp\/v2\/pipeline?post=8621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}