proje detayları

Ensotek — Ortak Çekirdekli Çok Markalı B2B Platform Ailesi

Ensotek, Kühlturm ve Karbon Kompozit markaları için ortak paketleri kullanan; marka başına ayrı dağıtım ve veritabanlarıyla çalışan çok dilli endüstriyel B2B platform ailesi.

Müşteri

Ensotek

Başlangıç

15 Sep 2025

Bitiş

Web Sitesi

ensotek.de
Ensotek çok dilli endüstriyel B2B platformu ana sayfası
Açıklama

Ensotek, Kühlturm ve Karbon Kompozit markaları için ortak paketleri kullanan; marka başına ayrı dağıtım ve veritabanlarıyla çalışan çok dilli endüstriyel B2B platform ailesi.

Vaka çalışması

Zorluk

Ensotek'in dört markası benzer iş akışlarına ama farklı dil, pazar ve hukuki gereksinimlere sahipti. Dört ayrı kod tabanı bakımı katlıyor; tek veritabanlı bir yapı ise markalar arasında veri ve ayar sızıntısı riski taşıyordu.

Yaklaşım

Ortak Fastify modülleri, yönetim arayüzü bileşenleri, tipler ve yapılandırma tek bir paket katmanında toplandı; her marka ayrı repo, ayrı veritabanı ve ayrı dağıtımla bu katmanı kullandı. Modüller önce bir sitede olgunlaştırılıp pakete taşındı; teklif modülü site başına PDF şablonuyla ortaklaştırıldı, Kühlturm kendi veritabanına ayrıştırıldı.

Sonuç

Dört site bugün aynı çekirdekten beslenerek bağımsız çalışıyor; ortak bir düzeltme tüm ailede kullanılabiliyor, bir sitedeki veri değişikliği ise o sitede kalıyor. ensotek.de üç dilde, müşteri hesabı ve kapsamlı teknik içerikle ailenin ana sitesi olarak yayında.

Araçlar

Next.js, TypeScript, Fastify, Drizzle ORM, MySQL, Bun, Docker, Nginx

Öne Çıkan Özellikler
  • 4 alan adı, 4 ayrı veritabanı, tek ortak paket katmanı

  • Ortak Fastify modülleri: ürün, teklif, katalog, kütüphane

  • Ortak teklif modülü, site başına markalı PDF şablonu

  • ensotek.de: Almanca varsayılan, DE/EN/TR içerik

  • Müşteri hesabı: destek talepleri ve bildirim paneli

  • İçerik kimliğine dayalı hreflang, 308 ve gerçek 404

  • Marka adı ve logo koddan değil site ayarlarından gelir

  • Tanitio için sürümlü, salt okunur içerik sözleşmesi

  • ERP'den site içeriği yönetimi için API köprüsü

Tasarım Öne Çıkanları
  • Her marka kendi dili ve alıcısıyla konuşur; ortak olan arayüz değil iş akışlarıdır

  • ensotek.de'de dil eşleşmesi slug'a değil içerik kimliğine bağlı; çevrilmiş adresler doğru karşılığa gider

  • Ürün sayfaları sunucuda render edilir, ikon ve tema CSS'i kullanılan alt kümeye indirildi

  • Kayıtlı müşteri için destek talebi, bildirim ve teklif kısa yollarını tek ekranda toplayan panel

  • Marka denetimi yayın kapısında: yeni bir firma için kurulumda ekranda başka marka görünmez

Detaylar

Ensotek bugün dört ayrı alan adıyla çevrimiçi: Almanya merkezli ana site ensotek.de, Türkiye pazarı için ensotek.com.tr, Almanca konuşulan pazarlar için alt marka kuhlturm.com ve kompozit üretimi için karbonkompozit.com.tr. Her birinin dili, alıcısı ve hukuki çerçevesi farklı; ama ürün kataloğu, teknik kütüphane, teklif ve katalog talebi gibi temel iş akışları aynı. Bu vaka çalışması, dört siteyi tek bir yazılım ailesinden çıkaran ortak çekirdeği ve bu ailenin ilk ve en kapsamlı üyesi olan ensotek.de'yi anlatır.

Proje bağlamı: neden ortak çekirdek?

İki kolay yol vardı ve ikisi de risk taşıyordu. Dört ayrı kod tabanı kopyalamak, her hata düzeltmesinin dört kez yapılması ve sitelerin zamanla birbirinden kopması demekti. Tek bir veritabanında kiracı kimliğiyle çalışan klasik bir SaaS ise bir markanın verisinin ya da ayarının diğerine sızma riskini getiriyordu; nitekim ayrışma öncesinde iki site aynı veritabanını paylaşırken bu risk gerçek bir sorun olarak görülmüştü. Seçilen model bu ikisinin arasında: ortak paketler, marka başına ayrı repo, ayrı veritabanı ve ayrı dağıtım. Dürüst bir adlandırmayla bu, tek veritabanlı bir multi-tenant SaaS değil; ortak çekirdekli çok markalı bir platform ailesidir.

Ortak çekirdek

