Admin Portalı
Giriş:
Portal › Genel Bakış

Platform Teknik Özeti

Doktora Sor; hastaların doğrulanmış doktorlara KVKK uyumlu, uçtan-uca şifreli sorular sorabildiği, offline-first PWA tabanlı sağlık danışmanlık platformudur.

Son güncelleme: Haziran 2026 · Versiyon 1.0-MVP · Durum: Geliştirme
👥
Hedef MAU (MVP)
500
Pilot kullanıcı
🏥
Pilot Doktor
50
Doğrulanmış hekim
Aylık Soru Kap.
5.000
MVP senaryosu
💰
Tahmini Maliyet
$125
Aylık / düşük trafik
🔒
Şifreleme
AES-256
GCM · Client-side
API Latency p95
<500ms
SLO hedefi

Platform Katmanları

MİMARİ ÖZET
🌐
Sunum Katmanı
React + Vite PWA · IndexedDB offline cache · Workbox Service Worker · WebCrypto AES-256-GCM şifreleme · Offline-first tasarım
API & İş Mantığı
Firebase Functions v2 · Node.js 20 TypeScript · REST API · JWT RS256 Auth · Rate Limiting · 8 mikro-servis
🗄️
Veri Katmanı
Firestore NoSQL (MVP) · Firebase Storage · Realtime listeners · PostgreSQL RDS (scale-up) · Redis Cache
🔒
Güvenlik Katmanı
Google KMS · Firebase Auth + RBAC · App Check WAF · Immutable Audit Log · TLS 1.3 · KVKK/HIPAA kontrolleri
📡
Bildirim Katmanı
Firebase FCM push · SendGrid e-posta · Pub/Sub async queue · Retry mekanizması
📊
Gözlemlenebilirlik
Firebase Analytics · Crashlytics · CloudWatch Logs (scale) · Custom metrics · PagerDuty alerting

Sistem Mimari Akışı ve Bileşen Dağılımı

GÜVENLİ MİMARİ
MİMARİ GÜVENLİK AKIŞI // SIFIR BİLGİ GÜVENLİK MODELİ TLS 1.3 HTTPS AES-GCM Soru Paketi gRPC + IAM Write Firestore Sync Şifreli Yayın KMS API Envelope Key HASTA CLIENT (PWA) WebCrypto API Core PBKDF2 Key Gen AES-256-GCM ENC API GATEWAY & WAF Firebase Functions v2 App Check Token Ok JWT RS256 / Rate Limit DOKTOR CLIENT (PWA) Asymmetric Crypt ECDH / Private Key AES-256-GCM DEC FIRESTORE NOSQL Zero-Knowledge Storage payload: cipher_text KVKK Compliant Storage GOOGLE CLOUD KMS Envelope Encryption Wrapped Key Mgmt FIPS 140-2 L3 HSM İstemci Belleği (Açık Metin) Şifreli Veri Bölgesi (Sıfır Bilgi) Güvenli Kontrol Düzlemi (IAM/TLS) ACTIVE
MİMARİ BİLEŞEN YÜK DAĞILIMI (Trafik %)

PWA Dağıtım & Versiyon Kontrolü

CİHAZ & SÜRÜM DENETİMİ
SİSTEM BİLGİLERİ
Mevcut Uygulama Sürümü: v1.0.0
Dağıtım Sunucusu: turhanarge.xyz
Cihaz Algılama: Denetleniyor...
Veri Koruma Politikası: Aktif (Otomatik Yedekleme)
GÜNCELLEME SİMÜLATÖRÜ

Aşağıdaki buton ile turhanarge.xyz üzerinde yeni bir paket (v1.0.1) yayınlanmış gibi simüle edebilirsiniz. Sistem verilerinizi yedekleyecek, teknik yükleyici arayüzünü çalıştıracak ve sürümü güncelleyecektir.

MVP Öncesi Kritik Eylemler

ACİL
🔴
Audit Log Servisi — Sprint 1'e alKVKK m.12 gereği tüm kritik aksiyonlar loglanmalı (şu an Sprint 3'te planlanmış). 5 yıl immutable saklama.
🔴
Doktor Çift Doğrulama ZorunluTCK Kimlik No + Tıp Lisans No + Admin Onay üçlüsü olmadan hiçbir doktor aktif edilmemeli.
🔴
KVKK Aydınlatma Metni + Açık RızaHukuk danışmanı onaylı metin, kayıt akışında zorunlu. Onay tarihi + versiyonu DB'de saklanmalı.
WebCrypto Şifreleme Modülü — TamamlanmalıAES-256-GCM client-side şifreleme, tarayıcı WebCrypto API üzerinde üretim kalitesinde kodlanmalı.
Veri İşleme Sözleşmesi (DPA)Firebase ve AWS ile KVKK uyumlu DPA imzalanmalı. HIPAA BAA hazırlığı başlatılmalı.
Firebase Proje Kurulumu ve CI/CDGitHub Actions pipeline hazır. SAST + security scan dahil. Staging ve production ortamları ayrı.
TLS 1.3 + HTTPS-OnlyFirebase Hosting otomatik SSL. HSTS header, CSP, X-Frame-Options: DENY aktif.
Yönetim / Kullanıcı Yönetimi

