Ana içeriğe geç
Projelere Dön
EuroTech Web logo

EuroTech Web

Kurumsal Web Sitesi

EuroTech Web mimari şeması EuroTech Web Laravel 10 · PHP 8.1 — dört dilli tanıtım ve başvuru sitesi (arşiv) 2024-10 → 2025-11 · aktif geliştirme kapandı Portalın kamuya açık yüzü; ikisi ayrı uygulamadır. Ziyaretçi aday öğrenci · veli · kurum dört ayrı dilde gelir localize ara katmanı dil URL'in ilk parçasından okunur tek rota ağacı, dört çıktı Blade görünümleri 69 şablon · 6 controller 109 PHP ve Blade kaynak dosyası Başvuru formu Aday bilgilerini bırakır; kayıt veritabanına yazılır ve e-posta ile bildirilir. Bot koruması için captcha ucu ayrı rotada. Adayın kendisi portala buradan geçer. Kampanya kaydı Reklam tarafından gelen ziyaretçi ayrı bir modelde tutulur; sayfa içeriği değişmez, kaynak bilgisi kaybolmaz. İki model: kullanıcı ve kampanya. Çerez ve yönlendirme Onay durumu ayrı bir controller'da; ölçüm kodu onay gelmeden yüklenmez. Eski dil yolları kalıcı yönlendirmeyle taşındı. 355 commit boyunca URL'ler korundu. Neden arşiv Bu iki uygulama bugün yazdığım işin teknik yönünü temsil etmiyor: sunucu tarafında şablon üreten bir PHP monoliti, otomatik test yok, tip güvencesi yok. Portfolyoda durmalarının sebebi büyüklükleri değil, ne öğrettikleri. Buradan taşınan iki alışkanlık Birincisi: çok dilli bir sitede dil, çeviri dosyasından önce rota tasarımının konusudur — sonradan eklenirse URL'ler bozulur. İkincisi: yayındaki bir adresi asla sessizce kaybetme; taşıyacaksan kalıcı yönlendirmeyle taşı.
Portalın kamuya açık yüzü olan, arşivlenmiş dört dilli Laravel 10 sitesi: 69 Blade şablonu, 6 controller. Dil, URL'in ilk parçasından okunur; tek rota ağacı dört dilde çıktı verir. Başvuru formu aday kaydını veritabanına yazar ve e-posta ile bildirir, reklamdan gelen ziyaretçi ayrı bir kampanya modelinde tutulur, ölçüm kodu çerez onayı gelmeden yüklenmez. Eski dil yolları kalıcı yönlendirmeyle taşınmıştır.

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

  • Laravel 10
  • PHP 8.1
  • Blade
  • MySQL
  • SendGrid

Ö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

14 ay

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

  1. 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.

  2. 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.

  3. Ö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.

  4. 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

Aktif geliştirme
2024-10 → 2025-11 · 355 commit
Kaynak dosyası
109 PHP ve Blade dosyası — app, resources, routes ve database dizinleri
Yapı
6 controller · 69 Blade görünümü · 2 model · 4 migration
Dil
Dört dil, tek rota ağacı
Ölçüm notu
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.

Arşiv

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.