// ============================================================ // Noble Design Asia — Middle: Materials, Services, Portfolio // ============================================================ // ------------- MATERIALS & FURNITURE ------------- function Materials() { const items = [ { t: "High-Grade Teak", b: "Premium Indonesian teak, sourced directly from certified plantations and finished by hand.", img: "https://images.unsplash.com/photo-1595428774223-ef52624120d2?w=900&q=85", alt: "Stacked premium teak planks" }, { t: "Craftsmanship", b: "Hand-finished joinery and stonework — a tolerance for detail only years on the tools can produce.", img: "https://images.unsplash.com/photo-1556910096-6f5e72db6803?w=900&q=85", alt: "Craftsman working" }, { t: "Long-Term Value", b: "Quality materials age beautifully. Our approach ensures your investment appreciates over time.", img: "https://images.unsplash.com/photo-1615529182904-14819c35db37?w=900&q=85", alt: "Built-in teak shelving" }, ]; return (
02 — Craft

Materials & Furniture

Honest materials, considered details, and furniture built to last a lifetime — not a trend cycle.

{items.map((m, i) => (
{m.alt}
0{i + 1}

{m.t}

{m.b}

))}
); } // ------------- DESIGN SERVICES ------------- function Services() { const list = [ { t: "Interior Design Concept", Icon: IconPencil, color: "bg-sg-light", fg: "text-green" }, { t: "Turn-Key Renovation & Fit-Out", Icon: IconHammer, color: "bg-so-light", fg: "text-so-dark" }, { t: "Custom Furniture Sourcing", Icon: IconChair, color: "bg-sy-light", fg: "text-sy-dark" }, { t: "Office Layout & Planning", Icon: IconLayout, color: "bg-sb-light", fg: "text-sb-dark" }, { t: "Material Procurement", Icon: IconTruck, color: "bg-sr-light", fg: "text-sr-dark" }, { t: "Final Styling & Handover", Icon: IconSparkle, color: "bg-gold-100", fg: "text-gold-600" }, ]; return (
03 — Services

Design Services Overview

Take what you need — or hand us the whole project.

{list.map((s, i) => (
0{i + 1}

{s.t}

))}
); } // ------------- PORTFOLIO ------------- const PROJECTS = [ { id: 1, t: "Eksekutif Menteng", loc: "Jakarta", type: "Private Residence", img: "https://images.unsplash.com/photo-1600210492486-724fe5c67fb0?w=1600&q=85" }, { id: 2, t: "Monte Verde", loc: "Jakarta", type: "Penthouse", img: "https://images.unsplash.com/photo-1616486338812-3dadae4b4ace?w=1200&q=85" }, { id: 3, t: "Kempinski Private", loc: "Jakarta", type: "Turn-Key", img: "https://images.unsplash.com/photo-1586023492125-27b2c045efd7?w=1200&q=85" }, { id: 4, t: "Sudirman Sky", loc: "Jakarta", type: "Turn-Key", img: "https://images.unsplash.com/photo-1600566753376-12c8ab7fb75b?w=1200&q=85" }, { id: 5, t: "Cipete Family Home", loc: "Jakarta", type: "Fit-Out", img: "https://images.unsplash.com/photo-1615529182904-14819c35db37?w=1200&q=85" }, { id: 6, t: "Ubud Hillside Villa", loc: "Bali", type: "Villa", img: "https://images.unsplash.com/photo-1618219740975-d40978bb7378?w=1200&q=85" }, ]; function Portfolio() { const [offset, setOffset] = React.useState(0); const maxOffset = Math.max(0, PROJECTS.length - 3); const prev = () => setOffset(o => Math.max(0, o - 1)); const next = () => setOffset(o => Math.min(maxOffset, o + 1)); const visible = PROJECTS.slice(offset, offset + 3); const [hero, ...smalls] = visible; return (
04 — Our Portfolio

Featured Design Projects

{smalls.map(p =>
)}
); } function ProjectCard({ p, big }) { return (
{`Interior
{p.loc}
{big ? (
{p.type}

{p.t}

) : (

{p.t}

)}
); } Object.assign(window, { Materials, Services, Portfolio, ProjectCard, PROJECTS });