/* ============================================================
PAGES — Home, Buy/Rent listings, Area microsite, Agent
microsite, Contact
============================================================ */
/* ---------- Listing Card (shared) ---------- */
function ListingCard({ L, t, onClick }) {
return (
{L.tag}
{L.area} · {L.type}
{L.title}
{L.beds} bd
{L.baths} ba
{L.sizeSqft ? L.sizeSqft + " sqft" : "On request"}
{L.priceLabel}
View detail
);
}
/* ============================================================
HOME / SHELL
============================================================ */
function HomePage({ t, dir, onPage, openLead }) {
return (
{/* HERO ====================================== */}
RERA ORN 11917 · Verified
{t.hero.eyebrow} EST 2012
{t.hero.forbes}
{t.hero.h1Pre} {t.hero.h1Em}
{t.hero.sub}
openLead("viewing")}>
{t.hero.bookView}
openLead("valuation")}>
{t.hero.valuation}
{t.hero.wa}
{t.hero.trust.map((tt, i) => (
{tt.v} {tt.k}
))}
{/* SEARCH BAR ====================================== */}
{/* TRUST STRIP ====================================== */}
{t.trustStrip.eyebrow}
{t.trustStrip.cells.map((c, i) => (
{c.k}
{c.v}
{c.sub}
))}
{/* AREAS ====================================== */}
{t.areas.eyebrow}
{t.areas.h1} {t.areas.h1Em}
{AREAS.map((a) => (
onPage("area")}>
{a.meta}
Microsite
{a.name}
))}
{/* FEATURED LISTINGS ====================================== */}
{t.listings.eyebrow}
{t.listings.h1} {t.listings.h1Em}
{t.listings.lede}
onPage("buy")}>
{t.listings.viewAll}
{FIXTURE_LISTINGS.slice(0,3).map(L => openLead("viewing", L.title)}/>)}
{t.search.fixture}
{/* WHY DRIVEN (dark editorial) ====================================== */}
{t.why.eyebrow}
{t.why.h1} {t.why.h1Em}
{t.why.lede}
openLead("talk")}>
Speak with a broker
{t.why.pillars.map((p, i) => (
))}
{/* AGENTS ====================================== */}
{t.agentsSec.eyebrow}
{t.agentsSec.h1} {t.agentsSec.h1Em}
{t.agentsSec.lede}
onPage("agent")}>
Browse all brokers
{AGENTS.slice(0,8).map(a => (
onPage("agent")}>
{a.langs.map(l => {l} )}
{a.name}
{a.role}
{a.listings} live
{a.sales}
))}
{/* FINAL CTA BAND ====================================== */}
{t.finalCta.eyebrow}
{t.finalCta.h1} {t.finalCta.h1Em} {t.finalCta.h1Suf}
{t.finalCta.sub}
);
}
/* ----- Listing search bar ----- */
function SearchBar({ t }) {
const [tab, setTab] = React.useState("buy");
return (
);
}
/* ============================================================
AREA MICROSITE — Downtown Dubai
============================================================ */
function AreaPage({ t, onPage, openLead }) {
const d = t.downtown;
return (
Area microsite · 01 / 06
{d.title1} {d.titleEm}
openLead("viewing", "Downtown Dubai")}>Book a viewing
openLead("brochure", "Downtown brochure")}>Download brochure
WhatsApp the Downtown desk
{d.cap.label}
{d.cap.text}
{/* Area stats */}
{d.stats.map((s, i) => (
{s.num}
{s.lbl}
{s.src}
))}
{/* Editorial */}
{d.editorialH}
{d.editorial.map((p, i) =>
)}
{/* Gallery */}
{/* Why invest */}
Investor brief
{d.investH} {d.investEm}
A working brief — six investor questions the Driven Downtown desk most often answers. Off-the-record figures available on request.
{d.invest.map((c, i) => (
))}
{/* Featured listings in this area */}
On the market
{d.featuredH} {d.featuredEm}
Live from the Property Finder feed — refreshed every 30 minutes. Click into any card for the live detail.
{FIXTURE_LISTINGS.filter(L => L.area === "Downtown Dubai").slice(0,3).map(L => (
openLead("viewing", L.title)} />
))}
{t.search.fixture}
{/* Map block */}
On the map
Downtown at a glance.
Five-minute walking radius from Burj Park. The coordinates below are placeholder — production renders the live MapTiler embed.
{/* roads */}
{/* park */}
{/* pins */}
{[[1050,510,"Burj Khalifa"],[1320,460,"Dubai Mall"],[860,560,"Opera"],[1180,640,"Old Town"],[1500,420,"Boulevard"],[760,440,"Burj Park"]].map(([x,y,lbl], i) => (
{lbl}
))}
DOWNTOWN DUBAI · APPROX. WALKING RADIUS · PLACEHOLDER MAP
{/* CTA */}
Downtown desk
The broker who lists Downtown lives in Downtown.
One name, one mobile number, one WhatsApp thread. The Driven Downtown team is run out of our Emaar Square HQ — five minutes from every listing on this page.
openLead("viewing", "Downtown")}>Book a viewing
openLead("valuation", "Downtown")}>Free valuation
openLead("brochure", "Downtown brochure")}>Download brochure
);
}
/* ============================================================
AGENT MICROSITE — Mohammed Abdulrahman
============================================================ */
function AgentPage({ t, onPage, openLead }) {
const ag = AGENTS.find(a => a.slug === "mohammed-a");
const a = t.agent;
return (
RERA-certified
{a.role}
{ag.name}
{a.bio}
{a.facts.map((f, i) => (
{f.k}
{f.v}
))}
openLead("talk", ag.name)}>{a.callMe}
{a.whats}
openLead("viewing", ag.name)}>{a.book}
{ag.listings} live listings
{ag.sales} closed (lifetime)
Tap to view profile in CRM
{/* Live listings (filtered to area) */}
Live
{a.listingsH} {a.listingsEm}
Pulled from Mohammed's portfolio in the Driven CRM, refreshed every 30 minutes. Cards link straight to the live detail page.
{FIXTURE_LISTINGS.slice(0,3).map(L => openLead("viewing", L.title + " · with " + ag.name)} />)}
{t.search.fixture}
{/* Other agents strip */}
Other brokers
Or pick another broker.
{AGENTS.filter(x => x.slug !== "mohammed-a").slice(0,8).map(x => (
onPage("agent")}>
{x.langs.map(l => {l} )}
{x.name}
{x.role}
{x.listings} live {x.sales}
))}
{/* CTA */}
Start the conversation
Talk to {ag.name.split(" ")[0]} directly.
No call-centre — your enquiry routes straight to the broker.
openLead("talk", ag.name)}>Send a message
WhatsApp the broker
openLead("viewing", ag.name)}>Book a viewing
);
}
/* ============================================================
CONTACT
============================================================ */
function ContactPage({ t, onPage, openLead }) {
const c = t.contact;
return (
{c.eyebrow}
{c.title} {c.titleEm}
{c.lede}
{c.channels.map((ch, i) => (
{ch.lbl}
{ch.val}
{ch.sub}
))}
{c.officesH}
{c.officesL}
{OFFICES.map((o, i) => (
{o.hq ?
Headquarters · UAE
: null}
{o.name}
{o.addr.split("\n").map((l,j) =>
{l}
)}
))}
Open a thread
What would you like to do?
Pick a channel and a broker replies — within one business day, faster on WhatsApp.
{[
{ k: "viewing", l: "Book a viewing" },
{ k: "valuation", l: "Request a free valuation" },
{ k: "listProp", l: "List your property" },
{ k: "talk", l: "Talk to a broker" },
{ k: "brochure", l: "Download the brochure" },
].map(b => (
openLead(b.k)} style={{ justifyContent: "space-between", width: "100%" }}>
{b.l}
))}
Or open WhatsApp — wa.me/971800776655
{/* Banner */}
The team
650+ professionals. One conversation.
);
}
/* ============================================================
BUY / RENT — simple listings index (placeholder)
============================================================ */
function ListingsIndex({ t, mode, openLead }) {
const title = mode === "rent" ? "Rentals" : "For sale";
return (
{title}
Selected {mode==="rent" ? "rentals." : "residences."}
A live cross-section, refreshed from the Property Finder feed. All cards link to the full detail page.
{FIXTURE_LISTINGS.map(L => openLead("viewing", L.title)} />)}
{t.search.fixture}
);
}
Object.assign(window, { HomePage, AreaPage, AgentPage, ContactPage, ListingsIndex, ListingCard });