Kullanıcı Yönetimi

Platforma kayıtlı tüm hasta ve doktorları denetleyin. KVKK/HIPAA uyumluluğu kapsamında uygunsuz içerik paylaşan, sahte beyanda bulunan veya platform kurallarını ihlal eden kullanıcıları engelleyebilir (ban) veya inceleme başlatabilirsiniz.

Toplam Kayıtlı Doktor
52
50 Aktif · 2 Onay Bekleyen
👨‍⚕️
Toplam Kayıtlı Hasta
1,248
1,245 Aktif · 3 Askıda
👤
Raporlanan / İhlaller
3
2 Çözüldü · 1 İncelemede
⚠️

Kayıtlı Kullanıcı Listesi

Ad Soyad E-posta Rol Katılım Tarihi İhlal Puanı Durum İşlemler
Portal › Sistem Mimarisi

Sistem Mimarisi

Katmanlı, serverless-first mimari. MVP Firebase ekosistemi üzerine kurulur; scale-up aşamasında AWS hibrit yapıya geçiş stratejisi tanımlanmıştır.

Yüksek Seviye Bileşen Diyagramı

İNTERAKTİF SVG
İSTEMCİ 🌐 PWA / React Offline-First · Vite · TypeScript 🗄️ IndexedDB Dexie.js ⚙️ Srv Worker Workbox 🔒 WebCrypto AES-256-GCM PBKDF2 · Client-side · Never server Firebase Auth · JWT RS256 CDN & WAF 🚀 Firebase Hosting 🛡️ WAF · App Check API GATEWAY Rate Limit JWT Auth + CORS Routing · Throttle FIREBASE FUNCTIONS v2 · NODE.JS 20 TS ❓ Soru Servisi CRUD · Assign · Filter 💬 Cevap Servisi Draft · Publish · Edit 👤 Kullanıcı Svc Profile · Role · KVKK 🔔 Bildirim Svc FCM · E-posta · Queue 🔐 Şifreleme Svc KMS · Verify · Sign 📋 Audit Log Svc Immutable · 5 yıl · KVKK 🔄 Offline Sync Servisi pendingQueue · Conflict resolution · Delta sync · syncToken VERİ KATMANI 🔥 Firestore NoSQL · Realtime · Offline persist 📦 Storage Firebase/S3 🐘 PostgreSQL Scale-up · RDS 🗝️ KMS (Google / AWS) Envelope enc · DEK rotation · Key backup 📋 Audit SIEM 5 yıl immutable · Partitioned · KVKK m.12 GÜVENLİK · IAM · WAF 🔐 Firebase Rules 🛡️ App Check 🔑 RBAC / MFA JWT RS256 · Rate Limit · HTTPS-only · CSP · HSTS BİLDİRİM 🔔 FCM 📧 SendGrid Pub/Sub queue · Retry · Templates MONİTORİNG 📊 Firebase ☁️ CloudWatch Analytics · Crashlytics · Alerting CI / CD ⚙️ GitHub Actions SAST · Security scan · Deploy Firebase

MVP → Kurumsal Geçiş Matrisi

MIGRATION PATH
Katman
MVP · Ay 1-3
Scale-up · Ay 7-9
Kurumsal · Ay 10+
Frontend
React + Vite PWA
Zero-config, offline-first
~$0/ay
Next.js SSR/ISR
SEO + Edge cache
~$20-200/ay
Next.js + Micro-frontends
Bağımsız deploy, ekip ölçekleme
~$200+/ay
Backend
Firebase Functions v2
Zero-config, Firebase native
~$0-50/ay
AWS Lambda + API GW
Fine-grained control, multi-region
~$10-100/ay
Lambda + ECS Fargate
Hibrit serverless/container
~$200+/ay
Veritabanı
Firestore NoSQL
Realtime, offline sync
~$0-30/ay
PostgreSQL (RDS)
ACID, complex queries
~$50-200/ay
Aurora Serverless v2
Auto-scaling ACID
~$100+/ay
Auth
Firebase Auth
Firebase ekosistemi native
$0.005/MAU
Firebase + Custom Claims
Fine-grained RBAC
$0.005/MAU
AWS Cognito / Auth0
SSO, SAML, FIDO2/WebAuthn
$0.005+/MAU
KMS
Google Cloud KMS
Firebase dahili, sıfır config
Dahili
AWS KMS
Fine-grained key policy, audit
$1/key/ay
HashiCorp Vault
HSM desteği, tam kontrol
$0 OSS
Portal › Uygulama Akışları

