Tenant isolation enforced by the database itself, search ~8× faster, and listings synced to three property portals from one place.
No screens shown: the product is private.
// request path
01 Tenant request
02 RBAC guard
03 RLS policy
04 Search index
05 < 100 ms
The problem
A multi-tenant real estate platform needed strict data separation between agencies, fast bilingual search, reliable background work and one place to publish to the main UAE property portals.
What I did
Enforced tenant isolation with PostgreSQL Row-Level Security, so a missing filter in application code can never leak data across tenants.
Built the async foundation on a Postgres-native job queue (pg-boss): concurrency, deduplication, retries with backoff and reconciliation sweepers so no job is silently dropped.
Replaced a slow multi-table ILIKE search with a denormalized index and async indexer, plus full-text/trigram routing over GIN indexes and Arabic/mixed-script normalization.
Designed two-layer RBAC (endpoint guards + per-record flags) with a 5-minute permission cache and instant invalidation.
Built tamper-resistant audit logging: triggers on 35 tables record every change with before/after values, user, session and IP.
Built syndication to Property Finder, Bayut and dubizzle with a 9-state sync state machine, plus automated lead capture and a lead-distribution and escalation engine.
The result
Median search ~800 ms → under 100 ms
~70% fewer authorization lookups
Customer data separated by design
Listings on 3 portals from one place
Technology
PostgreSQL
Row-Level Security
pg-boss
GIN / trigram indexes
TypeScript
Node.js
React
svc/io · listening
Looking for a senior engineer who ships reliable, AI-native systems?
Open to full-time, part-time or contract, in Dubai or remote. The terminal below is live: type a command.
visitor@mk.core: ~/contact
❯ whoami
Mohammad Kabalan · Senior Software Engineer · Dubai, UAE