This commit is contained in:
Andras Schmelczer 2026-05-11 21:38:26 +01:00
parent 9248e26af2
commit f2a2651b8a
95 changed files with 3993 additions and 1471 deletions

View file

@ -1,3 +1,4 @@
import { useTranslation } from 'react-i18next';
import { CheckIcon } from '../ui/icons/CheckIcon';
import { LogoIcon } from '../ui/icons/LogoIcon';
import {
@ -90,6 +91,7 @@ export default function SeoLandingPage({
pageKey: SeoLandingKey;
onOpenDashboard: () => void;
}) {
const { t } = useTranslation();
const page = SEO_LANDING_PAGES[pageKey];
const url = `${PUBLIC_URL}${page.path}`;
@ -119,9 +121,9 @@ export default function SeoLandingPage({
<section className="bg-navy-950 text-white">
<div className="mx-auto max-w-6xl px-6 py-16 md:px-10 md:py-20">
<nav className="mb-6 text-sm font-medium text-warm-400" aria-label="Breadcrumb">
<nav className="mb-6 text-sm font-medium text-warm-400" aria-label={t('seo.breadcrumb')}>
<a href="/" className="hover:text-teal-200">
Home
{t('mobileMenu.home')}
</a>
<span className="mx-2">/</span>
<span className="text-warm-200">{page.eyebrow}</span>
@ -144,7 +146,7 @@ export default function SeoLandingPage({
href="/data-sources"
className="rounded-lg border-2 border-teal-400 px-6 py-[10px] text-center font-semibold text-teal-300 transition-colors hover:bg-teal-400/10"
>
Review the data sources
{t('seo.reviewDataSources')}
</a>
</div>
</div>
@ -156,10 +158,9 @@ export default function SeoLandingPage({
<LogoIcon className="h-4 w-4" />
Perfect Postcode
</div>
<h2 className="mt-5 text-2xl font-bold md:text-3xl">What you can compare</h2>
<h2 className="mt-5 text-2xl font-bold md:text-3xl">{t('seo.whatYouCanCompare')}</h2>
<p className="mt-3 leading-relaxed text-warm-600 dark:text-warm-300">
Each page is built around real shortlisting work: removing impossible places, comparing
the remaining postcodes, and deciding what to validate next.
{t('seo.whatYouCanCompareDesc')}
</p>
</div>
<div className="grid gap-3">
@ -177,10 +178,9 @@ export default function SeoLandingPage({
<section className="mx-auto max-w-6xl px-6 pb-16 md:px-10">
<div className="mb-7 max-w-3xl">
<h2 className="text-2xl font-bold md:text-3xl">How to use it</h2>
<h2 className="text-2xl font-bold md:text-3xl">{t('seo.howToUseIt')}</h2>
<p className="mt-3 leading-relaxed text-warm-600 dark:text-warm-300">
Use these workflows to make the page useful before you open a listing portal or book a
viewing.
{t('seo.howToUseItDesc')}
</p>
</div>
<SectionGrid sections={page.workflows} />
@ -193,10 +193,9 @@ export default function SeoLandingPage({
<section className="bg-white py-14 dark:bg-navy-900">
<div className="mx-auto max-w-6xl px-6 md:px-10">
<div className="mb-7 max-w-3xl">
<h2 className="text-2xl font-bold md:text-3xl">Method and limitations</h2>
<h2 className="text-2xl font-bold md:text-3xl">{t('seo.methodAndLimitations')}</h2>
<p className="mt-3 leading-relaxed text-warm-600 dark:text-warm-300">
The data is designed for comparison and shortlisting. Important decisions still need
current listings, professional checks, and direct local validation.
{t('seo.methodAndLimitationsDesc')}
</p>
</div>
<SectionGrid sections={page.methodology} />
@ -205,7 +204,7 @@ export default function SeoLandingPage({
<section className="mx-auto max-w-6xl px-6 py-14 md:px-10">
<div className="mb-7 max-w-3xl">
<h2 className="text-2xl font-bold md:text-3xl">Questions buyers ask</h2>
<h2 className="text-2xl font-bold md:text-3xl">{t('seo.questionsBuyersAsk')}</h2>
</div>
<div className="grid gap-4">
{page.faq.map((item) => (
@ -222,9 +221,9 @@ export default function SeoLandingPage({
<section className="mx-auto max-w-6xl px-6 pb-16 md:px-10">
<div className="mb-7 max-w-3xl">
<h2 className="text-2xl font-bold md:text-3xl">Related guides</h2>
<h2 className="text-2xl font-bold md:text-3xl">{t('seo.relatedGuides')}</h2>
<p className="mt-3 leading-relaxed text-warm-600 dark:text-warm-300">
Continue through the indexed public pages using canonical internal links.
{t('seo.relatedGuidesDesc')}
</p>
</div>
<LinkGrid links={page.relatedLinks} />