Uygulama Akışları

Platformun üç kritik akışı detaylı adım adım gösterilmektedir: Soru-Cevap, Offline Senkronizasyon ve Doktor Doğrulama.

🔄 Akış 1 — Soru Sorma & Cevap Alma

KRİTİK AKIŞ
🧑 Hasta Tarafı
📝
Soru Yazma
Hasta soruyu yazar, kategori seçer. Başlık + içerik alanları zorunlu. Opsiyonel: resim yükleme (JPEG/PNG).
🔒
Client-Side Şifreleme
WebCrypto AES-256-GCM ile tarayıcıda şifrelenir. IV rastgele üretilir. Sunucu plaintext içeriği hiç görmez.
📡
API'ye Gönderim
POST /v1/questions — JWT Bearer, rate limit (10/gün), şifreli payload format doğrulama, contentHash bütünlük.
💾
DB Kaydı + Audit
Firestore'a status: "pending" ile kaydedilir. Audit Log: QUESTION_CREATED — actor, IP, requestId kaydı.
🔔
Cevap Bildirimi Gelir
Doktor cevapladıktan sonra FCM push bildirimi. Hasta soruyu açar, tarayıcıda şifre çözülür. Puan verebilir.
👨‍⚕️ Doktor Tarafı
📲
FCM Bildirimi
Yeni soru atanınca FCM push: "Yeni soru — Kardiyoloji". Doktor FCM token'ı kayıtlı olmalı.
🔓
Soruyu Görür & Çözer
GET /v1/questions/{id} — Şifreli içerik gelir. Doktorun anahtarıyla tarayıcıda çözülür. Audit: QUESTION_READ.
✍️
Cevap Yazar
Cevap metni + otomatik disclaimer eklenir. WebCrypto ile şifrelenir, contentHash hesaplanır.
📤
Cevap Gönderilir
POST /v1/questions/{id}/answers — Şifreli cevap. Soru answered durumuna geçer. Rate: 50/gün.
🏁
Akış Tamamlandı
Hasta FCM bildirimi alır. Audit: ANSWER_CREATED. Doktor istatistikleri güncellenir (rating, responseTime).

🌐 Akış 2 — Offline-First Senkronizasyon

OFFLINE SYNC
📴
Uygulama Offline Açılır
Service Worker devreye girer. IndexedDB / Dexie.js'ten son cache yüklenir. "Çevrimdışı Mod" banner gösterilir.
💾
Soru Yerel Kaydedilir
Şifreli payload pendingQueue kuyruğuna eklenir. syncStatus: "pending". Kullanıcıya ⏳ gösterilir.
📶
Bağlantı Gelir
navigator.onLine online event tetiklenir. Background Sync API devreye girer. Kuyruk işlemeye başlar.
🔀
Conflict Çözümleme
Server-Wins kritik alanlar için. Last-Write-Wins basit alanlar için. Çakışma varsa kullanıcıya gösterilir.
Senkronizasyon Tamam
✅ "Senkronize edildi" gösterilir. syncToken güncellenir. Delta sync ile yeni veriler çekilir, cache güncellenir.
Offline Teknoloji Seçimi
TeknolojiNe ZamanAvantaj
IndexedDB + Dexie.jsMVP PWANative, sıfır dep
PouchDBCouchDB syncOtomatik sync
SQLite (WASM)Kompleks sorguSQL syntax
Conflict Resolution Stratejileri
Last-Write-Wins (MVP)updatedAt karşılaştırması — basit alan güncellemeleri için
🏆
Server-Wins — Kritik AlanlarDoktor cevabı, audit alanları — sunucu her zaman kazanır
CRDT — İleriki FazGerçek zamanlı işbirliği için matematiksel birleştirme

✅ Akış 3 — Doktor Doğrulama

