T-SOFT/Tema Geliştirme/İnceleme Kriterleri

İnceleme Kriterleri

Markete gönderilen her tema, yayınlanmadan önce T-SOFT teknik birimi tarafından incelenir. Bu sayfa incelemede bakılan başlıkları ve gönderim öncesi kendi kendinize uygulayabileceğiniz kontrol listesini içerir.

Bu kriterler yalnızca markete gönderilen temalar için geçerlidir. Kendi geliştirme mağazanızda veya bir müşteri mağazasında kullandığınız temalar incelemeye girmez.
Gönderim akışı, hazırlık ekranı ve görsel gereksinimleri için bkz. Tema Marketine Gönderme.

Kod ayrımı

Twig şablonları yalnızca işaretleme içerir. Stil ve davranış ayrı dosyalara yazılır.

KuralNereye yazılır
.twig içinde <style> bloğu olmamalıassets/css/theme.css
.twig içinde <script> bloğu olmamalıassets/js/theme.js
Inline style="..." kullanılmamalıTailwind utility class'ları
{# ❌ Stil ve davranış şablonun içinde #}
<style>.promo-badge { background: #fd6905; }</style>
<div class="promo-badge" onclick="openPromo()">{{ t.promo }}</div>
<script>function openPromo() { /* ... */ }</script>

{# ✅ İşaretleme şablonda, stil Tailwind'de, davranış theme.js'te #}
<div class="bg-primary text-white px-3 py-1 rounded" data-promo-trigger>
  {{ t.promo }}
</div>

Twig'den JavaScript'e veri aktarımı data-* öznitelikleriyle yapılır; şablona script gömerek değil. Hazır bileşenleri bağlamak için data-toggle kataloğunu kullanın.

Bkz. Asset · JavaScript · Data-Toggle Bileşenleri

HTML ve stil

HTML kodlaması Tailwind ile yapılır. Sabit değerler yerine panelden yönetilen semantik class'lar kullanılır.

KuralNeden
Sabit hex renk yazılmaz (bg-[#fd6905])Mağaza renk şemasını değiştirdiğinde tema bozulur
Semantik class kullanılır (bg-primary, text-body)Panel renkleriyle otomatik uyum sağlar
Tekrarlayan uzun class dizileri @layer components'a çekilirAynı dizi 12 yerde tekrarlanmaz
Twig'de hesaplanan dinamik class üretilmezTailwind class'ı bulamaz, stil kaybolur

Dinamik class üretimi incelemede sık görülen bir hatadır — olası tüm class'lar kaynakta açıkça yazılmalıdır. Ayrıntı için bkz. Tailwind.

Bkz. Tailwind · Temayı Özelleştir

Dil dosyaları

Ekranda görünen hiçbir metin şablona sabit yazılmaz. Tüm metinler locales/ altındaki sözlüklerden gelir.

{# ❌ Sabit metin — çeviri yapılamaz #}
<button class="btn-primary">Sepete Ekle</button>

{# ✅ Sözlükten gelir #}
<button class="btn-primary">{{ t.add_to_cart }}</button>

Dil dosyaları eksiksiz olmalıdır: temada çağrılan her anahtar, desteklenen her dil dosyasında tanımlı olmalıdır. Gönderim öncesi kullanılan anahtarları çıkarıp sözlüklerle karşılaştırın:

Terminal
# Temadaki tüm t.<anahtar> çağrılarını çıkar
grep -rEho 't\.[a-z0-9_]+' section/ snippets/ | sort -u

# Şablonlarda kalan sabit Türkçe metinleri ara
grep -rn '>[^<{]*[çğıöşü]' section/ snippets/

Bkz. Locale ve Çeviriler

Responsive tasarım

Tema tüm kırılımlarda kullanılabilir olmalıdır. İncelemede sayfalar gerçek cihaz genişliklerinde açılır.

KontrolBeklenen
Yatay kaydırmaHiçbir kırılımda oluşmamalı
Sayfa tipleriAnasayfa, kategori, ürün detay, sepet, üyelik ve arama ayrı ayrı kontrol edilmeli
Dokunma hedefleriMobilde buton ve bağlantılar rahat tıklanabilir olmalı
Menü ve drawerMobilde açılıp kapanmalı, arkadaki içerik kaymamalı
Tablolar ve uzun içerikTaşma yerine kaydırma veya sarma ile çözülmeli

Bkz. Tailwind

Alışveriş akışı

Alışveriş süreci baştan sona hatasız tamamlanmalıdır. İncelemede aşağıdaki adımlar gerçek bir mağazada denenir.

AdımBeklenen davranış
Ürün listelemeKartlar, fiyat ve indirim bilgisi doğru görünür
Ürün detayGaleri, açıklama ve stok durumu doğru gelir
Varyant seçimiSeçim fiyatı ve stok durumunu günceller
Sepete eklemeÜrün sepete eklenir, bildirim veya drawer açılır
Sepet önizlemeAdet, tutar ve ürün sayısı anında güncellenir
Adet güncelleme / silmeSepet toplamı doğru hesaplanır
Ödemeye geçişSepet ekranından ödeme adımına sorunsuz geçilir
Üyelik ve girişKayıt, giriş ve çıkış çalışır
Arama ve filtrelemeSonuç döner, filtreler birlikte çalışır
Favori / karşılaştırmaEkleme ve çıkarma anında yansır

Hata durumları da kontrol edilir: stokta olmayan ürün, seçilmemiş varyant, boş sepet ve sonuç dönmeyen arama ekranları anlamlı bir mesaj göstermelidir.

Bkz. JS Bileşenleri · Data-Toggle Bileşenleri

Konsol temizliği

Tarayıcı konsolu temiz olmalıdır. Gezinme sırasında hata veya uyarı üretmeyen bir tema beklenir.

Konsol çıktısıNe demekNe yapmalı
Uncaught TypeError: ... of nullVar olmayan bir DOM elemanına erişiliyorErişimden önce eleman kontrolü yapın
404 asset isteğiSilinmiş veya yolu yanlış dosya çağrılıyorasset() ile doğru yolu verin, ölü referansı silin
Uncaught ReferenceErrorTanımsız fonksiyon veya değişken çağrılıyorŞablondan kaldırılan koda ait çağrıyı temizleyin
Mixed content uyarısıhttp:// üzerinden kaynak yükleniyorTüm kaynakları https:// veya göreli yolla çağırın
CORS hatasıDış servise izinsiz istek yapılıyorİsteği kaldırın veya desteklenen bir uç nokta kullanın

Geliştirme sırasında bıraktığınız console.log satırları gönderim öncesi temizlenmelidir.

assets/js/theme.js
// ✅ Eleman yoksa kod sessizce atlanır, konsola hata düşmez
const addToCartBtn = document.querySelector('[data-add-to-cart]');
if (addToCartBtn) {
  addToCartBtn.addEventListener('click', handleAddToCart);
}

Bkz. JavaScript

Performans ve görseller

Performans incelemenin ayrı bir başlığıdır. Kurallar Performans sayfasında ayrıntılı anlatılır; incelemede beklenen özet şudur:

KriterBeklenen
Lighthouse mobile skoru85+
Görsel formatıWebP tercih edilir, doğru ölçüde sunulur
width / heightHer <img> etiketinde tanımlı (CLS için)
loading="lazy"Ekran altındaki görsellerde var, hero görselinde yok
Üçüncü parti scriptGerekmedikçe eklenmez, ağır kütüphane theme.js'e girmez

Bkz. Performans

İsimlendirme ve düzen

Kod, üzerinde başkasının çalışacağı varsayımıyla yazılır. İsimler ne yaptıklarını anlatmalıdır.

Alan❌✅
Section klasörüsection/bolum2/section/product-list/
Snippet dosyasısnippets/s1.twigsnippets/product-card.twig
Locale anahtarıtext1, str_04add_to_cart, free_shipping_note
CSS component class.box2.btn-primary, .product-card
Görsel dosyasıassets/images/1.pngassets/images/payment-logos.webp

Dosya ve klasör adlarında kebab-case kullanılır. Kullanılmayan dosyalar, yoruma alınmış ölü kod blokları ve deneme amaçlı section'lar gönderim öncesi silinmelidir.

Bkz. Tema Yapısı · Snippet

Tema meta bilgileri

.theme manifestindeki bilgiler markette görünen bilgilerdir; doğru ve güncel olmalıdır.

AlanBeklenen
AdMarkette görünecek gerçek tema adı — my-theme gibi taslak adlar kalmamalı
YazarGeliştirici veya ajans adı
SürümSemVer formatında, gönderilen sürümle tutarlı
ChangelogBu sürümde gerçekten değişenleri anlatmalı

Bkz. Tema Yapısı

Gönderim öncesi kontrol listesi

☑Kriter
☐Hiçbir .twig dosyasında <style> veya <script> bloğu yok
☐Inline style="..." kullanılmadı, HTML Tailwind ile yazıldı
☐Sabit hex renk yok, semantik class'lar kullanıldı
☐Twig'de hesaplanan dinamik Tailwind class'ı yok
☐Şablonlarda sabit metin kalmadı, tümü t.<anahtar> üzerinden
☐Tüm dil dosyaları eksiksiz dolduruldu
☐Tüm sayfa tipleri mobil, tablet ve masaüstünde kontrol edildi
☐Hiçbir kırılımda yatay kaydırma oluşmuyor
☐Sepete ekleme ve ödemeye geçiş uçtan uca hatasız tamamlanıyor
☐Üyelik, arama, filtreleme ve favori işlemleri çalışıyor
☐Konsolda hata ve uyarı yok, console.log kalıntısı temizlendi
☐Ağ sekmesinde 404 dönen asset isteği yok
☐Lighthouse mobile skoru 85+
☐Görseller optimize, width/height ve loading doğru ayarlandı
☐Section, snippet, locale ve dosya isimleri anlamlı
☐Kullanılmayan dosya ve ölü kod silindi
☐.theme manifesti ve changelog güncel

Sıradaki adım