Teknoloji
Saha Doküman’da kullanılan her teknoloji
Aşağıda uygulamanın her katmanında kullanılan teknolojiler, gerçekte çalışan sürümleriyle ve Saha Doküman’daki görevleriyle listelenir. Hiçbirini listeyi uzatmak için eklemedik.
Sürümler projenin paket kayıtlarından alınmıştır. Bunlar kullanılan tam sürümlerdir; Docker imajları da sabit bir sürüme bağlıdır.
Arka uç
Tek bir dağıtım birimi olan API: .NET 10 üzerinde, controller’sız Minimal API’lerle yazılmıştır.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| .NET / C# | 10 (SDK 10.0.300) | Sunucu tarafının tamamı C# ile .NET 10 üzerinde yazılmıştır; null-güvenli ve uyarıların hata sayıldığı bir derleme kullanılır. |
| ASP.NET Core Minimal APIs | 10.0 | Her uç nokta, özellik klasörü başına bir dosyada tanımlanan Minimal API’dir; controller kullanılmaz. |
| Microsoft.AspNetCore.OpenApi | 10.0.13 | API sözleşmesini OpenAPI 3.1 belgesi olarak üretir; web ve mobil modeller bu sözleşmeye göre yazılır. |
| Scalar.AspNetCore | 2.18.0 | Geliştirme ortamında API’yi denemek için etkileşimli başvuru arayüzü sunar (üretimde kapalıdır). |
| JWT Bearer | 10.0.13 | Erişim belirteçlerini doğrular; yenileme belirteçleri her kullanımda değişir. Roller belirtece konmaz, her istekte yetki motorundan okunur. |
| PasswordHasher | 10.0 | Parolalar ASP.NET Core’un PasswordHasher bileşeniyle karma (hash) olarak saklanır; düz parola tutulmaz. |
| Rate limiting | 10.0 | Giriş ve diğer hassas yollarda IP ve kullanıcı başına istek sınırı uygulanır; kaba kuvvet denemeleri hesabı kilitler. |
| Entity Framework Core | 10.0.13 | Veri erişimi ve şema değişiklikleri (migration) için nesne-ilişkisel eşleme katmanı. |
| Npgsql EF Core provider | 10.0.3 | EF Core’un PostgreSQL sağlayıcısı; PostgreSQL’e özgü tür ve indeksleri kullanır. |
| Markdig | 1.4.1 | Sayfa içeriği kısıtlı Markdown olarak saklanır; Markdig ile sözdizimi ağacında doğrulanır ve arama için düz metne çevrilir. |
| SkiaSharp | 4.153.1 | Yüklenen her görsel çözülüp yeniden kodlanır: konum ve EXIF üstverisi atılır, boyut sınırlanır, küçük resim üretilir. |
| DocumentFormat.OpenXml | 3.5.1 | Word dosyalarını içe aktarır, Word, Excel ve PowerPoint dosyalarından arama metni çıkarır ve Excel kullanıcı aktarımı şablonunu okur. |
| PdfPig | 0.1.16 | PDF dosyalarından arama metni çıkarır; sayfa numaralarını atıf için saklar. Bozuk PDF’lere karşı ayrı bir alt süreçte çalışır. |
| Serilog | 4.3.1 | Yapılandırılmış günlük dosyaları yazar; belirteçler, parolalar ve sorgu dizesi değerleri günlüğe girmeden maskelenir. |
| MailKit | 4.18.1 | Platformun e-posta kutusunu SMTP ile gönderir: yeni şirket yöneticisinin parola belirleme bağlantısı ve abonelik yenileme hatırlatmaları. |
| TimeProvider | .NET 10 | Tüm zaman okumaları TimeProvider üzerindendir; testlerde zaman sahte saatle denetlenir, veritabanındaki mikrosaniye hassasiyeti korunur. |
Veri ve arama
Tüm içerik, kayıt defterleri ve arama dizini PostgreSQL’dedir; arama için ayrı bir arama sunucusu gerekmez.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| PostgreSQL | 18.6 | Sayfalar, sürümler, kayıt defterleri, arama dizini, bilgi parçaları ve denetim kaydı için tek veri deposu; küme Türkçe (ICU tr-TR) sıralamayla kurulur. |
| tsvector + GIN | Tam metin arama, GIN indeksli tsvector sütunlarıyla yapılır; vektör C# tarafında, sorguyla aynı kelime kurallarıyla üretilir. | |
| TurkishNormalizer | Türkçe ve Arapça harfleri uzunluğu koruyan açık bir tabloyla normalleştirir; arama normalleştirmesi yalnızca sunucuda yapılır. | |
| ArabicWords | Arapça kelime biçimlerini (tanımlık ekleri gibi) çözerek “ال” takısız aramanın da bulmasını sağlar. | |
| Advisory locks | Eşzamanlı yayın ve dizinleme gibi işlemlerde işlem düzeyinde uygulama kilitleri kullanılır. | |
| xmin concurrency | Eşzamanlı düzenlemeler PostgreSQL’in xmin sütunuyla (iyimser eşzamanlılık) algılanır; sessizce üzerine yazılmaz. | |
| Append-only ledgers | Yayın olayları ve katkı denetimi kayıtları yalnızca eklenir; çalışma rolünün veritabanı hakları güncelleme ve silmeyi içermez. |
Yapay zekâ ve RAG
Anlamsal arama yerelde çalışır; yanıt üretimi isteğe bağlıdır ve yalnızca izinli alıntılarla yapılır.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| Ollama | 0.35.1 | Gömme modelini sunucuda yerel olarak çalıştırır; yalnızca iç ağdadır ve dışarıya açık portu yoktur. |
| bge-m3 | 1024 dim. | Çok dilli (Türkçe dahil) gömme modeli; her bilgi parçası için 1024 boyutlu bir vektör üretir. |
| Microsoft.Extensions.AI | 10.10.0 | Gömme üreticisi için soyutlama katmanı: üretimde Ollama, testlerde belirlenimci sahte üretici kullanılır. |
| OllamaSharp | 5.5.0 | Microsoft.Extensions.AI soyutlamasını yerel Ollama sunucusuna bağlayan istemci. |
| System.Numerics.Tensors | 10.0.13 | Bellek içi vektör dizininde SIMD hızlandırmalı nokta çarpımı ve norm hesapları yapar; yetki süzgeci puanlamadan önce uygulanır. |
| Hybrid retrieval + RRF | Vektör ve tam metin aramanın en iyi 40’ar sonucu Karşılıklı Sıra Birleştirme (RRF) ile birleştirilir; kural parçaları hafifçe öne alınır. | |
| Anthropic C# SDK | 12.58.0 | Asistanın yanıtlarını Claude API üzerinden akışlı olarak üretmek için resmi C# SDK’sı; hata türleri ve yeniden deneme davranışı tiplidir. |
| claude-sonnet-5-5 | default model | Varsayılan model claude-sonnet-5-5’tir; model ve çaba düzeyi yapılandırmadan değiştirilir, API anahtarı yalnızca yapılandırma/gizli anahtar deposundan okunur. |
| Citations + prompt caching | Alıntılar atıf özelliği açık belge blokları olarak gönderilir, böylece her ifade kaynak bloğa bağlanır; sistem istemi önbelleğe alınır. | |
| ModelContextProtocol.AspNetCore | 2.2.0 | Resmi MCP C# SDK’sı ile /mcp adresinde salt okunur bir MCP sunucusu: search_documentation, get_page ve list_rules araçları. |
| Retrieval API | Dış sistemler için POST /api/rag/retrieve: metin, atıf adresi, blok kimliği, sürüm ve tam kaynak bilgisiyle parçalar döner. | |
| Personal access tokens | Kapsamı, süresi ve iptali olan kişisel erişim anahtarları; veritabanında yalnızca özeti saklanır, her çağrı sahibinin yetkileriyle çalışır. |
Web
Uygulamanın web arayüzü; API sözleşmesinden üretilen tiplerle derlenir.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| React | 19.3.1 | Web arayüzü React 19 işlev bileşenleri ve hook’larla yazılmıştır. |
| TypeScript | 5.9.3 | Web projesi katı (strict) TypeScript ile yazılır; API tipleri sözleşmeden üretilir. |
| Vite | 8.3.4 | Web uygulamasının derleyicisi ve geliştirme sunucusu; API’yi yerelde vekil olarak bağlar. |
| Tailwind CSS | 4.3.3 | Arayüz stili Tailwind 4 ile yazılır; Arapça için sağdan sola uyumlu mantıksal yardımcı sınıflar kullanılır. |
| React Router | 7.18.4 | Web uygulamasındaki sayfa yönlendirmesi. |
| TanStack Query | 5.104.3 | Sunucu durumunu (listeler, sayfalar, yetkiler) önbelleğe alır ve yenileme ile iptali yönetir. |
| openapi-fetch | 0.17.0 | API’yi OpenAPI tipleriyle çağıran küçük, tip güvenli istemci. |
| openapi-typescript | 7.13.0 | docs/openapi.json sözleşmesinden TypeScript tiplerini üretir; sözleşme değişince derleme hata verir. |
| TipTap + @tiptap/markdown | 3.32.0 | Blok düzenleyicisinin zengin metin motoru; içeriği Markdown olarak okur ve yazar. |
| react-markdown + remark-gfm | 10.1.0 / 4.0.1 | İçeriği güvenli biçimde gösterir (ham HTML kabul edilmez); GFM tabloları ve görev listeleri desteklenir. |
| dnd-kit | 6.3.1 / 10.0.0 | Blokları sürükle-bırak ile yeniden sıralar. |
| lucide-react | 1.59.0 | Arayüzün simge kümesi. |
| sonner | 2.0.8 | Kaydedildi, gönderildi gibi geri bildirimleri bildirim balonları olarak gösterir. |
| diff | 9.0.0 | Sürüm geçmişinde iki sürüm arasındaki farkı hesaplar. |
Mobil
Android ve iOS için tek kod tabanı; web’de de çalışır (duman testleri için).
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| Flutter / Dart | 3.41.9 / 3.11 | Android ve iOS uygulamasını tek kod tabanından üretir (Flutter 3.41, Dart 3.11). |
| flutter_riverpod | 3.3.2 | Durum yönetimi: Notifier, AsyncNotifier ve Provider ile; kod üretimi kullanılmaz. |
| go_router | 17.5.0 | Mobil uygulamanın bildirimli sayfa yönlendirmesi. |
| dio | 5.11.1 | Tek HTTP istemcisi; yenileme belirtecini tek seferde (single-flight) yenileyen bir yetki ara katmanı içerir. |
| flutter_secure_storage | 11.2.0 | Oturum belirteçlerini işletim sisteminin güvenli deposunda (Keychain / Keystore) saklar. |
| flutter_markdown_plus | 1.0.12 | Sayfa içeriğini, tek bir AppMarkdown bileşeni arkasında Markdown olarak gösterir. |
| image_picker / file_picker | 1.2.4 / 13.1.0 | Fotoğraf ve dosya seçimi; yüklemeler bayt olarak (MultipartFile.fromBytes) gönderilir. |
| url_launcher | 6.3.3 | Bağlantı bloklarını ve dış adresleri tarayıcıda açar. |
| flutter_localizations + intl | 0.20.2 | Türkçe, Arapça (sağdan sola) ve İngilizce arayüz için yerelleştirme ve tarih/sayı biçimleri. |
| shared_preferences | 2.5.6 | Gizli olmayan kullanıcı tercihlerini saklar. |
Altyapı ve işletim
sahadoc.com tek bir Linux sunucuda Docker ile çalışır; şirketler ayrı veritabanı ve hizmet kapsayıcısı kullanır.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| Docker + Compose | Üretim yığını Docker Compose ile tanımlıdır: PostgreSQL, Ollama ve API ayrı kapsayıcılardır; veritabanı ve Ollama yalnızca iç ağda yer alır. | |
| nginx | 1.24 | TLS’i sonlandırır, www’yi ana alana yönlendirir; X-Forwarded başlıklarını kendisi yazar, erişim günlüğünde sorgu dizesi ve Authorization başlığı yer almaz. |
| Let's Encrypt | Ücretsiz TLS sertifikaları; şirket alt alanları için joker (wildcard) sertifika DNS doğrulamasıyla alınır. | |
| Multi-tenant hosting | SaaS’ta her şirket kendi veritabanı, dosya klasörü ve bağımlılık kapsayıcısıyla çalışır; şirket başına türetilen anahtarlar nedeniyle bir şirketin belirteci diğerinde geçmez. | |
| Backup + restore | Veritabanı ve dosyalar birlikte yedeklenir; geri yükleme betiği aynı birlikteliği korur. | |
| Verification jobs | Kayıt defteri zincirini ve dosya bütünlüğünü doğrulayan işler; SaaS’ta tüm şirket veritabanlarını dolaşır. | |
| Structured logs | Yapılandırılmış, günlük dönen ve gizli değerlerden arındırılmış günlük dosyaları; kapsayıcı günlükleri boyutla sınırlıdır. |
Kalite
Yetki ve gizlilik, hem testlerle hem de saldırgan bakışlı bir denetimle doğrulanır.
| Teknoloji | Sürüm | Saha Doküman’daki işi |
|---|---|---|
| xUnit v2 | 2.9.3 | Arka uç testlerinin çatısı (v2). |
| Shouldly | 4.3.0 | Okunabilir doğrulamalar; FluentAssertions ve Moq bilinçli olarak kullanılmaz. |
| NSubstitute | 6.2.0 | Birim testlerinde bağımlılıkları taklit eder. |
| Respawn | 7.0.0 | Entegrasyon testleri arasında veritabanını hızla temizler; her test koleksiyonu kendi veritabanını kullanır. |
| ASP.NET Core test host | 10.0.13 | API’yi bellek içinde ve gerçek PostgreSQL ile uçtan uca sınar. |
| FakeTimeProvider | 10.11.0 | Zamana bağlı davranışları (hatırlatmalar, oturum süreleri) belirlenimci olarak test eder. |
| Persona x endpoint matrix | Her uç nokta için persona × uç nokta tablosu: yetkisiz kişi 404 almalıdır; her yeni uç nokta tabloya eklenir. | |
| OpenAPI snapshot + JSON samples | OpenAPI belgesi anlık görüntü testidir; JSON örnekleri istemci testlerinin girdisidir; sözleşme bilerek değiştirilir. | |
| Vitest | 5.0.5 | Web testlerinin çalıştırıcısı. |
| Testing Library (React) | 16.3.3 | Bileşenleri kullanıcının gördüğü gibi sınar. |
| MSW | 3.0.3 | Web testlerinde API’yi ağ düzeyinde taklit eder. |
| flutter_test + mocktail | 1.0.5 | Mobil birim ve bileşen testleri; modeller docs/samples JSON örnekleriyle sınanır. |
| Red-team audit | Her sızıntı kanalı (arama, dosya, bildirim, asistan, API, MCP) yetkisiz kişilerle saldırgan gözle denetlenir ve iptal senaryoları sınanır. |
Bir isteğin yolculuğu
Bir kullanıcı arama yaptığında ya da asistana soru sorduğunda sırayla şunlar olur.
İstemci
Web veya mobil uygulama (ya da MCP ile dış bir araç) HTTPS isteği gönderir.
nginx
TLS sonlanır; istemci adresi ve şema başlıkları güvenilir biçimde yazılır.
Kimlik ve sınırlar
Belirteç doğrulanır, istek sınırı uygulanır, şirket (SaaS’ta alt alandan) belirlenir.
Yetki
Yetki motoru kullanıcının görebildiği kaynakları söyler; görünmeyen her şey 404’tür.
Veri ve arama
PostgreSQL’den tam metin ve vektör adayları çekilir, yetkiyle süzülür.
Yapay zekâ (isteğe bağlı)
Seçilen izinli parçalar yeniden denetlenir; açıksa Claude yanıtı kaynaklarla üretir.
Yanıt
Sonuç, hiçbir ara katmanda önbelleğe alınmadan, kaynak bilgisiyle istemciye döner.
- İstemci
- Servis
- Veri deposu
- Dış servis
- ana yol
- veri akışı
- arka planda
- yetkiye göre süzülür
İstemciler
- Web uygulaması — React 19
- Mobil uygulama — Flutter · Android / iOS
- Dış yapay zekâ — MCP · erişim anahtarı
Tek Saha Doküman uygulaması
- Saha Doküman API — .NET 10 · yetki motoru
- Asistan (RAG) — hibrit arama + kontrol
- Vektör üretimi — arka planda
Veri ve yapay zekâ
- PostgreSQL 18 — içerik · sürümler · kayıt defteri · bilgi parçaları + vektörler
- Ollama · bge-m3 — yerel gömme vektörleri
- Claude API — Anthropic · isteğe bağlı
Bir bilginin yolculuğu
Yazıldığı andan bulunduğu ana kadar: her adımın bir sahibi vardır ve yol üzerinde dört kontrol noktası bulunur.
- İstemci
- Kontrol noktası
- Servis
- Veri deposu
- Dış servis
- ana yol
- veri akışı
- arka planda
- yetkiye göre süzülür
Ekle
Taslak
Web veya mobil uygulamada yazılır, şablondan oluşturulur ya da Word’den aktarılır.
Katkı denetimi
Dil denetimi ve benzer bilgi kontrolü. Bilgi zaten varsa önce onu görürsünüz.
Kaydetmeden önce
Onayla
Değişiklik talebi
Katkı, notuyla birlikte departman yöneticisine gider.
Onay
Yönetici inceler, gerekirse düzeltir; onaylar ya da reddeder.
Yayından önce
Yayınla
Tek yayın servisi
Yeni sürüm, kimin eklediği ve kimin yayınladığı bilgisiyle birlikte yazılır.
Kayıt defteri
Yalnızca eklenir ve zincirleme özetle (hash) bağlıdır; kayıt yeniden yazılamaz.
Dizinle
Arama dizini
Hemen güncellenir; Türkçe, Arapça ve İngilizce aramaya hazırdır.
Bilgi parçaları
Bölümler, kurallar, tablolar ve dosya sayfaları kaynağını koruyan kısa alıntılara dönüşür.
Yerel vektörler
Vektörler sunucuda Ollama ile hesaplanır; metin dışarı çıkmaz.
Bul ve yanıtla
Arama
Yalnızca görebileceğiniz sayfalar; gizli olanlar sayı olarak bile görünmez.
Yetki filtresi
Asistan
Anlamsal ve tam metin sonuçları birleştirilir; şirket açtıysa yalnızca izinli alıntılar Claude’a gider ve cevap kaynaklarını gösterir.
Yeniden kontrol
Diğer yapay zekâ araçları
Kişisel erişim anahtarıyla MCP üzerinden, aynı yetkilerle.
Yeniden kontrol
Yol üzerindeki dört kontrol noktası
- Kaydetmeden önceHer ekleme ve değişiklik katkı denetiminden geçer.
- Yayından önceKatkıda bulunanın değişikliği ancak yönetici onaylayınca yayınlanır.
- Yetki filtresiHer sonuç ve her alıntı kullanıcının yetkilerine göre süzülür.
- Yeniden kontrolHer alıntı yapay zekâya gitmeden önce bir kez daha kontrol edilir.
Teknik soru mu var?
Mimariyi, kurulumu ve güvenlik denetimini birlikte inceleyelim.