

Conception d'un monorepo Turborepo intégrant 2 applications Next.js 16 (portail public et panneau admin) alimentées par 13 packages internes partagés. Système CMS 100% dynamique sur PostgreSQL ; synchronisation en temps réel via Supabase Realtime (~250–1000ms) ; exploration cartographique MapLibre GL avec Supercluster ; parité trilingue complète (anglais, arabe RTL avec police Cairo, turc) ; mode de secours hors-ligne avec données de démonstration réalistes ; et Centre de Sécurité Entreprise avec pgcrypto bcrypt et verrouillage de compte.
Les portails immobiliers traditionnels souffrent de limites architecturales majeures : mises en page rigides nécessitant un développeur pour chaque modification ; latence de mise à jour entre les annonces agents et les recherches publiques ; monorepos fragmentés séparant clients et administration ; prise en charge médiocre du RTL et de la typographie arabe ; et sécurité administrative faible sans protection contre les attaques par force brute.
Conception d'un monorepo Turborepo intégrant 2 applications Next.js 16 (portail public et panneau admin) alimentées par 13 packages internes partagés. Système CMS 100% dynamique sur PostgreSQL ; synchronisation en temps réel via Supabase Realtime (~250–1000ms) ; exploration cartographique MapLibre GL avec Supercluster ; parité trilingue complète (anglais, arabe RTL avec police Cairo, turc) ; mode de secours hors-ligne avec données de démonstration réalistes ; et Centre de Sécurité Entreprise avec pgcrypto bcrypt et verrouillage de compte.
Déploiement d'un écosystème immobilier complet offrant des mises à jour quasi instantanées (~250–1000ms), une stabilité RTL exemplaire sans coupure de texte, un clustering cartographique fluide à 60fps, zéro interruption grâce au mode hors-ligne et une sécurité de niveau entreprise.
Architecture double application : Portail public performant (apps/website) et centre de commande admin (apps/admin) réunis dans un monorepo Turborepo
13 packages internes partagés : Séparation modulaire pour @workspace/ui, cartes, image de marque, i18n, lib, base de données et utilitaires
Moteur CMS 100% dynamique : Zéro texte codé en dur ; constructeur visuel de page d'accueil par glisser-déposer (@dnd-kit) avec contrôle d'affichage instantané
Synchronisation en temps réel : Écouteurs d'événements Supabase Realtime avec rafraîchissement différé de 250ms pour maintenir l'affichage à jour
Explorateur cartographique immersif (/explore) : Moteur MapLibre GL plein écran avec clustering Supercluster et marqueurs de prix interactifs
Support trilingue et RTL natif : Navigation fluide entre anglais, arabe (RTL avec police Cairo) et turc avec inversion Base UI
Simulateur financier et frais d'acquisition : Calculateur d'amortissement de prêt immobilier et décomposition complète des frais notariés et taxes
Centre de Sécurité Entreprise : Paramètres de sécurité centralisés, historique de mots de passe chiffré pgcrypto bcrypt et verrouillage automatique
Pipeline CRM pour prospects : Suivi des demandes étape par étape avec assignation, notes internes et historique complet
Gestionnaire multimédia hiérarchisé : Gestion par dossiers avec validation MIME, quotas 10Mo/50Mo et déduplication par hachage SHA-256
Couche de secours hors-ligne résiliente : Plus de 260 lignes de données réalistes pour naviguer et tester la plateforme même sans connexion base de données
Développé en monorepo Turborepo avec applications Next.js 16.2.6 et React 19.2.4 utilisant Tailwind CSS v4 et Base UI / Shadcn. La couche de données s'appuie sur Supabase (PostgreSQL 15+) avec 25 migrations SQL séquentielles, des politiques de sécurité Row-Level Security (RLS) et des fonctions RPC SECURITY DEFINER.
Concevoir une architecture Turborepo à 13 packages internes avec des frontières modulaires sans dépendance circulaire
Mettre en œuvre la synchronisation Supabase Realtime avec temporisation de 250ms pour éviter les rendus en cascade
Intégrer MapLibre GL avec l'extension mapbox-gl-rtl-text pour afficher correctement les toponymes arabes sur la carte
Développer une sécurité sans mot de passe en clair directement dans PostgreSQL grâce aux fonctions pgcrypto bcrypt
Créer une architecture de données hors-ligne robuste simulant les requêtes de manière transparente sans identifiants Supabase
Ingénierie de monorepos d'entreprise : Gestion de builds multi-applications avec Turborepo et design tokens Tailwind v4
Modélisation PostgreSQL et RLS avancées : Pistes d'audit, déclencheurs d'expiration de mot de passe et contrôle d'accès basé sur les rôles
Applications Web géospatiales : Intégration de MapLibre GL, paramétrage de Supercluster et sélecteur de coordonnées par géocodage inverse
Synchronisation d'état en temps réel : Harmonisation du rendu côté serveur Next.js avec les événements WebSocket Supabase
Internationalisation et RTL approfondies : Gestion dynamique des polices, inversion de mise en page et taxonomies multilingues
Livraison d'une plateforme immobilière de premier plan combinant découverte fluide pour les acheteurs et contrôle sans code sécurisé pour les agences.
The codebase is organized into 2 standalone Next.js 16 applications and 13 internal shared workspace packages managed via Turborepo:
apps/website: Public Real Estate Portal (Port 3000) featuring listings directory, interactive map explorer, financing calculator, and dynamic homepage
apps/admin: Back-Office Management Portal (Port 3001) with role-based access control, listing editor, CRM pipeline, and Enterprise Security Center
13 Domain Packages: @workspace/ui (Base UI + Tailwind v4), @workspace/maps (MapLibre GL), @workspace/branding (Dynamic theming), @workspace/i18n (Trilingual RTL), @workspace/lib (Queries & Auth), @workspace/database (Supabase schema), @workspace/types, @workspace/constants, @workspace/config, @workspace/utils, @workspace/hooks, @workspace/eslint-config, @workspace/typescript-config
The backend is structured through 25 sequential, idempotent SQL migrations delivering comprehensive data integrity and Row-Level Security (RLS):
Core Schema & Taxonomy: Languages, user roles (owner, admin, editor), categories, locations, amenities, properties, and full-text tsvector search
Dynamic CMS & Versioned Settings: Translations table, site sections, JSONB branding/theme/SEO settings, navigation menus, and testimonials
Row-Level Security (RLS): Public read access for published/visible listings; staff-only write access; Supabase Realtime publications
Storage Buckets & Media Deduplication: Buckets for site assets, property images, and documents with transactional deduplication procedures
Audit Logging & Soft Deletion: Complete audit trails logging user IDs, IP addresses, User-Agents, and JSON diffs, with soft-delete trash recovery
A multi-layered security architecture protects administrative operations, staff credentials, and user data:
Cryptographic Password Reuse Checks: Zero-plaintext password history using pgcrypto crypt() with Blowfish salts inside PostgreSQL
Brute-Force Account Lockout Engine: Automatic lockout after configurable failed attempts with owner-only unlock privileges
Session Revocation & Versioning: Immediate multi-device session invalidation upon password reset by incrementing profile session_version
Role-Based Server Action Guards: Strict authorization gates (requireStaff, requireAdmin, requireOwner) enforcing principle of least privilege
Native multilingual infrastructure supporting English, Arabic (RTL), and Turkish with zero layout anomalies:
Dynamic Locale Routing: Handled via next-intl with URL prefixes (/en, /ar, /tr) and automatic RTL direction switching
Arabic Typography: Automatic subset loading of Google's Cairo font for crisp Arabic readability and balanced vertical metrics
Component Mirroring: Base UI DirectionProvider dynamically mirrors navigation drawers, modal controls, and card layouts
RTL Vector Map Rendering: MapLibre integration with @mapbox/mapbox-gl-rtl-text plugin ensuring proper Arabic script shaping and joining on map labels
Real-time communication and offline resilience guarantee seamless operation under all network conditions:
Supabase Realtime Broadcast: Public portal subscribes to PostgreSQL change events, updating visitor screens in ~250–1000ms without page reloads
Debounced Router Invalidation: Background RealtimeRefresher triggers router.refresh() with 250ms debouncing to prevent re-render cascades
Resilient Offline Fallback Mode: Over 260 lines of realistic mock data allowing complete site navigation, testing, and staging without active database credentials