Back to Projects
</>Project

Golden Net Real Estate

Multi-tenant SaaS real estate management platform. Three-layer architecture with an Express + PostgreSQL backend, Next.js 16 storefront, and a separate super-admin dashboard. Live demo on Supabase + Render + Vercel free tiers.

Next.js 16TypeScriptExpress.jsPostgreSQLSupabaseSupabase StorageJWT AuthenticationTailwind CSS v4Tiptap EditorHelmet & CORSJoi ValidationMulti-tenant
Visit Live Site

About the Project

Golden Net is a multi-tenant SaaS platform that lets real-estate agencies run their own storefronts and admin panels on top of a single backend. Each tenant gets a dedicated subdomain, isolated admin users, and isolated data. The system is three separate applications: a Next.js frontend hosting the storefront + tenant admin panel, a separate Next.js super-admin dashboard for managing all tenants, and an Express + PostgreSQL backend serving both. Tenant isolation is enforced at two layers — application-level via X-Tenant-Id header + middleware, and database-level via per-query tenant_id filtering. The demo runs on Supabase + Render + Vercel free tiers with no credit card required.

Challenges

The biggest challenge was deploying a multi-tenant SaaS to a production-grade state using only free, no-credit-card services. Render free tier uses an ephemeral filesystem, so the original multer disk-storage uploads vanished on every restart. Vercel's middleware/auth bypass advisories blocked the older Next.js 15 builds. With NODE_ENV=production set on Render, `npm install` skipped devDependencies, so @types/node was missing and tsc died with 'Cannot find name process/console/Buffer' floods. On the multi-tenant side, when the X-Tenant-Id header was missing the backend tried to derive a tenant from the request host, mistaking 'golden-net-backend.onrender.com' for a tenant subdomain and 404-ing every call.

Solutions

The multer disk storage was swapped for memoryStorage + @supabase/supabase-js so uploads go to Supabase Storage; local disk now only kicks in when SUPABASE_URL is absent. Next.js was bumped to 16.2.9 to clear Vercel's security gate. The @types/* packages and typescript itself were moved into dependencies so they install under NODE_ENV=production. The tenant detection middleware learned to skip known PaaS host suffixes (.onrender.com / .vercel.app / .fly.dev) and accept a DEFAULT_TENANT_SUBDOMAIN env-var fallback. The Postgres pool was refactored to accept a connection string with SSL for the Supabase pooler. CORS now uses a regex-based whitelist that covers *.vercel.app plus the custom domain.

Results

The platform shipped to Supabase Postgres + Storage, a single Render web service, and two Vercel projects — total monthly cost: ₺0. The custom domain (goldennet.atmacamustafa.site) was wired through Hostinger DNS into Vercel with Let's Encrypt-issued SSL. UptimeRobot pings the backend every five minutes to keep Render from sleeping. Idempotent seed SQL ships one super admin, one demo tenant, six property listings, and three blog posts. Super-admin and tenant-admin logins, property/blog CRUD flows, Supabase Storage image uploads, and end-to-end multi-tenant isolation have all been verified live.

Screenshots

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

View Project Live

Visit the live site to experience this project in real environment.

Visit Live Site