// Zen Interiors โ Projects index + Sectors pages
function ProjectsPage({ navigate, filterSector }) {
const all = window.ZEN_PROJECTS;
const [sector, setSector] = useState(filterSector || 'All');
const [layout, setLayout] = useState('grid'); // grid | index
const sectors = ['All', 'Penthouse', 'Apartment', 'Villa'];
useEffect(() => {
setSector(filterSector || 'All');
}, [filterSector]);
const visible = useMemo(() =>
sector === 'All' ? all : all.filter(p => p.sector === sector),
[all, sector]);
return (
{/* Header */}
Index ยท Projects
Calm rooms,
seen in full.
Penthouses, apartments and villas โ across Dubai and beyond. Each project begins with a long brief and ends with the keys in your hand.
{/* Filter bar */}
Filter
{sectors.map(s => (
))}
View
{/* Content */}
{layout === 'grid' ? (
) : (
)}
);
}
function ProjectsIndex({ projects, navigate }) {
const [hoverSrc, setHoverSrc] = useState(null);
const [pos, setPos] = useState({ x: 0, y: 0 });
return (
setPos({ x: e.clientX, y: e.clientY })}>
{projects.map((p, i) => (
{ e.preventDefault(); navigate(`/projects/${p.slug}`); }}
onMouseEnter={() => setHoverSrc(p.cover)}
onMouseLeave={() => setHoverSrc(null)}
style={{
display: 'grid', gridTemplateColumns: '60px 2fr 1.2fr 1.2fr 60px',
gap: 24, alignItems: 'baseline',
padding: '36px 0',
borderBottom: '1px solid var(--line)',
transition: 'padding 220ms ease, background 220ms ease',
cursor: 'pointer',
}}>
{String(i + 1).padStart(2, '0')}
{p.sector}
{p.location}
))}
{hoverSrc && (
)}
);
}
// SECTORS PAGE -------------------------------------------------------------
function SectorsPage({ navigate, slug }) {
const all = window.ZEN_PROJECTS;
const sectorMap = {
penthouses: { name: 'Penthouses', filter: 'Penthouse', kicker: 'Top-floor residences. Skyline-facing plans, long horizons, evening-led lighting.', hero: 'media/project-volante-penthouse-01.webp' },
apartments: { name: 'Apartments', filter: 'Apartment', kicker: 'Full-floor and half-floor city homes. Calm envelopes built around the view.', hero: 'media/project-tiara-aquamarine-residence.webp' },
villas: { name: 'Villas', filter: 'Villa', kicker: 'Family homes โ garden, beach or course-facing. Indoor-outdoor living, soft envelopes.', hero: 'media/project-wildflower-villa-01.webp' },
};
if (slug && sectorMap[slug]) {
const s = sectorMap[slug];
const projects = all.filter(p => p.sector === s.filter);
return (
Sector
{s.name}.
{s.kicker}
);
}
// Sectors index
return (
Sectors
What we design for.
We work in three residential typologies. The plans differ; the studio's discipline doesn't.
);
}
window.ProjectsPage = ProjectsPage;
window.SectorsPage = SectorsPage;