Web · Mobile · LLM assistant

Real Estate AI Platform

A Dubai property platform: listing search with an AI assistant that drives the map, a Flutter app for buyers and agents, and an SEO site of about 2,200 pages in 7 languages.

Role
Full-stack, mobile and AI engineering
Platforms
Web app · iOS & Android · Admin console
Stack
React · Vite · Astro · Flutter · Supabase · Cloudflare Pages & Workers · Stripe · OpenAI Responses API · MCP
  • LLM tool calling
  • Flutter
  • RTL i18n
  • Programmatic SEO
  • Stripe
  • Push & calls
Property search with map and AI assistant, plus the mobile listing and incoming call screens

Product screens with sample data. Names and figures inside the screens are illustrative.

01

The problem

Buyers search across areas they may not know, on web and mobile, in seven languages. The assistant had to answer about real places and real listings, and the platform had to rank in search at scale.

2,200
Programmatic SEO pages
7
Languages, incl. RTL Arabic
11
AI call sites migrated
02

What I built

01

An assistant that moves the map

A multi-persona assistant with tool calling and Google Places grounding. A structured tag protocol, [PLACE:poi_id:X], lets the model highlight places and listings on the map.

  • 11 OpenAI call sites moved to the Responses API through one adapter
  • Rollback stays a one-line change
  • Documented in a 999-line system reference
Property search with filters, map price pins and an AI assistant panel
02

A Flutter app that feels native

Backend-driven OTP login through the Firebase Admin SDK (MSG91 and Twilio) replaced a failing reCAPTCHA flow. Every screen works in English and right-to-left Arabic.

OTP login, listing detail and Arabic listing screens
03

Calls that ring like a phone call

A full-screen incoming-call experience on Android (USE_FULL_SCREEN_INTENT, Play Console declaration, OEM battery handling) with iOS CallKit parity, plus OneSignal push over APNs and FCM.

04

Growth built in

Stripe subscriptions, promo codes and a referral-reward system on hardened webhooks, plus an embeddable lead-capture widget with phone OTP that shipped across 24 releases.

  • Astro programmatic-SEO site of ~2,200 city and property pages on R2
  • Recovered ~2,000 'Discovered, not indexed' pages with internal linking, hub pages and locale parity
03

Key decisions

  1. One adapter, not eleven patches

    Every caller talks to one interface; the adapter owns the API shape. Switching APIs, or back, is a single binding.

  2. Structure the model's output

    A tag protocol gives the model a safe, testable way to drive the interface without free-form parsing.

  3. Treat indexation as priority, not a bug

    The SEO problem was crawl budget and authority, so the fix was linking and hubs rather than more technical tweaks.