Teknoloji Seçimleri

Summary

Her katmanda az sayıda, olgun ve birlikte iyi çalışan araç seçildi. Temel ilke: boilerplate’i azalt, anlamı artır.

Bir Bakışta

KatmanSeçimNeden?
DilTypeScript (strict)Baştan sona tip güvenliği, IDE desteği, agresif refaktör
FrontendReact 18 + Vite 7Olgun ekosistem, sub-saniye yeniden derleme
StilTailwind CSS v4Hızlı prototipleme + tutarlı token sistemi
UI Kütüphanesishadcn/ui (Radix)Repo içinde yaşayan, fork edilebilir bileşenler
HaritaLeafletAçık kaynak, hafif, OSM dostu
Routerreact-router-dom v6Standart, tanıdık, yeterli
Formlarreact-hook-form + zodPerformanslı + tip-güvenli doğrulama
BackendHonoCloudflare-native, hızlı, minimal
Edge RuntimeCloudflare WorkersGlobal, ücretsiz katman, cold start yok
ÖnbellekCloudflare KVUç dağıtımlı, milisaniye okuma
DepolamaCloudflare R2S3-uyumlu, egress ücretsiz
MobilCapacitor 8Web kodunu native kabukta paketler
Lint/FormatBiome 1.9Hızlı (Rust), birleşik araç
TestVitest 2 workspacesÜç ayrı ortam; hepsi tek config
E2EPlaywrightModern, kararlı, paralel
EnvDevbox (Nix)Tekrarlanabilir geliştirme ortamı

Stratejik Kararlar

TypeScript — Strict Mode

Tüm proje strict TypeScript. Hiçbir yerde any yok, hata mesajları tip seviyesinde yakalanıyor. Geliştirici verimliliğini kat kat artırıyor.

Cloudflare Workers — Uç API

Geleneksel “API sunucusu” yerine Workers seçildi. Avantajlar:

  • Maliyet: Ücretsiz katmanda rahat çalışır.
  • Hız: Türkiye’deki kullanıcıya fiziksel olarak yakın uç düğümlerden servis.
  • Dayanıklılık: Cloudflare’ın altyapısı arkasında — tek sunucu yok.
  • Basitlik: DevOps ihtiyacı minimum; sadece wrangler deploy.

shadcn/ui — Fork Edilebilir Bileşenler

Klasik bir UI kütüphanesi (MUI, Chakra) yerine shadcn/ui seçildi:

  • Bileşenler repo içinde yaşar; kara kutu yok.
  • Radix ile erişilebilirlik hazır.
  • Tailwind token’ları ile markalaştırma kolay.
  • Upgrade politikası açık: CLI ile regenerate.

Karar ayrıntısı için geliştirici vault’unda: docs/decisions/ADR-002.

Capacitor — Tek Kod Tabanı

React Native ya da Flutter yerine Capacitor seçildi:

  • Paralel kod tabanı yok: UI’yi iki kez yazmak gerekmiyor.
  • Dağıtım hızı: Web’de yapılan her iyileştirme bir sonraki APK’da otomatik.
  • Native yetenekler: @capacitor/geolocation, @capacitor/share, vs. plugin ekosistemi yeterli.

Karar ayrıntısı için: docs/decisions/ADR-003.

Vitest Workspaces — Üç Test Ortamı

Tek bir test runner’da üç farklı ortam:

ProjeOrtamTest hedefi
frontendjsdomReact bileşenleri + sayfalar
nodenodePaylaşılan yardımcılar
backendworkerdHono route’ları, gerçek Cloudflare runtime

Bu ayrım, yanlış ortamda yanlış test yazılmasını engeller ve workerd ile koşan backend testleri gerçek üretim ortamına çok yakındır.

Biome — Lint + Format Tek Araçta

ESLint + Prettier yerine Biome (Rust ile yazılmış):

  • Tek yapılandırma dosyası
  • 10x+ hız farkı
  • Tek komutla hem lint hem format: biome check --write

Devbox — Tekrarlanabilir Ortam

devbox.json ile herkesin Nix paketleri üzerinden aynı araç sürümlerini kullanması garanti altına alınır: Node 22, JDK 21, Gradle, Wrangler, Android tools. “Benim makinemde çalışıyor” problemi yok.

Kasıtlı Olmayanlar

Bazı popüler teknolojiler bilinçli olarak seçilmedi:

TeknolojiNeden Değil?
Next.jsStatik SPA ihtiyacı için fazla karmaşık; Cloudflare Pages yeterli
Redux / ZustandUygulama yeterince küçük; Context + custom hooks bol
GraphQLREST tek yönlü veri akışı için yeterli; araç fazladan karmaşıklık getirirdi
FirebaseVendor lock-in; Cloudflare zaten tüm gereksinimleri karşılıyor
React NativeUI paritesi ve ekip maliyeti; Capacitor daha az sürtünme

Bağımlılık Disiplini

  • Her bağımlılık açıkça gerekçeli.
  • Güncelleme zamanı: devbox run install:all + devbox run typecheck && devbox run test.
  • Kritik yolda (örn. backend hot path) yeni bağımlılık eklerken CPU bütçesi kontrol edilir.

Devamı