← Tüm projeler Vaka çalışması · Mağaza scripti

Öneri render motoru

Ürün önerilerini markanın kendi kart tasarımı ve carousel'i içinde gösteren, config ile yönetilen tek bir script. Sayfadan gerçek bir ürün kartını kopyalıyor, öneri verisiyle dolduruyor ve üzerinde mağazanın kendi slider kütüphanesini başlatıyor; widget sitenin parçası gibi görünüyor.

  • ~12 binsatır çekirdek
  • 60commit, tek geliştirici
  • 3carousel kütüphanesi
  • 2mod: klon, native
  • Ara 2025– Tem 2026
Deneyin

Motorun bir mağazanın tasarımını benimsemesini izleyin

"Motoru çalıştır"a basın, sonra mağaza temasını değiştirip tekrar çalıştırın. Atıf olayını görmek için önerilen bir karta tıklayın.

kestrel-outdoor.example · sentetik veriEtkileşimli demo
Etkileşimli motor için JavaScript gerekiyor. Kendi ürün slider'ı olan uydurma bir mağaza ve mağazanın kartını adım adım klonlayıp önerilerle dolduran, carousel'i başlatan bir motor paneli gösteriyor.
Stratejiler ve ürünler sentetik. Canlıda öneri verisi bir backend servisinden geliyor; motorun işi render, çalışma zamanı ve entegrasyon.
Sorun

Markalar öneri widgetlarımızın sitelerine benzemediğini söylüyordu.

İlk sürüm kendi HTML metinlerini üretiyor, kendi slider'ını ve CSS'ini çalıştırıyordu. Her marka kendi kartını istiyordu: farklı görsel oranları, rozetler, fiyat düzenleri, fontlar. Her birini elle eşlemek marka başına CSS yazmak ve marka tasarım değiştirdikçe yeniden düzeltmek demekti.

Rolüm

Motoru tek geliştirici olarak tasarlayıp yazdım: widget mimarisi, çalışma zamanı ve entegrasyon; ayrıca kodsuz kurulum rehberi olan doküman sitesi. Öneri stratejileri (çok satanlar, benzer ürünler, birlikte alınanlar, kişiselleştirilmiş ve diğerleri) backend'de hesaplanıyor; ben onları kullanıyorum.

  • Slick, Owl ve Swiper için klon modu; widget başına izole kök ve eksiksiz destroy()
  • Klonlama mümkün olmadığında kendi arayüzü, iskelet yükleme ve klavye desteği olan native mod
  • Sayfa tipine ve ziyaretçiye göre yedekli senaryo yönlendirme
  • Görüntülenme, tıklama ve dönüşüm atfı
Mimari

Sayfa yüklenince ne oluyor

  1. Config okumaMarka dosyası yerleşimi, referans slider'ı, etiketleri, carousel tipini ve senaryoları belirler.
  2. Senaryo seçimiSayfa tipi ve ziyaretçi stratejiyi ve yedeklerini belirler.
  3. Öneri API'siMevcut servis stratejiye göre ürün döndürür.
  4. Klonla ve doldurBir mağaza kartını kopyala, çalışma durumunu temizle, veri ve etiketlerle doldur.
  5. Yerleştir ve izleMağazanın carousel'ini izole kökte başlat, atfı bağla.

Mor ton: benim yazdığım kısımlar.

Mühendislik kararları

Zor olan neydi, ne yaptım

Sayfayı bozmadan kart klonlamak

Canlı bir slider kartı carousel sınıfları, inline transformlar, ID'ler ve dinleyiciler taşır. Motor bir referans kartı derin kopyalıyor, bu durumu temizliyor, dolduruyor ve kendi kökünde yerleştiriyor. Mağazanın slider'larına hiç dokunulmuyor; destroy() eklediği her şeyi kaldırıyor.

Üç carousel kütüphanesi, tek adaptör

Slick, Owl ve Swiper farklı markup ve seçenekler istiyor. Bir adaptör katmanı mağazanın zaten yüklediği kütüphane için doğru yapıyı ve seçenekleri kuruyor; ek bir slider gönderilmiyor.

Yedekli senaryolar

Sayfa tipi (ana sayfa, kategori, ürün, sepet) ve ziyaretçiye (beş ürün görüntüledikten sonra tanınan ya da misafir) göre bir matris stratejiyi ve yedeklerini seçiyor. Sepet sayfaları birden çok stratejiyi tekrarsız birleştiriyor. Kategori sayfaları breadcrumb'ı okuyor ve bir seviye boşsa üst kategoriyle tekrar deniyor.

Tıklamadan sonra da yaşayan atıf

Tıklamalar öneri parametreleri taşıyor, dönüşümler bir hook ile raporlanıyor. Sonradan yaptığım bir düzeltme kampanya atfını yalnızca tıklamada değil widget yüklenir yüklenmez ayarlıyor; kampanya kaynağı yedi gün korunuyor.

Ağır sayfalarda hızlı ve stabil

Acil olmayan işler tarayıcı boşta kaldığında çalışıyor, DOM değişikliklerinden sonraki yeniden renderlar debounce ediliyor, carousel başlamadan render edilen kart sayısı sınırlanıyor ve iskelet kategori sayfalarında layout kaymasını sıfırda tutuyor.

Marka başına kod değil config

Yeni bir marka tek bir config dosyası: yerleşim seçicileri, referans slider ve kart, rozet ve görseller için özel etiketler, carousel seçenekleri, özel CSS. Aramalı bir doküman sitesi her anahtarı açıklıyor; kurulum bana bağlı değil.

Çözmeye değer bir problemin mi var?Birlikte çözelim

Konuşmaya başla

Full-stack ve uygulamalı AI rollerine açığım, uzaktan veya hibrit.

Rolü, ekibi ve problemi anlat.