Projelere dön
</>Project

Golden Net Emlak

Multi-tenant SaaS emlak yönetim platformu. Express + PostgreSQL backend, Next.js 16 vitrin sitesi ve ayrı bir super admin dashboard'undan oluşan üç katmanlı mimari. Supabase + Render + Vercel free tier'larında canlı demo.

Next.js 16TypeScriptExpress.jsPostgreSQLSupabaseSupabase StorageJWT AuthenticationTailwind CSS v4Tiptap EditorHelmet & CORSJoi ValidationMulti-tenant
Canlı Siteyi Ziyaret Et

Proje Hakkında

Golden Net, emlak firmalarının kendi vitrin sitelerini ve admin panellerini tek bir backend üzerinden çalıştırabildiği multi-tenant SaaS platformudur. Her firma (tenant) için ayrı bir subdomain, ayrı admin kullanıcıları ve izole veri saklama sağlanır. Sistem üç ayrı uygulamadan oluşur: vitrin + tenant admin panelini barındıran Next.js frontend, tüm tenant'ları yöneten ayrı Next.js super-admin dashboard'u ve her iki uygulamaya hizmet veren Express + PostgreSQL backend. Tenant izolasyonu hem application-level (X-Tenant-Id header + middleware) hem de database-level (her sorguda tenant_id filtresi) olarak iki katmanda uygulanır. Demo Supabase + Render + Vercel ücretsiz katmanlarında çalışır, kredi kartı gerektirmez.

Zorluklar

En büyük zorluk, multi-tenant'lı bir SaaS'ı kredi kartı gerektirmeyen ücretsiz servislerle production-grade biçimde yayına almaktı. Render free tier ephemeral filesystem kullandığı için multer ile yapılan lokal disk yüklemeleri her restart'ta siliniyordu. Vercel'in middleware/auth bypass advisory'leri eski Next.js 15 build'lerini bloklamaktaydı. Ayrıca Render'da NODE_ENV=production set edildiğinde npm install devDependencies'i atladığı için @types/node bulunamıyor ve tsc build sırasında 'Cannot find name process/console/Buffer' hatalarıyla patlıyordu. Multi-tenant tarafında ise X-Tenant-Id header eksik olduğunda backend host'tan tenant çıkarmaya çalışıyor ve 'golden-net-backend.onrender.com'u tenant subdomain'i sanıp 404 dönüyordu.

Çözümler

Multer'ın disk storage'ı memoryStorage + @supabase/supabase-js ile değiştirilerek yüklenen görseller Supabase Storage'a aktarıldı; lokal disk yalnızca SUPABASE_URL yokken devre dışı kaldı. Next.js 16.2.9'a major bump yapılarak Vercel güvenlik kapısı geçildi. Build için gerekli @types/* paketleri ve typescript dependencies'e taşınarak NODE_ENV=production altında bile yüklenir hâle getirildi. Tenant detection middleware'ine PaaS host suffix'leri (.onrender.com / .vercel.app / .fly.dev) için skip mantığı ve DEFAULT_TENANT_SUBDOMAIN env-var fallback'i eklendi. Postgres connection string Supabase pooler'a SSL ile bağlanacak şekilde refactor edildi. CORS regex tabanlı whitelist ile *.vercel.app ve custom domain destekledi.

Sonuçlar

Platform Supabase Postgres + Storage, Render web service ve iki Vercel projesi üzerinde toplam 0 ₺ aylık maliyetle canlıya alındı. Custom domain (goldennet.atmacamustafa.site) Hostinger DNS üzerinden Vercel'e bağlandı, SSL Let's Encrypt ile otomatik üretildi. UptimeRobot her 5 dakikada bir backend'i ping atarak Render servisinin uyumasını engelliyor. Demo seed verisi (1 super admin + 1 demo tenant + 6 emlak ilanı + 3 blog yazısı) idempotent SQL ile yüklendi. Süper admin ve tenant admin login'leri, ilan/blog CRUD akışları, Supabase Storage'a görsel yükleme ve multi-tenant izolasyon end-to-end test edildi.

Ekran örüntüleri

Ana Sayfa

Ana Sayfa

Vitrin ana sayfası — hero arama formu ve istatistik kartları

İlan Listesi

İlan Listesi

Sol panelde tip/durum/fiyat filtreleri, sağda kart görünümlü ilan grid'i

İlan Detay

İlan Detay

Galeri, fiyat, lokasyon ve danışman iletişim kartı

Tenant Admin Paneli

Tenant Admin Paneli

Yönetim paneli ana sayfası — hızlı eylem kartları ve istatistik özeti (toplam ilan, ortalama fiyat, blog sayısı)

Tenant Admin – Analitik

Tenant Admin – Analitik

Son eklenen ilanlar, en çok görüntülenenler, emlak tipi dağılımı ve satılık/kiralık donut grafiği

Super Admin Dashboard

Super Admin Dashboard

Tüm tenant'ları listeleyen merkezi panel — sağlık skoru, plan ve property sayıları

Yeni Tenant Oluştur

Yeni Tenant Oluştur

Super admin'in subdomain + admin kullanıcı + plan seçimiyle multi-tenant kayıt formu

Projeyi Canli Olarak Goruntule

Bu projeyi gercek ortamda deneyimlemek icin canli siteyi ziyaret edin.

Canlı Siteyi Ziyaret Et