GÜVENLİK KRİTİK
📋
Doktor Kayıt Formu
Ad, uzmanlık, TCK Kimlik No (şifreli), Tıp Lisans No (şifreli), diploma PDF yükleme. Tüm hassas alanlar AES-256-GCM ile şifreli gönderilir. verificationStatus: "pending"
👁️
Admin İncelemesi Başlar
Admin panelinde başvuru görünür. Durum under_review'e geçer. İki farklı admin incelemesi zorunlu (4-eye principle). Audit: DOCTOR_REVIEW_STARTED.
🏥
Çift Doğrulama Kontrolü
Admin: TCK No geçerliliği + Tıp Lisans No doğrulaması + Diploma orijinalliği. İki ayrı admin onayı zorunlu. Reddedilirse rejected + gerekçe bildirimi.
Onay & Aktivasyon
verificationStatus: "verified" → FCM bildirimi → Doktor profili aktif. Audit: DOCTOR_VERIFIED, her iki admin ID kayıtlı. verifiedAt + verifiedBy alanları.
🚀
Platform'da Aktif
Doktor soru listesine erişebilir. Hasta profilini görebilir. ✅ rozeti: "Doğrulanmış Hekim". Rating başlangıçta sıfır, ilk cevapla aktif.
Portal › Veri Modeli

Veri Modeli & Şema

Firestore (NoSQL/MVP) ve PostgreSQL (scale-up) şemaları. Şifreli alanlar _enc suffix ile işaretlidir. Tüm şifreli alanlar AES-256-GCM formatındadır.

Firestore Doküman Yapıları

NOSQL · MVP
users
doctors
questions
answers
auditLogs
media
// /users/{userId} { "uid": "usr_abc123", "email_enc": "AES256GCM::base64iv::base64ciphertext", // 🔒 Şifreli "displayName": "Ahmet K.", "role": "patient", // patient | doctor | admin | moderator | auditor "isActive": true, "kvkkConsentAt": "2026-01-15T10:30:00Z", "kvkkConsentVersion": "1.2", "mfaEnabled": false, "lastLoginAt": "2026-06-15T08:00:00Z", "deletionRequestedAt": null, // KVKK silme hakkı talebi "deletionScheduledAt": null, // 30 gün sonrası (hard delete) "profile": { "age_enc": "AES256GCM::...", // 🔒 Şifreli "gender": "M", "city": "Istanbul" }, "_schemaVersion": 1 }
// /doctors/{doctorId} { "uid": "doc_xyz789", "userId": "usr_xyz789", "displayName": "Dr. Mehmet Yılmaz", "specialty": ["Kardiyoloji", "Dahiliye"], "licenseNumber_enc": "AES256GCM::...", // 🔒 Tıp lisans no "nationalId_enc": "AES256GCM::...", // 🔒 TCK kimlik no "verificationStatus": "verified", // pending | under_review | verified | rejected | suspended "verifiedAt": "2026-01-20T14:00:00Z", "verifiedBy": ["admin_001", "admin_002"], // 4-eye: 2 admin gerekli "hospital": "İstanbul Tıp Fakültesi", "rating": 4.8, "ratingCount": 156, "isAvailable": true, "responseTimeHours": 24, "_schemaVersion": 1 }
// /questions/{questionId} { "id": "q_a1b2c3", "patientId": "usr_abc123", "assignedDoctorId": "doc_xyz789", "title_enc": "AES256GCM::base64iv::ciphertext", // 🔒 "content_enc": "AES256GCM::base64iv::ciphertext", // 🔒 "contentHash": "sha256:a1b2c3d4e5...", // SHA-256 bütünlük doğrulama "category": "kardiyoloji", "tags": ["göğüs ağrısı", "nefes darlığı"], "status": "pending", // pending | assigned | answered | closed | flagged | deleted "priority": "normal", // low | normal | high | urgent "isPublic": false, "mediaRefs": [{ "storageRef": "questions/q_a1b2c3/ecg.jpg", "encKey_enc": "..." }], "createdAt": "2026-06-15T09:00:00Z", "expiresAt": "2026-09-15T09:00:00Z", "clientMetadata": { "platform": "web", "offlineCreated": false }, "_schemaVersion": 1 }
// /answers/{answerId} { "id": "ans_d4e5f6", "questionId": "q_a1b2c3", "doctorId": "doc_xyz789", "content_enc": "AES256GCM::base64iv::ciphertext", // 🔒 "contentHash": "sha256:f6g7h8...", "disclaimer": "Bu cevap tıbbi tavsiye niteliği taşımaz; doktorunuza danışınız.", "isPublished": true, "publishedAt": "2026-06-15T12:00:00Z", "editHistory": [{ "editedAt": "...", "reason": "Düzeltme" }], "rating": null, "createdAt": "2026-06-15T11:50:00Z", "_schemaVersion": 1 }
// /auditLogs/{logId} — IMMUTABLE · 5 YIL SAKLI · SİLİNEMEZ { "id": "log_g7h8i9", "timestamp": "2026-06-15T09:01:00Z", "actorId": "usr_abc123", "actorRole": "patient", "action": "QUESTION_CREATED", // QUESTION_CREATED | ANSWER_CREATED | DOCTOR_VERIFIED | USER_DELETED | LOGIN | ... "resourceType": "question", "resourceId": "q_a1b2c3", "ipAddress": "90.xxx.xxx.xxx", "userAgent": "Mozilla/5.0...", "requestId": "req_abc123", "result": "SUCCESS", // SUCCESS | FAILURE | PARTIAL "metadata": { "category": "kardiyoloji" }, "retentionPolicy": "5_years" }
// /questions/{questionId}/media/{mediaId} { "id": "media_j1k2", "questionId": "q_a1b2c3", "uploaderUid": "usr_abc123", "originalFilename_enc": "AES256GCM::...", // 🔒 "storageRef": "questions/q_a1b2c3/media_j1k2", "mimeType": "image/jpeg", "sizeBytes": 245000, "encryptionKeyRef": "kms://projects/.../keys/media-key", "virusScanStatus": "clean", // pending | clean | infected "uploadedAt": "2026-06-15T09:00:30Z" }

