// ============================================================ // Noble Design Asia — Bottom: Testimonials, MidCTA, Contact+Footer // ============================================================ const TESTIMONIALS = [ { q: "Flawless execution from start to finish. The team managed everything with such professionalism.", n: "Sarah L.", c: "Jakarta" }, { q: "Jerome understood exactly what we needed. The result is timeless and perfectly suits our lifestyle.", n: "Michael T.", c: "Bali" }, { q: "No stress, no surprises. Just a beautifully finished space delivered exactly as promised.", n: "Diana W.", c: "Jakarta" }, ]; // ------------- TESTIMONIALS (Flat & Clean) ------------- function Testimonials() { const [idx, setIdx] = React.useState(0); React.useEffect(() => { const t = setInterval(() => setIdx(i => (i + 1) % TESTIMONIALS.length), 7000); return () => clearInterval(t); }, []); const go = (i) => setIdx((i + TESTIMONIALS.length) % TESTIMONIALS.length); return (
07 — Client Voices
{String(idx + 1).padStart(2, '0')} / {String(TESTIMONIALS.length).padStart(2, '0')}
{/* Quote Container (Flat design, border tipis, shadow-none) */}
{TESTIMONIALS.map((t, i) => (
"{t.q}"
{t.n}
{t.c}
))}
{/* Separator / Controls */}
); } // ------------- MID-CTA ------------- function MidCTA() { return (
Noble Asia interior
08 — Let's begin

A space that's designed properly, delivered without stress.

One reply, a short call, and a clear plan. That's how every Noble Asia project starts.

Chat with us on WhatsApp {WA_DISPLAY} Start the conversation
); } // ------------- CONTACT + MINIMAL FOOTER ------------- function ContactAndFooter() { const [form, setForm] = React.useState({ fn: "", ln: "", email: "", phone: "", msg: "", ok1: false, ok2: false }); const [sent, setSent] = React.useState(false); const submit = (e) => { e.preventDefault(); if (!form.fn || !form.ln || !form.email || !form.ok1) return; setSent(true); setTimeout(() => setSent(false), 4200); }; const socials = [ { Icon: IconWhatsApp, label: "WhatsApp" }, { Icon: IconInstagram, label: "Instagram" }, { Icon: IconFacebook, label: "Facebook" }, { Icon: IconYoutube, label: "YouTube" }, { Icon: IconLinkedin, label: "LinkedIn" }, ]; return (
{Array.from({ length: 2 }).flatMap((_, r) => ["Start your design journey", "·", "Jakarta · Bali · Indonesia", "·", "Turn-Key Delivered", "·", "Start your design journey", "·", "Jakarta · Bali · Indonesia", "·", "Turn-Key Delivered", "·"] .map((txt, i) => {txt}) )}
10 — Contact

Start Your Design Journey Today

Tell us about your space. We reply within one business day with a short questionnaire and a proposed consultation time.

{[ ["Email", connect@nobleasia.id], ["Studio", "Karindra Building, Jl. Palmerah Sel. No. 30A, Gelora, Jakarta Pusat 10270"], ["Service Areas", "Jakarta · Bali · Indonesia"], ].map(([k, v], i) => (
{k}
{v}
))}
{socials.map(s => ( ))}
Request a Consultation

All fields marked * are required.

setForm({...form, fn: v})} /> setForm({...form, ln: v})} /> setForm({...form, email: v})} /> setForm({...form, phone: v})} />
setForm({...form, msg: v})} />
Chat on WhatsApp
); } // ------------- FIELD & WHATSAPP BAR ------------- function Field({ label, required, type = "text", as, rows = 3, value, onChange, placeholder }) { const common = { value, onChange: e => onChange(e.target.value), placeholder, required, "aria-required": required || undefined, className: "w-full bg-transparent border border-paper/15 px-4 py-3 text-[14px] text-paper placeholder:text-paper/30 focus:border-gold focus:outline-none transition-colors shadow-none rounded-none" }; return (