Cyber2Tech

Yalnız aramaktan,birlikte oynamaya.

Ürün
Woonzero
Tür
Kendi ürünümüz
Süre
Ağu 2026 – sürüyor
Yığın
React · NestJS · Prisma
Kısaca

Woonzero zaten aktif bir sosyal platformdu ama oyun bulma ayrı bir katman değildi; gönderi oluşturma ekranında oyun seçici olmadığı için hangi gönderinin hangi oyuna ait olduğu büyük ölçüde belirsiz kalıyordu. Platforma oyun kimliği, filtrelenebilir takım arama ilanları ve ilan dolduğunda otomatik açılan bir grup sohbetinden oluşan omurgayı ekledik.

Problem
Oyun katmanı yok, arama dağınık
Çözüm
Oyun kimliği + filtreli ilan + grup sohbeti
01Problem

Oyun bulmak, gönderiler arasında kaybolan bir şanstı.

Woonzero'da takım arkadaşı arayan biri, oyun etiketi olmayan genel akışta yoruma ya da doğrudan mesaja güveniyordu; gönderi oluşturma ekranında bir oyun seçici bulunmadığı için oyun bulma, platformun geri kalanından ayrı bir katman değildi. Rol, rütbe ya da müsait saat gibi bir filtre yoktu; doğru insanı bulmak aramaktan çok şansa kalıyordu.

temsilî akış
02Kısıtlar

Tasarımı üç kısıt belirledi.

K1

Oyun kimliği bugün beyana dayanıyor

Riot ya da Steam gibi harici servislerle rütbe doğrulaması ayrı bir iş kalemiydi; rütbe ve rol bilinçli olarak kullanıcı beyanına bırakıldı, doğrulama rozeti yol haritasına ertelendi. İlan sahibi, başvuranın beyanına güvenip kararını ona göre veriyor.

K2

Dört dil aynı anda güncel kalmalı

Topluluk dört dilde konuşuyor; ilan ve rehber içeriğinin hepsinde eş zamanlı ve güncel kalması gerekiyor. Eksik bir çeviri anahtarını derleme sırasında yakalayan bir test bu disiplini koruyor; çevirinin kendisi yine elle giriliyor.

K3

İlan listesi çöplüğe dönmemeli

Sınırsız açık ilan listeyi hızla kullanılmaz hale getirir; her ilana bir sona erme zamanı eklendi ve durumu, ayrı bir zamanlayıcı yerine okuma anında hesaplanan bir geçişle güncelleniyor.

03 — Yaklaşım

İlan, oyuncuyu değil rolü arar.

Oyuncu önce oyun kimliğini bağlar, sonra rol, rütbe aralığı ve saat belirten bir takım arama ilanı açar. Katılım, ilanda seçilen moda göre değişir: bazı ilanlarda boş role doğrudan girilir, bazılarında oyuncu başvurur ve ilan sahibi onaylar ya da reddeder. İlan oluşturulduğu anda otomatik bir grup sohbeti de açılır; kadro dolduğunda oyuncular zaten aynı sohbetin içindedir.

  1. 01Oyuncu profilioyun kimliği bağlanır
  2. 02İlan açılırrol + rütbe aralığı + saat
  3. 03Katılımdoğrudan gir ya da başvur, onay bekle
  4. 04Grup sohbetiilanla birlikte açılır
  5. 05Birlikte oyunkadro tamamlandı
ilan.jsontemsilî · LFG ilanı yanıtı (LfgResponse)
{
  "id": 482,
  "slots": 5,
  "filledSlots": 3,
  "joinMode": 1,
  "state": 0
}
Denediğimiz ve bıraktığımız

Feed sıralaması önce en çok beğenilen gönderileri en üstte tutuyordu; platform büyüdükçe bu tek kural, eski gönderilerin sonsuza dek tepede kalmasına yol açan somut bir kusura dönüştü. Hacker News tarzı bir formül, Wilson/Bayesian oran tahmini ve tek formüllü yavaş azalma da denendi; hiçbiri elimizdeki veri modeline (dislike ya da görüntülenme yok) ya da yılların birikimine uymadı. Bugünkü sıralama, zaman-değişmez bir skor, ilgi puanı ve eski ama etiketli gönderiler için ayrılmış küçük bir kotadan oluşuyor.

04Ekranlar

Rol boş kaldığında hemen görünmeli.

Sohbetteki takım arama isteği, açık/dolu rozetli bir ilan listesine dönüşür.
Bağlı oyun kimlikleri sırayla eklenir, geçmiş takımlar aynı profilde görünür.
05Ne öğrendik

Bir sonraki projeye taşıdıklarımız.

  1. 01Zamanla bozulacağını bildiğimiz basit bir kuralı ('en çok beğenilen') olduğu gibi bırakmıyoruz; feed sıralamasında birden çok alternatifi gerçek veri üzerinde eleyip zaman-değişmez bir formüle geçtik.
  2. 02Depolama sağlayıcısını yalnız birim fiyattan seçmiyoruz; bu ölçekte egress ve entegrasyon maliyeti, birim fiyat farkından daha belirleyici çıktı.
  3. 03Dil başına ayrı bir veritabanı kolonu tutmak yönetilemez hale geliyor; gömülü i18next ve derlemede eksik anahtarı yakalayan bir test, dört dili eşit tutmanın daha sürdürülebilir yolu oldu.
Sonraki vaka
SmartMail Orchestration

Topluluğunuz da
dağınık mı arıyor?