E-commerce · Tomasz Pagacz - Jubiler Pagacz / AIRO Concept · 2026 · 4 miesiące
Jubiler Pagacz - sklep WooCommerce z wyszukiwarką diamentów
Sklep, w którym obok 19 500 własnych produktów stoi wyszukiwarka ponad miliona diamentów z zewnętrznego katalogu - klient wybiera kamień po numerze GIA, a jubiler go oprawia.
- WordPress
- WooCommerce
- PHP
- JavaScript
- Nivoda API
- LiteSpeed Cache
- Docker
- GitHub Actions
Wyzwanie
Tomasz Pagacz jest rzeczoznawcą biżuterii i gemmologiem z salonem w Bielsku-Białej. Sklep online miał udźwignąć katalog kilkunastu tysięcy wyrobów złotych bez utraty szybkości - a przy zaręczynach klient i tak pyta o konkretny kamień, którego w magazynie nie ma i nie będzie, bo trzymanie diamentów na stanie to zamrożony kapitał. Trzeba było pogodzić duży własny katalog z dostępem do kamieni, których jubiler fizycznie nie posiada.
Nasze rozwiązanie
Zbudowaliśmy sklep na WooCommerce z motywem Neve rozbudowanym o warstwę dedykowaną i LiteSpeed Cache, a do tego osobną wyszukiwarkę diamentów zasilaną z API Nivoda. Klient filtruje ponad milion certyfikowanych kamieni po masie, barwie i czystości, ogląda je w 360°, sprawdza numer GIA i kupuje - a jubiler oprawia.
19 500+
Produktów w sklepie
1 mln+
Diamentów w wyszukiwarce
9
Kategorii
Co zbudowaliśmy
- 01 Katalog 19 500+ produktów w 9 kategoriach
- 02 Wyszukiwarka diamentów z API Nivoda - ponad milion kamieni
- 03 Podgląd 360°, numer certyfikatu GIA, cena i cena za karat
- 04 Filtry po masie, barwie, czystości, szlifie i fluorescencji
- 05 Nawigacja cenowa: progi od 500 zł do powyżej 5 000 zł
- 06 Import katalogu odlewni: dane, zdjęcia i własne opisy produktów
- 07 Wersje językowe PL / EN / DE
- 08 LiteSpeed Cache pod duży katalog
- 09 Staging i produkcja w Dockerze, promocja przez GitHub Actions
- 10 Synchronizacja z katalogiem dostawcy ze strażnikiem i alarmem
- 11 Odpowiedzi 410 dla usuniętych produktów i spłaszczone łańcuchy przekierowań
- 12 Log wysłanych maili i alarm o zajętości dysku
Spis treści +
- Punkt wyjścia
- Decyzje, które ukształtowały projekt
- Wyszukiwarka diamentów zamiast magazynu diamentów
- Motyw z rynku, nie pisany od zera
- Katalog zbudowany skryptem, nie przepisywany ręcznie
- Cache dobrany do rozmiaru katalogu
- Nawigacja po cenie, nie tylko po kategorii
- Staging przed produkcją, z drogą powrotną
- Utrzymanie po starcie
- Co z tego wyszło
- Technicznie
Punkt wyjścia
Salon przy ul. Bazarowej w Bielsku-Białej sprzedaje dwie różne rzeczy. Pierwsza to biżuteria z gabloty - łańcuszki, kolczyki, obrączki, rzeczy, które można sfotografować i wystawić. Druga to diament pod pierścionek zaręczynowy: klient przychodzi z budżetem, a jubiler szuka kamienia u dostawców. Sklep online nie zastępuje tu wizyty w salonie - ma sprawić, że klient z Bielska-Białej w ogóle na tę wizytę trafi, o czym piszemy w tekście o pozycjonowaniu lokalnym.
To jest salon widziany od frontu. Ewidencja po drugiej stronie lady - magazyn, zlecenia, komis i skup metali - chodzi w osobnym systemie magazynowym, który zbudowaliśmy dla tego samego jubilera.
Sklep internetowy obsługujący tylko pierwszą część byłby połową firmy. Obsługujący drugą przez trzymanie diamentów na stanie - niemożliwy, bo to zamrożenie kapitału w towarze, który leży miesiącami. Zresztą sama decyzja, na czym stawiać taki sklep internetowy, zapada raz i zostaje na lata - a przy katalogu tej wielkości lepiej ją podjąć świadomie, tak jak rozpisaliśmy to w porównaniu WooCommerce i Shopify na polskim rynku.
Decyzje, które ukształtowały projekt
Wyszukiwarka diamentów zamiast magazynu diamentów
Katalog kamieni pochodzi z API Nivoda i jest przeszukiwany na żywo: ponad milion certyfikowanych diamentów, każdy z numerem GIA, parametrami szlifu, wideo 360° i ceną przeliczoną na złotówki wraz z ceną za karat. Jubiler nie ma na stanie ani jednego z nich.
To jest sedno tego projektu. Klient dostaje wybór większy niż w jakiejkolwiek gablocie w Polsce, sprzedawca nie zamraża pieniędzy, a wartość, którą wnosi jubiler - dobór kamienia, oprawa, gwarancja autentyczności - zostaje po jego stronie. Bez tej integracji strona byłaby katalogiem gotowej biżuterii, czyli tym, co ma każdy konkurent.
Motyw z rynku, nie pisany od zera
Warstwa sklepu stoi na Neve z dedykowanymi szablonami i stylami (prefiks jp-). Przy dziewiętnastu tysiącach produktów motyw pisany od podstaw oznacza samodzielne utrzymywanie zgodności z każdą aktualizacją WooCommerce - a te potrafią zmieniać szablony koszyka i checkoutu. Praca własna poszła tam, gdzie tworzy różnicę: w strony diamentów, listing produktów i wygląd salonu, a nie w odtwarzanie koszyka, który już istnieje.
Katalog zbudowany skryptem, nie przepisywany ręcznie
Dziewiętnaście tysięcy produktów w dziewięciu kategoriach nie powstaje przez wpisywanie ich po kolei. Dane wyjściowe - waga, rozmiary i układ kamieni - pochodzą z kart produktowych odlewni, zdjęcia schodzą skryptem razem z przypisaniem do kategorii, a opisy każdego wzoru są pisane od nowa zamiast kopiowane od dostawcy.
Ten ostatni krok jest tu najważniejszy. Opis przeklejony z katalogu producenta ma w Google dokładnie taką wartość, jaką ma setny identyczny opis tego samego pierścionka na setnej identycznej stronie.
Cache dobrany do rozmiaru katalogu
Dziewiętnaście tysięcy produktów to zapytania, których WooCommerce nie obsłuży w rozsądnym czasie bez warstwy cache. LiteSpeed Cache stoi przed sklepem; po każdej zmianie w treści leci purge, bo cache, którego nikt nie czyści, jest gorszy niż brak cache.
Nawigacja po cenie, nie tylko po kategorii
Obok podziału na pierścionki, kolczyki i naszyjniki menu ma progi cenowe: do 500 zł, 500-1 000, 1 000-2 500, 2 500-5 000 i powyżej. Przy takim katalogu połowa klientów wie, ile chce wydać, zanim wie, co chce kupić - i to jest dla nich pierwszy filtr.
Staging przed produkcją, z drogą powrotną
Push na main wchodzi na staging automatycznie, promocja na produkcję jest ręcznym krokiem w GitHub Actions. Oba środowiska chodzą w Dockerze na VPS, w repo leży skrypt rollbacku. Przy sklepie, który realnie przyjmuje zamówienia, „zobaczymy, czy zadziała” na produkcji nie jest metodą pracy.
Utrzymanie po starcie
Sklep z takim katalogiem wymaga stałej opieki. Kilka zmian z września:
Baner zgód jako okno na środku ekranu. W rogu strony prawie nikt go nie klikał. Po przeniesieniu banera do okna modalnego współczynnik konwersji kampanii lokalnej w odczycie z 28 września wrócił do 9,5%.
Katalog dostawcy bez niespodzianek. Produkty wycofane u dostawcy trafiają do sklepu jako brak w magazynie, a nie jako szkic. Strażnik katalogu ocenia zmiany progiem względnym, a nie stałą liczbą, i po trzech nieudanych przebiegach wysyła alarm. Jeden przebieg pobiera katalog raz, zamiast pięciu razy.
Porządek dla Googlebota. Usunięte produkty zwracają 410 zamiast 404, łańcuchy przekierowań 301 zostały spłaszczone do jednego skoku, a robots.txt jest cache’owany na dobę zamiast na godzinę. Tydzień po zmianach udział błędów 404 w ruchu Googlebota spadł z 16,8% do 2,9%.
Drobne rzeczy, które ktoś w końcu zauważa. Przełącznik języka EN/DE w nagłówku zaczął faktycznie tłumaczyć stronę, maile ze sklepu mają log wysyłek (wcześniej nie dało się sprawdzić, czy powiadomienie doszło), a serwer wysyła alarm, gdy wspólny dysk przekroczy 85%.
Co z tego wyszło
Pomiar strony głównej z 13 września 2026, headless Chrome bez cache: 33 ms do pierwszego bajtu, 304 ms do pierwszego renderowania treści, 855 ms do zdarzenia load. To dobry wynik jak na sklep z takim katalogiem - LiteSpeed Cache robi swoje przy pierwszym bajcie.
Uczciwa uwaga do reszty liczb: 86 żądań i 3953 kB transferu to dużo - jeden dokument, 18 arkuszy stylów, 34 obrazy, 21 plików JavaScript, 7 fontów i 5 zapytań XHR/fetch do wyszukiwarki diamentów. Przy sklepie z dziewiętnastoma tysiącami produktów i osobną integracją z Nivoda to nie jest skandal, ale też nie ma sensu udawać, że strona jest lekka. Rezerwa jest w obrazach i w liczbie arkuszy stylów - to miejsce, w którym można szukać dalszych ms, dokładnie tak jak opisujemy w checkliście Core Web Vitals. Nie mamy pomiaru sprzed wdrożenia, więc nie porównujemy z „przed” - to jest stan po uruchomieniu, nie dowód poprawy.
Technicznie
WordPress z WooCommerce w Dockerze na VPS, motyw Neve z warstwą dedykowaną (jp- w CSS, jp_ w PHP), LiteSpeed Cache. Integracja z Nivoda w inc/nivoda-api.php z własnym frontem wyszukiwarki. Wersje PL / EN / DE. CI/CD w GitHub Actions: main na staging, promocja na produkcję ręcznie, skrypty deployu i rollbacku w repozytorium.
Zrzuty ekranu


Hero salonu - Tomasz Pagacz przy lupie gemmologicznej, CTA na konsultację.
Podobny problem do rozwiązania?
Napisz krótko, o co chodzi, wycena wraca w 24 godziny.
Zapytaj o wycenę →






