// Home page — hero, search, featured listings, about strip, stats, services, // testimonials, recent sold, insights teaser, CTA panel. const HOME_HEROES = { skyline: "https://images.unsplash.com/photo-1609825488888-3a766db05542?w=2200&q=80&auto=format&fit=crop", interior: "https://images.unsplash.com/photo-1600596542815-ffad4c1539a9?w=2200&q=80&auto=format&fit=crop", exterior: "https://images.unsplash.com/photo-1600585154340-be6161a56a0c?w=2200&q=80&auto=format&fit=crop", }; const HomePage = ({ setRoute, openListing, faves, toggleFav, showToast, tweaks, t }) => { const tr = t || ((k) => k); useLucide(); const featured = SITE_DATA.listings.filter(l => l.featured); const recentSold = SITE_DATA.sold.slice(0, 6); const [activeTesti, setActiveTesti] = React.useState(0); const heroVariant = (tweaks && tweaks.heroVariant) || 'skyline'; return (
{/* HERO */}
Vancouver
{tr('hero.eyebrow')}

{tr('hero.title1')}
{tr('hero.title2')}

{SITE_DATA.stats.map(s => (
{s.value} {s.label}
))}
{/* Floating search */}
{/* Trust row */}
Magsen Realty Inc. Medallion Club Member 2019–2025 Top 10% Greater Vancouver REALTOR® REBGV · CREA
{/* FEATURED */}
{tr('featured.eyebrow')}

{tr('featured.title')}

{tr('featured.lead')}

{/* ABOUT STRIP */}
Steffanie Ting
About Steffanie

I love working with people. I love working in real estate.

{SITE_DATA.agent.bio}

Whether you're a first-time buyer in Tricities or a multi-property investor moving across Metro Vancouver, my promise is the same: tell you what you need to hear, not what you want to hear — and make the process easy and enjoyable along the way.

— Steffanie
{/* SERVICES */}
What I do

Full-service, end to end.

Six ways I help clients. Each one is supported by twenty years of relationships — inspectors, mortgage brokers, stagers, contractors, lawyers — who do good work and pick up the phone.

{SITE_DATA.services.map(s => ( ))}
{/* STATS BAND */}
By the numbers

Twenty years.
Three hundred forty million dollars.

These numbers matter because they translate. Experience means I've seen this market in every weather — and I know where the offers actually need to land.

{SITE_DATA.stats.map(s => (
{s.value} {s.label}
))}
{/* RECENT SOLD */}
Recently sold

Closed deals, on the record.

A selection from the last 18 months across Metro Vancouver. The full sold archive runs deeper — over 450 transactions and counting.

{recentSold.map(s => ( showToast(s.daysOnMarket != null ? `Sold for ${formatFullPrice(s.soldPrice)} in ${s.daysOnMarket} days` : `Sold for ${formatFullPrice(s.soldPrice)}`)} /> ))}
{/* TESTIMONIALS */}
In their words

What clients say.

"

{SITE_DATA.testimonials[activeTesti].quote}

{SITE_DATA.testimonials[activeTesti].author} {SITE_DATA.testimonials[activeTesti].role}
{activeTesti + 1} / {SITE_DATA.testimonials.length}
{/* INSIGHTS TEASER */}
Market insights

What I'm watching this quarter.

No fluff. Just clear-eyed market commentary, neighbourhood deep-dives, and the things I'd tell a friend over coffee.

{SITE_DATA.insights.slice(0, 2).map(i => (
setRoute('insights')}>
{i.title}
{i.category} · {new Date(i.date).toLocaleDateString('en-CA', { month: 'long', day: 'numeric', year: 'numeric' })} · {i.readTime} min read

{i.title}

{i.excerpt}

))}
{/* CTA PANEL */}
); }; const FeaturedListings = ({ listings, openListing, faves, toggleFav }) => { if (listings.length === 0) return null; return (
{listings.map(l => ( ))}
); }; window.FeaturedListings = FeaturedListings; const SearchBar = ({ setRoute, t }) => { const tr = t || ((k) => k); return (
); }; window.SearchBar = SearchBar; const ValuationCta = ({ showToast, setRoute }) => { const [form, setForm] = React.useState({ address: '', name: '', email: '' }); const [err, setErr] = React.useState({}); const submit = (e) => { e.preventDefault(); const next = {}; if (!form.address) next.address = 'Property address required'; if (!form.name) next.name = 'Your name please'; if (!form.email || !form.email.includes('@')) next.email = 'Valid email please'; setErr(next); if (Object.keys(next).length === 0) { showToast("Got it — Steffanie will be in touch within 24 hours."); setForm({ address: '', name: '', email: '' }); } }; return (
Free · No obligation

What's your home worth in today's market?

A real CMA — not an automated estimate. I'll pull recent comps in your building or block, factor in your home's specific features, and send you a candid range within 24 hours.

setForm({ ...form, address: e.target.value })} /> {err.address &&
{err.address}
}
setForm({ ...form, name: e.target.value })} /> {err.name &&
{err.name}
}
setForm({ ...form, email: e.target.value })} /> {err.email &&
{err.email}
}
); }; window.ValuationCta = ValuationCta; window.HomePage = HomePage;