Migracja na headless Sylius. Case study transformacji technologii e-commerce Katalogu Marzeń

Jak skutecznie zmigrować 15-letni system e-commerce legacy do architektury API-first? Katalog Marzeń (top 3 serwisów prezentowych w Polsce), przy wsparciu Commerce Weavers, zrealizował kompleksową transformację technologiczną na Syliusie i Symfony 6.4.

Okładka case study migracji headless Sylius dla Katalogu Marzeń
13.04
2026
Autor:
Kevin Kaniaburka
Kategorie:

Jak skutecznie zmigrować 15-letni system e-commerce legacy do architektury API-first? Katalog Marzeń (top 3 serwisów prezentowych w Polsce), przy wsparciu Commerce Weavers, zrealizował kompleksową transformację technologiczną na Syliusie i Symfony 6.4. Wdrożenie architektury headless z Elasticsearch, asynchroniczną komunikacją RabbitMQ oraz autorskim migratorem opartym o Flow PHP pozwoliło na optymalizację szybkości back-office o 70% i bezproblemową obsługę dotychczasowych procesów.

Katalog Marzeń17 lat napędzania pragnień i ewolucji e-commerce

Katalog Marzeń to jeden z liderów polskiego rynku przeżyć, który od blisko dwóch dekad redefiniuje sposób, w jaki obdarowujemy się prezentami. Skalę operacyjną marki najlepiej obrazują liczby: 50 pracowników, ponad 600 000 zrealizowanych zamówień oraz sieć ponad 1000 partnerów, 15000 produktów dzięki którym pragnienia stają się rzeczywistością.

To jednak nie tylko dane, ale przede wszystkim silna społeczność skupiona wokół programu lojalnościowego Klub Marzyciela oraz autorskiego podcastu „Napędzani Marzeniami”. Katalog Marzeń angażuje się również w liczne inicjatywy społeczne, będąc inicjatorem akcji #ChcęToPrzeżyć, programu stypendialnego Dream and Do czy Maratonu Marzeń. Niedawny proces rebrandingu stał się naturalnym przypieczętowaniem tej drogi, adresując ofertę do grup realizujących marzenia wspólnie i otwierając nowy rozdział w cyfrowej strategii marki.

Wyzwanie? 15 lat długu technologicznego

Katalog Marzeń stanął przed koniecznością wymiany silnika, który po 15 latach rozwoju stał się hamulcem dla biznesu. Narastający dług technologiczny uniemożliwiał bezpieczne aktualizacje PHP i bibliotek. Dodatkowym wyzwaniem był brak separacji domen biznesowych.

Topologia systemu. Sylius jako silnik e-commerce i Next.js jako frontend

Katalog Marzeń zdecydował się na podejście API-first. Sylius pełni rolę bezstanowego silnika transakcyjnego, komunikującego się przez API z frontendem Next.js.

  • Ekosystem. Architektura opiera się na separacji odpowiedzialności pomiędzy poszczególnymi elementami systemu. Komunikacja z frontendem odbywa się synchronicznie poprzez API HTTP. Wymiana danych z pozostałymi serwisami backendowymi Katalogu Marzeń odbywa się dwutorowo: synchronicznie przy użyciu protokołu RPC oraz asynchronicznie poprzez Symfony Messenger i RabbitMQ, co gwarantuje wysoką wydajność, spójność i niezawodność całego ekosystemu.

  • Infrastruktura. Przekierowania konfigurowane w Syliusie są przekazywane bezpośrednio do infrastruktury, dzięki czemu obsługa ruchu odbywa się na poziomie serwera.

  • Integracje. System został połączony z Keycloak (autoryzacja), Fakturownią, User.com (marketing automation) oraz Admitad (platforma afiliacyjna). W obszarze logistyki i płatności wdrożyliśmy obsługę InPost, DHL oraz Przelewy24.

Zastąpienie relacji produkt-wariant grupami produktów w domenie Sylius

