Konseptimiz

İzlediğimiz yazılım geliştirme standartları

Yazılımı nasıl tasarladığımızı, yazdığımızı, test ettiğimizi, yayına aldığımızı ve koruduğumuzu, izlediğimiz uluslararası standartlar ve yöntemlerle anlatıyoruz. Her maddenin yanında resmi kaynağına bağlantı var.

Uyguladığımızı söylediğimiz her maddenin kanıtı bu sitenin kaynak kodunda, yapılandırmasında ya da testlerinde duruyor; uygulamanın nasıl olduğunu maddenin altında yazıyoruz. Kanıtı henüz olmayan maddeleri yalnızca başvuru kaynağı olarak gösteriyoruz.

Süreç ve kalite

Bir işin ne zaman bittiğini, nasıl incelendiğini ve nasıl belgelendiğini belirleyen yöntemler.

  • Bitti tanımı (Definition of Done)

    Uyguluyoruz

    Bir işin bitmiş sayılması için doğru olması gerekenleri açıkça yazan ortak tanım.

    Nasıl uyguluyoruz Her değişiklikten önce aynı kontrol çalışır: şablon, YAML ve servis kapsayıcısı denetimi, statik analiz, testler ve canlı sayfa kontrolü. Biri geçmezse iş bitmemiştir.

    Resmi kaynak: Bitti tanımı (Definition of Done) (yeni sekmede açılır)
  • Kod olarak belge (Docs as code)

    Uyguluyoruz

    Belgeler depoda düz metin olarak durur ve kodla aynı incelemeden geçer.

    Nasıl uyguluyoruz Mimari kararlar, modül belgeleri, yayın adımları ve iş planları depoda Markdown olarak tutuluyor ve kodla aynı değişiklikte güncelleniyor.

    Resmi kaynak: Kod olarak belge (Docs as code) (yeni sekmede açılır)
  • Kod incelemesi

    Uyguluyoruz

    Her değişiklik birleştirilmeden önce yazarından başka biri tarafından okunur.

    Nasıl uyguluyoruz Değişiklikler yazılı bir inceleme listesinden geçiyor; bir kısmı GitLab birleştirme isteğiyle birleştiriliyor. Tek geliştiricili işlerde inceleme araç destekli yapılıyor, ikinci bir kişi tarafından değil.

    Resmi kaynak: Kod incelemesi (yeni sekmede açılır)
  • Çevik Yazılım Geliştirme Manifestosu

    Uyguluyoruz

    Yinelemeli ve iş birliğine dayalı teslim için dört değer ve on iki ilke.

    Nasıl uyguluyoruz İşi küçük paketler halinde yayına alıyor, sonucu canlı sistemde ölçüyor ve her aşamada proje sahibinin kararlarını yazılı tutuyoruz.

    Resmi kaynak: Çevik Yazılım Geliştirme Manifestosu (yeni sekmede açılır)
  • Diátaxis belge çerçevesi

    Uyguluyoruz

    Belgeleri öğretici, nasıl yapılır, başvuru ve açıklama olarak dört türe ayıran çerçeve.

    Nasıl uyguluyoruz Kararların gerekçesi, modül başvuru belgeleri ve adım adım yayın rehberleri ayrı yerlerde duruyor; belgeler türe göre etiketli değil ve öğretici türünde belge yok.

    Resmi kaynak: Diátaxis belge çerçevesi (yeni sekmede açılır)
  • ISO/IEC 25010:2023 ürün kalite modeli

    Başvuru kaynağı

    Yazılım kalitesini işlevsel uygunluktan güvenliğe ve bakım kolaylığına kadar dokuz özellikte tanımlayan model.

    Resmi kaynak: ISO/IEC 25010:2023 ürün kalite modeli (yeni sekmede açılır)

Mimari ve tasarım

