// Binghatti Flare — Lead-gen landing page (marketed by Treysta Real Estate Broker L.L.C)
// Broker campaign. Components exported to window.
const WA = '971582475234'; // Treysta WhatsApp lead line
const TEL = '+971585336375'; // Treysta call line
const AGENCY = 'Treysta Real Estate Broker L.L.C';
const AGENCY_SHORT = 'Treysta';
const ORN = '46270'; // Treysta RERA ORN
function waLink(msg) {
return `https://wa.me/${WA}?text=${encodeURIComponent(msg || "Hi, I'd like the Binghatti Flare price list and floor plans please.")}`;
}
/* ============================================================
LEAD INTEGRATION — Google Sheet + CRM
------------------------------------------------------------
Paste your endpoints below. See INTEGRATION.md for the
2-minute Apps Script setup (pre-filled to your sheet).
- googleSheetUrl: the Apps Script Web App /exec URL.
- crmWebhookUrl : any JSON POST endpoint (Zapier / Make /
HubSpot / Bitrix24 / Salesforce Web-to-Lead proxy, etc.).
Leave a value '' to skip it. The form still works if both
are empty (lead is kept in localStorage as a backup).
============================================================ */
const LEAD_CONFIG = {
sheetId: '11Spa1HyGKpSZYQsZGNuBNOCbep4NavHHAU8QYDz_9NQ',
googleSheetUrl: 'https://script.google.com/macros/s/AKfycbzk1m4Dk5kOOWoGFk_oIonut0Ttd_VA_hRHqipalZl9ImXSZWJDgUrJeD764elSiFnlWg/exec', // ← Apps Script Web App (Sheet + email)
crmWebhookUrl: 'https://services.leadconnectorhq.com/hooks/mQIGQSfkaBURi1jHWkv7/webhook-trigger/092b1c3a-3dd7-4f7e-a35c-8019a2c0ed63', // LeadConnector / HighLevel inbound webhook
source: 'Binghatti Flare LP',
};
try { window.__adConsent = localStorage.getItem('flare_consent') === 'accepted'; } catch (e) { window.__adConsent = false; }
function leadTracking() {
try {
const p = new URLSearchParams(location.search);
const o = {};
['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'gclid', 'fbclid', 'msclkid']
.forEach(k => { const v = p.get(k); if (v) o[k] = v; });
return o;
} catch (e) { return {}; }
}
async function submitLead(payload) {
const body = {
...payload,
source: LEAD_CONFIG.source,
page: (typeof location !== 'undefined' ? location.href : ''),
referrer: (typeof document !== 'undefined' ? document.referrer : '') || 'direct',
submittedAt: new Date().toISOString(),
...leadTracking(),
};
// Local backup so a lead is never lost if the network fails.
try {
const k = 'flare_leads';
const a = JSON.parse(localStorage.getItem(k) || '[]');
a.push(body); localStorage.setItem(k, JSON.stringify(a));
} catch (e) { /* ignore */ }
const tasks = [];
if (LEAD_CONFIG.googleSheetUrl) {
// text/plain avoids the CORS preflight Apps Script can't answer.
tasks.push(fetch(LEAD_CONFIG.googleSheetUrl, {
method: 'POST', mode: 'no-cors',
headers: { 'Content-Type': 'text/plain;charset=utf-8' },
body: JSON.stringify(body),
}));
}
if (LEAD_CONFIG.crmWebhookUrl) {
// Real JSON (cors) so HighLevel/LeadConnector parses fields for workflow mapping.
tasks.push(fetch(LEAD_CONFIG.crmWebhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
}).catch(function () {}));
}
try { await Promise.allSettled(tasks); } catch (e) { /* never block the UX */ }
// Conversion events — only when the visitor has consented to analytics/advertising cookies.
if (window.__adConsent) {
try { if (window.gtag) window.gtag('event', 'generate_lead', { currency: 'AED', value: PRICE_AED, items: [{ item_name: body.unit || 'Unspecified' }] }); } catch (e) {}
try { if (window.__trackLeadConversion) window.__trackLeadConversion(); } catch (e) {}
try { if (window.fbq) window.fbq('track', 'Lead', { content_name: 'Binghatti Flare', value: PRICE_AED, currency: 'AED' }); } catch (e) {}
try { if (window.dataLayer) window.dataLayer.push({ event: 'lead_submit', unit: body.unit || '' }); } catch (e) {}
}
return true;
}
/* ---------- currency ---------- */
const PRICE_AED = 800000; // starting price
const CURRENCIES = {
AED: { sym: 'AED', rate: 1 },
USD: { sym: '$', rate: 0.2723 },
EUR: { sym: '€', rate: 0.2487 },
INR: { sym: '₹', rate: 23.9 },
};
// Live FX: refresh rates (base AED) on load, keep the values above as fallback.
function loadLiveRates(onDone) {
try {
fetch('https://open.er-api.com/v6/latest/AED')
.then(r => r.ok ? r.json() : Promise.reject())
.then(d => {
const rt = d && d.rates;
if (!rt) return;
if (rt.USD) CURRENCIES.USD.rate = rt.USD;
if (rt.EUR) CURRENCIES.EUR.rate = rt.EUR;
if (rt.INR) CURRENCIES.INR.rate = rt.INR;
if (typeof onDone === 'function') onDone();
})
.catch(() => {});
} catch (e) {}
}
const CurrencyCtx = React.createContext(['AED', () => {}]);
function useCurrency() { return React.useContext(CurrencyCtx); }
function fmtK(aed, cur) {
const c = CURRENCIES[cur] || CURRENCIES.AED;
const v = aed * c.rate;
if (cur === 'INR') return `₹${(v / 1e7).toFixed(1)} Cr`;
const k = Math.round(v / 1000);
return cur === 'AED' ? `AED ${k}K` : `${c.sym}${k}K`;
}
function fmtFull(aed, cur) {
const c = CURRENCIES[cur] || CURRENCIES.AED;
if (cur === 'INR') return `₹${(aed * c.rate / 1e7).toFixed(2)} Crore`;
const v = Math.round((aed * c.rate) / 1000) * 1000;
const n = v.toLocaleString('en-US');
return cur === 'AED' ? `AED ${n}` : `${c.sym}${n}`;
}
function CurrencySwitcher() {
const [cur, setCur] = useCurrency();
const [open, setOpen] = React.useState(false);
const ref = React.useRef(null);
React.useEffect(() => {
const onDoc = e => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
document.addEventListener('mousedown', onDoc);
return () => document.removeEventListener('mousedown', onDoc);
}, []);
return (
setOpen(o => !o)} aria-haspopup="listbox" aria-expanded={open}>
{cur}▾
{open && (
{Object.keys(CURRENCIES).map(k => (
{ setCur(k); setOpen(false); }}>{k}
))}
)}
);
}
/* ---------- icons ---------- */
const IconWhatsApp = ({ s = 18 }) => (
);
const IconPhone = ({ s = 18 }) => (
);
const IconCheck = ({ s = 16 }) => ( );
const IconArrow = ({ s = 16 }) => ( );
const IconPlus = ({ s = 18 }) => ( );
const IconLock = ({ s = 16 }) => ( );
// amenity line icons
const IcBeach = ({ s = 22 }) => ( );
const IcPool = ({ s = 22 }) => ( );
const IcGym = ({ s = 22 }) => ( );
const IcPaddle = ({ s = 22 }) => ( );
const IcKids = ({ s = 22 }) => ( );
const IcLobby = ({ s = 22 }) => ( );
const IcRetail = ({ s = 22 }) => ( );
const IcView = ({ s = 22 }) => ( );
/* ---------- chrome ---------- */
function TopBar({ onRegister }) {
return (
);
}
function UrgencyBar({ show }) {
if (!show) return null;
return ( Launch pricing now live · limited release
);
}
function Chip({ children }) { return {children}
; }
function Hero({ t, scrollToForm, onRegister }) {
const [cur] = useCurrency();
return (
Jumeirah Village Triangle · Dubai
{t.headline}
A landmark collection of residences, crafted by Binghatti on an easy 70/30 plan .
From {fmtK(PRICE_AED, cur)}* Starting price
Studio to 4 BR Residences & retail
Q2 2027 Handover
);
}
function InfoModal({ title, children, onClose }) {
React.useEffect(() => {
const onKey = e => { if (e.key === 'Escape') onClose(); };
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, []);
return (
e.stopPropagation()}>
×
{title}
{children}
);
}
const LEGAL = {
disclaimer: (
<>
{AGENCY} is a RERA registered property broker (ORN {ORN}) marketing Binghatti Flare in Jumeirah Village Triangle, Dubai, as an authorised channel partner. We are not the developer. Binghatti and Binghatti Flare are trademarks of Binghatti Developers.
Prices, payment plans, availability, sizes, imagery and handover dates are indicative, subject to change, and do not form part of any offer or contract. Renders are artist impressions.
© 2026 {AGENCY}. All rights reserved.
>
),
privacy: (
<>
At Treysta, privacy of visitors of our website is top priority. This Privacy Policy gives a detailed view into what types of information is collected from our visitors and how we use the same. It only applies to our online activities and does not extend to any data collected offline or through other channels.
Consent. By using our website, you hereby consent to our Privacy Policy and agree to its terms.
What we collect. We collect and record the personal information you share with us when you register. This information includes your name, company name, address, email id, mobile number and other such information. If you contact us directly, we may also receive additional information such as the content of your message and any attachments you choose to provide.
How we use your information. To operate and maintain our website; understand and analyse how you use it; improve and personalise our customer approach; develop new products, services and features; ensure customer safety and prevent fraud; communicate with you directly or through a partner; enable good customer service; and undertake marketing and promotional initiatives.
Log files. Like all hosting companies, we log visitors. These files collect Internet Protocol (IP) addresses, browser type, Internet Service Provider (ISP), referring/exit pages, time spent on the website, number of clicks, and date and time stamp. This information is not linked to any personally identifiable information.
Advertising partners. Some advertisers on our site may use cookies and web beacons. Each advertising partner has its own privacy policy for how it uses your data. Treysta has no access to or control over the cookies used by third-party advertisers. We advise you to review their respective privacy policies for details on how they use your information and how to opt out.
Children's information. Treysta does not knowingly collect any personal information from minors. We advise parents and guardians to monitor children's activity online. If you believe your child has shared this type of information on our website, please contact us and we will do our best to promptly remove it.
Your GDPR rights. Every user is entitled to: the right to access your personal data; the right to rectification; the right to erase, under certain conditions; the right to restrict processing, under certain conditions; and the right to data portability. Any request you make will be adhered to, and Treysta may take up to one month to respond.
Contact. If you need more information about our Privacy Policy, or wish to exercise any of your rights, write to us at info@treysta.ae .
>
),
cookies: (
<>
Treysta uses cookies and web beacons on its website. These cookies collect and store information that is used to optimise visitor experience. This includes visitors' likes and preferences, pages they visited, the time they spent, the browser they used and other information. This helps Treysta customise and personalise its web page content to provide a better experience.
Some of the advertisers on our site may use cookies and web beacons. Third-party ad servers and ad networks also use technologies such as cookies, web beacons or JavaScript in their advertisements and links. These technologies are used to measure the effectiveness of advertising campaigns and to customise ad content for relevancy.
You can choose to disable cookies through your own individual browser. You can learn about cookie management specific to your web browser on its respective website.
>
),
};
function DisclaimerModal({ onClose }) {
return {LEGAL.disclaimer} ;
}
function FormModal({ t, onClose }) {
React.useEffect(() => {
const onKey = e => { if (e.key === 'Escape') onClose(); };
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, []);
return (
);
}
const COUNTRIES = [
["AE", "United Arab Emirates", "+971"],
["SA", "Saudi Arabia", "+966"],
["QA", "Qatar", "+974"],
["BH", "Bahrain", "+973"],
["OM", "Oman", "+968"],
["KW", "Kuwait", "+965"],
["IN", "India", "+91"],
["GB", "United Kingdom", "+44"],
["US", "United States", "+1"],
["AF", "Afghanistan", "+93"],
["AL", "Albania", "+355"],
["DZ", "Algeria", "+213"],
["AD", "Andorra", "+376"],
["AO", "Angola", "+244"],
["AG", "Antigua & Barbuda", "+1"],
["AR", "Argentina", "+54"],
["AM", "Armenia", "+374"],
["AU", "Australia", "+61"],
["AT", "Austria", "+43"],
["AZ", "Azerbaijan", "+994"],
["BS", "Bahamas", "+1"],
["BD", "Bangladesh", "+880"],
["BB", "Barbados", "+1"],
["BY", "Belarus", "+375"],
["BE", "Belgium", "+32"],
["BZ", "Belize", "+501"],
["BJ", "Benin", "+229"],
["BT", "Bhutan", "+975"],
["BO", "Bolivia", "+591"],
["BA", "Bosnia & Herzegovina", "+387"],
["BW", "Botswana", "+267"],
["BR", "Brazil", "+55"],
["BN", "Brunei", "+673"],
["BG", "Bulgaria", "+359"],
["BF", "Burkina Faso", "+226"],
["BI", "Burundi", "+257"],
["KH", "Cambodia", "+855"],
["CM", "Cameroon", "+237"],
["CA", "Canada", "+1"],
["CV", "Cape Verde", "+238"],
["CF", "Central African Republic", "+236"],
["TD", "Chad", "+235"],
["CL", "Chile", "+56"],
["CN", "China", "+86"],
["CO", "Colombia", "+57"],
["KM", "Comoros", "+269"],
["CG", "Congo", "+242"],
["CD", "Congo (DRC)", "+243"],
["CR", "Costa Rica", "+506"],
["CI", "Côte d'Ivoire", "+225"],
["HR", "Croatia", "+385"],
["CU", "Cuba", "+53"],
["CY", "Cyprus", "+357"],
["CZ", "Czechia", "+420"],
["DK", "Denmark", "+45"],
["DJ", "Djibouti", "+253"],
["DM", "Dominica", "+1"],
["DO", "Dominican Republic", "+1"],
["EC", "Ecuador", "+593"],
["EG", "Egypt", "+20"],
["SV", "El Salvador", "+503"],
["GQ", "Equatorial Guinea", "+240"],
["ER", "Eritrea", "+291"],
["EE", "Estonia", "+372"],
["SZ", "Eswatini", "+268"],
["ET", "Ethiopia", "+251"],
["FJ", "Fiji", "+679"],
["FI", "Finland", "+358"],
["FR", "France", "+33"],
["GA", "Gabon", "+241"],
["GM", "Gambia", "+220"],
["GE", "Georgia", "+995"],
["DE", "Germany", "+49"],
["GH", "Ghana", "+233"],
["GR", "Greece", "+30"],
["GD", "Grenada", "+1"],
["GT", "Guatemala", "+502"],
["GN", "Guinea", "+224"],
["GW", "Guinea-Bissau", "+245"],
["GY", "Guyana", "+592"],
["HT", "Haiti", "+509"],
["HN", "Honduras", "+504"],
["HK", "Hong Kong", "+852"],
["HU", "Hungary", "+36"],
["IS", "Iceland", "+354"],
["ID", "Indonesia", "+62"],
["IR", "Iran", "+98"],
["IQ", "Iraq", "+964"],
["IE", "Ireland", "+353"],
["IL", "Israel", "+972"],
["IT", "Italy", "+39"],
["JM", "Jamaica", "+1"],
["JP", "Japan", "+81"],
["JO", "Jordan", "+962"],
["KZ", "Kazakhstan", "+7"],
["KE", "Kenya", "+254"],
["KI", "Kiribati", "+686"],
["KG", "Kyrgyzstan", "+996"],
["LA", "Laos", "+856"],
["LV", "Latvia", "+371"],
["LB", "Lebanon", "+961"],
["LS", "Lesotho", "+266"],
["LR", "Liberia", "+231"],
["LY", "Libya", "+218"],
["LI", "Liechtenstein", "+423"],
["LT", "Lithuania", "+370"],
["LU", "Luxembourg", "+352"],
["MO", "Macau", "+853"],
["MG", "Madagascar", "+261"],
["MW", "Malawi", "+265"],
["MY", "Malaysia", "+60"],
["MV", "Maldives", "+960"],
["ML", "Mali", "+223"],
["MT", "Malta", "+356"],
["MH", "Marshall Islands", "+692"],
["MR", "Mauritania", "+222"],
["MU", "Mauritius", "+230"],
["MX", "Mexico", "+52"],
["FM", "Micronesia", "+691"],
["MD", "Moldova", "+373"],
["MC", "Monaco", "+377"],
["MN", "Mongolia", "+976"],
["ME", "Montenegro", "+382"],
["MA", "Morocco", "+212"],
["MZ", "Mozambique", "+258"],
["MM", "Myanmar", "+95"],
["NA", "Namibia", "+264"],
["NR", "Nauru", "+674"],
["NP", "Nepal", "+977"],
["NL", "Netherlands", "+31"],
["NZ", "New Zealand", "+64"],
["NI", "Nicaragua", "+505"],
["NE", "Niger", "+227"],
["NG", "Nigeria", "+234"],
["KP", "North Korea", "+850"],
["MK", "North Macedonia", "+389"],
["NO", "Norway", "+47"],
["PK", "Pakistan", "+92"],
["PW", "Palau", "+680"],
["PS", "Palestine", "+970"],
["PA", "Panama", "+507"],
["PG", "Papua New Guinea", "+675"],
["PY", "Paraguay", "+595"],
["PE", "Peru", "+51"],
["PH", "Philippines", "+63"],
["PL", "Poland", "+48"],
["PT", "Portugal", "+351"],
["RO", "Romania", "+40"],
["RU", "Russia", "+7"],
["RW", "Rwanda", "+250"],
["KN", "Saint Kitts & Nevis", "+1"],
["LC", "Saint Lucia", "+1"],
["VC", "Saint Vincent", "+1"],
["WS", "Samoa", "+685"],
["SM", "San Marino", "+378"],
["ST", "São Tomé & Príncipe", "+239"],
["SN", "Senegal", "+221"],
["RS", "Serbia", "+381"],
["SC", "Seychelles", "+248"],
["SL", "Sierra Leone", "+232"],
["SG", "Singapore", "+65"],
["SK", "Slovakia", "+421"],
["SI", "Slovenia", "+386"],
["SB", "Solomon Islands", "+677"],
["SO", "Somalia", "+252"],
["ZA", "South Africa", "+27"],
["KR", "South Korea", "+82"],
["SS", "South Sudan", "+211"],
["ES", "Spain", "+34"],
["LK", "Sri Lanka", "+94"],
["SD", "Sudan", "+249"],
["SR", "Suriname", "+597"],
["SE", "Sweden", "+46"],
["CH", "Switzerland", "+41"],
["SY", "Syria", "+963"],
["TW", "Taiwan", "+886"],
["TJ", "Tajikistan", "+992"],
["TZ", "Tanzania", "+255"],
["TH", "Thailand", "+66"],
["TL", "Timor-Leste", "+670"],
["TG", "Togo", "+228"],
["TO", "Tonga", "+676"],
["TT", "Trinidad & Tobago", "+1"],
["TN", "Tunisia", "+216"],
["TR", "Türkiye", "+90"],
["TM", "Turkmenistan", "+993"],
["TV", "Tuvalu", "+688"],
["UG", "Uganda", "+256"],
["UA", "Ukraine", "+380"],
["UY", "Uruguay", "+598"],
["UZ", "Uzbekistan", "+998"],
["VU", "Vanuatu", "+678"],
["VE", "Venezuela", "+58"],
["VN", "Vietnam", "+84"],
["YE", "Yemen", "+967"],
["ZM", "Zambia", "+260"],
["ZW", "Zimbabwe", "+263"],
];
const UNIT_OPTIONS = ['Studio', '1 Bedroom', '2 Bedroom', '3 Bedroom', '4 Bedroom'];
function CountrySelect({ value, onChange }) {
const [open, setOpen] = React.useState(false);
const [q, setQ] = React.useState('');
const ref = React.useRef(null);
React.useEffect(() => {
const onDoc = e => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
document.addEventListener('mousedown', onDoc);
return () => document.removeEventListener('mousedown', onDoc);
}, []);
React.useEffect(() => { if (!open) setQ(''); }, [open]);
const sel = COUNTRIES.find(c => c[2] === value) || COUNTRIES[0];
const ql = q.trim().toLowerCase();
const list = ql ? COUNTRIES.filter(c => c[1].toLowerCase().includes(ql) || c[2].includes(ql) || c[0].toLowerCase() === ql) : COUNTRIES;
return (
setOpen(o => !o)} aria-haspopup="listbox" aria-expanded={open}>
{sel[0]}
{sel[2]}
▾
{open && (
)}
);
}
function LeadForm({ t, compact }) {
const [sent, setSent] = React.useState(false);
const [sending, setSending] = React.useState(false);
const [vals, setVals] = React.useState({ name: '', cc: '+971', phone: '', email: '', unit: '', consent: true });
const [err, setErr] = React.useState({});
const submit = async (e) => {
e.preventDefault();
if (sending) return;
const er = {};
const digits = vals.phone.replace(/\D/g, '');
if (vals.name.trim().length < 2 || /\d/.test(vals.name)) er.name = 1;
if (/[A-Za-z]/.test(vals.phone) || digits.length < 7 || digits.length > 15) er.phone = 1;
if (!/^[^@\s]+@[^@\s]+\.[^@\s]{2,}$/.test(vals.email.trim())) er.email = 1;
if (!vals.consent) er.consent = 1;
setErr(er);
if (Object.keys(er).length > 0) return;
setSending(true);
// Dispatch to Sheet/email + CRM, but don't make the user wait on slow
// endpoints (Apps Script can take several seconds; the requests still
// complete in the background and the lead is backed up locally).
await Promise.race([
submitLead({
name: vals.name.trim(),
phone: (vals.cc + ' ' + vals.phone).replace(/\s+/g, ' ').trim(),
countryCode: vals.cc,
email: vals.email.trim(),
unit: vals.unit || 'Not specified',
consent: vals.consent ? 'Yes' : 'No',
}),
new Promise(r => setTimeout(r, 1200)),
]);
setSending(false);
setSent(true);
};
const setField = (k, v) => { setVals(p => ({ ...p, [k]: v })); setErr(p => { if (!p[k]) return p; const n = { ...p }; delete n[k]; return n; }); };
const MSG = { name: 'Please enter a valid name', phone: 'Enter a valid mobile number', email: 'Enter a valid email address', consent: 'Please tick the box to continue' };
if (sent) return ;
return (
);
}
function ThankYou({ name }) {
return (
Thank you{name ? `, ${name.split(' ')[0]}` : ''}.
We'll send the price list and floor plans on WhatsApp shortly.
Chat now on WhatsApp
);
}
function BrokerTrust() {
const items = ['Official channel partner', 'Direct developer pricing', 'RERA registered broker', '1,000+ buyers assisted'];
return (
{items.map((t, i) => {t}
)}
);
}
function WhyDubai() {
const items = [
['0%', 'No annual property, income or capital-gains tax.'],
['Up to 10%', 'Gross rental yields, among the world’s strongest.'],
['10 Yr', 'Golden Visa on homes of AED 2M+.'],
['100%', 'Freehold for all nationalities. RERA escrow protected.'],
['Top 10', 'Ranked among the world’s safest cities.'],
];
return (
Why Dubai
Dubai, in Five Numbers.
{items.map(([n, l], i) => (
{n} {l}
))}
Market figures: Dubai Land Department / published portal data, 2025. Indicative only, not financial advice.
);
}
function Facts() {
const data = [
['2', 'Iconic towers · 40 & 34 floors'],
['1,378', 'Residences + 79 retail units'],
['70 / 30', 'Easy payment plan*'],
['JVT', 'Minutes to Marina & Downtown'],
];
return (
Why Flare
A Community That Matters.
{data.map(([n, l], i) => (
{n} {l}
))}
);
}
function UnitMix({ scrollToForm }) {
const [cur] = useCurrency();
const units = [
{ k: 'Studio', px: `From ${fmtK(PRICE_AED, cur)}*`, mt: 'Investor favourite', img: 'unitStudio' },
{ k: '1 Bedroom', px: 'Price on request', mt: 'Balcony · skyline view', img: 'unit1' },
{ k: '2 Bedroom', px: 'Price on request', mt: 'Family ready', img: 'unit2' },
{ k: '3 & 4 Bedroom', px: 'Price on request', mt: 'Sky terrace · pool', img: 'unit3' },
];
return (
Choose your residence
From Studios to Four Bedroom Sky Homes
{units.map((u, i) => (
{u.k}
{u.px}
{u.mt}
Enquire
))}
* Indicative starting prices. Confirm availability on enquiry.
);
}
function Amenities() {
const a = [
[ , 'Artificial beach', 'Sand & pool deck'],
[ , 'Private sky pools', 'Sky-terrace homes'],
[ , 'Gym & running lane', 'Wellness floor'],
[ , 'Paddle court', 'Active living'],
[ , 'Kids wet & dry play', 'Family zones'],
[ , 'Luxury lobby', 'Signature arrival'],
[ , 'Retail & shopping', '79 units below'],
[ , 'Skyline views', 'Burj on the horizon'],
];
return (
Life at Flare
Resort Amenities at Your Door.
{a.map(([ic, t, s], i) => (
))}
);
}
function FloorPlans({ scrollToForm }) {
const plans = [
{ k: 'Studio', f: 'fpStudio' },
{ k: '1 Bedroom', f: 'fp1' },
{ k: '2 Bedroom', f: 'fp2' },
{ k: '3 Bedroom', f: 'fp3' },
{ k: '4 Bedroom', f: 'fp4' },
];
const [i, setI] = React.useState(0);
return (
{plans.map((p, n) => (
setI(n)}>{p.k}
))}
Floor plans available on request
Tap to unlock
{plans[i].k}
Indicative layout. Request the full floor plan pack with sizes and the current price list.
Register Interest
);
}
function GalleryStrip({ onOpen }) {
const imgs = ['gExtBurj', 'unit1', 'gPodiumNight', 'gExtPoolDay', 'unitStudio', 'gExtSunset', 'unit2', 'gAmDeck', 'gExtFog', 'unit3', 'gExtDay', 'gAmAerial', 'lobby', 'gFooterSunset', 'int4'];
return (
{imgs.slice(0, 5).map((g, i) => (
onOpen(imgs, i)} style={{ backgroundImage: `url('${RES(g)}')` }} aria-label="View image">
))}
onOpen(imgs, 0)}>View All Photos
);
}
function Lightbox({ imgs, index, onClose, onNav }) {
React.useEffect(() => {
const onKey = e => {
if (e.key === 'Escape') onClose();
if (e.key === 'ArrowRight') onNav(1);
if (e.key === 'ArrowLeft') onNav(-1);
};
window.addEventListener('keydown', onKey);
return () => window.removeEventListener('keydown', onKey);
}, [onClose, onNav]);
return (
×
{ e.stopPropagation(); onNav(-1); }} aria-label="Previous">‹
e.stopPropagation()} alt="Binghatti Flare" />
{ e.stopPropagation(); onNav(1); }} aria-label="Next">›
{index + 1} / {imgs.length}
);
}
function Tour360() {
return (
Step inside
A 360° Walk Through Flare.
);
}
function Location() {
const conn = [
['Dubai Marina & Harbour', '10 min'],
['Mall of the Emirates', '10 min'],
['Expo City Dubai', '10 min'],
['Palm Jumeirah', '15 min'],
['Downtown & Burj Khalifa', '20 min'],
['Al Maktoum Intl. Airport', '22 min'],
];
return (
Where it is
JVT. Central and Connected.
{conn.map(([p, tm], i) => {p} {tm} )}
Drive times indicative.
);
}
function PaymentPlan({ scrollToForm }) {
const steps = [
['Book', '20%', 'Down payment'],
['Build', '50%', 'During construction'],
['Handover', '30%', 'On completion'],
];
return (
Easy to own
Built for Buyers and Investors
{steps.map(([tag, pct, lbl], i) => (
{tag} {pct} {lbl}
))}
Book Now
);
}
function FAQ() {
const [cur] = useCurrency();
const items = [
['What types of residences are available?', "Studios to four bedroom apartments across two towers, plus retail."],
['Who is the developer?', "Binghatti is one of Dubai's leading developers, known for its bold, sculptural towers and a portfolio of landmark residences across the city."],
['What is the payment plan?', "70/30: 20% on booking, 50% during construction, 30% on handover."],
['When is handover?', "Targeted for Q2 2027. Indicative, confirmed at booking."],
['Can foreign nationals buy?', "Yes. Flare is freehold, open to all nationalities."],
['Do I pay tax on a Dubai property?', "No. Dubai has no property tax, no tax on rental income, and no capital-gains tax for individual owners."],
['Can buying get me residency?', "Yes. A Dubai home worth AED 2M or more (including off-plan like Flare) qualifies you and your family for a 10-year renewable Golden Visa."],
['Can I buy from overseas?', "Yes. The full process (reservation, contracts and payments) can be completed remotely, and we guide you at every step."],
];
const [open, setOpen] = React.useState(0);
return (
Good to know
Questions, Answered
{items.map(([q, ans], n) => (
setOpen(open === n ? -1 : n)} aria-expanded={open === n}>
{q}
))}
);
}
function FinalCTA({ onRegister }) {
const bgRef = React.useRef(null);
React.useEffect(() => {
let raf = 0, last = null;
const tick = () => {
const el = bgRef.current;
if (el) {
const r = el.parentElement.getBoundingClientRect();
const vh = window.innerHeight || document.documentElement.clientHeight;
const prog = Math.max(-1, Math.min(1, (r.top + r.height / 2 - vh / 2) / (vh / 2 + r.height / 2)));
if (prog !== last) { el.style.transform = `translate3d(0, ${(-prog * 16).toFixed(2)}%, 0) scale(1.28)`; last = prog; }
}
raf = requestAnimationFrame(tick);
};
raf = requestAnimationFrame(tick);
return () => cancelAnimationFrame(raf);
}, []);
return (
Own a Piece of the Skyline.
Get the price list and floor plans on WhatsApp in minutes.
);
}
function StickyActions({ onRegister }) {
return (
);
}
function Footer({ onLegal }) {
return (
);
}
function CookieBar({ onLegal }) {
const [show, setShow] = React.useState(() => {
try { return localStorage.getItem('flare_consent') == null; } catch (e) { return true; }
});
if (!show) return null;
const decide = (accepted) => {
try { localStorage.setItem('flare_consent', accepted ? 'accepted' : 'declined'); } catch (e) {}
window.__adConsent = accepted;
if (accepted && typeof window.__initPixels === 'function') { try { window.__initPixels(); } catch (e) {} }
setShow(false);
};
return (
);
}
Object.assign(window, { TopBar, UrgencyBar, Hero, LeadForm, ThankYou, FormModal, InfoModal, LEGAL, DisclaimerModal, CookieBar, BrokerTrust, WhyDubai, Tour360, Facts, UnitMix, Amenities, FloorPlans, GalleryStrip, Lightbox, Location, PaymentPlan, FAQ, FinalCTA, StickyActions, Footer, waLink, CurrencyCtx });