Site
Kolofon
Bu sayfa, okuduğunuz sitenin kendisini anlatır: neyle kuruldu, hangi kararlar arkasında duruyor ve en önemlisi neden böyle kuruldu. Bir BT altyapı firmasının kendi sitesi, sattığı işin ilk referansıdır; o yüzden burada "şunu kullanıyoruz" demekle yetinmeyip her tercihi gerekçesiyle ve ölçülmüş karşılığıyla yazdık.
Bu sitenin tek bir kuralı var
Site, Edirne'den Ağrı'ya, Sinop'tan Hatay'a açılmak zorunda. Şehirden köye, ovadan dağ köyüne, fiber bağlantıdan tek çubuk çeken mobil şebekeye kadar. Bu bizim için bir temenni değil, sitenin tasarım kısıtı: her karar önce bu soruya çarpıyor.
Çünkü sahada bir sitenin "yavaş" olması nadiren yavaşlık olarak yaşanır. Zayıf bir hatta bağlı kullanıcı için o site yavaş değildir, açılmaz. Ekran beyaz kalır, kullanıcı geri tuşuna basar ve o ziyaret hiç olmamış sayılır. Süslü bir açılış animasyonunun bedelini ödeyen kişi, animasyonu hiç göremeyen kişidir.
Bu yüzden bu sitede ağır giriş animasyonu, otomatik oynayan arka plan videosu, kaydırma efekti kütüphanesi ve sayfayı bekleten bir "yükleniyor" ekranı yok. Bunlar bir eksiklik değil, bilinçli bir bütçe. Amacımız en iyi içeriği en geniş kapsama alanına ulaştırmak; ikisinden birini seçmek gerektiğinde kapsama alanı kazanıyor.
Teknik bütçelerimiz
Bir kural ancak sayısı varsa kuraldır. Sağ sütun temenni değil, canlı siteden 6 Eylül 2026 tarihinde ölçülmüş gerçek değerlerdir; görsel satırı ise her yapımda yeniden hesaplanır.
| Alan | Kuralımız | Ölçülen |
|---|---|---|
| JavaScript | Gerekmedikçe gönderilmez | 1,9 KB (sıkıştırılmış) |
| CSS | Kritik kısmı satır içi, gerisi ertelenir | 21,8 KB |
| Web fontu | Yalnız başlıklarda, yalnız gereken alfabe | 40,3 KB |
| Gövde metni fontu | Cihazın kendi fontu, indirme yok | 0 KB |
| Üçüncü taraf script | Sayılabilir kadar az | 1 alan adı |
| Site içi görsel | WebP, kalite sabit, boyut hedefi <100 KB | ortanca 50 KB |
| Ana sayfa belgesi | Tek istekte açılabilsin | 52,6 KB / 378 ms |
Güncel envanterin tamamı ve her yapımda yenilenen sayılar için: site künyesi.
Site neyin üstünde duruyor?
Site Astro ile kuruluyor ve tamamen statik olarak üretiliyor. Yani siz bir sayfayı açtığınızda arka planda çalışan bir uygulama sunucusu, sorgulanan bir veritabanı ya da beklenmesi gereken bir işlem yok: dosya zaten hazır, doğrudan gönderiliyor.
Bu tercihin üç sonucu var ve üçü de altyapı tarafında bildiğimiz sonuçlar:
- Hızlı, çünkü çalıştırılacak bir şey yok.
- Dayanıklı, çünkü çöken bir uygulama katmanı yok.
- Saldırı yüzeyi küçük, çünkü ziyaretçiye açık tarafta işletilen bir kod yok; olmayan bir veritabanı sızdırılamaz.
Barındırma Vercel'de. Yayına alma süreci git üstünden yürüyor: değişiklik bir dala işlenir, ana dala birleştirildiğinde site yeniden üretilip yayına çıkar. Elle dosya yükleme yok, "sunucuda küçük bir düzeltme yaptım" diye kayıtsız kalan bir değişiklik yok. Yayındaki her satırın bir karşılığı ve bir tarihi var.
İçerik Markdown dosyalarında duruyor ve biz onları elle yazıyoruz: bir yönetim panelinden değil, doğrudan dosyanın kendisinden. Bu bir zorlama değil, mesleğin getirdiği bir alışkanlık. Switch ve firewall gibi cihazları terminalden yapılandırıp ayağa kaldırmaya alışkın biri için metin dosyası zaten en doğal çalışma yüzeyidir; arada bir katman olmayınca ne yazdığınızı ve tam olarak neyin değiştiğini birebir görürsünüz.
Yine de panelsiz değiliz: Sveltia CMS altyapısı kurulu ve hazır bekliyor. Sebebi ileriye dönük. Ekip büyüdüğünde katkı verecek arkadaşımız dosya düzenleyiciyle uğraşmak zorunda kalmasın, rahat bir arayüzden yazabilsin istiyoruz.
İki yolun da kaydettiği şey aynı: düz metin dosyası ve git geçmişi. Bir gün bu araçlardan hiçbirini kullanmasak içerik yine elimizde kalır, okunabilir dosyalar hâlinde. Kimsenin sistemine kilitli değiliz.
Yazılım tarafından gelen refleks: neyi kurmadık?
Bu sitenin arkasındaki ekip üç ayrı yerden geliyor: yazılım mühendisliği, dijital reklamcılık, sistem ve ağ yöneticiliği. Üçü de aynı sayfaya farklı bir yerinden bakıyor. Yazılım tarafından gelen refleks şu: bir bağımlılık, faydası kanıtlanana kadar masraftır.
Site bir dönem React ile birlikte kuruluyordu. Sonra şunu fark ettik: React ile yazılmış bileşenler artık hiçbir sayfada kullanılmıyordu, yerlerini sade karşılıkları almıştı. Ama entegrasyon yerinde durduğu için her yapımda yaklaşık 194 KB'lık bir çalışma zamanı hâlâ üretiliyor ve ziyaretçiye gönderiliyordu. Hiçbir işe yaramayan, sadece indirilen ve ayrıştırılan bir yük.
Kaldırdık. Bugün sitenin ziyaretçiye gönderdiği kendi JavaScript'i 1,9 KB (6 Eylül 2026, sıkıştırılmış hâliyle ölçüldü). Aradaki fark yüz kattan fazla ve bu farkın tamamı, kimsenin kullanmadığı bir kolaylığın bedeliydi.
Menü açılışı, çerez paneli, tema düğmesi, kod kopyalama gibi işler birkaç satır sade JavaScript ile yapılıyor. Bir açılır menü için kütüphane kurmak, bir prizi değiştirmek için elektrik panosunu yenilemeye benziyor: işi görür, ama ödediğiniz bedelin karşılığı yoktur.
Ağ tarafından gelen refleks: okuyucu hangi hatta bağlı?
Sistem ve ağ tarafından bakınca soru değişir: bu sayfayı açan kişi gerçekte hangi koşulda? Geliştiricinin masasındaki fiber bağlantı ve güçlü bilgisayar, sahadaki ortalama kullanıcıyı temsil etmez. O yüzden aşağıdaki kararların hepsi zayıf hat varsayımıyla alındı.
Gövde metni için hiç font indirilmiyor
Okuduğunuz bu paragraf, cihazınızın kendi sistem fontuyla çiziliyor. İndirilen bir dosya yok, beklenen bir şey yok: metin, sayfa geldiği anda okunabilir durumda. Web fontunu yalnız başlıklarda kullanıyoruz ve orada da yalnız Türkçenin ihtiyaç duyduğu alfabeyi indiriyoruz, fontun tamamını değil.
Bir ayrıntı daha var: başlık fontu yüklenene kadar geçen sürede devreye giren yedek font, gerçek fontla boyutsal olarak eşlenmiş durumda. Bunun sebebi, font geldiğinde satırların kaymaması. Yazının ayağınızın altından kayması, okumayı yavaşlatan ama kimsenin adını koymadığı bir rahatsızlıktır.
Sayfanın ilk görünen kısmı öne alınıyor
Bir sayfanın stil dosyasının tamamı, o sayfanın ilk ekranını çizmek için gerekmez. Biz de üretim sırasında ilk ekran için gereken stilleri ayırıp doğrudan sayfanın içine gömüyoruz, geri kalanını sonraya bırakıyoruz. Böylece tarayıcı, bir dosyanın gelmesini beklemeden çizmeye başlıyor.
Tema değişimi ölçülüp düzeltildi
Sitenin koyu ve açık iki teması var. İlk yaptığımızda tema değiştirmek gözle görülür biçimde takılıyordu. Sebebi şuydu: sayfadaki her öğe için tanımlı olan yumuşak geçiş kuralı, tema değişince aynı anda binlerce öğeyi renk animasyonuna sokuyordu. Ölçtük: bir tema değişimi 118,7 milisaniye stil hesabı demekti.
Çözüm, tema değişimi sırasında geçişleri kısa süreliğine kapatmak oldu. Aynı ölçüm 25,5 milisaniyeye indi. Görünürde hiçbir şey kaybolmadı, sadece takılma gitti.
Görseller nasıl işleniyor?
Bir içerik sitesinde ağırlığın büyük kısmını metin değil görseller taşır. O yüzden görsel hattı, sitenin en disiplinli parçası.
Kural şu: görsel önce yüksek kalitede üretiliyor ve ham hâli sitenin dışında, ayrı bir arşivde saklanıyor. Siteye giren sürüm o ham dosya değil. Her görsel, yayımlanmadan önce ayrı bir dönüştürme adımından geçiyor ve WebP olarak yeniden üretiliyor. Bunu tek tek, her görsel için yapıyoruz. Kimsenin bizden istemediği fazladan bir iş; sayfaların hafifliğinin büyük kısmı da tam burada kazanılıyor.
Bir görsel bir kez dönüştürüldükten sonra bir daha sıkıştırılmıyor: üst üste sıkıştırılan bir görsel her turda biraz daha bozulur ve o bozulmanın geri dönüşü yoktur. Ham arşivi tutmamızın sebebi de bu. Bir görseli yeniden üretmemiz gerekirse en baştaki dosyaya dönebiliyoruz, elimizdeki bozulmuş kopyaya değil.
Makale görsellerinin her biri birkaç farklı genişlikte hazırlanıyor. Tarayıcınız ekranının genişliğine ve çözünürlüğüne bakıp bunlardan birini seçiyor; böylece dar bir ekrana, orada gösterilebilecek olandan büyük bir dosya gönderilmiyor.
Neden "hepsi 100 KB altında" demiyoruz?
Çünkü doğru olmazdı ve bu, herkesin tarayıcısını açıp doğrulayabileceği bir sayfa. 100 KB bizim hedefimiz, sert bir eşiğimiz değil. Dönüştürme sabit bir kalite değerinde yapılıyor; boyutu tutturmak için kaliteyi kırmıyoruz, çünkü aşırı sıkıştırmanın görselde bıraktığı hasar geri alınamaz. Bir ağ şeması okunmuyorsa 40 KB olmasının kimseye faydası yok.
Şu an sitede 745 site içi görsel var. Ortancası 50 KB, %73'i 100 KB'ın, %92'i 150 KB'ın altında ve en büyüğü 693 KB. Bu rakamlar elle yazılmadı: sayfa her üretildiğinde dosyalar yeniden sayılıyor. Yani yarın yüklediğimiz ağır bir görsel, bu cümleyi kendiliğinden değiştirir.
Sosyal paylaşım görselleri neden JPG?
Sitede bir istisna var ve kasıtlı: bir bağlantıyı sosyal ağda paylaştığınızda çıkan önizleme görselleri (221 dosya) WebP değil JPG. Sebebi uyumluluk. Tarayıcılar WebP'yi yıllardır sorunsuz açıyor, ama sosyal ağların bağlantı önizlemesi üreten tarayıcıları hâlâ güvenilmez davranıyor ve önizleme görselinin açılmaması, paylaşımın kendisini işlevsiz bırakıyor. Burada 30 KB kazanmak, bağlantının boş görünmesine değmez.
Her görsel aynı üniformayı giyer
Bir askerî bandoyu etkileyici yapan şey çaldığı parça değildir; disiplindir. Tek düzen, temiz üniforma ve aynı anda atılan aynı adım. Tek bir nefer yarım adım geride kalsa bütün alay dağınık görünür.
Bu sitedeki görselleri de öyle düşünüyoruz: her biri aynı alayın bir neferi. Makale görsellerindeki marka çerçevesi, logo ve üzerindeki yazı bir yapay zekâ modeline çizdirilmiyor; her birini kendi şablonumuzdan, her seferinde aynı özenle biz ekliyoruz. Sebebi basit: bir logonun her defasında birebir aynı olması gerekir, "benzer" olması yetmez. Modelin çizdiği logo her üretimde biraz başka çıkar; bizim koyduğumuz çerçeve hep aynı çıkar.
Bu titizlik biraz da size karşı bir nezaket meselesi. Önünüze koyduğumuz her görselin üniforması temiz olsun, hepsi tek bir alay gibi dursun istiyoruz. Ayrıntısı yapay zekâ beyanımızda.
Reklam tarafından gelen refleks: neyi ölçüyoruz?
Dijital reklam yönetmiş biri, ölçüm kodlarının bir siteye ne yaptığını yakından bilir: her ek etiket biraz daha yavaşlık, biraz daha veri ve biraz daha açıklanması gereken şey demektir. O yüzden buradaki kural, "ölçebildiğimiz her şeyi ölçelim" değil.
Sitenin dışarıdan script yüklediği tek bir alan adı var (6 Eylül 2026 tarihinde canlıda doğrulandı). Ziyaret istatistiği için Google Analytics, ileride reklam yayınlamak için de bir Meta pikseli kullanıyoruz.
Piksel konusunda kurduğumuz düzen şu: reklam çerezlerine izin vermediyseniz piksel hiç yüklenmez. Bu, yaygın uygulamadan farklı. Alışıldık yöntem pikseli yükleyip sonra susturmak; biz o durumda ~70-100 KB'lık bir dosyayı hiçbir karşılığı olmadan indirtmiş oluruz. Onay yoksa dosya hiç istenmiyor.
Google Analytics için de benzer bir tercih yaptık: ölçüm kodu sayfa açılır açılmaz değil, sayfaya ilk dokunduğunuzda, kaydırdığınızda ya da fareyi oynattığınızda yükleniyor. Böylece telefonunuz sayfayı açarken işlemcisini bizim istatistiğimize değil, size ayırıyor. Bunun bir bedeli var ve bilerek ödüyoruz: siteye girip hiçbir şeye dokunmadan çıkan ziyaretleri artık saymıyoruz.
Bir de kapattığımız bir şey var: Meta'nın "otomatik olay toplama" özelliği. Varsayılan olarak açık geliyor ve sitedeki her düğme tıklamasını, sayfa başlığıyla birlikte topluyor. Ölçtük, gördük ve koddan kapattık; çünkü topladığı şey çerez politikamızda söz verdiğimizin ötesindeydi. Panel ayarıyla değil kodla kapatılmış olması bilinçli: panel ayarı sessizce geri açılabilir, koddaki satır kalıcıdır.
Hangi çerezin ne yaptığı, verinin nereye gittiği ve izni nasıl geri alacağınız çerez politikasında ayrıntısıyla yazılı. Çerez tercihlerinizi her sayfanın altındaki bağlantıdan, istediğiniz an değiştirebilirsiniz.
Türkçenin getirdiği işler
Bir siteyi Türkçe yayımlamak, yalnızca metni Türkçe yazmaktan ibaret değil. Kullandığımız araçların çoğu İngilizce varsayılarak yazılmış; bu yüzden Türkçede sessizce bozulan yerler oluyor ve onları tek tek bulup düzeltmek gerekiyor. Aşağıdaki ikisi bu sitede gerçekten başımıza geldi.
Bunlardan biri başlık bağlantıları. Bir başlığa doğrudan link verebilmek için başlığın adresleşmesi gerekir ve hazır araçlar Türkçe harfleri ya atıyor ya bozuyordu. Kendi dönüştürücümüzü yazdık; artık ğ ü ş ı ö ç harfleri düzgün karşılıklarına çevriliyor ve her başlığın çalışan bir bağlantısı oluyor.
İkincisi daha sinsiydi. Kod bloklarının üstündeki dil etiketleri büyük harfe çevriliyor ve bu çevirme işini tarayıcı, sayfanın diline göre yapıyor. Sayfa Türkçe olduğu için tarayıcı Türkçe kuralını uyguluyordu: Switch kelimesi SWİTCH olarak çıkıyordu, noktalı İ ile. İngilizce olan etiketleri ayrıca işaretleyerek çözdük. Küçük bir ayrıntı, ama teknik bir metinde yanlış yazılmış bir terim okuru duraklatır.
Bilerek yapmadıklarımız
Bir siteyi neyle kurduğunuz kadar, neyi kurmamayı seçtiğiniz de o siteyi anlatır. Aşağıdakilerin hepsi bilinçli tercih:
- Ziyaretçiyi tanımaya çalışan üçüncü taraf ağı kurmuyoruz. Sitede ısı haritası, oturum kaydı, sohbet robotu ya da reklam ağı takip kodları yok. Dışarıdan script yükleyen tek alan adı var.
- Müşteri verisini yapay zekâya göndermiyoruz. Bir projede gördüğümüz yapılandırma, kayıt ya da kişisel veri modellere girmez. Gerekçesi ve sınırları yapay zekâ beyanında.
- İnsan okumadan içerik yayımlamıyoruz. Teknik rehberlerdeki komutlar kendi laboratuvarımızdaki gerçek makinelerde çalıştırılır; çalıştırılmadıysa yazılmaz.
- Çerez duvarı kurmuyoruz. İzin vermeden de siteyi okuyabilirsiniz. Onay penceresinde "kabul et" ile "reddet" aynı kolaylıkta durur; reddetmeyi zorlaştıran bir tasarım kullanmıyoruz.
- Görünmeyen şey için bant genişliği harcamıyoruz. Otomatik oynayan arka plan videosu, giriş animasyonu ve dekoratif kütüphane yok.
- Yapay zekâ tarayıcıları için ayrı bir dosya tutmuyoruz. Bir dönem yaygınlaşan bu öneriyi ölçtük: dosyayı koyan sitelerin neredeyse tamamına hiç istek gelmiyor ve arama motorları kullanmadıklarını açıkça söylüyor. Kaynağı, herkesin okuduğu sayfanın kendisini iyi yazmaya ayırıyoruz.
Güvenlik ve gizlilik tarafında durum
Site tamamen HTTPS üzerinden sunuluyor ve tarayıcıya siteyi bir daha asla şifresiz istememesini söyleyen kalıcı bir başlık gönderiyoruz. Ziyaretçiye açık tarafta çalışan bir uygulama katmanı olmadığı için, içerik yönetim panelimiz de sitenin kendisinden ayrı çalışıyor ve depoya erişim yetkisiyle korunuyor.
Tarayıcıya ek koruma veren başlıkları da gönderiyoruz: site başka bir sitenin çerçevesi içine yerleştirilemiyor, böylece görünmez bir katmanın altında tıklatılamıyor. Tarayıcı dosyaların türünü tahmin etmeye çalışmıyor, başka bir siteye geçerken adresin yalnız alan adı kısmı paylaşılıyor ve kamera, mikrofon, konum gibi cihaz izinleri sitede tamamen kapalı.
Bunlardan önemlisi de tamamlandı: artık tarayıcıya sayfada hangi betiklerin çalışmasına izin verildiğini tek tek söylüyoruz. Bizim kendi betiklerimizin her biri dijital parmak iziyle tanınıyor; listede olmayan bir kod, sayfaya bir şekilde girse bile çalışmaz. Sayfanın veri gönderebileceği adresler de aynı şekilde sayılı.
Bu listeyi elle tutmuyoruz, çünkü elle tutulan liste eskir: bir betiğe dokunduğumuz anda dijital parmak izi değişir ve listede kalan eski iz o betiği sessizce çalışmaz hâle getirir. Onun yerine liste her yayında yeniden hesaplanıyor ve tutmuyorsa yayın durur. Yani bu korumanın sessizce bozulması mümkün değil; bozulursa site yayına çıkmaz.
Bunu yazdığımız gün kendi yayınımız tam bu yüzden durdu: ölçüm
betiklerimizden biri ortamdan ortama değişiyor, liste tutmuyordu.
Aynı durumda yayın şu satırla kesilir ve site canlıya çıkmaz:
csp-uret: BETIK POLITIKASI EKSIK, build durduruldu.
Sebebini bulup düzeltene kadar da çıkmadı. Bir korumanın işe
yaradığını, yolunda gittiği günler değil, yolunda gitmediği gün
gösterir.
Sitede bir açık ya da zafiyet fark ederseniz bize bildirebilirsiniz. Hangi adrese yazacağınız, neyi kapsama aldığımız, bildiriminize neleri eklemenizin işimizi kolaylaştırdığı ve sonrasında ne yaptığımız güvenlik bildirimi sayfasında yazılı.
Bu sayfanın komşuları
Kolofon, sitenin şeffaflık sayfalarından biri. Diğerleri belirli konuları ayrıntısıyla ele alıyor:
- Site Künyesi Son yapımın kaydı, kurulu sürümler ve envanter. Tamamı otomatik hesaplanır.
- Erişilebilirlik Neyi hedefliyoruz, nerede eksiğimiz var, nasıl bildirirsiniz.
- Güvenlik Bildirimi Bir açık bulursanız bize nasıl ulaşırsınız.
- Yapay Zekâ Beyanı Yapay zekâyı nerede kullanıyoruz, neyi asla ona bırakmıyoruz.
- KVKK Aydınlatma Metni Hangi veriyi neden işliyoruz.
- Çerez Politikası Hangi çerez ne yapıyor, izni nasıl geri alırsınız.
Bir yanlış mı gördünüz?
Bu sayfadaki her sayı doğrulanabilir olsun diye yazıldı; tarayıcınızın geliştirici araçlarını açıp hepsini sınayabilirsiniz. Tutmayan bir şey görürseniz bize yazın: düzeltir, gerekiyorsa düzeltmeyi sayfada belirtiriz. Aynı gözle bakmamızı istediğiniz bir altyapınız varsa, konuşmaya da açığız.
Bu sayfa hakkında
Bu kolofon 6 Eylül 2026'da yazıldı. Sayfadaki rakamlar iki ayrı kaynaktan geliyor ve ikisini ayırmak önemli: ağ ölçümleri (kilobayt ve milisaniye değerleri) canlı siteden o tarihte elle alındı, görsel sayıları ise her yapımda dosyalar yeniden sayılarak kendiliğinden yenileniyor. Yani ilk grup zamanla bayatlayabilir ve yeniden ölçülmesi gerekir, ikinci grup bayatlamaz. Sitenin kurulumu değiştikçe bu sayfa da güncellenir; güncel envanterin tamamı site künyesi sayfasında.