Z uwagi na nietypową dla e-commerce charakterystykę produktu, Katalog Marzeń zrezygnował z klasycznej relacji produkt-wariant na rzecz produktów prostych (simple products). Każda atrakcja, np. lot paralotnią, jest niezależną encją.

  • Dynamiczne grupy produktowe. Takie podejście pozwala na pełną niezależność ofert (np. bilet VIP vs bilet normalny lub bilet dla jednej osoby vs dla dwojga). Aby umożliwić ich wspólną prezentację na jednej karcie, wdrożyliśmy mechanizm grup produktowych, który luźno wiąże ze sobą samodzielne produkty. Dzięki temu klient widzi dostępne opcje (np. rodzaj biletu) jako parametry wyboru, podczas gdy w backendzie każda z nich jest niezależną, autonomiczną pozycją katalogową.

Karta produktu z konfiguracją doświadczenia w Katalogu Marzeń

Personalizacja na poziomie jednostki i zaawansowany upselling

Wdrożyliśmy proces zakupowy pozwalający na personalizację każdej pojedynczej sztuki produktu w koszyku, na poziomie Order Item Unit:

  • Voucher customization. Możliwość dodania unikalnych życzeń oraz wyboru opcji dodatkowych (np. ozdobne pudełko) przypisanych do konkretnej sztuki prezentu.

Ekran personalizacji voucheru i dodatków do prezentu
  • Hybrydowy model addonów. System obsługuje zarówno dodatki personalizujące jednostkę, jak i osobne produkty typu "addon", oferowane dynamicznie w checkoutcie.

  • Voucher file generator. Napisaliśmy osobny mikroserwis do generowania plików PDF, z którym Sylius integruje się niezależnie, odciążając główną aplikację.

High-performance search z Elasticsearch

Aby odciążyć bazę danych, zaimplementowaliśmy wyszukiwarkę opartą na Elasticsearch. Indeksy ES służą jako modele odczytu. Dzięki tej integracji skomplikowane listingi i wyszukiwarka praktycznie nie obciążają bazy, co drastycznie redukuje latencję systemu.

Wdrożyliśmy również dedykowany endpoint API obsługujący zaawansowane filtrowanie, który w czasie rzeczywistym zwraca dynamiczne liczniki wyników dla każdego filtra (np. informację o dostępności X ofert po wybraniu lokalizacji „Łódź”). Customowa integracja, zrealizowana bez użycia gotowych pluginów, pozwoliła na pełną optymalizację struktury danych pod unikalne wymagania Katalogu Marzeń.

Listing ofert z filtrowaniem i wyszukiwaniem w Katalogu Marzeń

Wydajna migracja danych z legacy. Flow PHP i eliminacja memory leaks

Wydajna migracja danych z legacy. Flow PHP i eliminacja memory leaks

Migracja z 17-letniego systemu legacy była kluczowym elementem usługi. Zbudowaliśmy dedykowany Migrator CLI, który pełni rolę narzędzia do ciągłej synchronizacji danych.

  • Stateless processor & no N+1 queries. Kluczowym założeniem architektury jest to, że processor nie wykonuje żadnych zapytań do bazy legacy. Otrzymuje wszystkie potrzebne dane „na wejściu”. Eliminuje to problem N+1 queries i chroni bazy przed przeciążeniem.

  • Batch processing & memory safety. Wykorzystanie Flow PHP pozwoliło na efektywne strumieniowanie danych bez obciążania pamięci, co całkowicie wyeliminowało memory leaks przy setkach tysięcy rekordów.

  • ValidationErrorFixer & blacklist: Jeśli model zawiera błędy, ValidationErrorFixer automatycznie naprawia część niezgodności i kontynuuje proces. Jeśli atrybut zostanie poprawiony ręcznie w Syliusie, trafia na „czarną listę” i nie jest nadpisywany, czyniąc Syliusa Single Source of Truth.

Retencja i lojalność. Program lojalnościowy i Rabat Marzyciela

W ramach transformacji przenieśliśmy i rozbudowaliśmy zaawansowane mechanizmy lojalnościowe, które są sercem społeczności Katalogu Marzeń:

  • Złożona logika punktowa. Zaimplementowaliśmy system z rygorystycznym podziałem na punkty oczekujące oraz punkty aktywne. W tej architekturze punkty aktywne są traktowane jako niezmienniki (immutables) – raz przyznanych punktów aktywnych nie można usunąć ani edytować. Wszelkie zmiany salda, np. wygasanie ważności, realizowane są poprzez dodawanie nowych wpisów z wartościami ujemnymi. Co istotne, punkty oczekujące oraz punkty ujemne to dwa całkowicie niezależne od siebie modele danych, co zapewnia pełną audytowalność i przejrzystość historii konta klienta.

