Metal Maket: özel yazılımdan RGS'ye 4.357 ürünlük katalog taşıma ve özel tema
Metal Maket, 1954'ten bu yana aynı ailenin işlettiği bir die-cast model araç mağazasıdır. Mağaza, yıllardır kullandığı özel geliştirilmiş e-ticaret yazılımından RGS E-Ticaret platformuna taşındı. İş iki ayaktan oluştu: 50 MB'lık veritabanı dökümünden katalog, müşteri ve görsellerin aktarılması; ardından koleksiyoncunun aradığı modeli bulabilmesi için ölçek, marka ve üretici ekseninde çalışan bir vitrinin sıfırdan yazılması.
Devraldığımız durum
- Kaynak sistem, belgesi olmayan özel geliştirilmiş bir e-ticaret yazılımıydı; elimizdeki tek şey 50 MB'lık bir veritabanı dökümüydü ve ortamda çalışan bir veritabanı sunucusu yoktu.
- Ürün açıklamalarının bir kısmı dışarıdan kopyalanmıştı; metnin içinde arayüz kodu artıkları duruyordu.
- Kategori ağacı her üreticiyi ölçeğe göre dallandırdığı için 478 kategoriye şişmişti; gezinme okunamaz haldeydi.
- Koleksiyoncu ürünü marka, ölçek ve model üreticisinin kesişiminde arıyor; kaynak sistemde bu üç eksen tek bir metin alanının içinde karışıktı.
Hedefimiz
- Katalogu, müşteri kayıtlarını ve görselleri kayıpsız ve tekrar çalıştırılabilir biçimde taşımak.
- Ölçek ve üretici bilgisini serbest metinden çıkarıp filtrelenebilir alanlara dönüştürmek.
- Gezinmeyi kategori sayısına değil, koleksiyoncunun arama biçimine göre kurmak.
- Bilgi sayfalarındaki metinleri gerçek iş kurallarıyla uyumlu hale getirmek.
Dökümün okunması ve içeriğin temizlenmesi
- 50 MB'lık döküm, veritabanı sunucusu kurulmadan akış halinde okundu; dosya hiçbir zaman bütünüyle belleğe alınmadı.
- Ürün açıklamalarındaki yabancı arayüz kodu artıkları, boş bloklar ve karakter kodları temizlendi; gerçek metin korundu.
- Türkçe karakterler için ayrı bir adres dönüşümü yazıldı; fiyatlar kuruş cinsine, telefonlar tek biçime çevrildi.
- Aynı adı taşıyan 89 kardeş kategori grubunun adresleri, üst kategori adıyla nitelenerek çakışmadan kurtarıldı.
Kesintiye dayanıklı aktarım
- Aktarım fazlara ayrıldı: kategoriler, müşteriler, ürünler, stok, görseller. Her faz tek başına çalıştırılabiliyor.
- Oluşturulan her kayıt kaynak kimliğiyle birlikte durum dosyasına yazıldı; koşu durdurulduğunda kaldığı yerden devam ediyor, var olanı atlıyor.
- Platformun dakikalık istek bütçesi tahmin edilmedi: yanıt başlığındaki kalan bütçe okunup hız buna göre uyarlandı.
- Ağ kopmaları ve ölü bağlantılar için zaman aşımı ve artan beklemeli tekrar denemeler kuruldu; uzun koşular askıda kalmıyor.
- Görseller ayrı bir adımda paralel indirilip diske alındı; 1.780 dosyanın tamamı eksiksiz yüklendi ve ürünlere bağlandı.
Koleksiyoncunun aradığı üç eksen
- Ölçek bilgisi yalnızca serbest metinde vardı (ürün adının önekinde, model kodunda ya da etiketlerde); kural tabanlı olarak çıkarılıp filtrelenebilir alana dönüştürüldü.
- Model üreticisi, ürünün içe aktarıldığı kategori ağacının kökünden türetildi.
- Araç markası bilerek özel alan yapılmadı; platformun kendi marka alanı kullanıldı, böylece marka sayfaları ve kısa adresler kendiliğinden geldi.
- Dökümde markası olmayan kayıtlarda marka, ürün adı ve etiketlerden kurtarıldı; toplam 1.442 ürün markasına bağlandı.
Kategori ağacının sadeleştirilmesi
- Ölçek kırılımı artık filtreyle yapıldığı için kategori ağacındaki ölçek dalları gereksizleşti.
- Bu dallarda duran ürünler en yakın üretici kategorisine taşındı; 291 ölçek kategorisi vitrinden kaldırıldı.
- Platformda kategori silme ucu bulunmadığı için kaldırma, kategoriyi pasifleştirerek yapıldı; veri kaybı olmadı.
Vitrin: arama ve filtre kurgusu
- Ana sayfa; gelişmiş arama kartı, sol kategori rayı, öne çıkan modeller ve haftanın gelenleri bölümleriyle kurgulandı.
- Kategori sayfasına alt kategori çipleri, sıralama çubuğu ve filtre kenar çubuğu eklendi.
- Platformun yerel marka filtresi alfabetik ilk elliyi gösterip kategoriye göre daralmadığı için, kategori bazlı marka listesi katalog verisinden üretilip filtreye verildi.
- Uzun filtre listelerine Türkçe karakterle doğru çalışan istemci taraflı arama kutusu eklendi.
- Menü ve filtrelerdeki bağlantılar elle değil, gerçek katalog verisinden üretiliyor: yalnızca sonuç döndüren seçenekler basılıyor, çıkmaz sokak kalmıyor.
Platform kısıtlarının aşılması
- Vektör dosya yüklemesi ve gömülü görsel adresleri desteklenmediği için ikonlar rasterize edilip bir kez yüklendi ve önbelleğe alındı.
- Özel HTML alanında form ve betik kabul edilmediğinden gelişmiş arama, radyo düğmeleri ve saf CSS ile kuruldu; ulaşılabilir kombinasyonlar önceden hesaplanmış bağlantılar olarak basıldı.
- Tema tarafında betik kanalı olmadığı için istemci davranışları platformun özel kod alanından yüklendi.
- Global stil ve özel HTML karakter sınırları derleme sırasında denetleniyor; sessiz kırpılma riski ortadan kaldırıldı.
- Platformun 2xx yanıtların içinde döndürdüğü uyarılar yüzeye çıkarıldı; düşen blok ve alanlar sessizce kaybolmuyor.
Tasarım ve erişilebilirlik
- Bakır tonlu sıcak bir palet kuruldu; kartlar, köşe yarıçapları ve gölgeler tek bir tasarım sistemi üzerinden tanımlandı.
- Tasarımdaki bakır ton beyaz metinle erişilebilirlik eşiğinin altında kalıyordu; dolgu tonu koyulaştırılarak eşik aşıldı, aksan tonu olduğu gibi korundu.
- Tema tek komutla kurulup güncelleniyor; sabit blok kimlikleri sayesinde yeniden çalıştırma kopya üretmiyor, yerinde güncelliyor.
Bilgi sayfalarının gerçek metinle düzeltilmesi
- Kurulumda oluşturulan örnek metinler gerçek iş kurallarıyla çelişiyordu; örneğin kapıda ödeme kabul edilmediği halde sayfada kabul ediliyor yazıyordu.
- Ödeme, teslimat, hakkımızda ve iletişim sayfaları mağazanın kendi yayınlanmış metinleriyle değiştirildi; her metnin kaynağı kayda geçirildi.
- Sayfa gövdeleri düz metin olarak basıldığı için biçim başlık, liste ve paragraf yapısına dönüştürüldü; cümlelere dokunulmadı.
Sonuç
4.357 ürünlük katalog, müşteri kayıtları ve görselleriyle birlikte yeni platforma taşındı; ölçek ve üretici bilgisi serbest metinden çıkarılıp filtreye dönüştüğü için koleksiyoncu aradığı modele marka, ölçek ve üretici kesişiminden ulaşabiliyor. Kategori ağacı 478 düğümden gezilebilir bir yapıya indi, tema ve katalog verisi tek komutla yeniden üretilebiliyor.



