/* Danube Properties — Main App: Home + Routing */
const { useState: useStateA, useEffect: useEffectA, useMemo: useMemoA } = React;
function HomeView({ onOpenProject, onOpenLead, lang, tweaks }) {
const { PROJECTS, COMMUNITIES, LANDMARKS } = window.DANUBE_DATA;
const [filter, setFilter] = useStateA("All");
const [heroIdx, setHeroIdx] = useStateA(0);
const FEATURED = useMemoA(() => [
PROJECTS.find((p) => p.slug === "bayz-101"),
PROJECTS.find((p) => p.slug === "viewz"),
PROJECTS.find((p) => p.slug === "aspirz"),
PROJECTS.find((p) => p.slug === "oceanz"),
].filter(Boolean), []);
useEffectA(() => {
if (!tweaks.heroAutoplay) return;
const t = setInterval(() => setHeroIdx((i) => (i + 1) % FEATURED.length), 5500);
return () => clearInterval(t);
}, [FEATURED.length, tweaks.heroAutoplay]);
const filteredProjects = useMemoA(() => {
if (filter === "All") return PROJECTS;
return PROJECTS.filter((p) => p.community.includes(filter));
}, [filter, PROJECTS]);
const heroProject = FEATURED[heroIdx];
return (
{/* HERO */}
{FEATURED.map((p, i) => (
))}
Danube Properties
Dubai · Off-plan · Direct from the developer
Own your home
in Dubai — from 1%
a month.
Affordable-luxury residences across Dubai, sold direct from the developer on the original 1% monthly payment plan — 0% interest, up to 80 months*. Twelve live launches, one consultant, four hours to a response.
onOpenLead("interest")}>Register your interest →
document.getElementById("projects").scrollIntoView({ behavior: "smooth" })}>
See the launches
Now showing
{heroProject.name}
{heroProject.community}
{String(heroIdx + 1).padStart(2, "0")} / {String(FEATURED.length).padStart(2, "0")}
{FEATURED.map((p, i) => (
setHeroIdx(i)}
aria-label={p.name}
style={{
width: 24, height: 2, border: "none", padding: 0,
background: i === heroIdx ? "var(--primary)" : "rgba(255,255,255,0.3)",
cursor: "pointer", transition: "all 200ms",
}}
/>
))}
onOpenProject(heroProject)}
>Open microsite →
Scroll
{/* PARTNER BAND */}
{/* 1% PLAN BAND */}
The original 1% monthly plan
One percenta month.
We pioneered the scheme that changed Dubai off-plan: a monthly payment so small the price feels like rent. Direct from the developer, no third-party financing — split and unit price confirmed per project.
onOpenLead("interest")}>
Ask about your project →
*The 1% monthly payment plan with 0% interest and up to 80 months is a real published Danube scheme; exact terms, percentage split and unit price are confirmed per project on enquiry.
DLD DEV. NO. 1009*
{/* PROJECTS GRID */}
◆ 03 / Live launches
Thirteen residences,one developer.
Across Business Bay, JLT, Maritime City, Sports City and emerging communities — each on the 1% monthly plan, each with RERA/DLD-confirmable status.
{COMMUNITIES.map((c) => (
setFilter(c)}
>{c}
))}
{filteredProjects.map((p, i) => {
// First two cards in featured rows are larger
const isFeat = i % 7 === 0;
return (
onOpenProject(p)}
>
{p.partner && (
◆ {p.partner}*
)}
{p.name.slice(0, -1)}{p.name.slice(-1)}
{p.community}
{p.status === "launching" ? "Launching" : p.status === "selling" ? "Selling" : "Handed*"}
);
})}
{filteredProjects.length === 0 && (
No launches in {filter} this quarter. setFilter("All")}>See all projects
)}
*RERA / DLD-confirmable per project · 34+ launches in the wider portfolio · list non-exhaustive
{/* CINEMATIC BREAK — verified partners */}
◆ 04 / Verified collaborations
Branded residences, verified partners.
Two confirmed branded-residence partnerships. Logo marks shown only with confirmed usage rights.
{[
{ project: "Viewz", community: "JLT", partner: "Aston Martin Interiors", verified: true, img: "media/project-viewz-skyvilla-living.webp" },
{ project: "Fashionz", community: "JVT", partner: "FashionTV", verified: true, img: "media/project-fashionz-rooftop-lounge.webp" },
].map((c) => (
onOpenProject(PROJECTS.find((p) => p.name === c.project))}>
◆ Verified partnership
{c.project.slice(0, -1)}{c.project.slice(-1)}
× {c.partner}
))}
{/* LEGACY / ABOUT */}
◆ 05 / Legacy
Two stories,
one family —
kept distinct.
Danube Group was founded in 1993 by Rizwan Sajan as a building-materials trading business — a story of supply, logistics and the city's growth.
Danube Properties , the Group's real-estate arm, was registered in June 2014 and has since pioneered the 1% monthly payment plan that reshaped Dubai off-plan buying. Managing Director: Adel Sajan .
The two businesses share a founder and a name. We keep them, and their numbers, distinct.
1993
Group founded
Danube Group begins as a building-materials trading business.
2014
Properties launched
Danube Properties registered as a Dubai developer (June 2014).
1%
The plan
The original 1% monthly · 0% interest · up to 80 months scheme.
34+
Launches
Cumulative launches across the developer's portfolio*.
◆ Bayz 101 — Business Bay
*Awards / scale figures attributed and confirmed at enquiry. No invented numbers.
{/* PROOF OF PATTERN BAND */}
{[
{ v: "2014", l: "Developer registered (Properties)" },
{ v: "1%", l: "Monthly plan — pioneered" },
{ v: "80mo", l: "Up to · 0% interest*" },
{ v: "4hr", l: "Sales-consultant response*" },
].map((m, i) => (
))}
{/* CONTACT / FINAL LEAD */}
);
}
/* ─── Footer ─────────────────────────── */
function Footer({ onNav }) {
return (
×
◆ Tweaks
Brand red
{reds.map((r) => (
setTweaks({ ...tweaks, brandRed: r.val })}
title={r.label}
/>
))}
Hero autoplay
setTweaks({ ...tweaks, heroAutoplay: !tweaks.heroAutoplay })}
>{tweaks.heroAutoplay ? "On" : "Off"}
Display type
{["Cormorant", "Instrument", "Canela"].map((f) => (
setTweaks({ ...tweaks, displayFont: f })}
style={{ padding: "4px 8px" }}
>{f.slice(0, 4)}
))}
Plan band
setTweaks({ ...tweaks, planBandStyle: tweaks.planBandStyle === "red" ? "dark" : "red" })}
>{tweaks.planBandStyle === "red" ? "Red" : "Dark"}
Density
{["Roomy", "Tight"].map((d) => (
setTweaks({ ...tweaks, density: d })}
style={{ padding: "4px 8px" }}
>{d}
))}
◆ PROTOTYPE · DANUBE PROPERTIES
);
}
/* ─── ROOT APP ─────────────────────────── */
function App() {
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"brandRed": "#ED1C24",
"heroAutoplay": true,
"displayFont": "Cormorant",
"planBandStyle": "red",
"density": "Roomy"
}/*EDITMODE-END*/;
const [tweaks, setTweaks] = useStateA(TWEAK_DEFAULTS);
const [tweaksOpen, setTweaksOpen] = useStateA(false);
const [view, setView] = useStateA("home"); // home | project
const [currentProject, setCurrentProject] = useStateA(null);
const [leadOpen, setLeadOpen] = useStateA(false);
const [leadDefaults, setLeadDefaults] = useStateA({ tab: "interest", project: "Any launch" });
const [lang, setLang] = useStateA("EN");
// Apply tweaks → CSS vars
useEffectA(() => {
document.documentElement.style.setProperty("--primary", tweaks.brandRed);
// tweak font
const fontMap = {
"Cormorant": '"Cormorant Garamond", "Cormorant", serif',
"Instrument": '"Instrument Serif", "Cormorant Garamond", serif',
"Canela": '"Canela", "Cormorant Garamond", serif',
};
document.documentElement.style.setProperty("--font-display", fontMap[tweaks.displayFont] || fontMap.Cormorant);
}, [tweaks.brandRed, tweaks.displayFont]);
// Edit-mode protocol
useEffectA(() => {
const handle = (e) => {
if (e.data?.type === "__activate_edit_mode") setTweaksOpen(true);
if (e.data?.type === "__deactivate_edit_mode") setTweaksOpen(false);
};
window.addEventListener("message", handle);
window.parent.postMessage({ type: "__edit_mode_available" }, "*");
return () => window.removeEventListener("message", handle);
}, []);
const persistTweak = (next) => {
setTweaks(next);
window.parent.postMessage({ type: "__edit_mode_set_keys", edits: next }, "*");
};
const openProject = (p) => {
setCurrentProject(p);
setView("project");
window.scrollTo({ top: 0, behavior: "instant" });
};
const goHome = (target) => {
setView("home");
if (target) {
setTimeout(() => {
const el = document.getElementById(target);
if (el) el.scrollIntoView({ behavior: "smooth" });
}, 80);
} else {
window.scrollTo({ top: 0, behavior: "smooth" });
}
};
const onNav = (v, target) => {
if (v === "home") goHome(target);
else if (v === "project") {
const p = window.DANUBE_DATA.PROJECTS.find((x) => x.slug === target);
if (p) openProject(p);
}
};
const openLead = (tab = "interest", project = "Any launch") => {
setLeadDefaults({ tab, project });
setLeadOpen(true);
};
const { Navbar, WhatsAppFAB, Modal, LeadForm } = window.DanubeComponents;
const ProjectMicrosite = window.DanubeMicrosite;
return (
openLead("interest")}
currentView={view}
lang={lang}
setLang={setLang}
/>
{view === "home" && (
)}
{view === "project" && currentProject && (
)}
{
setTweaksOpen(false);
window.parent.postMessage({ type: "__edit_mode_dismissed" }, "*");
}}
/>
{leadOpen && (
setLeadOpen(false)}>
)}
);
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
);