Panel programu lojalnościowego Klub Marzycieli w Katalogu Marzeń
  • Rabat za punkty. Integracja z koszykiem pozwala na płynne obniżanie ceny zamówienia przy wykorzystaniu zgromadzonych punktów, co wymagało customizacji silnika kalkulacji cen Syliusa.

  • Rabat Marzyciela. Mechanizm premiujący stałych klientów. System dynamicznie przelicza łączną wartość wydatków użytkownika i na tej podstawie przypisuje go do odpowiedniego progu stałej zniżki (np. 10%). Rabat ten jest aplikowany na poziomie koszyka, co pozwala na precyzyjną personalizację końcowej ceny dla konkretnego „Marzyciela” przy zachowaniu spójności cen bazowych w całym sklepie.

Wybór rabatu z programu lojalnościowego w checkoutcie Katalogu Marzeń

Elastyczne mechanizmy promocyjne i kody kuponów

Standardowy silnik promocji Syliusa został przez nas rozszerzony, aby obsłużyć specyficzne wymagania marketingowe Katalogu Marzeń. Kluczową innowacją jest decentralizacja wartości rabatu w ramach jednej kampanii:

  • Multi-value coupons. Rozszerzyliśmy mechanizm kodów kuponów tak, aby w obrębie jednej promocji każdy kod mógł posiadać unikalną, niezależną wartość. Pozwala to na generowanie paczek kodów, gdzie jeden daje -10%, inny -15%, a jeszcze inny rabat kwotowy (np. 20 zł) – wszystko to bez konieczności tworzenia setek osobnych reguł promocyjnych, co drastycznie upraszcza zarządzanie kampaniami w panelu administracyjnym.

  • Gift Vouchers. Mechanizm kodów kuponów został rozszerzony, by akceptować też kody Gift Voucherów. Osoba obdarowana Gift Voucherem może go wykorzystać w taki sam sposób, jak robi to w przypadku użycia kodu rabatowego.

Pole na kod rabatowy lub gift voucher w checkoutcie Katalogu Marzeń

Testy i brak regresji. Behat & Gherkin

Migracja funkcjonalności opierała się na odtworzeniu logiki biznesowej z legacy poprzez testy. Pisaliśmy scenariusze w Gherkin, pokrywaliśmy je testami Behat i dopiero wtedy tworzyliśmy implementację w Syliusie. To pozwoliło na bezpieczne przepisanie kilkunastu lat logiki bez błędów regresyjnych.

Efekty i transparentne wyniki

Transformacja przyniosła konkretne zmiany w wydajności, ale też świadome trade-offy:

  • Back-office. Panel administracyjny działa o 70% szybciej (zarządzanie zamówieniami, obsługa list).

  • Security. Usunięcie podatności i przejście na nowoczesny stack (PHP 8.x, Symfony 6.4).

  • Trade-off. Proces dodawania produktów zwolnił – Sylius nie jest PIM-em, co jest obszarem do dalszej optymalizacji w kolejnych sprintach.

Głos klienta. Dlaczego postawiliśmy na współpracę z Commerce Weavers?

Poznaliśmy się na SyliusCon 2023 w Poznaniu, a następnie odbyliśmy warsztaty, podczas których zobaczyliśmy, że Commerce Weavers to firma z dużym doświadczeniem w Sylusie oraz połączeniem spojrzenia technicznego i biznesowego.

Bardzo spodobało nam się dopasowanie do naszej kultury organizacyjnej i omówienie zasad współpracy oraz projektu kompleksowo i merytorycznie bez podziału na silosy biz/tech.

To, co nas przekonało, to odwaga wzięcia pełnej odpowiedzialności za wycenę i uargumentowana wiara w estymacje, a to rzadkość w branży. CW nie było tylko zewnętrznym dostawcą; płynnie stali się częścią naszego zespołu, elastycznie skalując zasoby i pracując ramię w ramię nad najważniejszymi elementami systemu.
Dawid Penkala, IT Manager, Katalog Marzeń
← Wróć do bloga

Powiązane artykuły