
EuroTech Web
Kurumsal Web Sitesi
EuroTech'in kamuya açık yüzü: dört dilli tanıtım ve başvuru sitesi. Her dilin kendi adresleri var, böylece aday aramada kendi dilindeki sayfaya ulaşıyor; reklamdan gelen ziyaretçinin kaynağı form gönderilene kadar korunuyor. Portalla aynı kurumun işi ama ayrı bir uygulama. Arşiv — aktif geliştirme 2025 sonunda kapandı.
Kullanılan Teknolojiler
Öne Çıkan Özellikler
- Dört dil — tek rota ağacı, dil URL'in ilk parçasından okunuyor
- Aday başvuru formu ve kampanya kaynağı kaydı
- Bot koruması için ayrı rotada doğrulama ucu
- Çerez onayı ayrı bir controller'da; ölçüm kodu onay gelmeden yüklenmiyor
- Eski dil yolları kalıcı yönlendirmeyle korunuyor
Geliştirme Süresi
Problem
Kurumun kamuya açık yüzünün tek bir işi vardı: dört farklı dilden gelen adayı, bilgilerini bırakacağı noktaya kadar götürmek. Buradaki zorluk çeviri değil rota tasarımı. Çok dilli bir sitede dil sonradan eklendiğinde adresler bozuluyor ve o noktaya kadar biriken arama görünürlüğü kayboluyor. İkinci mesele kaynak takibi: reklamdan gelen ziyaretçinin nereden geldiği, form gönderildiğinde kaybolmamalıydı — yoksa hangi kanalın işe yaradığı hiç bilinmiyor. Üçüncüsü, ölçüm ve çerez: ölçüm kodunun onay gelmeden yüklenmemesi gerekiyordu.
Kullanıcılar
Üç ziyaretçi. Aday: dört dilden birinde geliyor, program ve içerik sayfalarını geziyor, sonunda başvuru formunu dolduruyor. Veli veya kurum: aynı içeriği güven arayışıyla okuyor. Kurumun kendi ekibi: gelen başvuruyu ve kampanya kaynağını görüyor — o kısım portalın tarafında yürüyor.
Rolüm
Geliştirici olarak sitenin tamamı: rota ve dil yapısı, sayfalar, başvuru ve kampanya akışı, çerez ve ölçüm katmanı.
Mimari
Laravel 10 üzerinde sunucu tarafında şablon üreten bir site. Dil, rota grubunun ilk parçası olarak tanımlı ve bir ara katman tarafından okunuyor: ara katman gelen değeri desteklenen dört dille karşılaştırıyor, geçersizse varsayılana düşüyor ve dili sonraki tüm bağlantı üretimlerine varsayılan parametre olarak yerleştiriyor. Bu sayede tek bir rota ağacı dört dilde çıktı veriyor ve şablonların içinde dil taşımak gerekmiyor. Veri tarafı dar: iki model — kullanıcı ve kampanya. Başvuru formu kaydı veritabanına yazıyor ve e-posta bildirimi gönderiyor; bot koruması için doğrulama ayrı bir rotada duruyor. Çerez onayı kendi controller'ında; ölçüm kodunun yüklenip yüklenmeyeceği bu onaya bağlı. Eski dil yolları kalıcı yönlendirmelerle korunuyor.
Kritik Kararlar
Dil bir çeviri meselesi değil, rota meselesi olarak ele alındı
Dil rota grubunun ilk parçası ve ara katman tarafından doğrulanıyor; geçerli değilse varsayılana düşüyor. Dil aynı zamanda bağlantı üretimine varsayılan parametre olarak yerleştirildiği için şablonların içinde dil taşımak gerekmiyor — bir bağlantı yazıldığında doğru dilde çıkıyor. Bu, dört dilin tek rota ağacında yaşamasını mümkün kılıyor.
ÖdünleşimYol parçaları dört dilde ortak; yalnız dil ön eki değişiyor, segmentlerin kendisi çevrilmiyor. Bu, arama görünürlüğü açısından yerelleştirilmiş yollara göre zayıf bir tercih. VAP Turizm'de aynı problemi tersten çözdüm: orada yolların kendisi dile göre değişiyor, karşılığında her yeni sayfa üç ayrı tanım gerektiriyor.
Kampanya kaynağı ayrı bir modelde tutuluyor
Reklamdan gelen ziyaretçinin kaynağı, form gönderildiğinde kaybolmamalıydı. Kaynağı sayfa içeriğine karıştırmak yerine ayrı bir modelde tutmak, içerik değişse bile kaynak kaydının bozulmamasını sağlıyor.
ÖdünleşimKaynak yalnız ilk temasta yakalanıyor; ziyaretçi başka bir kanaldan geri döndüğünde ilk kayıt kalıyor ve son temas bilgisi tutulmuyor. Yani kayıt "nereden duydu" sorusuna cevap veriyor, "hangi kanal dönüştürdü" sorusuna değil.
Ölçüm kodu onaydan sonra yükleniyor
Onay durumu ayrı bir controller'da yönetiliyor ve ölçüm kodunun sayfaya girip girmeyeceği bu duruma bağlı. Onay gelmeden ölçüm yüklenmiyor; bu, ölçümün doğruluğu pahasına verilmiş bir uyum kararı.
ÖdünleşimOnay vermeyen ziyaretçiler ölçümde hiç görünmüyor, yani raporlanan trafik gerçek trafiğin altında kalıyor. Bu fark kabul edildi.
Yayınlanmış adresler kalıcı yönlendirmelerle korundu
Dil yapısı zaman içinde değişti ve eski adreslere hâlâ bağlantılar geliyordu. Eski yollar silinmek yerine kalıcı yönlendirmeye alındı; böylece dış bağlantılar ve arama sonuçlarındaki kayıtlar kırılmadı.
ÖdünleşimYönlendirme tablosu zamanla büyüyor ve hiçbiri silinmiyor; her yönlendirme küçük bir bakım yükü ve her istekte değerlendirilen bir kural. Hangi yönlendirmenin hâlâ trafik aldığını gösteren bir ölçüm yok.
Teknoloji Seçimi
Site portalla aynı çatıda yazıldı ve bu bilinçliydi: aynı kurumun iki uygulaması aynı dil, aynı dağıtım ve aynı işletme biçimini paylaşınca bakım tek bir zihinsel modelle yürüyor. Sunucu tarafında şablon üretmek, tanıtım içeriği ve bir formdan ibaret bir site için yeterliydi — ayrı bir ön yüz uygulaması ve API sözleşmesi taşımanın karşılığı yoktu. Buna karşılık site ile portal ayrı uygulamalar olarak tutuldu: kamuya açık bir yüzeyle kapalı bir portalın aynı dağıtımı paylaşması, saldırı yüzeyini gereksiz genişletirdi.
Güvenlik
Kamuya açık tek yazma yolu başvuru formu ve bu form ayrı bir rotada duran doğrulama ucuyla korunuyor. Form dışında ziyaretçinin veritabanına yazabildiği bir uç yok. Çerez onayı ayrı bir controller'da yönetiliyor ve üçüncü taraf ölçüm kodu onay gelmeden sayfaya girmiyor. Site ile portal ayrı uygulamalar olduğu için kamuya açık yüzeyin ele geçirilmesi portal verisine erişim anlamına gelmiyor — bu ayrım bu tasarımın en değerli tarafı.
Performans
Bu site için saklanmış, tarih damgalı bir ölçüm çıktısı bulunmadığı için buraya bir skor yazılmadı. Yapısal olarak sayfalar sunucuda üretilip tam sayfa olarak gönderiliyor; istemci tarafında uygulama katmanı taşınmıyor. Ölçüm kodu onaydan sonra yüklendiği için onay vermeyen ziyaretçilerde üçüncü taraf script yükü de oluşmuyor.
Sonuçlar
- 2024-10 → 2025-11 · 355 commit
- 109 PHP ve Blade dosyası — app, resources, routes ve database dizinleri
- 6 controller · 69 Blade görünümü · 2 model · 4 migration
- Dört dil, tek rota ağacı
- Bu repoda üçüncü taraf kütüphane klasörü sürüm kontrolüne dahil; sayım yalnız kendi yazdığım dizinlerden alındı
Bugün Ne Farklı Yapardım
Buradan taşıdığım en net ders yol yerelleştirmesi. Bu sitede yalnız dil ön eki değişiyor, segmentlerin kendisi dört dilde aynı; VAP Turizm'de aynı problemi tersten çözdüm ve yolların kendisini dile göre ayırdım. İkinci ders yönlendirme: yayındaki bir adresi sessizce kaybetmemek, sonradan telafisi olmayan tek şey. Bugün farklı yapacağım nokta ise ölçüm tarafı: yönlendirme tablosu büyüdü ama hangi kuralın hâlâ trafik aldığını gösteren bir şey yok, yani hiçbir yönlendirme güvenle silinemiyor. Ops Panel'de aynı boşluğu envanter tarafında kapattım — bir kaydın ne zamandan beri o hâlde olduğunu görmeden hangisinin temizleneceğine karar veremiyorsun.
Nereden başlayacağınızı birlikte bulalım
Ne yapmak istediğinizi anlatın; ne kadar süreceğini ve en mantıklı ilk adımı baştan söylerim.