Veri Saklama & Retention Politikası

KVKK ZORUNLU
Veri TipiSüreŞifrelemeSilme YöntemiKVKK Maddesi
Kullanıcı ProfiliHesap silinceye dekAES-256 at-restSoft delete → 30 gün → Hard deletem.7
Soru / Cevap İçeriği5 yıl (tıbbi kayıt)AES-256 + TLS in-transitAnonymization (isim silinir)m.7, m.11
Audit Logları5 yıl — SilinemezAES-256 at-restImmutable; yalnızca arşivlenirm.12
Medya DosyalarıSoru ile aynıEnvelope encryption (KMS)S3 lifecycle + KMS key silmem.7
KVKK Onay KayıtlarıSüresizAES-256 at-restSilinmez — hukuki delilm.5
Session / JWT TokenAccess 1s / Refresh 7gTLS in-transitOtomatik expiry + revocation
Portal › API Referans

API Referans

RESTful API — JWT RS256 Bearer token tüm endpointlerde zorunlu (public hariç). Tüm veri AES-256-GCM şifreli taşınır. Base URL: https://api.doktorasor.com/v1

Endpoint Listesi

REST API · 17 ENDPOINT
Method
Endpoint
Açıklama
Auth
POST
/auth/register
Kullanıcı kaydı + KVKK onay
public
POST
/auth/login
Firebase ID token → JWT exchange
public
GET
/auth/me
Oturum bilgisi + profil
all roles
GET
/doctors
Doktor listesi — uzmanlık/availability filtresi
patient
GET
/doctors/{id}
Doktor detay sayfası
patient
POST
/doctors/verify
Doktor doğrulama onayı (4-eye)
admin
POST
/questions
Soru oluştur — şifreli payload + contentHash
patient
GET
/questions
Soru listesi — kategori/status/tarih filtresi
patient|doctor
GET
/questions/{id}
Soru detayı — şifreli içerik döner
patient(own)|doctor
PATCH
/questions/{id}
Soru güncelle (henüz cevaplanmamışsa)
patient(own)
DELETE
/questions/{id}
Soru sil (soft delete)
patient(own)|admin
POST
/questions/{id}/answers
Cevap yaz — şifreli + disclaimer zorunlu
doctor
POST
/media/upload
Presigned URL al, S3'e direct upload
patient|doctor
POST
/sync
Offline pendingQueue batch senkronizasyon
patient|doctor
GET
/admin/audit-logs
Audit log sorgulama — filtrelenmiş
admin|auditor
DELETE
/admin/users/{id}
KVKK silme hakkı (hard delete)
admin
POST
/admin/doctors/suspend
Doktor askıya al + bildirim
admin

HTTP Hata Kodları & Strateji

ERROR HANDLING
HTTPKodAçıklamaİstemci Stratejisi
400VALIDATION_ERROREksik/hatalı alanAlan bazlı Türkçe mesaj göster
400INVALID_ENCRYPTED_PAYLOADŞifre format hatasıAES256GCM:: pattern yeniden kontrol et
401UNAUTHORIZEDJWT eksik/süresi dolmuşRefresh dene → başarısızsa login'e yönlendir
403FORBIDDENYetki yetersizGenel mesaj (güvenlik: detay sızdırma)
404RESOURCE_NOT_FOUNDKaynak bulunamadıKullanıcıya "bulunamadı" ekranı
409CONFLICTSync çakışmasıConflict resolution UI göster
429TOO_MANY_REQUESTSRate limit aşıldıRetry-After header oku, exponential backoff
500INTERNAL_ERRORSunucu hatasıCloudWatch log, PagerDuty alert, kullanıcıya genel mesaj
503SERVICE_UNAVAILABLEBakım moduOffline queue'ya ekle, retry on reconnect
Portal › Güvenlik & Uyumluluk

