Stüdyo ürünü · Android
lit
Üniversite öğrencileri için, okul e-postasıyla doğrulanan, yalnızca kampüse özel bir sosyal keşif uygulaması. Backend’i ben kurdum ve işletiyorum — eşleştirme, canlı sohbet, sıralama ve altyapı.
- Rol
- Backend ve ML sorumlusu
- Yıl
- 2025–26
- Durum
- Google Play’de yayında
- Bağlantılar
- Google Play ↗lit.4ourstack.com ↗

- 370+
- backend commit’i, servisin büyük çoğunluğu
- UT-xxxx
- uygulamanın üzerinden karar verdiği hata kataloğu
- 0
- yönetilen servis — Hetzner’de kendi sunucumuz
Bağlam
lit bir 4ourstack ürünü: öğrenciler üniversite e-postasıyla kaydoluyor ve kendi kampüslerindeki insanları keşfediyor. Mobil uygulamayı Uygar Çapar, yönetim panelini Ramiz Kadayıfcı geliştiriyor; backend, eşleştirme ve sunucular benim sorumluluğumda.
Eşleştirmeyi üretim için yeniden yazmak
İlk sürüm her beğeni ve geçişi kullanıcı profilinin içinde JSON dizisi olarak tutuyor, tek sunucunun belleğinde önbellekliyor ve her istekte mesafeleri C#’ta hesaplıyordu. Demo için yeterliydi, bir dönemi atlatamazdı. Tasarladığım v2 mimarisi:
- Swipe’lar kendi indeksli tablosunda — her swipe’ta büyüyen profili yeniden yazmak yerine tek satır okuma.
- İlgi alanları 64 bitlik bayrak alanı — ortak ilgi puanı bir bitwise
ANDve popcount’a iniyor. - Kullanıcı başına Bloom filtresi Redis’te; görülen profiller geri gelmiyor.
- Uyumluluk puanı — “premium > doğrulanmış > diğerleri” yerine; küçük kampüsler için şehir düzeyinde konum ve tohumlanmış yarıçap geri düşüşü.
- ONNX sıralayıcı — Python’da çevrimdışı eğitilen (two-tower + hobi embedding’leri) model, .NET sürecinin içinde servis ediliyor.
Eşzamanlılık altında doğruluk
Tasarım bilinçli bir stres testi incelemesinden geçti. Gerçek bir bulgu: aynı anda birbirini beğenen iki öğrenci “zaten eşleşmiş mi?” kontrolünü birlikte geçebiliyordu — benzersizlik kısıtı veriyi korudu ama biri eşleşme bildirimini hiç almadı. Düzeltme, çakışmada mevcut eşleşmeyi okuyup SignalR bildirimini yine de gönderiyor. Soğuk başlangıç ve yarış durumları kendi planını ve testlerini aldı.
Uygulamanın güvenebileceği bir API
Beklenen her hata sabit bir kod (UT-1006), yerelleştirilmiş bir mesaj ve önerilen bir eylem döndürüyor. Uygulama metne değil koda göre karar veriyor. Backend mesajları sunucu tarafında çevriliyor.
Altyapı
Eski bir Plesk sunucusundan Hetzner Cloud’a, Docker Compose ve diğer ürünlerimize de hizmet veren ortak bir Caddy edge’ine taşındı. git push → GitHub Actions → GHCR → sunucu → sağlık kontrolü. Serilog’dan Seq’e loglar, hatalar için Sentry, her taşıma için yazılı bir runbook.