Modern .NET ve Angular ekosisteminde çalışan bir Full Stack Developer.
Temmuz 2025’ten beri ARCA Yazılım’da yazılım geliştirici olarak çalışıyorum. Clean Architecture, CQRS ve multi-tenant yaklaşımlarıyla ölçeklenebilir uygulamalar geliştiriyor; API tasarımı, rol ve izin tabanlı yetkilendirme, performans optimizasyonu, otomatik test süreçleri ve gerçek zamanlı entegrasyonlar üzerine çalışıyorum. Geliştirmenin yanı sıra müşteriye dönük süreçlerde de görev alıyorum: iş gereksinimlerini analiz ediyor, proje sunumlarında yer alıyor ve müşteri iletişimini yönetiyorum.
Agile geliştirme süreçlerinde GitLab ve Jira kullanılarak kurumsal SaaS platformlarının backend, frontend, güvenlik ve entegrasyon bileşenlerinin geliştirilmesine katkı sağlandı.
Süreç
02
.NET 9, ASP.NET Core, Clean Architecture ve CQRS yaklaşımlarıyla çok kiracılı (multi-tenant) API’ler geliştirildi; ölçeklenebilir iş kuralları ve yeniden kullanılabilir REST servisleri oluşturuldu.
Mimari
03
JWT refresh-token mekanizması, HttpOnly/SameSite cookie yapılandırmaları, RBAC, audit logging ve rate limiting çözümleri uygulanarak sızma testi bulguları doğrultusunda güvenlik sertleştirme (hardening) çalışmaları gerçekleştirildi.
Güvenlik
04
SignalR tabanlı gerçek zamanlı bildirim ve yetki yayılımı mekanizmaları geliştirildi; Hangfire ile zamanlanmış görevler ve otomasyon iş akışları oluşturularak operasyonel süreçler otomatikleştirildi.
Gerçek Zamanlı
05
SOAP/REST banka API’leri, MutluCell SMS, 3CX çağrı merkezi API’si ve WhatsApp/WATI mesajlaşma entegrasyonlarının üretim modüllerine dahil edilmesine katkı sağlandı.
Entegrasyon
06
Angular 20 tabanlı yönetici paneli özellikleri geliştirildi; kurumsal SaaS şablonu içinde AI/MCP destekli yazılım bileşenlerine katkı sağlandı.
Arayüz
07
YODER Dernek projesinde geliştirici rolünün yanı sıra iş analistliği ve müşteri iletişiminde birincil temas noktası rolleri üstlenildi; müşteri ziyaretlerinde sunumlar gerçekleştirildi ve iş gereksinimleri müşteriyle birlikte analiz edilerek geliştirme kapsamına dönüştürüldü.
Müşteri & Analiz
08
Personel taşıma ve filo optimizasyon platformunun kapanış aşamasında müşteriye yönelik proje sunumlarına katılım sağlandı.
İş analistliği kapsamında müşteri sunumları gerçekleştirildi, iş gereksinimleri müşteriyle birlikte analiz edilerek geliştirme kapsamına dönüştürüldü ve müşteri iletişiminde birincil temas noktası rolü üstlenildi
Bağışçı yönetimi, aile desteği, yetim himayeciliği ve kampanya modülleri geliştirildi
Gelir-gider takibi ve personel işlemleri modülleri oluşturuldu
SOAP tabanlı banka API entegrasyonuyla otomatik işlem senkronizasyonu ve tahsilat doğrulaması sağlandı
MutluCell SMS ve WhatsApp/WATI entegrasyonlarıyla bağışçılara otomatik bildirim ve kampanya iletişimi kuruldu
3CX API entegrasyonuyla çağrı merkezi iş akışları sisteme bağlandı
ClosedXML ile dinamik Excel raporları üretildi
Hangfire ile zamanlanmış görevler otomatikleştirildi; SignalR ile anlık bildirim altyapısı kuruldu
Ticket, görev, proje, satın alma talebi ve harcama modülleri geliştirildi
@foblex/flow ile ticket’lar üzerinde sürükle-bırak destekli görsel workflow editörü oluşturuldu
FullCalendar ve Google Calendar entegrasyonuyla planlama ve randevu yönetimi sağlandı
İzin, uzaktan çalışma, CV havuzu ve varlık atama modülleriyle İK süreçleri dijitalleştirildi
jsPDF ve XLSX ile dinamik raporlama ve dışa aktarma altyapısı kuruldu
Quill zengin metin editörüyle mention destekli ticket not sistemi geliştirildi
Multi-tenant yapıda super-admin, admin ve kullanıcı rolleriyle katmanlı yetki sistemi tasarlandı
SignalR ile anlık bildirim ve SLA raporlama altyapısı entegre edildi
05Solo · Full-Stack
Bulut Tabanlı Doküman Yönetim Sistemi
Doküman talebi, onay ve süre takibi süreçlerini yöneten, 10.000’den fazla doküman için yüksek performanslı filtreleme ve erişim altyapısı sunan doküman yönetim sistemi.
.NET CoreAngularMS SQLCQRSHangfire
.NET Core ve Angular tabanlı full-stack uygulama mimarisi tasarlandı
10.000’den fazla doküman için yüksek performanslı filtreleme ve erişim altyapısı kuruldu
Doküman talepleri için onay/ret akışı ve kayıt değişikliklerini onaya bağlayan onay talebi mekanizması geliştirildi
Süresi dolan dokümanlar için Hangfire ile zamanlanan bir inceleme süreci oluşturuldu; otomatik e-posta hatırlatmalarının yanı sıra erteleme, devre dışı bırakma ve çözümleme adımları sağlandı
Harici servislerle entegre MCP tabanlı AI chatbot çözümü geliştirildi
06Fleet · Multi-tenant SaaS
Çok Kiracılı Personel Taşıma ve Filo Optimizasyon Platformu
Personel servis ve taşıma operasyonlarını uçtan uca yöneten, VROOM/OSRM tabanlı rota optimizasyonu ve Arvento GPS entegrasyonuna sahip çok kiracılı filo platformu.
.NET 9ASP.NET CoreAngular 20PostgreSQLClean ArchitectureCQRS / MediatRHangfireSignalRVROOMOSRMArvento GPS API
Tenant, şirket, departman, durak, araç ve sefer (rotation/expedition) modüllerini kapsayan uçtan uca backend ve admin paneli oluşturuldu
VROOM çözücüsü ile OSRM mesafe matrisi ve rota geometrisi servisleri kullanılarak araç kapasitesi, vardiya zaman penceresi ve azami süre/mesafe kısıtlarını gözeten otomatik güzergah optimizasyon motoru geliştirildi
Toplu rota önizleme, otomatik rota oluşturma ve rota birleştirme (route consolidation) akışları sağlandı
Arvento GPS/filo takip entegrasyonuyla gerçek zamanlı araç konumu, canlı sefer izleme ve yolcu geçmişi senkronizasyonu hayata geçirildi
RBAC ve Data Scope tabanlı çok katmanlı yetkilendirme sistemi tasarlandı; rol ve kullanıcı bazlı entity ve sayfa izinleriyle granüler erişim kontrolü sağlandı
SignalR ile anlık bildirim ve canlı takip altyapısı kuruldu; Hangfire ile yolcu geçmişi senkronizasyonu ve otomatik rota üretimi gibi zamanlanmış görevler otomatikleştirildi
Proje kapanış aşamasında müşteriye yönelik sunumlara katılım sağlandı
07Mobil · Kişisel proje
Bütçem — Çevrimdışı Gelir/Gider ve Bütçe Takibi
Sunucu ve hesap gerektirmeden tamamen çevrimdışı çalışan, tüm verisini telefondaki tek bir SQLite dosyasında tutan kişisel finans uygulaması.
Flutter ve Drift (SQLite) ile çevrimdışı çalışan bir mimari kuruldu; tutarlar kuruş bazında tam sayı, hareketler çift kayıtlı (double-entry) posting modeliyle tutulacak şekilde tasarlandı
Günlük harcama payı hesaplaması geliştirildi: harcanabilir bakiyeden ay sonuna kadar vadesi gelen ödemeler düşülerek kalan gün sayısına bölünüyor, kategori limiti daha dar ise o limit esas alınıyor
Kolon eşleme, mükerrer kayıt ayıklama, marka→kategori tahmini ve tek dokunuşla geri alma destekli banka ekstresi (CSV) içe aktarma özelliği eklendi
Taksitli alışverişlerde harcamanın satın alma ayında, her taksidin nakit çıkışının ise kendi ayında raporlanması sağlandı
Düzenli işlemler, kategori bütçeleri, birikim hedefleri, borç-alacak takibi, ay kapanışı raporu ve ana ekran widget’ı geliştirildi
Ekran başına sorgu bütçesi testleri, 10.000 kayıtlık performans testi ve tek SQL sorgusunda hesaplanan toplamlarla sorgu disiplini sağlandı
Saf servisleri, veritabanı göçlerini ve uçtan uca ekran akışlarını kapsayan 794 test yazıldı; imzalı APK ile yan yükleme (sideload) ve version.json tabanlı otomatik güncelleme mekanizması kuruldu
08Mobil · Çok oyunculu oyun
Harfsayı — Kelime & Sayı Yarışması
Kelime ve işlem turlarını birleştiren, arkadaşlarla canlı yarışılabilen ve internetsiz de oynanabilen Türkçe mobil oyun.
Sunucu otoriter (server-authoritative) bir oyun akışı tasarlandı: soru üretimi, süre ve hakemlik sunucuda yürütülüyor, istemci yalnızca arayüzü çiziyor; bu sayede cihaz saatini ileri almak sonucu etkilemiyor
SignalR ile canlı düello, 2v2 takım maçı, izleyici modu ve her akşam 21:00’de başlayan elemeli turnuva geliştirildi
62.326 kelimelik TDK sözlüğü üzerinde bir anagram indeksi kuruldu; en iyi cevap, bahçe bölümü üretimi, bot cevapları ve Son Kelime’nin tek çözümlülük denetimi bu yapıdan besleniyor
Türkçe morfoloji çözümleyicisiyle kök ve ek ayrıştırması yapıldı; reddedilen kelimeler için itiraz jürisi mekanizması oluşturuldu ve onaylanan kelimelerin canlı sözlüğe eklenmesi sağlandı
Uygulamaya gömülü soru paketi, drift/SQLite önbelleği ve cihaz UUID’siyle idempotent senkronizasyon sayesinde çevrimdışı oynanabilirlik sağlandı; oyun uçak modunda kurulup oynanabiliyor
Asenkron düello, günlük soru, haftalık lig, sezonlar, kelime koleksiyonu ve çengel bulmaca üreticisi (ızgara oluşturma ve TDK tanımlarından ipucu filtresi) özellikleri eklendi
378 backend ve 118 mobil test ile WebSocket bağlantılarını da kapsayan uçtan uca duman (smoke) testleri yazıldı; uygulama Docker ile dağıtıldı ve Cloudflare Tunnel üzerinden kalıcı bir adrese bağlandı
Yedi farklı projede aynı dil, yedi farklı problem.
.NET, Microsoft'un geliştirdiği açık kaynaklı bir çatı; C# ise bu çatının üzerinde çalışan ana dil. İkisi birlikte bir API'yi ayağa kaldırmak, veritabanına bağlanmak, iş kurallarını yazmak için ihtiyacın olan hemen her şeyi sağlıyor. .NET 9 ile performans tarafında da ciddi kazanımlar var; aynı kod artık daha az kaynakla daha hızlı çalışıyor.
Bir apartman yönetim sisteminde sorgular yüzde 40 hızlandı.
Bir API büyüdükçe genellikle ilk tıkanma noktası, okuma ve yazma işlemlerinin aynı kod yolundan geçmesi oluyor. Clean Architecture bunu katmanlara ayırarak çözmeye çalışır: iş kuralların veritabanından, framework'ten bağımsız kalır. CQRS bir adım öteye geçip okuma (query) ve yazma (command) işlemlerini birbirinden tamamen ayırıyor. MediatR de .NET tarafında bu command ve query'leri doğru handler'a yönlendiren küçük ama işlevsel bir kütüphane.
ABP Framework: Multi-Tenant SaaS'ta Tekerleği Yeniden İcat Etmemek
Tenant ve izin yönetimini sıfırdan yazmak yerine hazır yapı taşı kullanmak.
Her yeni multi-tenant projede tenant yönetimini, izin sistemini ve kullanıcı-rol altyapısını sıfırdan kurmak zaman kaybı. ABP Framework tam olarak bunun için var: .NET üzerinde çalışan, Domain-Driven Design prensiplerini temel alan açık kaynaklı bir framework ve bu tekrar eden parçaları hazır modüller olarak sunuyor.
Entity Framework Core: Kodla Yönetilen Bir Veritabanı Katmanı
SQL sorgusu yazmak yerine veritabanı şemasını kod üzerinden yönetiyorum.
Bir veritabanı şemasını değiştirmek için elle tablo düzenlemek yerine, bunu tamamen kod üzerinden yönetmek de mümkün. Entity Framework Core, .NET tarafında bunu sağlayan ORM katmanı: sınıflarını, yani entity'lerini tanımlıyorsun, EF Core bunları tablolara eşliyor. Sorguları LINQ ile yazıyorsun, arkada bu sorgular SQL Server için uygun SQL'e çevriliyor. Code-first yaklaşımda şema, migration'larla adım adım ilerliyor; yani kod gibi versiyonlanıyor ve git geçmişinde takip edilebiliyor.
Unit Testler ve Mimari Testlerle Kod Kalitesini Korumak
Bir kuralın ihlal edilip edilmediğini insan hafızasına değil teste bırakıyorum.
Bir kodun çalıştığını görmek başka bir şey, altı ay sonra biri onu değiştirdiğinde hâlâ doğru çalıştığından emin olmak başka bir şey. Unit testler tam olarak bunun için var: bir handler'ın ya da bir metodun belirli girdilerde beklenen çıktıyı verdiğini, bağımlılıkları mock'layarak izole şekilde doğruluyorsun. Mimari testler ise kodun davranışını değil, katmanlar arasındaki bağımlılık kurallarını test ediyor; Domain katmanının Infrastructure'a referans vermemesi gibi bir kural, elle yapılan code review'a değil otomatik bir teste bırakılıyor.
CQRS ayrımından sonraki yüzde 40'lık kazancı öncesi-sonrası ölçümle doğruladım.
100 kayıtla sorunsuz çalışan bir filtreleme ekranı, sayı 10 bine çıkınca birden yavaşlayabilir. Performans testi tam olarak bunu ölçmek için var: kodun doğru sonucu verip vermediğini değil, bu sonucu ne kadar sürede ve ne kadar kaynakla ürettiğini. Gerçek kullanım senaryosuna yakın veri hacmiyle sorguları çalıştırıp süreyi, sorgu sayısını, bellek kullanımını ölçüyorsun.
Angular 20 ve TypeScript ile Yönetici Panelleri Kurmak
Altı farklı projede aynı frontend yığınıyla admin ekranları geliştiriyorum.
Aynı frontend framework'ünü birbirinden bağımsız altı projede kullanmak, onun gerçekten işe yarayıp yaramadığını anlamanın en pratik yolu. Angular, Google'ın geliştirdiği ve component tabanlı yapısıyla büyük, uzun soluklu uygulamalar için tasarlanmış bir TypeScript framework'ü. TypeScript tarafı ise JavaScript'e statik tip kontrolü katıyor; bir API'den dönen veriyi component'te yanlış property adıyla kullanmaya çalıştığında bunu derleme anında yakalıyorsun, üretimde değil.
Flutter ve Dart ile Çevrimdışı Çalışan Mobil Uygulamalar
İki kişisel mobil projede, internet yokken de eksiksiz çalışan uygulamalar.
Web tarafında Angular kullanırken mobil uygulamalarda tercihim Flutter. Flutter, Google'ın geliştirdiği ve tek bir kod tabanından hem Android hem iOS için uygulama çıkarmayı sağlayan bir arayüz framework'ü; Dart ise onun dili. Arayüzü platformun hazır bileşenleriyle değil kendi çizim motoruyla çiziyor, bu yüzden bir ekran her cihazda aynı görünüyor. Geliştirirken hot reload sayesinde yaptığın değişikliği saniyeler içinde görüyorsun, yayın derlemesinde ise Dart kodu doğrudan makine koduna derleniyor.
Üniversitede Qt ve C++ ile Yazdığım Stok Takip Programı
Profesyonel bir proje değil ama OOP'yi gerçekten orada öğrendim.
Üniversitede yazdığım ilk ciddi masaüstü uygulama bir stok takip programıydı, Qt ve C++ ile. Qt, C++ üzerine kurulu, arayüz ve arka plan mantığını aynı kod tabanında yazmayı sağlayan bir framework. Signal-slot mekanizmasıyla arayüz elemanlarını, buton, liste, form, kod tarafındaki mantığa bağlıyorsun; bir butona tıklandığında hangi fonksiyonun çalışacağını bu şekilde tanımlıyorsun.
Projeye Göre Veritabanı Seçimi: SQL Server mı, PostgreSQL mi
İki farklı ilişkisel veritabanı, iki farklı proje grubu.
Hangi projede hangi veritabanının kullanılacağı çoğu zaman dilin kendisiyle değil, ekip ve altyapı tercihiyle ilgili bir karar. SQL Server ve PostgreSQL ikisi de ilişkisel: veriyi tablolar halinde tutuyor, SQL ile sorguluyorsun. Aralarındaki fark günlük kullanımda çoğunlukla lisanslama, araç ekosistemi ve bazı performans ya da özellik detaylarında ortaya çıkıyor; temel CRUD işlemleri açısından birbirine oldukça yakınlar.
Git ve Versiyon Kontrolü: Ekip Çalışmasının Görünmeyen Altyapısı
Branch, merge, code review: bir ekip yazılım geliştirirken ortak dil budur.
İki geliştirici aynı dosyanın aynı satırına aynı anda dokunduğunda ne olur? Git tam olarak bunun cevabını veren bir versiyon kontrol sistemi: kod üzerindeki her değişikliği, kim ne zaman neyi değiştirdi bilgisiyle birlikte saklıyor. Branch mantığı sayesinde bir özellik üzerinde ana koddan bağımsız çalışabiliyorsun, iş bitince merge ile birleştiriyorsun.
RAG, MCP ve STT-LLM-TTS: yazılım işimin bir parçası haline geldi.
Sesli bir asistanın telefondaki bir soruya cevap verebilmesi için arka planda birkaç farklı parça aynı anda çalışıyor. STT-LLM-TTS zinciri sesi metne çeviriyor, metni bir dil modeline gönderiyor, cevabı tekrar sese dönüştürüyor. RAG (Retrieval-Augmented Generation), modelin cevap üretmeden önce ilgili bilgiyi harici bir kaynaktan çekmesi anlamına geliyor, yani her şeyi ezbere bilmek zorunda kalmıyor. MCP (Model Context Protocol) ise bir AI modelinin dış servislere, veritabanlarına ya da API'lere standart bir yolla bağlanmasını sağlıyor.
Özet — harcanabilir bakiye ve hesaplarİşlemler — gün gün hareket listesiRaporlar — kategori kırılımıÖzet — onay bekleyen ödemeler ve ay sonu tahminiÖzet — yaklaşan ödemeler ve son işlemlerRaporlar — son 12 ay
Web — ana ekranMobil — ana ekranBir Kelime turuBir İşlem turuBulmacalar — Kelime Bahçesi ve Çengel BulmacaArkadaşlarla oyna — oda kurmaKelime koleksiyonu