KNOBS.PL - migracja Shoper -> WooCommerce z konfiguratorem 3D i własnym PIM
E-commerce / Uchwyty meblowe / Wyposażenie wnętrz (B2B+B2C)
Migracja sklepu uchwytów meblowych z Shopera na WooCommerce - 6157 produktów, 4325/4325 przekierowań 301 bez utraty pozycji Google, własny block theme FSE, konfigurator 3D VECTIS (Three.js + Blender), osobny PIM w FastAPI, 127 stron programmatic SEO z Bielikiem lokalnie, ~30 własnych wtyczek pod konkretne potrzeby biznesu.
O projekcie
KNOBS.PL to sklep uchwytów, gałek i akcesoriów meblowych - 11 marek (Formani, Viefe, Beslag, Buster+Punch, Corston, Furnipart, VECTIS, NU, Avolt, Dimplex, Fontini), 6157 produktów, główne źródło leadów to ruch organiczny Piotra (SEO). Powód migracji z Shopera: brak elastyczności. Na Shoperze programmatic SEO, custom filtry, konfigurator 3D, integracja z PIM i własny lejek RFQ dla mebli VECTIS albo w ogóle się nie da, albo trzeba hakować pluginy SASS-owe. Zbudowaliśmy własny block theme FSE + około 30 własnych wtyczek pod konkretne potrzeby biznesu + osobny PIM w FastAPI. Live od 2026-07-24. Audit modelem Fable, poprawki Opusem.
“Duża migracja z Shopera na WooCommerce - własny motyw + 30 wtyczek + konfigurator 3D + programmatic SEO + PIM.”
Wyzwanie
Sklep aktywnie sprzedaje, Piotr włożył lata pracy w SEO - kluczowe URL-e mają być zachowane 1:1, nie tylko przekierowane 301. 11 marek producentów, każda z własnym GPSR compliance. Formani ma 4682 warianty w 752 modelach. VECTIS to konfigurowalny system modułowy (90 konfiguracji, swap wykończeń) wymagający wizualizacji 3D w przeglądarce. Klasyczne filtry WC Product Collection ładowały się 3-12s, native attribute filters kłamały liczniki (globalne zamiast per archiwum marki). Płatności: Piotr chce Autopay zamiast Przelewy24. Dostawa: InPost paczkomaty + kurier do punktu + osobisty w showroomie. Compliance: GPSR, RODO, Consent Mode v2, zwroty online, faktura na firmę z walidacją NIP. Sklep z ruchem = cel botów, potrzeba hardeningu bezpieczeństwa. Cały development lokalnie w Dockerze - import 6157 produktów bez ryzyka dla produkcji.
Rozwiązanie
Import 6157 produktów przez własny pipeline (CSV + scraper + importer PHP): 4422 publish, 1735 draft, warianty grupowane po osi Kolor. Struktura URL-i kanoniczna (/produkt/, /kategoria/, /marka/), stare Shoperowe robią 301 na czyste - 4325/4325 zmapowane bez straty. Własny block theme FSE, około 30 mu-pluginów pod konkretne potrzeby (filtry, GPSR, RFQ, PIM sync, programmatic SEO, security, checkout tweaks). Development izolowany w Dockerze, deploy na Mikrus VPS z tuningiem serwera. Szczegóły integracji w blokach poniżej.
Co pod maską
6157 produktów Shoper → Woo bez utraty SEO
Własny pipeline (CSV + scraper zdjęć + importer PHP). Warianty koloru/wykończenia grupowane w produkty wariantowe. 4325/4325 kanonicznych URL-i Piotra zmapowane 301 na czyste ścieżki (/produkt/, /kategoria/, /marka/) - stare Shoperowe (+/pl/) nadal łapane. Zero utraconych pozycji Google przy cutoverze.
Konfigurator VECTIS w przeglądarce
Osobny plugin Three.js: 90 konfiguracji, swap wykończeń przez shader mapping, GLB z Draco compression, modele STL na uploads/vectis-3d (poza gitem). Wkłady gniazd (USB, RJ45, HDMI, TV, audio) zamodelowane od zera w Blenderze przez blender-mcp - licują z modułami VECTIS. Konwerter oferta→PDF/koszyk podpięty do konfiguratora.
Programmatic SEO z Bielikiem lokalnie
127 stron typu /czarne-matowe-uchwyty-meblowe/ generowanych przez knobs-programmatic.php: kombinacje kolor + kształt + pomieszczenie + styl. Płaskie URL-e, self-canonical, AI intro z Claude, sitemap w Yoast. Bielik puszczany na lokalnym PC (nie serwer), gap analysis z Senuto. Pokrycie długiego ogona bez płacenia za content.
Osobny PIM w FastAPI+SQLite jako mirror sklepu
5560 produktów, 35k atrybutów. Piotr edytuje w PIM, sklep jest źródłem prawdy, sync w drugą stronę (zdjęcia, atrybuty) w 6 workerach paralelnie z rollback tsv per uruchomienie. Zsynchronizowane: 2083 produkty zdjęć + 2529 prostych + 37 wariantowych atrybutów. Kandydat na osobną wtyczkę Woo w przyszłości.
Filtry AJAX 0.6s vs 3-12s natywnych
Product Collection przełączony na Classic Template block (0.6s vs 3-12s), plus własny knobs-filters.php AJAX. Fix kłamiących liczników: resolver archiwum z Referera w rest_pre_dispatch łapie Store API /wc/store/v1/products/collection-data, rozwiązuje URL na taxonomy+term_id, pre_get_posts zawęża wszystkie WP_Query - Avolt kolor Czarny mat pokazywał globalne 179, teraz zero (blok koloru sam znika).
GTM + GA4 z pełnym trackingiem e-commerce
Kontener Piotra osadzony przez mu-plugin knobs-gtm.php (head + body noscript), dataLayer e-commerce z eventami view_item (produkt, brand + category), add_to_cart (JS + nasłuch wc-blocks_added_to_cart), begin_checkout (cart items), purchase (woocommerce_thankyou z transaction_id, value/tax/shipping). Wyłączony poprzedni Site Kit żeby nie dublować. Consent Mode v2 spięty z Pressidium Cookie Consent.
Apaczka: paczkomaty + kurier + osobisty w Gdańsku
Wtyczki apaczka-pl + geowidget, klucze API w opcjach. Mu-plugin knobs-apaczka.php: patch Node.prototype.removeChild (bug vendora w Block Checkout), MutationObserver TYLKO na .wp-block-woocommerce-checkout (nigdy body - infinite loop). Geowidget button pokazuje się pod paczkomatem/kurierem do punktu, przy odbiorze osobistym renderujemy złotą ramkę showroomu (ul. Piastowska 32/2, Gdańsk).
Autopay + faktura na firmę z walidacją NIP
Autopay zamiast Przelewy24 (decyzja Piotra), ServiceID 218652, klucz w DB do rotacji, ITN URL skonfigurowany. Faktura na firmę przez WC Additional Checkout Fields API (WC 10.9): checkbox 'Chcę fakturę' + pola NIP/nazwa firmy w grupie order, hide/show w Block Checkout (React + delegacja + MutationObserver), walidacja z sumą kontrolną NIP w woocommerce_blocks_validate_location_order_fields.
WPNest Returns branded pod markę
Przycisk 'Zwróć' w Moje konto (woocommerce_my_account_my_orders_actions), wizard 3-krokowy /zwroty-online/?order=ID, wbudowany PDF wzoru odstąpienia PL/EN (załącznik 2 ustawy o prawach konsumenta). Config: button_label='Zwróć', merchant_email=kontakt@knobs.pl. Ostylowana na kolory marki (CSS .wpnestreturns-app ink/brass zamiast domyślnego blue).
GPSR per marka + strona odstąpienia
GPSR (Rozporządzenie UE 2023/988): realny adres rejestrowy producenta per marka, oznaczenia bezpieczeństwa, logotypy marek w zakładce karty produktu (własny knobs-gpsr-producers). Strona /odstapienie-od-umowy/ z formularzem załącznika 2 ustawy o prawach konsumenta + link w stopce. Cookie consent Pressidium 1.11.3 z pełnym PL i rozsądnymi GDPR defaults.
Hardening + monitoring IOC
knobs-security.php: anty-enumeracja loginów (blok author=N w URL), rotacja kont admin. Turnstile na wp-login + WooCommerce (klucze w wp-config, nie DB). Cloudflare WAF: blok Rosji, blok śmieciowych crawlerów (Google/Bing/AI zachowane). Cron codzienny IOC (build/security-scan.sh) na VPS: skanuje malware, alert mailem gdy coś wykryje. wp core + plugin verify-checksums OK.
Docker dev + Mikrus VPS + quality stack
Development w Dockerze: WP 7.0.2 + MariaDB 11 + WP-CLI + adminer, izolowane środowisko z bind-mountami na motyw/uploads/build. Deploy na Mikrus VPS z tuningiem: php-fpm 16 workerów + terminate timeout, MariaDB 512M, backupy (były zero!), ownership cron, nginx wp-login limit + xmlrpc block. Quality gate: PHPCS + PHPStan + ESLint + Stylelint + husky pre-commit. Composer zablokowany SSL - obejście przez git submodules.
Efekty i cechy
- 6157 produktów zaimportowanych (4422 publish, 1735 draft) z zachowaniem osi wariantów Kolor
- 4325/4325 kanonicznych URL-i SEO Piotra przeniesionych 1:1, stare Shoperowe 301 na czyste - zero utraconych pozycji Google przy migracji
- Własny block theme FSE + około 30 mu-pluginów (żadnego premium motywu ani buildera - pełna kontrola nad wyglądem, wydajnością i integracjami)
- Konfigurator 3D VECTIS w przeglądarce - Three.js, 90 konfiguracji, swap wykończeń, GLB z Draco, custom wkłady gniazd zamodelowane w Blenderze
- 127 stron programmatic SEO (kolor + kształt + pomieszczenie + styl) generowanych z Bielika lokalnie - realne pokrycie długiego ogona bez płacenia za content
- Osobny PIM w FastAPI+SQLite jako mirror sklepu (5560 prod, 35k atrybutów) - Piotr edytuje, my enrichujemy, sync zdjęć/atrybutów rebuildable
- Filtry AJAX 0.6s vs 3-12s natywnych + fix kłamiących liczników (globalne -> per archiwum marki)
- Konsolidacja 600 płaskich Formani -> 216 wariantowych + 600 redirectów 301 (mniejszy indeks Google, lepszy UX na karcie)
- Apaczka end-to-end (InPost paczkomaty + kurier do punktu + osobisty odbiór), własny glue-code Block Checkout obchodzi bug vendora
- Zwroty online przez WPNest Returns branded na kolory marki + PDF wzoru odstąpienia PL/EN
- GTM + GA4 z pełnym trackingiem e-commerce (view_item / add_to_cart / begin_checkout / purchase) - Piotr dostaje real-time analitykę
- Hardening bezpieczeństwa: anty-enumeracja, Turnstile na login + WC, blok Rosji CF WAF, cron IOC z alertem mailem - audyt czysty
- Mobilny bottom bar 5 ikon + mega menu drill-down + branded pill 'MENU' - konwersja mobile-first
- Ofertownik z konwerterem PDF dostawcy (VECTIS/ISD z rabatem 5%) - przyspiesza ofertowanie B2B, akceptacja prowadzi do koszyka
- Mikrus VPS z tuningiem (php-fpm 16 workerów, MariaDB 512M, backupy z zera, nginx wp-login limit) - stabilny prod bez babysittingu
- Development w Dockerze + PHPCS + PHPStan + ESLint + Stylelint + husky pre-commit - powtarzalne wdrożenia, zero regresji
Technologie
Charakter wizualny: Skandynawski minimalizm, biel + akcenty brass. Uchwyty w centrum uwagi.