- Страницы обоих брендов из блоков Payload (D-029): главная, цены, локации, поддержка, 4 юридические, 404 и 500. Коллекции pages (черновики и версии) и faq с местами показа, 12 типов блоков; поля sites — почта и Telegram поддержки, часы работы, SEO по умолчанию. - Карта и глобус рисуются на сервере (d3-geo), контуры во внешнем SVG через <use>; выбор локации синхронизирован между картой и сеткой. - Тексты сайта и юридические черновики на 5 языках: de, fr, es — перевод с глоссарием; seed создаёт страницы и FAQ, только если их нет, SEED_CONTENT=reset пересоздаёт. - SEO: title и описания, canonical, hreflang с x-default, sitemap.xml и robots.txt на каждый домен, картинки для соцсетей. - Статическая сборка и пересборка через revalidatePath из хуков Payload (D-030); /svc/internal/revalidate для проверки. - 404 — статичная страница со статусом 404 через proxy; на сайте только опубликованные страницы. - Производительность: Client Hints темы Payload только в админке, предзагрузка 2 файлов шрифтов вместо 6; Lighthouse mobile 97–99. - Контраст --ink-3 по WCAG AA, радиокнопки вместо div role=button. - Документация: итоги 1b, глоссарий de/fr/es, трактовки юридических черновиков подтверждены, переносимые вопросы — в этапах 3e–3h. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
850 B
TypeScript
38 lines
850 B
TypeScript
'use client'
|
|
|
|
import type { ReactNode } from 'react'
|
|
|
|
/**
|
|
* «Получить VPN» (07-frontend, раздел 7.6): на странице с блоком цен (#prices) — к нему,
|
|
* на остальных — на /pricing. Без JavaScript ссылка всегда ведёт на /pricing.
|
|
*/
|
|
export function GetVpnLink({
|
|
href,
|
|
className,
|
|
onNavigate,
|
|
children,
|
|
}: {
|
|
href: string
|
|
className: string
|
|
onNavigate?: () => void
|
|
children: ReactNode
|
|
}) {
|
|
return (
|
|
<a
|
|
href={href}
|
|
className={className}
|
|
onClick={(event) => {
|
|
const prices = document.getElementById('prices')
|
|
if (prices) {
|
|
event.preventDefault()
|
|
prices.scrollIntoView()
|
|
history.replaceState(null, '', '#prices')
|
|
}
|
|
onNavigate?.()
|
|
}}
|
|
>
|
|
{children}
|
|
</a>
|
|
)
|
|
}
|