Case study · Aplikacja Shopify
Data Engine dla Shopify
Masowy import i eksport katalogu w klasie Matrixify, zbudowany pod sklepy z dziesiątkami tysięcy produktów, wariantów i metapól. Zanim cokolwiek trafi do sklepu, widać każdą zmianę pole po polu.


- 500MB
- maksymalny plik CSV lub XLSX, czytany strumieniowo
- 46
- pól produktu plus wszystkie metapola sklepu
- 7
- reguł walidacji przed zapisem
- 96
- endpointów API silnika
- 190
- testów automatycznych
- 30dni
- na rollback zmian w polach produktów
Duży katalog w Shopify żyje w plikach CSV.
Cenniki od dostawców, nowe kolekcje, parametry w metapolach. Przy dziesiątkach tysięcy produktów nikt nie poprawia tego ręcznie w panelu. Każda zmiana to plik, a każdy plik to ryzyko.
- 01Import na ślepoPlik trafia do sklepu bez porównania z tym, co już w nim jest. Błąd w kolumnie z ceną widać dopiero wtedy, gdy widzą go klienci.
- 02Aktualizacja, która kasujePlik z samymi cenami nie może ruszać wariantów, zdjęć ani metapól, których w nim nie ma.
- 03Metapola bez kontroliWartość niezgodna z typem pola wraca jako niezrozumiały błąd API albo przepada bez śladu.
- 04Godziny importu, zero marginesuLimity API Shopify, restart serwera albo jeden zły wiersz nie mogą oznaczać zaczynania od nowa.
Import, który najpierw pokazuje, potem zapisuje.
CSV, XLSX, Google Sheets i link
Pliki do 500 MB czytane strumieniowo. Arkusz Google można podpiąć na stałe, a zmiana w nim odświeża dane przed importem.
Kolumny dopasowują się same
Dopasowanie po nazwie, aliasach i podobieństwie, z oceną pewności. Rozpoznaje nagłówki metapól w stylu Matrixify i natywnego eksportu Shopify.
Diff pole po polu przed zapisem
Każdy produkt dostaje operację: nowy, aktualizacja albo bez zmian, z obecną i nową wartością. Wiersze bez zmian w ogóle nie idą do Shopify.
Plik z cenami nie kasuje reszty
Aktualizacja zmienia tylko to, co jest w pliku. Warianty, zdjęcia i metapola spoza pliku zostają nietknięte.
Błędy, zanim dotkną sklepu
Brakujące pola, handle, wartości słownikowe, liczby, adresy URL, duplikaty SKU i typy metapól. Komunikat wskazuje wiersz i kolumnę.
Odporne na limity i awarie
Budżet punktów API liczony per sklep, ponowienia z narastającym odstępem, wznawianie przerwanych importów i raport błędów w CSV.
Cały katalog, bez stronicowania
Shopify Bulk Operations do CSV lub XLSX: warianty, zdjęcia i metapola, z filtrami i wyborem kolumn. Plik wraca do importu bez poprawek.
Rollback i jakość katalogu
Przez 30 dni można przywrócić poprzednie wartości pól produktów. Skan jakości ocenia katalog w skali 0–100 i pokazuje braki.
Od pliku do sklepu w sześciu krokach.
- 01PlikCSV, XLSX, arkusz Google albo link do pliku na serwerze dostawcy.
- 02MapowanieKolumny przypisane do pól i metapól automatycznie, z możliwością poprawki.
- 03WalidacjaSiedem reguł sprawdza dane. Błąd blokuje import, ostrzeżenie tylko informuje.
- 04PodglądObecna i nowa wartość dla każdego produktu. Nic się jeszcze nie zapisuje.
- 05ImportZapis przez Admin GraphQL API z kontrolą limitów i postępem na żywo.
- 06RaportRaport błędów w CSV, ponowienie tylko nieudanych wierszy, rollback przez 30 dni.
Narzędzie dla ludzi od katalogu, nie dla programistów.

Plik od dostawcy nie musi wyglądać jak eksport Shopify.
Silnik sam dopasowuje kolumny do pól produktu, wariantu i metapól pobranych ze sklepu. Chcesz zmienić tylko ceny? Zostawiasz aktywne dwie kolumny i reszta produktu zostaje bez zmian.

Cały sklep w jednym pliku, bez limitu rekordów.
Eksport idzie przez Shopify Bulk Operations, więc nie ma stronicowania ani urwanych plików. Filtry, wybór kolumn i wszystkie metapola, a postęp widać na żywo.

Braki w katalogu widać, zanim zobaczy je klient.
Skan liczy produkty bez opisu, bez zdjęcia, bez opisu SEO i z ceną zero. Historia skanów pokazuje, czy katalog robi się lepszy z tygodnia na tydzień.

Każdy import ma swój ślad.
Plik, liczba rekordów, status i wynik każdego uruchomienia. Import częściowy można ponowić tylko dla wierszy, które nie przeszły.
Zrzuty ekranu z danymi demonstracyjnymi.
Silnik zaprojektowany pod limity Shopify.
Ciężka praca dzieje się w osobnym silniku. Aplikacja w panelu Shopify jest tylko interfejsem, więc import trwający godziny nie zależy od otwartej karty przeglądarki.
| Silnik | Java 21 i Spring Boot 3, architektura heksagonalna. 96 endpointów REST w 23 kontrolerach, wirtualne wątki do długich importów. |
|---|---|
| Aplikacja | Remix, React i Shopify Polaris, osadzona w panelu przez App Bridge. Cały interfejs po polsku. |
| Shopify | Wyłącznie Admin GraphQL API: 14 mutacji i Bulk Operations do eksportu. Ponowione tworzenie produktu nie robi duplikatów. |
| Dane | PostgreSQL 16 z migracjami Flyway, pliki na dysku albo w magazynie zgodnym z S3, lokalna kopia katalogu do szybkich porównań. |
| Odporność | Budżet punktów API per sklep, do 12 ponowień przy limitach, backoff z losowym rozrzutem, heartbeat i automatyczne wznawianie zawieszonych importów. |
| Jakość | 190 testów, w tym 41 dla metapól i test eksport → import na tym samym pliku. CI buduje i testuje silnik na prawdziwej bazie. |
| Utrzymanie | Obrazy Docker bez uprawnień roota, healthchecki, metryki Prometheus i Sentry z filtrem danych wrażliwych. |
Masowe zmiany bez strachu przed przyciskiem „Importuj”.
- 01Import bez niespodzianekPrzed zapisem widać, co zmieni się w każdym produkcie. Decyzję podejmuje człowiek, nie skrypt.
- 02Dane, które nie znikająAktualizacje nie usuwają wariantów, zdjęć ani metapól spoza pliku.
- 03Przerwany import to nie katastrofaPo restarcie import wznawia się sam, a ponowienie obejmuje tylko wiersze, które nie przeszły.
- 04Cały katalog w obie stronyEksport całego sklepu bez limitu rekordów i import tego samego pliku z powrotem, bez ręcznych poprawek.