Açık kaynak · .NET 9 · MIT lisansı
Elevare
Sürükle-bırak sayfa editörü, onay akışları ve çok dilli içerik desteğiyle .NET 9 üzerinde yazılmış, açık kaynaklı bir içerik yönetim sistemi.
Şu an gezdiğiniz bu site de Elevare ile çalışıyor.

- .NET 9Blazor Server ve ASP.NET Core MVC
- PostgreSQLİki uygulama, tek veritabanı
- GrapesJSGörsel sayfa editörü
- 730+Otomatik test
- MITÖzgürce kullan, değiştir, dağıt
01 · Hikâye
Neden yazdım?
Bu siteyi kurarken içeriğin nasıl hazırlandığını, kimin onayından geçtiğini ve ziyaretçiye nasıl ulaştığını baştan sona kendim tasarlamak istedim. Hazır bir sisteme eklentiler takıp onu ihtiyacıma uydurmaya çalışmak yerine, ihtiyacın kendisinden yola çıkan bir sistem yazmaya karar verdim.
Elevare böyle başladı: önce kendi sitem için yazdığım bir yönetim paneli olarak. Zamanla sayfa editörü, onay akışları, çok dillilik, SEO araçları ve yedekleme eklendi. Sistem olgunlaştığında da herkesin kullanabilmesi, inceleyebilmesi ve geliştirebilmesi için açık kaynak olarak yayınladım.
02 · Mimari
İki uygulama, tek veritabanı
Elevare birbirinden bağımsız çalışan iki uygulamadan oluşur. Aralarında bir API yoktur; ortak bir PostgreSQL veritabanını paylaşırlar ve tek bir kurala uyarlar.
Tek yönlü veri akışı
Tabloları CMS oluşturur ve içeriği CMS yazar; site yalnızca okur. Sitenin yazdığı tek şey ziyaret istatistikleri, form yanıtları ve hata kayıtlarıdır.
Kopmayan sözleşme
Site, CMS tablolarını kendi salt okunur modelleriyle okur. Sözleşme testleri, CMS'te bir sütunun adı değişirse hatayı canlıda değil derleme sırasında yakalar.
Anında yansıyan değişiklik
Site sayfaları bir saate kadar önbellekte tutar ama CMS her başarılı kayıttan sonra önbelleği temizletir. Yaptığınız değişiklik bir sonraki sayfa açılışında görünür.
03 · Özellikler
Neler yapabiliyor?
Bir içerik ekibinin günlük işinde ihtiyaç duyduğu her şey, tek bir panelde.
Görsel sayfa editörü
Sayfaları GrapesJS bloklarını sürükleyip bırakarak hazırlarsınız. Sayfa yayına çıkmadan önce başkalarıyla paylaşabileceğiniz bir önizleme linki alırsınız.
Bağlı ve kopya şablonlar
Üst menü gibi her yerde aynı olması gereken parçalar bağlı şablondur; şablonu düzenlediğinizde bütün sayfalar güncellenir. Kopya şablon ise sayfaya kendine ait bir başlangıç verir.
Onay akışları
Adımları ve her adımda kimin onay vereceğini siz belirlersiniz. Değişiklik karşılaştırması HTML'e değil, okurun gördüğü metne bakar.
Rol tabanlı yetkiler
Yetkiler panelden değiştirilir ve her istekte sunucuda denetlenir. Bir işlemi engelleyen şey hiçbir zaman yalnızca butonun gizlenmesi değildir.
Çok dilli içerik
Her dilin kendi adres öneki ve iki ayrı anahtarı vardır: CMS'te yazılabilir mi, sitede yayında mı. Yarım kalmış bir çeviri dışarı sızmaz.
SEO araçları
Sayfa bazında meta etiketleri ve yapısal veri, panelden düzenlenen robots.txt ve llms.txt, otomatik site haritası ve editörde anlık SEO puanı.
Akıllı yönlendirmeler
Adresi değişen, silinen ya da arşivlenen sayfa için yönlendirme kendiliğinden yazılır. Ekran ölü hedefleri, döngüleri ve zincirleri en başta gösterir.
Hafif görseller
Yüklenen her görselin WebP ve küçültülmüş kopyaları üretilir; site doğru boyutu seçer. Tek bir görselden bütün favicon boyutları çıkar.
Formlar
Spam koruması, hazır cevap şablonları ve içeriği incelenerek kabul edilen dosya ekleri. Ekleri yalnızca yetkisi olanlar indirebilir.
Çöp Kutusu
Silinen her şey geri getirilebilir. Geri gelen bir site kodu ise kapalı gelir; ziyaretçilerin tarayıcısında çalışacak bir kodu yeniden yayına almak ayrı bir karardır.
Site kodları
Analiz kodu, çerez onay bandı ya da canlı destek balonu gibi kodlar bütün sayfalara eklenir; istenen sayfada tek tek kapatılabilir.
Canlı ayarlar
SMTP, CAPTCHA ve S3 anahtarları şifrelenerek saklanır ve kaydettiğiniz anda geçerli olur. Yerel diskten S3'e geçmek bile yeniden başlatma gerektirmez.
04 · Ekranlar
Panelden birkaç kare