Güvenlik & Uyumluluk

KVKK birincil, HIPAA hazırlık ikincil hedef. Anahtar yönetim mimarisi, threat model ve uyumluluk kontrol listeleri.

Anahtar Yönetim Mimarisi

KMS
🧑 Kullanıcı Şifresi (memorized secret)
Hiç depolanmaz
⬇️ PBKDF2 · 310.000 iterations · SHA-256 · 16B salt
Master Key — session memory only
🔑 DEK — Data Encryption Key (HKDF türetimi)
AES-256-GCM ile veri şifreleme
🏦 Google KMS / AWS KMS — KEK (Key Encryption Key)
DEK'i şifreler → şifreli DEK Firestore'da saklanır
Session Key ÖmrüOturum kapanışında imha
DEK Rotasyonu90 günde bir otomatik
KEK RotasyonuYıllık (break-glass prosedürü)

KVKK Kontrol Listesi

MVP ÖNCESİ
AES-256-GCM ŞifrelemeWebCrypto API, client-side, PBKDF2 key derivation
TLS 1.3 + HTTPS-OnlyFirebase Hosting otomatik SSL, HSTS 1 yıl, HSTS preload
JWT RS256 + kısa expiryAccess 1 saat, Refresh 7 gün, token revocation list
🔴
Audit Log (Sprint 1!)Tüm kritik aksiyonlar — 5 yıl immutable. KVKK m.12 zorunlu
🔴
KVKK Aydınlatma + Rıza FormuHukuki onay, kayıt ekranında zorunlu, versiyon takibi
Veri Silme API (KVKK m.11)30 gün içinde hard delete + anonymization + audit
Veri Taşıma Hakkı (Export)JSON/PDF export API, rate-limited, e-posta doğrulamalı
DPA (Firebase + AWS)Data Processing Agreement imzalanmalı. HIPAA BAA başlatılmalı

Threat Model — 10 Senaryo

GÜVENLİK TEHDİT ANALİZİ
T01
Sahte Doktor Kaydı
Yanlış lisans no ile doğrulama geçişi → hasta güveni kaybı, hukuki sorumluluk
KRİTİK
TCK + Lisans çift doğrulama, e-Devlet entegrasyonu (orta vade)
T02
JWT Token Hırsızlığı
XSS açığı veya MitM → yetkisiz sağlık verisi erişimi
KRİTİK
httpOnly cookie, CSP strict, kısa expiry, token revocation list
T03
Brute-force Login
Otomatik parola deneme saldırısı → hesap ele geçirme
YÜKSEK
Rate limit 5/saat, CAPTCHA sonrası, hesap kilitleme + e-posta uyarı
T04
NoSQL Injection
Sanitize edilmemiş input ile Firestore sorgu manipülasyonu
YÜKSEK
Input validation (Zod), Firestore Security Rules, parameterized queries
T05
Kötü Amaçlı Dosya Upload
Malware içerikli tıbbi görüntü → storage veya server compromise
YÜKSEK
MIME type doğrulama, ClamAV virus scan, sandbox, izin listesi (JPEG/PNG only)
T06
İçeriden Tehdit (Admin)
Yetkili personel sağlık verisi sızıntısı → KVKK ihlali, PHI ifşası
KRİTİK
Minimum privilege, tüm admin aksiyonları audit, 4-eye approval kritik işlemler
T07
Offline IndexedDB Sızıntısı
Şifresiz IndexedDB dump → lokal sağlık verisi ifşası
YÜKSEK
Client WebCrypto şifreleme zorunlu, logout'ta IndexedDB temizle
T08
JWT Replay Saldırısı
Eski geçerli JWT ile tekrar istek → yetkisiz işlem
ORTA
JWT jti (unique ID), nonce, timestamp window kontrolü
T09
DDoS Saldırısı
Yüksek hacimli istek → API unavailable, hasta erişim kesintisi
ORTA
Firebase App Check, Cloudflare WAF, rate limiting, CDN absorpsiyonu
T10
Veri Export Kötüye Kullanım
Toplu export özelliğinin kötüye kullanımı → KVKK m.20 ihlali
ORTA
Export rate limit (1/gün), audit log, e-posta doğrulama, tarih aralığı sınırı
Portal › Performans & Maliyet

Performans & Maliyet Analizi

