Kişisel Web Sitem
Proje Detayı

Kişisel Web Sitem

Bu site, bir portfolyodan fazlası: kendi içeriğimi yönetebildiğim, baştan sona kendi yazdığım bir web uygulaması. Hazır bir tema ya da içerik yönetim sistemi kullanmak yerine, ASP.NET Core ile sıfırdan geliştirmeyi tercih ettim — çünkü bir geliştiricinin vitrini, aynı zamanda nasıl kod yazdığının da kanıtı olmalı.

Neden Sıfırdan?

Hazır bir altyapıyla birkaç günde benzer bir görünüm elde edebilirdim. Ancak amacım yalnızca projelerimi listelemek değildi; katmanlı mimariyi, tasarım desenlerini ve performans optimizasyonlarını gerçek bir üründe uçtan uca uygulamaktı. Bu site, öğrendiklerimi anlattığım değil, çalışır halde gösterdiğim yer.

Mimari

Proje, sorumlulukları net biçimde ayrılmış dört katmandan oluşuyor:

KatmanSorumluluk
EntityLayerVeritabanı varlıkları ve veri transfer nesneleri
DataAccessLayerEntity Framework Core, Generic Repository, migration'lar
BusinessLayerİş kuralları, servis arayüzleri ve önbellekleme katmanı
PresentationLayerMVC controller'ları, görünümler ve yönetim paneli

Katmanlar birbirine somut sınıflarla değil arayüzlerle bağlı. Bağımlılıklar Dependency Injection ile çözülüyor; bu sayede bir servisin davranışını değiştirmek, onu kullanan hiçbir kodu düzenlemeyi gerektirmiyor.

Veri Erişimi

Tekrar eden CRUD kodunu ortadan kaldırmak için GenericRepository<T> yapısını kurdum. Veritabanı şeması Code First yaklaşımıyla, migration'lar üzerinden yönetiliyor — şema değişiklikleri de kodun bir parçası ve sürüm kontrolünde.

Yönetim Paneli

Sitedeki tüm içeriği yönettiğim paneli de kendim tasarladım. Ortak bir tasarım sistemi üzerine kurulu: renkler, form alanları, tablolar ve butonlar tek bir stil dosyasından besleniyor, her modül kendi vurgu rengiyle ayrışıyor.

  • Proje yönetimi — sürükle-bırak görsel yükleme, HTML destekli açıklama editörü ve yazarken çalışan canlı önizleme
  • Görsel yönetimi — her projenin görselleri kendi klasöründe tutulur; tür ve boyut doğrulaması sunucu tarafında yapılır
  • İletişim kutusu — gelen mesajları okuma, filtreleme ve panelden doğrudan yanıtlama
  • Profil ve CV — biyografi, profil fotoğrafı ve indirilebilir özgeçmiş yönetimi

Panel, telefonda da eksiksiz çalışacak şekilde tasarlandı; kenar menüsü küçük ekranlarda katlanıyor ve tüm formlar tek sütuna iniyor.

SEO Altyapısı

Arama motoru görünürlüğünü sonradan eklenen bir detay değil, mimarinin parçası olarak ele aldım.

  • Anlamlı adresler — proje sayfaları /proje/kitap-tavsiye-sistemi biçiminde çalışıyor. Türkçe karakterler adres dostu karşılıklarına dönüştürülüyor.
  • Kalıcı yönlendirme — eski kimlik tabanlı adresler 301 ile yeni adreslere taşındı, böylece mevcut sıralamalar korundu.
  • Yapılandırılmış veri — JSON-LD ile kişi, site, proje ve gezinti bilgileri arama motorlarına makine okunur biçimde sunuluyor.
  • Paylaşım etiketleri — her sayfa kendi canonical adresi, Open Graph ve Twitter kartı bilgileriyle geliyor.
  • Dinamik site haritası — sitemap.xml ve robots.txt veritabanındaki güncel içerikten anlık üretiliyor.

Performans

Sık okunan ancak nadiren değişen veriler için Decorator Pattern ile bir önbellekleme katmanı kurdum. Asıl servisler bu katmandan habersiz; önbellek onları sarmalıyor.

Kayıtlar bir saat boyunca bellekte tutuluyor. Bir içerik eklendiğinde veya güncellendiğinde ilgili önbellek anında geçersiz kılınıp tazeleniyor — yani ziyaretçi hiçbir zaman süre dolmasını beklemek zorunda kalmıyor, aynı anda gereksiz veritabanı sorgusu da yapılmıyor.

Önbellek, doğru kurulduğunda görünmezdir: kullanıcı yalnızca hızı fark eder, eskimiş veriyi değil.

İletişim Altyapısı

İletişim formu, gelen mesajı veritabanına kaydediyor ve SMTP üzerinden bana bildirim gönderiyor. Panelden yazdığım yanıtlar hem karşı tarafa e-posta olarak iletiliyor hem de yanıt geçmişine işleniyor — gönderim başarısız olursa hata nedeni de kayıt altına alınıyor. Form ayrıca bot gönderimlerine karşı korumalı.

Kullanılan Teknolojiler

  • Arka uç: ASP.NET Core MVC, C#
  • Veri: Entity Framework Core, Microsoft SQL Server
  • Mimari: Katmanlı mimari, Repository ve Decorator desenleri, Dependency Injection
  • Güvenlik: Cookie tabanlı kimlik doğrulama, antiforgery koruması, sunucu taraflı dosya doğrulama
  • Ön yüz: HTML5, CSS3, JavaScript, GSAP animasyonları
  • Performans: In-Memory Cache, statik dosya önbellekleme

Sürekli Gelişen Bir Proje

Bu site benim için bitmiş bir iş değil, üzerinde denemeler yaptığım canlı bir alan. Yeni bir yaklaşım öğrendiğimde önce burada uyguluyorum.