Bun workspace ile bağlanan “packages” katmanı beş paketten oluşur:

  • shared-backend: Fastify modülleri — kimlik doğrulama, depolama, site ayarları, ürünler, kategoriler ve alt kategoriler, galeri, referanslar, yorumlar, kütüphane, özel sayfalar, teklif, katalog talebi, iletişim, bülten, bildirimler, denetim kaydı, Telegram, e-posta şablonları, menü, footer, slider, hizmetler ve destek talepleri; MySQL, JWT, Redis, Sentry, Swagger ve statik dosya eklentileri; kimlik, rol ve dil ara katmanları.
  • shared-ui: yönetim panelleri için veri tablosu ve ortak arayüz bileşenleri.
  • core, shared-types, shared-config: frontend API katmanı, ortak tipler, TypeScript temel ayarları ve Tailwind tasarım tokenları.

Siteler bu çekirdeği farklı derinlikte kullanır. ensotek.de ilk nesil koddur ve modüllerinin çoğu yereldir; ensotek.com.tr ise neredeyse tamamen ortak modüllerle çalışır ve yalnız dört yerel modülü vardır. Bu kademeli yapı bilinçli: bir modül önce bir sitede olgunlaşır, sonra pakete taşınır. Teklif modülü bunun örneğidir; artık ortak pakettedir ve her site yalnız kendi markalı PDF şablonunu modüle verir. Marka adı, logo ve iletişim bilgileri koddan değil site ayarlarından gelir; yayın öncesi çalışan bir marka denetimi, koda gömülü marka adını yakalar.

ensotek.de: ana site

ensotek.de Almanca varsayılan dilde, İngilizce ve Türkçe sürümlerle yayındadır ve ailenin en geniş içerik yapısına sahiptir:

  • Ürünler ve yedek parçalar, hizmetler, endüstriyel/HVAC/proses çözümleri, projeler ve referanslar
  • Teknik kütüphane, kalite belgeleri, misyon ve vizyon, ekip, haberler, blog ve SSS
  • Teklif formu, katalog talebi, iletişim ve Almanya'ya uygun Impressum ile yasal sayfalar
  • Müşteri hesabı: kayıt ve giriş sonrası açılan, destek taleplerini durum ve öncelikle gösteren, okunmamış bildirimleri sayan ve teklif ile katalog talebine kısa yol veren bir müşteri paneli

Arama tarafında dil eşleşmesi slug'a değil içerik kimliğine dayanır: bir ürünün Almanca ve Türkçe adresleri farklı olsa da hreflang doğru karşılığı gösterir. Eski adresler 308 ile yönlenir, bulunamayan içerik gerçek 404 döner; site haritası üç dildeki tüm içerikleri kapsar. LocalBusiness, FAQ, Breadcrumb ve Article yapısal verisi ile llms.txt yayındadır. Performans için ürün sayfaları sunucuda render edilir, ikon ve tema CSS'i kullanılan alt kümeye indirildi.

Yönetim panelleri

Her sitenin kendi Next.js 16 ve Redux Toolkit tabanlı paneli vardır. ensotek.de panelinde ürün ve yedek parçalar, kategoriler, hizmetler, projeler, referanslar, kütüphane, özel sayfalar, teklifler (detay ve PDF), katalog talepleri, iletişim mesajları, destek talepleri, SSS, slider, menü, footer, e-posta şablonları, Telegram, kullanıcılar, roller, denetim kaydı ve site ayarları yönetilir. Panelde ayrıca yapay zekâ destekli destek sohbeti için bir bilgi tabanı ekranı bulunur; bu sohbet altyapısı hazırdır ancak kamuya açık sitede şu an etkin değildir.

Teknik mimari ve güvenlik

  • Stack: Next.js 16, React 19, next-intl, React Query, Tailwind CSS v4; Fastify 5, Drizzle ORM, MySQL, Zod, Bun; Swagger ile belgelenmiş API.
  • İzolasyon: her sitenin veritabanı kullanıcısı yalnız kendi veritabanına yetkilidir; Kühlturm ayrıştırmasında medya dosyaları da siteye özel depoya alındı.
  • Güvenlik: JWT ve çerez anahtarları ortamda yoksa uygulama açılmaz; tüm yönetim uçları kimlik ve yönetici rolü gerektirir; herkese açık ayar uçları gizli değer döndürmez.
  • Yayın: Nginx arkasında PM2 süreçleri; yedekleme, sağlık kontrolü ve geri dönüş adımları içeren dağıtım betikleri.

Entegrasyonlar

  • Puppeteer ile markalı PDF teklif, SMTP e-posta ve Telegram bildirimi
  • Tanitio pazarlama platformu için ortak, sürümlü ve anahtarla korunan salt okunur içerik sözleşmesi; dört site aynı sözleşmeyi kendi dil profiliyle sunar
  • GA4 ve Search Console ölçümü
  • Ensotek ERP'nin “Web Siteleri” bölümü: site seçiciyle içerik yönetimi ve web taleplerinin ERP'ye aktarılması, sitelerin kendi yönetim API'leri üzerinden çalışır; teknik teslimi yapıldı, müşteri kabulü sürüyor

Bugün

Dört site canlıda; her biri kendi alan adı, dili ve veritabanıyla bağımsız çalışırken aynı çekirdekten beslenir. Ortak pakette yapılan bir düzeltme, yeniden yazılmadan tüm ailede kullanılabilir; bir sitedeki veri ya da ayar değişikliği ise yalnız o sitede kalır. ensotek.com adresi için yeni bir site planlanmaktadır.