import { useState, useEffect } from 'react'; import { useFadeInRef } from '../../hooks/useFadeIn'; import HexCanvas from './HexCanvas'; import ScrollStory from './ScrollStory'; import BottomIllustration from './BottomIllustration'; import { TickerValue } from '../ui/TickerValue'; import { ChevronIcon } from '../ui/icons/ChevronIcon'; import { LogoIcon } from '../ui/icons/LogoIcon'; import type { FeatureMeta } from '../../types'; export default function HomePage({ onOpenDashboard, onOpenPricing, theme = 'light', features = [], hidePricing, }: { onOpenDashboard: () => void; onOpenPricing: () => void; theme?: 'light' | 'dark'; features?: FeatureMeta[]; hidePricing?: boolean; }) { const [statsActive, setStatsActive] = useState(false); useEffect(() => { const timer = setTimeout(() => setStatsActive(true), 300); return () => clearTimeout(timer); }, []); const whyRef = useFadeInRef(); const ctaRef = useFadeInRef(); return (
{/* Hero */}

Maximum Value.
Minimum Compromise.

House hunting? Make your biggest investment your smartest move.

So many options — choosing the right one can feel overwhelming. Our interactive map makes it simple: select your must-haves and instantly see the areas that fit.

properties
filters
Every
postcode in England
{/* How to use it + Comparison table (two columns) */}
{/* Left: How to use it */}

How to use it

{HOW_STEPS.map((step, i) => (
{i + 1}

{step.title}

{step.description}

))}
{/* Right: Comparison table */}

Others vs Perfect Postcode

{FEATURE_ROWS.map((row, i) => ( {[row.listings, row.postcode, row.guides].map((has, j) => ( ))} ))}
Listing portals {'\u201CCheck my postcode\u201D'} Area guides Perfect Postcode
{row.feature} {row.subtitle && (
{row.subtitle}
)}
{has ? '\u2713' : '\u2717'}
{/* Scrollytelling: Problem + Solution + Demo map */}

See It in Action

Listings only show what's on the market right now — a tiny, random slice. They tell you nothing about the area, or potential opportunities. We flip the search: start with what matters to you, and the right places reveal themselves.

{/* The real cost CTA */}

The biggest financial decision of your life
deserves proper tools behind it.

Don't leave it to chance.

{/* Bottom illustration */}
); } const FEATURE_ROWS = [ // listings postcode guides { feature: 'Search without choosing an area first', subtitle: '(start with needs, not a location)', listings: false, postcode: false, guides: false }, { feature: 'Area data', subtitle: '(crime, schools, noise, broadband)', listings: false, postcode: true, guides: true }, { feature: 'Property-specific data', subtitle: '(price, EPC, floor area)', listings: true, postcode: false, guides: false }, { feature: '56 combinable filters in one place', subtitle: '(all insights, one interactive map)', listings: false, postcode: false, guides: false }, ]; const HOW_STEPS = [ { title: 'Set your must-haves', description: 'Budget, commute, schools \u2014 the map shows only what qualifies.', }, { title: 'Explore areas and discover hidden gems', description: 'Zoom in, dig into details and nice to haves.', }, { title: 'Drill into postcodes', description: 'See individual properties, sale prices, floor area, and compare.', }, { title: 'Shortlist with confidence', description: 'Every area on your list meets your actual criteria \u2014 not just what was listed that week.', }, ];