PropTech · B2B SaaS
Lastfloors: gayrimenkul profesyonellerinin B2B ağı
Geliştirici, emlakçı, yatırımcı ve hizmet sağlayıcıyı tek platformda buluşturan, iOS uygulaması ve web panelini aynı API'den besleyen abonelikli profesyonel ağ.
- Şirket
- Lastfloors · lastfloors.com
- Rol
- Önceki görev · backend’in tamamı, 1 yıl
- Sektör
- PropTech · B2B SaaS
- Tarih
Problem
Gayrimenkulde iş ilişkisi hâlâ fuarda ve tanıdık üzerinden kuruluyor: pahalı, takvime bağlı ve ölçülemez. Geliştirici doğru emlakçıyı, emlakçı doğru portföyü, yatırımcı doğru projeyi ancak birileri tanıştırırsa buluyor. Lastfloors bu tanıştırmayı sürekli çalışan bir sisteme taşımak istedi — üstelik tek bir ülkede değil, küresel ölçekte.
Yaklaşım
Dört ayrı üye tipini (geliştirici, emlakçı, yatırımcı, hizmet sağlayıcı) tek veri modelinde toplayıp her modülü abonelik planına göre kapılanan bir çekirdek üzerine kurduk. Portföy yönetimi, gerçek zamanlı sohbet, akış, iş ilanları ve yapay zekâ destekli arama aynı Django REST API'sinden besleniyor; web paneli ve iOS uygulaması bu API'nin iki ayrı istemcisi. Sohbet WebSocket üzerinden ayrı bir kanaldan yürüyor, böylece mesajlaşma yükü REST tarafını etkilemiyor.
Bu bir ajans işi değildir. Boygantech kurucu ortağı Mehmet Halil Mungan’ın Lastfloors’ta bir yıl süren görevinde kurduğu backend’i anlatır; backend tarafının tamamı bu görevin kapsamındaydı. Görev sona ermiştir.
Platform yayında: lastfloors.com · iOS uygulaması App Store’da.
Başlangıç durumu
Gayrimenkulde iş, insanların birbirini tanımasıyla başlıyor. Bir geliştiricinin projesini satacak emlak ofisini bulması, bir emlakçının müşterisine uygun portföyü bulması, bir yatırımcının doğru projeyi görmesi — hepsi bir tanıştırmaya bağlı.
Bu tanıştırmanın geleneksel yeri fuar. Fuarın üç sorunu var ve Lastfloors’un kendi ifadesiyle geleneksel iletişim ağı kurmak “pahalı ve karmaşık”:
- Takvime bağlı. Yılda birkaç kez, birkaç gün. Aradaki aylarda ağ durur.
- Coğrafyaya bağlı. İstanbul’daki bir geliştiricinin Dubai’deki bir yatırımcıya ulaşması, ikisinin de aynı fuara gitmesine kalır.
- Ölçülemez. Stant, ekip, seyahat ve basılı malzemenin karşılığında kaç iş ilişkisi kurulduğu hiçbir yerde yazmaz.
Kararlar
Dört üye tipi, tek veri modeli
Platformun ilk mimari kararı buydu. Sistemde dört ayrı taraf var: geliştirici, emlakçı ve broker, yatırımcı ve yatırım ortaklığı, hizmet sağlayıcı. Her biri farklı şey arıyor ve farklı şey gösteriyor.
Bunları ayrı uygulamalar olarak kurmak ilk akla gelen yol; reddettik. Bir ağın değeri kenar sayısıyla artar — tarafları ayırmak, tam da kurmaya çalıştığınız bağlantıları keser. Onun yerine tek bir şirket profili varlığı tanımlandı; üye tipi bu profilin bir özelliği, ayrı bir tablo değil.
Bunun getirisi: bir hizmet sağlayıcı ile bir geliştirici arasındaki bağlantı, iki emlakçı arasındaki bağlantıyla aynı kodu kullanıyor. Bedeli: yetki ve görünürlük kuralları tek bir yerde karmaşıklaşıyor. Bu takası bilinçli yaptık — karmaşıklığın tek yerde toplanması, dört yere dağılmasından iyidir.
Hesabın merkezi kişi değil şirket
Bu ayrım küçük görünüyor ama ürünün tamamını belirliyor. Bir emlak ofisinde çalışan beş danışman aynı şirket profiline bağlı; portföy, bağlantılar ve yazışmalar kişinin değil şirketin varlığı. Danışman ayrıldığında ağ şirkette kalıyor.
Faturalama da buradan çıkıyor: Premium plan koltuk bazlı, üye sayısı arttıkça ölçekleniyor.
Modül kapılaması plana bağlı
Ücretsiz ve Premium planlar aynı kod tabanını kullanıyor; fark, hangi modülün açık olduğunda. Pazar analizi, AI arama, iş ilanları, akışa gönderi ve gerçek zamanlı sohbet plan seviyesine göre açılıyor.
Bunu her modülün içine dağılmış if premium kontrolleriyle kurmak, üç ay sonra kimsenin doğrulayamayacağı bir yetki yamasına dönüşürdü. Yetenekler tek bir kayıtta tanımlı; hem API katmanı hem arayüz aynı kaynağı okuyor. Yeni bir plan tanımlamak kod değişikliği değil, yapılandırma işi.
Sohbet neden ayrı kanalda
Gerçek zamanlı sohbet, istek-yanıt döngüsüne uymayan tek modül. Bunu REST uçlarıyla yoklama yaparak kurmak hem gecikmeli hem pahalı olurdu.
Sohbet WebSocket üzerinden ayrı bir kanaldan yürüyor; oturum durumu ve teslim bilgisi Redis’te tutuluyor. Ayrı kanalda olmasının asıl faydası izolasyon: mesajlaşma yükünün ani yükselmesi portföy ve arama uçlarını yavaşlatmıyor.
Tek API, iki istemci
Web paneli ve iOS uygulaması aynı Django REST API’sinden besleniyor. İki ayrı arka uç tutmanın maliyeti yalnızca yazım değil, tutarlılık: aynı iş kuralının iki yerde farklı yorumlanması, mobil ile web’in farklı şeyler göstermesi demek.
Bunun karşılığında ödediğimiz bedel, API’nin iki istemcinin ihtiyacını birden karşılamak zorunda kalması — mobilde daha az alan, webde daha zengin görünüm. Bunu sürümleme ve alan seçimiyle çözdük, ayrı uçlar açarak değil.
Uygulama
Portföy yönetimi
Kullanıcı portföyünü tek panelden ekliyor, düzenliyor ve yayımlıyor: detaylı bilgi, görseller ve dokümanlar her kayda bağlanıyor. Görsel türevleri yükleme anında üretiliyor; kullanıcı boyutlandırmayı düşünmüyor.
AI destekli arama
Aramanın klasik filtre mantığıyla kurulması bu üründe yetersizdi: kullanıcı “deniz manzaralı, teslime yakın, yatırımlık” gibi cümlelerle arıyor, kolon değerleriyle değil.
Arama bu yüzden anlamsal aramayla anahtar kelime aramasının birleşimi olarak kuruldu. Yalnız anlamsal arama, kesin kısıtları (oda sayısı, bütçe tavanı) kaçırıyor; yalnız anahtar kelime, niyeti kaçırıyor. İkisinin birlikte çalışması ve sonucun yeniden sıralanması, bu ikisinin arasındaki boşluğu kapatıyor.
Akış, iş ilanları ve referans
Ağın canlı kalması için üç ayrı mekanizma var: şirketlerin gönderi paylaştığı akış, sektöre özel iş ilanlarının yayımlandığı bölüm, ve mevcut üyelerin yeni şirket davet ettiği referans programı.
Üçü de aynı bildirim altyapısını kullanıyor. Bildirimler gruplanarak gönderiliyor — her etkileşim için ayrı bildirim atmak, bildirimlerin tamamen kapatılmasıyla sonuçlanır.
Gizlilik
Platform “güvenli ve özel” olma iddiasında ve bu bir pazarlama cümlesi değil, mimari kısıt: bir şirketin portföyünü, bağlantılarını ve yazışmalarını kimin görebileceği sorgu katmanında uygulanıyor, arayüzde gizlenerek değil. Erişimi olmayan bir kayda API üzerinden ulaşılmak istendiğinde cevap “yetkin yok” değil, “böyle bir kayıt yok” oluyor — bir kaydın varlığı da bilgidir.
Ölçüm
Bu sayfada sayı yok ve bilerek yok.
Platformun kendi sitesinde yayımladığı büyüklükler (500’ü aşkın şirket, 1700’ü aşkın bağlantı, 600’ü aşkın proje) bugünün rakamları; görevin sona erdiği tarihten sonraki dönemi de kapsıyorlar. Burada anlatılan mühendislik işine atfedilemezler, o yüzden karta konmadılar.
Görev sırasında izlenen mühendislik ölçütleri şunlardı — rakamlar paylaşıma açık olmadığı için değerleri değil, yalnızca neyin izlendiği yazılıdır:
- Sohbet mesajının uçtan uca teslim gecikmesi; ortalama değil, uzun kuyruk.
- WebSocket bağlantılarının eşzamanlı sayısı ve yeniden bağlanma oranı.
- iOS ve web istemcilerinin aynı API uçlarındaki yanıt süresi farkı.
- AI aramada sonuca tıklama oranı — klasik filtre aramasıyla karşılaştırmalı.
- Plan kapılamasının doğruluğu: ücretsiz hesabın Premium modüle eriştiği vaka sayısı (hedef sıfır).
Sonuç
Platform ücretsiz ve Premium planla yayına çıktı; iOS uygulaması App Store'da. Şirket profili, portföy, akış, sohbet, iş ilanları ve AI arama tek hesap altında, tek API üzerinden çalışıyor; plan yükseltmesi kod değişikliği gerektirmeden modül açıyor. Bu sayfa sistemin nasıl kurulduğunu anlatır — platformun bugünkü büyüklüğü görevden sonraki dönemi de kapsadığı için buraya sayı yazılmadı.
Bir fikriniz mi var, yoksa duran bir ürün mü?
Kısa bir görüşmede kapsamı netleştirelim. İlk konuşmada teknik yaklaşımı ve tahmini bütçe aralığını konuşuruz.
Ya da doğrudan yazın: info@boygantech.com