05 · Kaputun altında
Mühendislik notları
Elevare'yi yazarken verdiğim kararların bir kısmı ekranda görünmez ama sistemin güvenilir çalışmasını sağlayan şey tam da bunlardır.
Hatalar exception olarak taşınmaz
İşleyiciler sonucu Result tipiyle döner. Her hatanın değişmeyen bir kodu vardır ve bu kod aynı zamanda çeviri anahtarıdır. Türkçe karşılığı olmayan bir hata kodu derlemeyi düşürür.
Sırası belli bir istek hattı
Her istek aynı adımlardan aynı sırayla geçer: eşzamanlılık kilidi, kayıt, yetki denetimi, doğrulama, kayıt işlemi ve önbellek temizliği. Yetki kontrolünü unutmak mümkün değildir.
Önbellek çökerse site çökmez
Redis'e ulaşılamadığında site hata vermez, önbellek yokmuş gibi çalışmaya devam eder. Önbellek yalnızca hızlandırır; hiçbir zaman tek arıza noktası olmaz.
Sessizce ezilen kayıt yok
Aynı sayfa iki yerde açıksa editör, sayfanın açıldığı andaki parmak izini kayıtla birlikte gönderir. Sayfa arada değiştiyse kayıt reddedilir ve karar kullanıcıya bırakılır.
Yumuşak silme
Silinen kayıtlar veritabanından kalkmaz. Kalıcı silme tek bir yerden yapılır ve form yanıtı ya da alt sayfası olan bir sayfayı silmeyi reddeder.
Uyarı da hatadır
Derleme TreatWarningsAsErrors ile çalışır; Sonar ve .NET analiz kuralları açıktır. Kapatılan her kural, gerekçesini anlatan bir yorumla kapatılır.
06 · Teknolojiler
Neyle yazıldı?
| Katman | Teknoloji |
|---|---|
| Yönetim paneli | Blazor Server (.NET 9) |
| Site | ASP.NET Core MVC, output cache, Brotli sıkıştırma |
| Veritabanı | PostgreSQL 15, Entity Framework Core |
| Sayfa editörü | GrapesJS ve Elevare'ye özel bloklar |
| Uygulama katmanı | MediatR (CQRS), FluentValidation |
| Kimlik ve yetki | ASP.NET Core Identity, JWT, rol tabanlı yetkiler |
| Arka plan görevleri | Hangfire |
| Önbellek | Redis (isteğe bağlı) ya da bellek içi önbellek |
| Loglama | Serilog, isteğe bağlı Seq |
| Dağıtım | Docker Compose, GitHub Actions |
07 · Kurulum
Üç komutla ayağa kaldırın
Bilgisayarınızda Docker kuruluysa başka hiçbir şeye ihtiyacınız yok: ne .NET SDK ne de PostgreSQL.
Depoyu indirin
git clone https://github.com/Oguzhankaraguzel/elevare.git cd elevareAyar dosyasını oluşturun
cp .env.example .env.env dosyasındaki boş alanları doldurun. Biri bile boşsa sistem başlamaz; hiçbir kurulum varsayılan bir şifreyle çalışmasın diye.
Başlatın
docker compose up -d --buildPanel http://localhost:5150, site http://localhost:5160 adresinde açılır.
Kodların hepsi GitHub'da
Projeyi incelemek, bir hata bildirmek ya da katkıda bulunmak için depoya uğrayın. Her geri bildirim Elevare'yi biraz daha ileri taşıyor.