Uygulamanın parçalarını ve dış sistemlerle bağlantısını nasıl kurduğumuz.

  • On İki Faktörlü Uygulama (The Twelve-Factor App)

    Uyguluyoruz

    Taşınabilir servisler için on iki kural: yapılandırma ortamda, derleme, sürüm ve çalıştırma ayrı, geliştirme ile canlı ortam aynı.

    Nasıl uyguluyoruz Yapılandırma ortam değişkenlerinden okunuyor, paket bir kez derlenip yayına alınıyor ve geliştirme, test ve canlı ortam aynı PHP sürümünü kullanıyor. Tek bilinçli istisna: loglar sunucu yapısı gereği dosyaya yazılıyor.

    Resmi kaynak: On İki Faktörlü Uygulama (The Twelve-Factor App) (yeni sekmede açılır)
  • Mimari karar kayıtları (ADR)

    Uyguluyoruz

    Bağlamı, kararı ve sonuçlarını anlatan, kodun yanında tutulan kısa ve numaralı belgeler.

    Nasıl uyguluyoruz Teknoloji yığını, yazı tipleri, yayın hattı, pazar bazlı yerelleştirme ve dil politikası gibi kararlar numaralı karar kayıtları olarak depoda duruyor.

    Resmi kaynak: Mimari karar kayıtları (ADR) (yeni sekmede açılır)
  • Altıgen mimari (portlar ve adaptörler)

    Uyguluyoruz

    Uygulamanın çekirdeği dış dünyayla yalnızca portlar üzerinden konuşur; e-posta, HTTP ve dış servisler için adaptörler bu portları uygular.

    Nasıl uyguluyoruz E-posta, CRM ve bot doğrulaması için portlar ve onları uygulayan adaptörler kullanıyoruz; bağımlılık kuralını denetleyen bir test henüz yok.

    Resmi kaynak: Altıgen mimari (portlar ve adaptörler) (yeni sekmede açılır)
  • Temiz mimari (Clean Architecture)

    Uyguluyoruz

    Bağımlılıklar iş kurallarına doğru içeri bakar; çatı ve giriş çıkış işleri kenarda kalır.

    Nasıl uyguluyoruz Girdiler ve sonuçlar değiştirilemez veri nesneleriyle taşınıyor, iş mantığını yürüten servisler HTTP isteğini bilmiyor.

    Resmi kaynak: Temiz mimari (Clean Architecture) (yeni sekmede açılır)
  • HTTP anlamları (RFC 9110) ve 429 Too Many Requests (RFC 6585)

    Uyguluyoruz

    HTTP yöntemleri, durum kodları, içerik anlaşması ve Retry-After gibi başlıklar.

    Nasıl uyguluyoruz İletişim formu her sonuç için doğru durum kodunu döner: 200, 303, 403, 422, 503 ve Retry-After ile 429; dış servisin Retry-After başlığına da uyuyoruz.

    Resmi kaynak: HTTP anlamları (RFC 9110) ve 429 Too Many Requests (RFC 6585) (yeni sekmede açılır)
  • Zaman aşımı, geri çekilmeli yeniden deneme ve kuyruk

    Uyguluyoruz

    Uzak çağrıların zaman aşımı vardır, başarısız çağrı artan aralıklarla yeniden denenir ve iş bu arada bir kuyrukta korunur.

    Nasıl uyguluyoruz CRM çağrısının beş saniyelik zaman aşımı var; geçici hatada gönderim kuyruğa alınıyor ve zamanlanmış bir görevle yeniden deneniyor. E-posta ve CRM birbirinden bağımsız çalışıyor.

    Resmi kaynak: Zaman aşımı, geri çekilmeli yeniden deneme ve kuyruk (yeni sekmede açılır)
  • OAuth 2.0 (RFC 6749)

    Uyguluyoruz

    Sunucu tarafındaki bir istemcinin kimlik bilgileriyle erişim belirteci aldığı yetkilendirme çerçevesi.

    Nasıl uyguluyoruz Bu site ONLINEKURUM API'sine istemci kimlik bilgileriyle bağlanıyor, aldığı belirteci süresi boyunca saklıyor ve 401 yanıtında bir kez yeniliyor.

    Resmi kaynak: OAuth 2.0 (RFC 6749) (yeni sekmede açılır)
  • REST ve Richardson olgunluk modeli

    Uyguluyoruz

    Önbelleğe alınabilir kaynaklar üzerinde durumsuz istemci sunucu etkileşimi; model, HTTP API'lerini olgunluk düzeyine göre sınıflar.

    Nasıl uyguluyoruz Site durumsuz çalışıyor, GET sayfaları önbelleğe alınabiliyor ve form tek bir kaynağa her sonuç için ayrı durum koduyla yanıt veriyor.

    Resmi kaynak: REST ve Richardson olgunluk modeli (yeni sekmede açılır)
  • Alan güdümlü tasarım (Domain-Driven Design)

    Uyguluyoruz

    Yazılımı ortak bir dil, değer nesneleri ve açık sınırlarla iş alanının modeli üzerine kurmak.

    Nasıl uyguluyoruz Sınıflarımızı iş alanının adlarıyla adlandırıyor, dil gibi kavramları değer nesnesi olarak modelliyoruz; site tek ve küçük bir bağlam olduğu için ayrı sınırlar yok.

    Resmi kaynak: Alan güdümlü tasarım (Domain-Driven Design) (yeni sekmede açılır)
  • Anlamsal sürümleme (Semantic Versioning 2.0.0)

    Uyguluyoruz

    Parçaları uyumsuz değişiklik, yeni özellik ya da düzeltme anlamına gelen MAJOR.MINOR.PATCH numaraları.

    Nasıl uyguluyoruz Bağımlılıkları anlamsal sürüm kısıtlarıyla tanımlıyoruz; sitenin kendisi sürüm etiketi taşımıyor.

    Resmi kaynak: Anlamsal sürümleme (Semantic Versioning 2.0.0) (yeni sekmede açılır)

Kod kalitesi ve kod stili

