Projenin mevcut monorepo (Bun, Elysia.js, React/Vite, Prisma + PostgreSQL) yapısı göz önüne alınarak tasarlanmıştır.
- Backend: Elysia.js + Bun
- Frontend: React + Vite (veya Next.js)
- Database: PostgreSQL + Prisma
- Harici Servisler: OpenAI/Gemini (Sadece Moderasyon için), Leaflet veya Google Maps (Harita)
Sistemin temelini oluşturan Rol Bazlı Erişim Kontrolü ile bireysel ve kurumsal kullanıcıların ayrıştırılması.
- Veritabanı & Prisma:
RoleEnum oluşturulması:ADMIN,USER,COMPANY.Usermodelinerolealanının eklenmesi (Default:USER).- Kurumsal hesaplar için
CompanyProfiletablosu eklenmesi.userIdverisi ile ilişkilendirilir. İçindecompanyName(Şirket Adı),taxNumber(Vergi No),contactPerson(Yetkili Kişi),addressgibi bilgiler bulunur.
- Backend (Elysia.js):
/auth/registerucunda kayıt tipine göre Dinamik Validasyon (TypeBox). Kullanıcı rolünüCOMPANYseçerse şirket bilgileri gereksinim haline gelir.
- Frontend (React/Vite):
- Kayıt (Register) formunda "Bireysel" ve "Kurumsal" iki sekme (Tab) sunulur. Form alanları role göre değişir.
Normal "fiyat/şehir" filtrelerinin ötesine geçerek kullanıcının ihtiyaçlarına (sessiz mahalle, öğrenciye uygun vb.) göre filtreleme yapmasını sağlar.
- Backend & Veritabanı:
- İlan (
Ad) modelinetags(String Array) vescores(JSONB) alanlarının eklenmesi. Örnek JSONB:{"studentFriendly": 0.95, "quietNeighborhood": 0.80}. - Gelen arama terimlerinin (örn. "öğrenciye uygun ev") tag'lere ve skorlara göre
ORDER BYveya ağırlıklı hesaplama ile PostgreSQL üzerinden sıralanması.
- İlan (
- Sezgisel (Heuristic) Skorlama:
- İlan oluşturulurken seçilen özellikler (Örn: "Site içerisinde", "Otopark var", "Asansör var") backend tarafında belirli kurallar (ruleset) üzerinden puanlanır.
- Örnek Kural: Oda sayısı >= 2 ve Site İçerisi = "Evet" ise "Aile İçin" skoru +0.4 artar; Üniversiteye yakınlık = "Evet" ise "Öğrenciye Uygun" alanı puanlanır.
- Özel etiketler (
tags) ilan sahibi tarafından arayüzde manuel çoklu seçim (multi-select) ile girilir.
- Frontend:
- Hızlı arama barında (Search Bar) "Akıllı Arama" seçeneği. Kullanıcı sadece metin yazar, backend ilgili skorlamaları kullanarak en uygun ilanları döndürür.
Kullanıcıların ilanları interaktif bir harita üzerinde görmesi ve yarıçap (radius) bazlı filtreleme yapabilmesi.
- Backend & Veritabanı:
- İlan modeline
latitude(Float) velongitude(Float) eklenmesi. - PostgreSQL'de coğrafi sorgular için opsiyonel olarak
PostGISeklentisinin aktifleştirilmesi veya hafif sistemler için veritabanında "Haversine" formülü ile lokasyonlar arası mesafe hesabı yapan özel fonksiyon (veya raw query) yazılması. - Endpoint:
GET /api/ads/map?lat=X&lng=Y&radius=10
- İlan modeline
- Frontend:
react-leaflet(açık kaynak/ücretsiz) veya modern bir UI için mapbox/google maps entegrasyonu.- Kullanıcı haritada zoom ve pan yaptıkça (harita sınırları değiştikçe -
onBoundsChange), sadece ekranda görünen alandaki ilanların fetch edilmesi. - Çok fazla ilan varsa harita tarafında Clustering (kümeleme) yapılması (örn. İstanbul üzerinde "500" yazan tek bir balon, yaklaştıkça ayrışır).
Hem satıcıları hem de alıcıları derecelendiren mekanizma.
- Veritabanı:
UsermodelinetrustScore(Örn: max 100, default 50 ile başlar) eklenmesi.Review,ReportveVerification(Kimlik onaylı mı?) tablolarının oluşturulması.
- Değerlendirme Sistemi:
- Pozitif Puan: Kimlik doğrulandı (+20), telefon doğrulandı (+10), ilanı başarıyla sattı (+5).
- Negatif Puan: Çok sayıda şikayet aldı (-30), sahte ilan tespiti (-50).
- Frontend UI:
- Satıcı profilinde rozetler halinde güven skorunun gösterimi (Yeşil/Sarı/Kırmızı çubuklar veya Yüzdelik daire - Circular Progress).
Kullanıcının ilanın ne kadar süredir yayında olduğunu ve hangi fiyat dalgalanmalarından geçtiğini görmesi.
- Veritabanı:
AdPriceHistorytablosu:id,adId,oldPrice,newPrice,changedAt.- İlanın ilk yayınlanma tarihi mevcut
createdAtalanından veyapublishedAtalanından çekilir.
- Backend Mantığı:
- Elysia üstündeki
UPDATEilan controller'ında fiyat değişikliği algılandığında veritabanında transaction kullanılarak history tablosuna da yeni bir kayıt atılır.
- Elysia üstündeki
- Frontend UI:
- İlan detay sayfasında sade bir Çizgi Grafiği (Line Chart -
rechartsveyachart.jskullanılabilir) ile fiyatın zaman içindeki düşüşü/artışı gösterilir.
- İlan detay sayfasında sade bir Çizgi Grafiği (Line Chart -
İlanları yan yana teknik ve karakteristik özellikleriyle kıyaslama yeteneği.
- Frontend Global State:
- Zustand, Redux veya React Context API kullanılarak global bir
compareQueuestate'i oluşturulur (maksimum 2 veya 3 ilan seçme kapasitesi).
- Zustand, Redux veya React Context API kullanılarak global bir
- Kullanıcı Deneyimi:
- İlan kartlarında bir "Terazi / Kıyasla" butonu olur.
- İlanlar seçildikçe ekranın altında sabit (sticky) bir bar açılır.
- "Karşılaştır" denildiğinde
/compare?ids=101,102rotasına gidilir.
- Sayfa Yapısı:
- Yan yana sütunlarda (Flex veya CSS Grid) özellik metrikleri sıralanır (Fiyat, m², Oda Sayısı, Akıllı Filtre Skorları). Çakışan iyi özellikler yeşil renkle vurgulanır.
Platformu temiz tutmak için ilanları yayına almadan önce yapay zekaya denetletme.
- Akış Sistemi (Workflow):
- Kullanıcı ilanını oluşturur, veritabanına
status: PENDING_REVIEWolarak düşer. Frontend kullanıcıya "İlanınız AI tarafından inceleniyor" mesajı gösterir. - Backend, asenkron bir görev (veya BullMQ/RabbitMQ tarzı bir kuyruk ile) başlatır.
- İlan bilgileri bir LLM (Örn: OpenAI
gpt-4o-mini) API'sine şu prompt ile yollanır: "Bu bir ev kiralama platformu ilanıdır. İçerikte hakaret, iletişim bilgisi manipülasyonu, sahte/spam bir açıklama var mı? Sonucu sadece 'APPROVED' veya 'REJECTED' olarak, yanına kısa bir sebep ekleyerek JSON formatında dön." - Response
APPROVEDise statüPUBLISHEDyapılır. Aksi halde red sebebiyleREJECTEDyapılır. - Kullanıcıya WebSockets üzerinden anlık bildirim atılır.
- Kullanıcı ilanını oluşturur, veritabanına
- Prisma şemasının güncellenmesi (Roller,
CompanyProfile,latitude,longitude,tags,scores,trustScore, history tabloları). - Bireysel ve Kurumsal hesaba özgü kayıt akışının uçtan uca çalıştırılması.
- Migrasyonların çalıştırılması ve TypeScript tiplerinin generate edilmesi.
- OpenAI API entegrasyonu için Elysia tarafında servislerin yazılması.
- Akıllı filtreleme (Rule-based/Heuristic algoritma) ve AI Moderasyon mekanizmasının backend mantığının tamamlanması.
- Frontend tarafında
react-leafletveyagoogle-mapskurulumu, MapView sekmesinin oluşturulması. - Karşılaştırma (
Compare) arayüzünün global state'i ile beraber tasarlanması. - Fiyat geçmişi grafiklerinin (Line Chart) ilan detaylarına eklenmesi.
- WebSockets entegrasyonunun (zaten varsa) AI onay sürecinde kullanıcıya bildirim atacak şekilde bağlanması.
- Güven skoru logiğinin edge caselerinin test edilmesi (suni spam ataklarında AI ve scorun tepkisi).
- Genel performans takibi (PostgreSQL limitleri ve harita pin clustering optimizasyonu).