Skip to content

Storefront Runtime (Canlı Vitrin)

Tenant host’ta StorefrontLayout, anasayfa ve /p/:slug render, navbar menü birleştirme, tema CSS ve sepet/checkout izolasyonu.

Bu sayfa, öğrencinin gördüğü canlı academy vitrininin nasıl render edildiğini açıklar. Builder ve taslak mantığı için Storefront Publishing ve Academy Visual Builder sayfalarına bakın.


Dosya: app/lib/tenant.ts

  • getTenantByRequest(db, request)Host / X-Forwarded-Host üzerinden subdomain veya customDomain eşleşmesi
  • getEffectiveHostname() — proxy/workers.dev URL sapmalarına karşı güvenli host
  • getPublicSiteOrigin() — canonical ve OG URL üretimi
  • getStorefrontBaseUrl() — ödeme sonrası yönlendirme tabanı

MVP notu: Kayıtlı subdomain/custom domain varsa tenant döner; subscriptionStatus !== "active" vitrin routing’ini şu an engellemez. Eğitmen paneli (instructor.academy.tsx) abonelik durumuna göre ayrıca kısıtlayabilir. Detay: Academy Modülü (Tenant/Storefront).


Dosya: app/components/storefront/StorefrontLayout.tsx

Paylaşılan vitrin kabuğu:

  1. academies.themeConfig (published) içinden blok listesi ve siteTheme okunur
  2. Google Fonts + buildAcademySiteThemeCss() ile :root CSS değişkenleri enjekte edilir
  3. Bloklar sırayla render edilir (NavbarBlock, HeroBlock, …)
  • Eğitmen navbar.settings.links[] doldurduysa yalnızca bu linkler kullanılır.
  • Liste boşsa mergeStorefrontNavLinks() ile yayınlanmış academy_pages slug’larından varsayılan menü üretilir (/p/:slug).

Bu davranış, builder’da seçilen menü ile canlı vitrinin birebir örtüşmesini sağlar.


URLRoute dosyasıİçerik kaynağı
/:lang (tenant host)app/routes/_index.tsxthemeConfig.blocks (homepage)
/p/:slugapp/routes/p.$slug.tsxacademy_pages.publishedContent{ blocks }

Sayfa render’ında genelde global navbar + sayfa blokları + global footer birleştirilir (sayfa JSON’unda navbar/footer yoksa tema bloklarından eklenir). Builder önizlemesi aynı birleştirme mantığını kullanır.


  • Kurs listesi: courses.all.tsx, _index.tsxcourses.academyId === tenant.id filtresi
  • Kapalı LMS (academyMode: closed): fiyat/CTA gizleme, portal girişi vurgusu — b2b-company

  • Giriş/kayıt: Academy Auth Pages
  • Sepet/checkout: academy host’ta tenant bağlamı korunur; apex pazaryeri ile aynı route path’leri farklı katalog/ödeme bağlamı kullanabilir

Dosya: app/root.tsx

Root loader tenant çözer; layout <head> içine temel marka CSS değişkenlerini yazar. Tam site teması vitrin sayfalarında StorefrontLayout veya auth shell ile genişletilir.