Kodun okunur, tutarlı ve tip güvenli kalmasını sağlayan standartlar ve araçlar.

  • PHP'de katı tip denetimi (strict_types)

    Uyguluyoruz

    declare(strict_types=1) sessiz tip dönüşümünü TypeError hatasına çevirir.

    Nasıl uyguluyoruz Uygulama ve test kodundaki her sınıf dosyası, çatının Kernel sınıfı hariç, katı tip denetimiyle başlıyor ve inceleme listesi bunu kontrol ediyor.

    Resmi kaynak: PHP'de katı tip denetimi (strict_types) (yeni sekmede açılır)
  • PHPStan ile statik analiz

    Uyguluyoruz

    Kodu çalıştırmadan, kural düzeylerine göre ne kadar sıkı denetleneceğini belirleyen analiz.

    Nasıl uyguluyoruz PHPStan 6. düzeyde uygulama, test ve yapılandırma kodunu tarıyor; her değişiklikten önce ve sürekli entegrasyonda çalışıyor.

    Resmi kaynak: PHPStan ile statik analiz (yeni sekmede açılır)
  • PER Coding Style 3.0 (PSR-12'nin devamı)

    Uyguluyoruz

    PHP-FIG'in, PSR-12'nin yerini alan ve Symfony'nin kod standardının dayandığı yaşayan biçim standardı.

    Nasıl uyguluyoruz Kodu bu stille yazıyoruz: önce katı tip bildirimi, EditorConfig ile dört boşluk, Symfony alışkanlıkları. Otomatik bir biçim denetleyicisi henüz yok, yani standart uygulanıyor ama zorunlu kılınmıyor.

    Resmi kaynak: PER Coding Style 3.0 (PSR-12'nin devamı) (yeni sekmede açılır)
  • PSR-4 otomatik yükleme

    Uyguluyoruz

    Bir ad alanı önekini bir klasöre eşleyerek sınıfın tam adından bulunmasını sağlar.

    Nasıl uyguluyoruz Uygulama ve test sınıfları Composer üzerinden PSR-4 ile yükleniyor.

    Resmi kaynak: PSR-4 otomatik yükleme (yeni sekmede açılır)
  • Symfony en iyi uygulamaları

    Uyguluyoruz

    İnce controller, iş mantığı için servis, yönlendirme için öznitelik ve altyapı için ortam değişkeni öneren resmi rehber.

    Nasıl uyguluyoruz Controller eylemleri yirmi satırın altında kalıyor, yönlendirmeler öznitelikle tanımlı ve altyapı ayarları ortam değişkenlerinden geliyor.

    Resmi kaynak: Symfony en iyi uygulamaları (yeni sekmede açılır)
  • SOLID ilkeleri

    Uyguluyoruz

    Tek sorumluluk, açık kapalı, Liskov yerine geçme, arayüz ayrımı ve bağımlılığın tersine çevrilmesi.

    Nasıl uyguluyoruz Servisler tek bir iş yapıyor ve e-posta, CRM, bot doğrulaması ve dil ayarları gibi dış bağımlılıklara arayüz üzerinden bağlanıyor; bunu denetleyen bir mimari testi yok.

    Resmi kaynak: SOLID ilkeleri (yeni sekmede açılır)
  • CSS için BEM adlandırması

    Uyguluyoruz

    Blok, eleman ve değiştirici adlarıyla stili tek bir bileşene bağlayan adlandırma yöntemi.

    Nasıl uyguluyoruz Bileşenlerimiz BEM ile adlandırılıyor ve bir test, şablonlarda kullanılan her sınıfın bir stil dosyasında tanımlı olduğunu denetliyor.

    Resmi kaynak: CSS için BEM adlandırması (yeni sekmede açılır)
  • EditorConfig

    Uyguluyoruz

    Karakter kümesini, girintiyi ve satır sonlarını her düzenleyicide aynı tutan dosya.

    Nasıl uyguluyoruz Depodaki EditorConfig dosyası UTF-8, LF satır sonu, dört boşluk girinti ve dosya sonunda yeni satır kuralını tanımlıyor.

    Resmi kaynak: EditorConfig (yeni sekmede açılır)
  • PSR-1 temel kodlama standardı

    Uyguluyoruz

    PHP dosyaları için temel kurallar: dosya başına bir bildirim, sınıf ve yöntem adlandırması, bildirimin yanında yan etki olmaması.

    Nasıl uyguluyoruz Uygulama ve test kodu bu kurallarla yazılıyor; otomatik bir denetleyici yok.

    Resmi kaynak: PSR-1 temel kodlama standardı (yeni sekmede açılır)
  • PSR-3 Logger Interface

    Uyguluyoruz

    Servislerin bir kütüphaneye değil ortak bir arayüze bağlanmasını sağlayan log arayüzü.

    Nasıl uyguluyoruz Servisler log için PSR-3 arayüzünü alıyor; iletişim kayıtları ayrı bir kanalda tutuluyor.

    Resmi kaynak: PSR-3 Logger Interface (yeni sekmede açılır)
  • PSR-11 Container Interface

    Uyguluyoruz

    Bağımlılık enjeksiyonu kapsayıcıları için ortak arayüz.

    Nasıl uyguluyoruz Servisler Symfony kapsayıcısından kurucu üzerinden otomatik bağlanıyor.

    Resmi kaynak: PSR-11 Container Interface (yeni sekmede açılır)
  • Temiz kod (Clean Code)

    Uyguluyoruz

    Anlamlı adlar, küçük fonksiyonlar, tekrarsız kod ve neyi değil nedeni anlatan yorumlar.

    Nasıl uyguluyoruz Değiştirilemez servisler ve veri nesneleri, niyetini söyleyen adlar ve kararların gerekçesini kaydeden sınıf yorumları kullanıyoruz; bunu ölçen bir araç yok.

    Resmi kaynak: Temiz kod (Clean Code) (yeni sekmede açılır)

Test

Bir değişikliğin bir şeyi bozmadığını nasıl kanıtladığımız.

  • Test piramidi

    Uyguluyoruz

    Çok sayıda hızlı birim testi, daha az entegrasyon testi ve çok az uçtan uca test.

    Nasıl uyguluyoruz Testler birim ve entegrasyon olarak iki takımda çalışıyor; bunların üstünde canlı sayfalara giden tek bir HTTP kontrolü var.

    Resmi kaynak: Test piramidi (yeni sekmede açılır)
  • xUnit testleri ve uygulama testleri (PHPUnit)

    Uyguluyoruz

    Hazır veriler ve doğrulamalarla otomatik testler; uygulama testleri istekleri gerçek çekirdek üzerinden gönderir.

    Nasıl uyguluyoruz PHPUnit kullanımdan kalkma uyarısında, bildirimde ve uyarıda testi başarısız sayıyor; sayfalar entegrasyon testlerinde gerçek çekirdek üzerinden iki pazarda da üretiliyor.

    Resmi kaynak: xUnit testleri ve uygulama testleri (PHPUnit) (yeni sekmede açılır)
  • Mimari uygunluk fonksiyonları (koruyucu testler)

    Uyguluyoruz

    Kod değiştikçe bir mimari ya da proje kuralını doğru tutan otomatik kontroller.

    Nasıl uyguluyoruz Stil sınıflarının kapsamı, metin kuralları, iki pazarın çeviri eşitliği, İngilizce adresler, sayfa önbelleği ve içerik güvenlik politikası için koruyucu testler var; stil sınıfları, metin kuralları, çeviri eşitliği ve İngilizce adresler için olan koruyucu testler kendi kontrolünün başarısız olabildiğini de kanıtlıyor.

    Resmi kaynak: Mimari uygunluk fonksiyonları (koruyucu testler) (yeni sekmede açılır)
  • Duman testi (smoke test)

    Uyguluyoruz

    Bir yapının ana işlevinin çalıştığını, başka bir şey test edilmeden önce gösteren küçük kontrol kümesi.

    Nasıl uyguluyoruz Yerelde ve her yayından sonra canlıda aynı adres listesi çağrılıyor; her sayfa yalnızca PHP'nin ürettiği bir işareti taşımak zorunda.

    Resmi kaynak: Duman testi (smoke test) (yeni sekmede açılır)
  • Test güdümlü geliştirme (TDD)

    Uyguluyoruz

    Önce başarısız bir test yazmak, sonra onu geçirmek ve ardından kodu düzenlemek.

    Nasıl uyguluyoruz Her değişiklik kendi testleriyle birlikte geliyor ve her servisin ve veri nesnesinin testi var; testin kodun önünde yazıldığı ayrıca kayıt altında değil.

    Resmi kaynak: Test güdümlü geliştirme (TDD) (yeni sekmede açılır)
  • Davranış güdümlü geliştirme (BDD)

    Uyguluyoruz

    Davranışı iş dilinde anlatmak ve testleri bu anlatımdan türetmek.

    Nasıl uyguluyoruz Testlerimizi davranışı anlatan adlarla yazıyoruz; Behat ya da Gherkin kullanmıyoruz.

    Resmi kaynak: Davranış güdümlü geliştirme (BDD) (yeni sekmede açılır)
  • Erişilebilirlik değerlendirmesi (WCAG-EM)

    Uyguluyoruz

    Bir sitenin WCAG'ye ne kadar uyduğunu denetlemek için yöntem ve araçlar.

    Nasıl uyguluyoruz Lighthouse erişilebilirlik puanını ölçüp sonucu (100) kaydettik; sürekli entegrasyonda çalışan otomatik bir erişilebilirlik testi henüz yok.

    Resmi kaynak: Erişilebilirlik değerlendirmesi (WCAG-EM) (yeni sekmede açılır)

Yayın ve işletim

Kodun depodan canlı sisteme nasıl ulaştığı ve orada nasıl çalıştığı.

  • Sürekli entegrasyon

    Uyguluyoruz

    Her gönderim otomatik olarak derlenir ve ortak dala karşı test edilir.

    Nasıl uyguluyoruz Her dalda sürekli entegrasyon işi denetimleri, statik analizi ve testleri çalıştırıyor.

    Resmi kaynak: Sürekli entegrasyon (yeni sekmede açılır)
  • Sürekli teslim

    Uyguluyoruz

    Yazılım her zaman yayına hazırdır; tek bir paket bir kez derlenir ve otomatik bir hatla ilerler.

    Nasıl uyguluyoruz Paket bir kez derleniyor ve canlıya o paket gidiyor; yayın betikleri sahte bir sunucuda uçtan uca prova edilebiliyor.

    Resmi kaynak: Sürekli teslim (yeni sekmede açılır)
  • Kesintisiz yayın ve geri alma

    Uyguluyoruz

    Yeni sürüm canlı sürümün yanında hazırlanır, trafik tek bir bağlantı değişimiyle geçer, geri alma da geri dönüş değişimidir.

    Nasıl uyguluyoruz Her sürüm ayrı bir klasörde hazırlanıyor ve tek bir bağlantı değişimiyle canlıya geçiyor; son beş sürüm saklanıyor ve geri alma tek adımlık bir iş.

    Resmi kaynak: Kesintisiz yayın ve geri alma (yeni sekmede açılır)
  • Conventional Commits 1.0.0

    Uyguluyoruz

    Commit başlıklarının tür ve kapsam taşıdığı, geçmişi insanlar ve araçlar için okunur kılan kural.

    Nasıl uyguluyoruz Commit başlıklarımız feat, fix, docs ve test gibi türlerle yazılıyor; bunu zorlayan bir kanca yok.

    Resmi kaynak: Conventional Commits 1.0.0 (yeni sekmede açılır)
  • Özellik anahtarları (feature toggles)

    Uyguluyoruz

    Davranışın yayınla değil yapılandırmayla açılıp kapatılması.

    Nasıl uyguluyoruz Sayfa önbelleği, bot doğrulaması ve CRM bağlantısı ortam değişkenleriyle açılıp kapanıyor; önbellek ilk kez kapalı yayına alındı ve test edildikten sonra açıldı.

    Resmi kaynak: Özellik anahtarları (feature toggles) (yeni sekmede açılır)
  • Kod olarak altyapı ve konteynerler

    Uyguluyoruz

    Ortamların sürümlenen dosyalarla tanımlanması ve elle değil araçlarla kurulması.

    Nasıl uyguluyoruz Geliştirme ortamı Docker dosyalarıyla, yayın hattı sürümlenen bir yapılandırmayla tanımlı ve sunucuda dosya elle düzenlenmiyor; barındırma hesabının ilk kurulumu ise elle yapıldı.

    Resmi kaynak: Kod olarak altyapı ve konteynerler (yeni sekmede açılır)
  • Git-flow dallanma modeli

    Uyguluyoruz

    Özelliklerin bir geliştirme dalında toplandığı, sürümlerin ana dalda tutulduğu dallanma modeli.

    Nasıl uyguluyoruz Özellik dalları geliştirme dalına, geliştirme dalı ana dala birleşiyor; sürüm ve acil düzeltme dalları ile sürüm etiketleri kullanmadığımız için modelin sadeleştirilmiş halini izliyoruz.

    Resmi kaynak: Git-flow dallanma modeli (yeni sekmede açılır)
  • GitOps ilkeleri 1.0

    Uyguluyoruz

    İstenen durum Git'te tanımlanır ve otomatik uygulanır; canlıya giden tek yol Git'tir.

    Nasıl uyguluyoruz Ana dala gönderim yayına almanın tek yolu ve sunucu yapılandırması depoda sürümleniyor; sunucuyu Git'e göre sürekli eşitleyen bir ajan yok.

    Resmi kaynak: GitOps ilkeleri 1.0 (yeni sekmede açılır)
  • Site güvenilirlik mühendisliği (SRE)

    Uyguluyoruz

    Servisleri hizmet düzeyi hedefleri, izleme, olay yönetimi ve suçlamasız değerlendirmelerle işletmek.

    Nasıl uyguluyoruz Yayından sonra sağlık kontrolü ve geri alma yolu, saklama süreli dönen loglar kullanıyoruz; kesintisizlik izlemesi ve hizmet düzeyi hedefi tanımlı değil.

    Resmi kaynak: Site güvenilirlik mühendisliği (SRE) (yeni sekmede açılır)

Güvenlik ve gizlilik

Uygulamayı, kullanıcının verisini ve yayın sürecini korumak için izlediğimiz rehberler ve yasal çerçeve.

  • İçerik güvenlik politikası (CSP Level 3)

    Uyguluyoruz

    Betik, stil ve çerçeve kaynaklarını listeleyerek sayfaya sızdırılan satır içi kodu engelleyen başlık.

    Nasıl uyguluyoruz Canlı politika unsafe-inline içermiyor, satır içi stil ve olay işleyicisi kullanmıyoruz ve bir test politikayı koruyor.

    Resmi kaynak: İçerik güvenlik politikası (CSP Level 3) (yeni sekmede açılır)
  • HTTP güvenlik başlıkları ve HSTS

    Uyguluyoruz

    Her yanıtta Strict-Transport-Security, X-Content-Type-Options, Referrer-Policy, Permissions-Policy ve frame-ancestors.

    Nasıl uyguluyoruz Bu başlıkların hepsi canlı sunucuda tanımlı ve HTTP istekleri kalıcı olarak HTTPS'e yönleniyor; yerel geliştirme de HTTPS ile çalışıyor.

    Resmi kaynak: HTTP güvenlik başlıkları ve HSTS (yeni sekmede açılır)
  • OWASP Cheat Sheet Series

    Uyguluyoruz

    CSRF önleme, girdi doğrulama, loglama ve sırlar gibi konularda kısa uygulama rehberleri.

    Nasıl uyguluyoruz Form, Origin kontrolü ve çift gönderimli çerezle durumsuz CSRF koruması kullanıyor; girdiler izin listesiyle doğrulanıp kontrol karakterlerinden temizleniyor, loglarda e-posta adresi maskeleniyor.

    Resmi kaynak: OWASP Cheat Sheet Series (yeni sekmede açılır)
  • İstek sınırlama ve otomasyona karşı koruma

    Uyguluyoruz

    İstek sınırları ve bot tuzakları formları kötüye kullanıma karşı korur.

    Nasıl uyguluyoruz İletişim formu IP başına on beş dakikada beş gönderimle sınırlı; gizli bir tuzak alanı ve bot doğrulaması da var ve kontrollerin sırası sınıf yorumunda yazılı.

    Resmi kaynak: İstek sınırlama ve otomasyona karşı koruma (yeni sekmede açılır)
  • En az yetki ilkesi

    Uyguluyoruz

    Her program ve kullanıcı yalnızca işinin gerektirdiği en küçük yetkiyle çalışır.

    Nasıl uyguluyoruz Yayın yalnızca sürekli entegrasyona ait kısıtlı bir anahtarla yapılıyor, canlı ortam sırları yalnızca sahibinin okuyabildiği bir dosyada duruyor ve yalnızca giriş noktası çalıştırılabiliyor.

    Resmi kaynak: En az yetki ilkesi (yeni sekmede açılır)
  • Sır yönetimi ve sır taraması

    Uyguluyoruz

    Sırlar depoya girmez, ortama göre ayrılır ve gönderimler sızıntıya karşı taranır.

    Nasıl uyguluyoruz Depodaki yapılandırma sır taşımıyor, canlı sırlar korumalı sürekli entegrasyon değişkenlerinde duruyor ve yayın hattında otomatik sır taraması çalışıyor.

    Resmi kaynak: Sır yönetimi ve sır taraması (yeni sekmede açılır)
  • Tasarımda ve varsayılan olarak gizlilik

    Uyguluyoruz

    Veri korumanın tasarıma baştan dahil edilmesi: en az veriyi toplamak, varsayılan olarak korumak.

    Nasıl uyguluyoruz Genel sayfalar çerez ve oturum kullanmıyor, analitik yalnızca izinden sonra yükleniyor ve iletişim kayıtları maskeli e-postayla sınırlı süre tutuluyor.

    Resmi kaynak: Tasarımda ve varsayılan olarak gizlilik (yeni sekmede açılır)
  • KVKK, 6698 sayılı Kişisel Verilerin Korunması Kanunu

    Uyguluyoruz

    Türkiye'nin aydınlatma yükümlülüğünü ve rıza kurallarını içeren kişisel veri kanunu.

    Nasıl uyguluyoruz Türkiye pazarında aydınlatma metni yayında ve form açık onay alıyor; metnin hukuki incelemesi bekleniyor.

    Resmi kaynak: KVKK, 6698 sayılı Kişisel Verilerin Korunması Kanunu (yeni sekmede açılır)
  • GDPR, (AB) 2016/679 sayılı Tüzük

    Uyguluyoruz

    Avrupa Birliği'nin hukuka uygunluk, veri en aza indirme, şeffaflık ve ilgili kişi hakları kurallarını içeren veri koruma tüzüğü.

    Nasıl uyguluyoruz İngilizce pazarda GDPR yapısında ayrı bir gizlilik bildirimi yayında ve bir test her pazarın kendi bildirimini taşıdığını denetliyor; hukuki inceleme bekleniyor.

    Resmi kaynak: GDPR, (AB) 2016/679 sayılı Tüzük (yeni sekmede açılır)
  • OWASP Top 10:2025

    Uyguluyoruz

    Web uygulamaları için en kritik on risk kategorisi.

    Nasıl uyguluyoruz Birkaç kategoriye karşı kontrolümüz var: erişim kısıtları, güvenlik başlıkları, doğrulama ve otomatik kaçırma, güvenlik logları. Listeyi rehber olarak izliyoruz; kategori kategori bir denetim belgesi yok.

    Resmi kaynak: OWASP Top 10:2025 (yeni sekmede açılır)
  • CWE Top 25 (2025)

    Uyguluyoruz

    CVE verilerine göre sıralanmış en tehlikeli 25 yazılım zayıflığı türü.

    Nasıl uyguluyoruz XSS'e karşı şablon motorunun otomatik kaçırmasını, CSRF'ye karşı token korumasını kullanıyoruz; listeyi rehber olarak izliyoruz, zayıflık eşlemesi yok.

    Resmi kaynak: CWE Top 25 (2025) (yeni sekmede açılır)
  • SLSA 1.2 (tedarik zinciri düzeyleri)

    Uyguluyoruz

    Yazılım tedarik zincirinde derleme kökeni ve kaynak bütünlüğü için düzeyler.

    Nasıl uyguluyoruz Paketler sürümlenen bir hatla barındırılan bir çalıştırıcıda derleniyor ve her paket hangi commit'ten geldiğini kaydediyor; köken belgesi üretmiyoruz ve düzey değerlendirmesi yapılmadı.

    Resmi kaynak: SLSA 1.2 (tedarik zinciri düzeyleri) (yeni sekmede açılır)
  • Çerez onayı (KVKK çerez rehberi ve ePrivacy Yönergesi)

    Uyguluyoruz

    Zorunlu olmayan çerezler ancak açık bir bilgilendirme ve onaydan sonra kullanılır.

    Nasıl uyguluyoruz Analitik çerezleri yalnızca "İzin ver" seçildikten sonra yükleniyor; onay ekranı pazarın kuralına göre gösteriliyor ve testlerle korunuyor.

    Resmi kaynak: Çerez onayı (KVKK çerez rehberi ve ePrivacy Yönergesi) (yeni sekmede açılır)
  • E-posta kimlik doğrulaması: SPF, DKIM ve DMARC

    Uyguluyoruz

    Alıcının gönderen alan adını doğrulamasını sağlayan DNS kayıtları.

    Nasıl uyguluyoruz Form e-postası kendi alan adımızdan gönderiliyor, yanıt adresi ziyaretçi oluyor; DNS kontrol listesi yayın belgesinde yazılı.

    Resmi kaynak: E-posta kimlik doğrulaması: SPF, DKIM ve DMARC (yeni sekmede açılır)

Web standartları, performans ve erişilebilirlik

Sayfanın her cihazda hızlı açılması, herkes tarafından kullanılabilmesi ve her dilde doğru anlaşılması için.

  • WCAG 2.2

    Uyguluyoruz

    Erişilebilir içerik için A, AA ve AAA düzeylerinde başarı ölçütleri.

    Nasıl uyguluyoruz Sayfaları bu ölçütlere göre kuruyoruz: içeriğe geç bağlantısı, sayfa dili, görünür odak ve azaltılmış hareket desteği; resmi bir uygunluk denetimi yapılmadı.

    Resmi kaynak: WCAG 2.2 (yeni sekmede açılır)
  • WAI-ARIA 1.2

    Uyguluyoruz

    Arayüzün değişen parçalarını yardımcı teknolojilere açan rol, durum ve özellikler.

    Nasıl uyguluyoruz Şablonlarda aria-labelledby, aria-describedby, aria-expanded, aria-controls, aria-live ve role="status" kullanıyoruz.

    Resmi kaynak: WAI-ARIA 1.2 (yeni sekmede açılır)
  • Core Web Vitals ve Lighthouse

    Uyguluyoruz

    LCP, INP ve CLS eşikleri ve bunları ölçen denetim aracı.

    Nasıl uyguluyoruz Lighthouse ölçümünü kaydettik (ana sayfa: mobilde 97, masaüstünde 100); yazı tiplerini önceden yüklüyor, betikleri ertelenmiş yüklüyor ve yalnızca kullanılan ikonları sunuyoruz.

    Resmi kaynak: Core Web Vitals ve Lighthouse (yeni sekmede açılır)
  • HTML Living Standard (anlamsal HTML)

    Uyguluyoruz

    Genel kapsayıcılar yerine anlam taşıyan main, nav, header, footer, section, article ve dialog öğeleri.

    Nasıl uyguluyoruz Sayfa iskeleti ve bileşenler anlamsal öğelerle kurulu, iletişim formunun pencereleri yerel dialog öğesi.

    Resmi kaynak: HTML Living Standard (anlamsal HTML) (yeni sekmede açılır)
  • Aşamalı geliştirme (progressive enhancement)

    Uyguluyoruz

    Çalışan HTML ile başlayıp CSS ve JavaScript'i olmasa da olur katmanlar olarak eklemek.

    Nasıl uyguluyoruz İletişim formu JavaScript olmadan da gönderiliyor ve sayfaya geri dönen bir yanıt alıyor; bunu bir test koruyor.

    Resmi kaynak: Aşamalı geliştirme (progressive enhancement) (yeni sekmede açılır)
  • Duyarlı web tasarımı

    Uyguluyoruz

    Akışkan bir düzen ve medya sorgularıyla tek sayfanın her ekrana uyması.

    Nasıl uyguluyoruz Sayfalar akışkan bir yazı ölçeği ve medya sorgularıyla kuruluyor; bir ölçümü mobilde ve masaüstünde ayrı ayrı alıp kaydettik.

    Resmi kaynak: Duyarlı web tasarımı (yeni sekmede açılır)
  • Dil ve yön bildirimi (W3C i18n)

    Uyguluyoruz

    Sayfanın dilini ve yazı yönünü bildirerek tarayıcının, ekran okuyucunun ve arama motorunun metni doğru işlemesi.

    Nasıl uyguluyoruz Her sayfa pazarının dilini ve yönünü html öğesinde taşıyor; bir test iki pazarın aynı çeviri anahtarlarına sahip olduğunu denetliyor.

    Resmi kaynak: Dil ve yön bildirimi (W3C i18n) (yeni sekmede açılır)
  • hreflang ve x-default

    Uyguluyoruz

    Arama motorlarına bir sayfanın her dil sürümünü ve varsayılan sürümü bildirmek.

    Nasıl uyguluyoruz Her sayfa iki pazardaki karşılığını ve varsayılanı hem sayfa başlığında hem site haritasında listeliyor; pazara göre değişen adreslerde de aynı sayfaya gidiyor.

    Resmi kaynak: hreflang ve x-default (yeni sekmede açılır)
  • HTTP önbelleği (RFC 9111) ve immutable (RFC 8246)

    Uyguluyoruz

    Cache-Control yönergeleri tarayıcıların ve ara sunucuların yanıtları güvenle yeniden kullanmasını sağlar.

    Nasıl uyguluyoruz Sürüm adlı dosyalar bir yıl ve immutable ile önbelleğe alınıyor; sayfa önbelleği dil kararına göre anahtarlanıyor ve her yayında temizleniyor.

    Resmi kaynak: HTTP önbelleği (RFC 9111) ve immutable (RFC 8246) (yeni sekmede açılır)
  • ARIA Authoring Practices Guide

    Uyguluyoruz

    Açılır kapanır bölüm, iletişim penceresi ve menü düğmesi gibi erişilebilir bileşen kalıpları.

    Nasıl uyguluyoruz Menü düğmesinde açılır kapanır kalıbını, formun pencerelerinde yerel dialog öğesini kullanıyoruz; klavye davranışı otomatik test edilmiyor.

    Resmi kaynak: ARIA Authoring Practices Guide (yeni sekmede açılır)
  • Kendi sunucumuzdan WOFF2 yazı tipleri

    Uyguluyoruz

    Web için sıkıştırılmış ve sitenin kendi kaynağından sunulan yazı tipi biçimi.

    Nasıl uyguluyoruz IBM Plex yazı tiplerini alt kümeler halinde kendi sunucumuzdan veriyoruz; bu kararın gerekçesi bir karar kaydında yazılı.

    Resmi kaynak: Kendi sunucumuzdan WOFF2 yazı tipleri (yeni sekmede açılır)
  • Dil etiketleri, BCP 47 (RFC 5646) ve ISO 3166 ülke kodları

    Uyguluyoruz

    tr ve en-US gibi etiketlerin söz dizimi ve iki harfli bölge kodları.

    Nasıl uyguluyoruz Pazarlar tr ve en etiketleriyle, yerel ayarlar tr_TR ve en_US ile tanımlı; tarayıcı dili testlerle denenen bir çözümleyiciyle okunuyor.

    Resmi kaynak: Dil etiketleri, BCP 47 (RFC 5646) ve ISO 3166 ülke kodları (yeni sekmede açılır)
  • Unicode CLDR yerel ayar verisi

    Uyguluyoruz

    Tarih, sayı ve adlar için yerel ayar verisi; ICU ve PHP'nin intl eklentisi bu veriyi kullanır.

    Nasıl uyguluyoruz PHP'nin intl eklentisi ve pazar bazlı yerel ayar verisi kullanılıyor; tarihler CLDR biçimlendirmesi yerine sabit kalıplarla yazılıyor.

    Resmi kaynak: Unicode CLDR yerel ayar verisi (yeni sekmede açılır)

Veri ve birlikte çalışabilirlik

Metnin, tarihin ve yapılandırılmış verinin sistemler arasında bozulmadan taşınması için.

Projenizi konuşalım

Ne yapmak istediğinizi birkaç cümleyle anlatın. İhtiyacınızı inceleyip nasıl ilerleyebileceğimizi size yazalım.