Firebase ve AWS senaryoları için üç trafik seviyesinde aylık maliyet tahmini ve ölçeklenme stratejileri.

Firebase Maliyet Senaryosu

$/AY

AWS Maliyet Senaryosu

$/AY
API p95 Latency
<500ms
SLO hedefi
Soru Gönderim Başarısı
>99%
Uptime SLO
💾
Offline Kayıt Başarısı
100%
IndexedDB write
🚀
Lambda Cold-Start
<2s
Provisioned concurrency
API Error Rate
<1%
SLO alert eşiği: 2%
⏱️
Doktor Yanıt Hedefi
24s
SLA bildirimi: 48s

Bottleneck Tespit & Önlem Listesi

OPTİMİZASYON
BottleneckBelirtiÖnlemAşama
Firestore hot partitionAnlık okuma spike'larıShard keys ile okuma dağıtımıMVP
Lambda cold startİlk istek >2s gecikmeProvisioned concurrency (5 instance)MVP
Büyük medya yüklemeUpload timeout hatalarıPresigned URL + S3 direct uploadMVP
Audit log yazma yavaşlığıLog gecikmesi >1sAsync yazma (Pub/Sub queue)Sprint 3
N+1 sorgu problemiDB yükü lineer artışBatch queries, DataLoader patternScale-up
Doktor listesi yavaşFiltreli sorgu yavaşlığıRedis cache (5 dk TTL) + composite indexAy 4
Sync çakışma çoğalmasıConflict sayısı artışıDelta sync + CRDT (ileriki faz)Ay 7+
Portal › Roadmap & Sprintler

Ürün Yol Haritası & Sprint Planı

12 aylık, 4 aşamalı roadmap. 2 haftalık sprint döngüsü — toplam 24 sprint. Story point bazlı önceliklendirme.

12 Aylık Gantt Görünümü

ROADMAP
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
MVP
Auth · Soru/Cevap · Şifreleme · Offline · Demo
Geliştirme
Medya · Arama · Bildirim · Admin Panel
Ölçeklenme
PostgreSQL · Redis · Pen-test · Yatırımcı
Kurumsal
SSO · HIPAA · Native App · Series A
Faz 1 — MVP Ay 1-3 · Sprint 1-6 · 220 SP
SPRINT 1 · Ay1 Hf1-2
Temel Altyapı
• Firebase proje kurulumu
• Auth + JWT RS256
• KVKK onay akışı
• Audit Log servisi (kritik!)
• CI/CD pipeline
34 SP
SPRINT 2 · Ay1 Hf3-4
Şifreleme + Soru
• WebCrypto AES-256-GCM
• PBKDF2 key derivation
• Soru oluşturma API
• contentHash integrity
• Rate limiting
40 SP
SPRINT 3 · Ay2 Hf1-2
Doktor & Admin
• Doktor profil + doğrulama
• 4-eye admin onay akışı
• Admin paneli (temel)
• RBAC tam kapsam
• Audit log genişletme
38 SP
SPRINT 4 · Ay2 Hf3-4
Cevap + Bildirim
• Cevaplama akışı
• Disclaimer zorunlu
• FCM push bildirimi
• SendGrid e-posta
• Bildirim queue
36 SP
SPRINT 5 · Ay3 Hf1-2
Offline-First
• IndexedDB + Dexie.js
• Service Worker + Workbox
• Sync API + pendingQueue
• Conflict resolution
• Background Sync API
42 SP
SPRINT 6 · Ay3 Hf3-4
Demo & QA
• Demo paketi hazırlama
• E2E testler (Playwright)
• Unit test kapsamı %80+
• Güvenlik tarama
• Yatırımcı demo akışı
30 SP

Önceliklendirilmiş Backlog

BACKLOG
ÖncelikÖzellikSPSprintBağımlılık
🔴 MUSTAuth + KVKK onay akışı8S1
🔴 MUSTAudit Log servisi (Sprint 1!)8S1Firebase setup
🔴 MUSTAES-256-GCM WebCrypto şifreleme8S2Auth
🔴 MUSTSoru oluşturma + cevaplama API13S2-S4Şifreleme
🔴 MUSTDoktor doğrulama (4-eye)13S3Admin panel
🟠 HIGHOffline-first (IndexedDB + SW)21S5API hazır
🟠 HIGHFCM push bildirimi8S4Firebase
🟠 HIGHMedya yükleme + virüs tarama13Ay4Storage
🟡 MEDDoktor arama (Meilisearch)8Ay5Scale-up
🟡 MEDPuanlama sistemi8Ay5Cevap akışı
🟢 LOWDark mode UI3Ay6+
🟢 LOWÇoklu dil (TR/EN)5Ay6+
Portal › Risk Analizi

