Этап 1b: сайт

- Страницы обоих брендов из блоков 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>
This commit is contained in:
andreypr207andClaude Opus 5.5 committed 2026-10-22 04:53:15 +02:00
1 parent 515acfb69d
commit 20491d1ba4
134 files changed
+11232 -212

No files matched your search

+58 -1
View File
@@ -2,7 +2,7 @@
"brand": {
"dedicated": {
"name": "Вейликс",
"tagline": "Персональные VPN-серверы с индивидуальным IP. Работаем с 2022 года."
"tagline": "Личный VPN с индивидуальным IP. Работаем с 2022 года."
},
"mass": {
"name": "ВейликсВПН",
@@ -59,5 +59,62 @@
"title": "Страница не найдена",
"text": "Возможно, она переехала или её никогда не было.",
"home": "На главную"
},
"status": {
"dedicated": {
"available": "Серверы в наличии",
"on_demand": "Установим за 24 часа"
},
"mass": {
"available": "Включено",
"soon": "Скоро"
},
"withCount": "{label} · {count}"
},
"count": {
"countries": "{count, plural, one {# страна} few {# страны} many {# стран} other {# страны}}"
},
"pricing": {
"firstMonth": "первый месяц",
"thenPerMonth": "далее {price} в месяц",
"then": "далее",
"perMonth": "в месяц",
"perYear": "в год",
"buy": "Купить",
"buyIn": "Купить: {country}",
"locations": "Локации",
"plans": "Тариф",
"close": "Закрыть"
},
"lead": {
"name": "Имя",
"email": "Email",
"telegram": "Telegram",
"whatsapp": "WhatsApp",
"task": "Коротко о задаче",
"send": "Отправить",
"sent": "Заявка отправлена",
"needContact": "Укажите почту, Telegram или WhatsApp",
"badEmail": "Проверьте адрес почты",
"consent": "Отправляя форму, вы соглашаетесь с <link>политикой конфиденциальности</link>."
},
"support": {
"telegram": "Telegram",
"email": "Почта"
},
"contact": {
"email": "Ваша почта",
"topic": "Тема",
"message": "Что произошло",
"send": "Отправить",
"sent": "Отправлено, ответим на почту",
"needEmail": "Укажите почту, на неё придёт ответ",
"needMessage": "Опишите, что произошло"
},
"error": {
"title": "Что-то пошло не так",
"text": "Мы уже знаем об ошибке. Попробуйте обновить страницу через минуту.",
"retry": "Обновить страницу",
"home": "На главную"
}
}