Risk Analizi & Mitigasyon

13 risk maddesi; teknik, regülasyon, pazar ve operasyonel kategorilerde olasılık × etki matrisi ve mitigasyon planları.

Risk Dağılımı

MATRİS

Kritik Risk Özeti

EYLEM GEREKTİRİR
🔴
R1 — KVKK Audit Log EksikliğiSprint 1'e alın. 72 saatlik ihlal bildirimi prosedürü tanımlanmalı.
🔴
R2 — Sahte Doktor Riski4-eye çift admin onayı zorunlu. e-Devlet entegrasyonu orta vadede gerekli.
🔴
R6 — Tıbbi SorumlulukDisclaimer zorunlu, hukuki danışman onaylı. Mesleki sorumluluk sigortası araştırılmalı.
🔴
R10 — KMS Anahtar KaybıCross-region key backup zorunlu. Break-glass prosedürü yazılı hale getirilmeli.
⚠️
R3 — Firebase Vendor Lock-inAbstraction katmanı bugünden tasarlanmalı. PostgreSQL migration path hazır tutulmalı.
⚠️
R7 — Doktor Katılımı DüşükPilot 50 doktor anlaşması MVP öncesi. Ücretsiz premium hesap teşviki.

Tam Risk Listesi

13 RİSK · ÖNCELIK SIRALI
R1
KVKK Audit Log Eksikliği
Kritik aksiyonlar loglanmadan launch → yasal yaptırım (₺1M+ idari para cezası)
→ Sprint 1'e al · 5 yıl immutable log · DPO atama
KRİTİK
R2
Sahte Doktor Kaydı
Yanlış lisans ile doğrulama geçişi → hasta güveni, hukuki sorumluluk, marka hasarı
→ 4-eye admin onayı · TCK + Lisans çift doğrulama · e-Devlet orta vadede
KRİTİK
R6
Tıbbi Sorumluluk
Yanlış cevap → hasta zarar → hukuki dava (TTB, Sağlık Bakanlığı)
→ Zorunlu disclaimer · Hukuki danışman · Sigorta araştırma · Acil yönlendirme
KRİTİK
R10
KMS Anahtar Kaybı
Şifreleme anahtarına erişim kaybı → tüm şifreli sağlık verisi kalıcı erişilemez
→ Cross-region backup · Break-glass prosedürü · Yıllık tatbikat · 2-admin onayı
KRİTİK
R3
Firebase Vendor Lock-in
Firebase fiyat artışı veya hizmet kesintisi → acil migration maliyeti
→ Abstraction katmanı · PostgreSQL migration planı hazır · Multi-region backup
YÜKSEK
R4
Lambda Cold-Start Gecikmesi
İlk istekte >2s gecikme → kritik sağlık soru akışında kötü hasta UX
→ Provisioned concurrency (5 instance) · Edge Functions değerlendirme
YÜKSEK
R5
IndexedDB Şifreleme Açığı
Şifresiz bırakılan IndexedDB → fiziksel erişimde sağlık verisi sızıntısı
→ WebCrypto şifreleme zorunlu · Logout'ta IndexedDB temizleme
YÜKSEK
R7
Doktor Katılımı Düşük
Network etkisi oluşmaz → platform değeri düşer, yatırımcı güveni sarsılır
→ Pilot 50 doktor anlaşması · Ücretsiz premium hesap · TTB işbirliği araştırma
YÜKSEK
R8
Rakip Hız
Büyük sağlık şirketleri veya Turna/Doktorsitesi benzer ürün çıkarırsa
→ E2E şifreleme + KVKK odaklı farklılaşma · Hızlı iterasyon · 6 ay first-mover
ORTA
R9
Teknik Borç Birikmesi
MVP kısayolları scale-up'ı engelleyebilir, 3-5x refactor maliyeti
→ Teknik borç backlog takibi · Her 6. sprint'te refactor sprint
ORTA
R11
Sunucu Bölge Outage
Firebase europe-west1 kesintisi → tüm platform erişilemez
→ Multi-region Firebase · Offline-first buffer · Status page · Kullanıcı bildirimi
ORTA
R12
Phishing / Sosyal Mühendislik
Kullanıcı kimlik bilgilerinin phishing ile çalınması
→ DKIM/SPF/DMARC · MFA zorunlu (doktorlar için) · Kullanıcı eğitimi
ORTA
R13
Düzenleyici Değişiklik
KVKK revizyon veya yeni tıbbi cihaz yazılım yönetmeliği (MDR) yükümlülüğü
→ Hukuki danışman retainer · Esnek veri mimarisi · Yönetmelik bülten takibi
ORTA